Refactor snapshot management: integrate logging, enhance concurrency with mutex, add clean extraction option, and update gRPC ListSnapshots with ListOptions.
This commit is contained in:
@ -121,7 +121,7 @@ func TestListSnapshotsMetadata(t *testing.T) {
|
||||
// Create test snapshots
|
||||
ctx := context.Background()
|
||||
now := time.Now().UTC().Truncate(time.Second)
|
||||
|
||||
|
||||
testSnapshots := []store.Snapshot{
|
||||
{
|
||||
ID: "snapshot-1",
|
||||
@ -154,8 +154,8 @@ func TestListSnapshotsMetadata(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// List the snapshots
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx)
|
||||
// List the snapshots with empty options
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, store.ListOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots: %v", err)
|
||||
}
|
||||
@ -189,6 +189,164 @@ func TestListSnapshotsMetadata(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestListSnapshotsMetadata_WithOptions(t *testing.T) {
|
||||
// Create a temporary directory for tests
|
||||
tempDir, err := os.MkdirTemp("", "agate-test-*")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create temp directory: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(tempDir) // Clean up after test
|
||||
|
||||
// Create a new store
|
||||
dbPath := filepath.Join(tempDir, "test.db")
|
||||
s, err := NewSQLiteStore(dbPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create SQLite store: %v", err)
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
// Create test snapshots with different names
|
||||
ctx := context.Background()
|
||||
now := time.Now().UTC().Truncate(time.Second)
|
||||
|
||||
testSnapshots := []store.Snapshot{
|
||||
{
|
||||
ID: "alpha-1",
|
||||
Name: "alpha-1",
|
||||
ParentID: "",
|
||||
CreationTime: now.Add(-3 * time.Hour),
|
||||
Files: []store.FileInfo{},
|
||||
},
|
||||
{
|
||||
ID: "alpha-2",
|
||||
Name: "alpha-2",
|
||||
ParentID: "alpha-1",
|
||||
CreationTime: now.Add(-2 * time.Hour),
|
||||
Files: []store.FileInfo{},
|
||||
},
|
||||
{
|
||||
ID: "beta-1",
|
||||
Name: "beta-1",
|
||||
ParentID: "",
|
||||
CreationTime: now.Add(-1 * time.Hour),
|
||||
Files: []store.FileInfo{},
|
||||
},
|
||||
}
|
||||
|
||||
// Save the snapshots
|
||||
for _, snap := range testSnapshots {
|
||||
err = s.SaveSnapshotMetadata(ctx, snap)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to save snapshot metadata: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Test different ListOptions scenarios
|
||||
t.Run("FilterByName", func(t *testing.T) {
|
||||
// Filter snapshots by name "alpha"
|
||||
opts := store.ListOptions{
|
||||
FilterByName: "alpha",
|
||||
}
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots with filter: %v", err)
|
||||
}
|
||||
|
||||
// Should return 2 snapshots (alpha-1 and alpha-2)
|
||||
if len(snapshots) != 2 {
|
||||
t.Errorf("Wrong number of snapshots returned: got %d, want %d", len(snapshots), 2)
|
||||
}
|
||||
|
||||
// Check that only alpha snapshots are returned
|
||||
for _, snap := range snapshots {
|
||||
if snap.ID != "alpha-1" && snap.ID != "alpha-2" {
|
||||
t.Errorf("Unexpected snapshot ID in filtered results: %s", snap.ID)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Limit", func(t *testing.T) {
|
||||
// Limit to 1 snapshot (should return the newest one)
|
||||
opts := store.ListOptions{
|
||||
Limit: 1,
|
||||
}
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots with limit: %v", err)
|
||||
}
|
||||
|
||||
// Should return 1 snapshot
|
||||
if len(snapshots) != 1 {
|
||||
t.Errorf("Wrong number of snapshots returned: got %d, want %d", len(snapshots), 1)
|
||||
}
|
||||
|
||||
// The newest snapshot should be beta-1
|
||||
if snapshots[0].ID != "beta-1" {
|
||||
t.Errorf("Wrong snapshot returned with limit: got %s, want %s", snapshots[0].ID, "beta-1")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Offset", func(t *testing.T) {
|
||||
// Limit to 1 snapshot with offset 1 (should return the second newest)
|
||||
opts := store.ListOptions{
|
||||
Limit: 1,
|
||||
Offset: 1,
|
||||
}
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots with offset: %v", err)
|
||||
}
|
||||
|
||||
// Should return 1 snapshot
|
||||
if len(snapshots) != 1 {
|
||||
t.Errorf("Wrong number of snapshots returned: got %d, want %d", len(snapshots), 1)
|
||||
}
|
||||
|
||||
// The second newest snapshot should be alpha-2
|
||||
if snapshots[0].ID != "alpha-2" {
|
||||
t.Errorf("Wrong snapshot returned with offset: got %s, want %s", snapshots[0].ID, "alpha-2")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("FilterAndPagination", func(t *testing.T) {
|
||||
// Filter by "alpha" with limit 1
|
||||
opts := store.ListOptions{
|
||||
FilterByName: "alpha",
|
||||
Limit: 1,
|
||||
}
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots with filter and pagination: %v", err)
|
||||
}
|
||||
|
||||
// Should return 1 snapshot
|
||||
if len(snapshots) != 1 {
|
||||
t.Errorf("Wrong number of snapshots returned: got %d, want %d", len(snapshots), 1)
|
||||
}
|
||||
|
||||
// The newest alpha snapshot should be alpha-2
|
||||
if snapshots[0].ID != "alpha-2" {
|
||||
t.Errorf("Wrong snapshot returned with filter and limit: got %s, want %s", snapshots[0].ID, "alpha-2")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("NoResults", func(t *testing.T) {
|
||||
// Filter by a name that doesn't exist
|
||||
opts := store.ListOptions{
|
||||
FilterByName: "gamma",
|
||||
}
|
||||
snapshots, err := s.ListSnapshotsMetadata(ctx, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to list snapshots with non-matching filter: %v", err)
|
||||
}
|
||||
|
||||
// Should return 0 snapshots
|
||||
if len(snapshots) != 0 {
|
||||
t.Errorf("Expected 0 snapshots, got %d", len(snapshots))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteSnapshotMetadata(t *testing.T) {
|
||||
// Create a temporary directory for tests
|
||||
tempDir, err := os.MkdirTemp("", "agate-test-*")
|
||||
@ -238,4 +396,4 @@ func TestDeleteSnapshotMetadata(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("DeleteSnapshotMetadata returned an error for non-existent snapshot: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user