Refactor snapshot management: integrate logging, enhance concurrency with mutex, add clean extraction option, and update gRPC ListSnapshots with ListOptions.
This commit is contained in:
88
api_test.go
88
api_test.go
@ -1,9 +1,12 @@
|
||||
package agate
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -252,6 +255,91 @@ func TestAPIListSnapshots(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAgate_Logging(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)
|
||||
|
||||
// Create a data directory
|
||||
dataDir := filepath.Join(tempDir, "data")
|
||||
if err := os.MkdirAll(dataDir, 0755); err != nil {
|
||||
t.Fatalf("Failed to create data directory: %v", err)
|
||||
}
|
||||
|
||||
// Create test files in the active directory
|
||||
activeDir := filepath.Join(dataDir, "blobs", "active")
|
||||
if err := os.MkdirAll(activeDir, 0755); err != nil {
|
||||
t.Fatalf("Failed to create active directory: %v", err)
|
||||
}
|
||||
createAPITestFiles(t, activeDir)
|
||||
|
||||
// Create a buffer to capture log output
|
||||
var logBuffer bytes.Buffer
|
||||
logger := log.New(&logBuffer, "", 0)
|
||||
|
||||
// Create Agate options with the logger
|
||||
options := AgateOptions{
|
||||
WorkDir: dataDir,
|
||||
OpenFunc: func(dir string) error {
|
||||
return nil
|
||||
},
|
||||
CloseFunc: func() error {
|
||||
return nil
|
||||
},
|
||||
Logger: logger,
|
||||
}
|
||||
|
||||
// Create Agate instance
|
||||
ag, err := New(options)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create Agate instance: %v", err)
|
||||
}
|
||||
defer ag.Close()
|
||||
|
||||
// Perform operations that should generate logs
|
||||
ctx := context.Background()
|
||||
|
||||
// Save a snapshot
|
||||
snapshotID, err := ag.SaveSnapshot(ctx, "Test Snapshot", "")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create snapshot: %v", err)
|
||||
}
|
||||
|
||||
// Restore the snapshot
|
||||
err = ag.RestoreSnapshot(ctx, snapshotID)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to restore snapshot: %v", err)
|
||||
}
|
||||
|
||||
// Check that logs were generated
|
||||
logs := logBuffer.String()
|
||||
if logs == "" {
|
||||
t.Errorf("No logs were generated")
|
||||
}
|
||||
|
||||
// Check for expected log messages
|
||||
expectedLogMessages := []string{
|
||||
"Creating new snapshot",
|
||||
"Restoring snapshot",
|
||||
}
|
||||
|
||||
for _, msg := range expectedLogMessages {
|
||||
if !strings.Contains(logs, msg) {
|
||||
t.Errorf("Expected log message '%s' not found in logs", msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Note: This test is a placeholder for when the ListSnapshots method is updated to accept ListOptions.
|
||||
// Currently, the ListSnapshots method in api.go doesn't accept ListOptions, so we can't test that functionality directly.
|
||||
// The test for ListOptions functionality is covered in TestListSnapshotsMetadata_WithOptions in store/sqlite/sqlite_test.go.
|
||||
func TestAgate_ListSnapshotsWithOptions(t *testing.T) {
|
||||
t.Skip("Skipping test as ListSnapshots in api.go doesn't yet support ListOptions")
|
||||
}
|
||||
|
||||
func TestAPIDeleteSnapshot(t *testing.T) {
|
||||
ag, _, cleanup := setupTestAPI(t)
|
||||
defer cleanup()
|
||||
|
Reference in New Issue
Block a user