Add comprehensive test coverage for core functionalities
This commit introduces test cases for the API, archive, store, and filesystem functionalities, as well as a functional test for a full workflow. It ensures robust testing for snapshot operations, archiving, and blob management, significantly improving reliability.
This commit is contained in:
46
api.go
46
api.go
@ -9,6 +9,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"gitea.unprism.ru/KRBL/Agate/store"
|
||||
"gitea.unprism.ru/KRBL/Agate/stores"
|
||||
)
|
||||
|
||||
// AgateOptions defines configuration options for the Agate library.
|
||||
@ -24,12 +25,14 @@ type AgateOptions struct {
|
||||
CloseFunc func() error
|
||||
|
||||
// MetadataStore is the implementation of the metadata store to use.
|
||||
// Use the stores package to initialize the default implementation:
|
||||
// If nil, a default SQLite-based metadata store will be created automatically.
|
||||
// Use the stores package to initialize a custom implementation:
|
||||
// metadataStore, err := stores.NewDefaultMetadataStore(metadataDir)
|
||||
MetadataStore store.MetadataStore
|
||||
|
||||
// BlobStore is the implementation of the blob store to use.
|
||||
// Use the stores package to initialize the default implementation:
|
||||
// If nil, a default filesystem-based blob store will be created automatically.
|
||||
// Use the stores package to initialize a custom implementation:
|
||||
// blobStore, err := stores.NewDefaultBlobStore(blobsDir)
|
||||
BlobStore store.BlobStore
|
||||
}
|
||||
@ -72,18 +75,37 @@ func New(options AgateOptions) (*Agate, error) {
|
||||
var err error
|
||||
|
||||
// Use provided stores or initialize default ones
|
||||
if options.MetadataStore != nil {
|
||||
if options.MetadataStore != nil && options.BlobStore != nil {
|
||||
// Use the provided stores
|
||||
metadataStore = options.MetadataStore
|
||||
} else {
|
||||
// For default implementation, the user needs to initialize and provide the stores
|
||||
return nil, errors.New("metadata store must be provided")
|
||||
}
|
||||
|
||||
if options.BlobStore != nil {
|
||||
blobStore = options.BlobStore
|
||||
} else if options.MetadataStore == nil && options.BlobStore == nil {
|
||||
// Initialize both stores with default implementations
|
||||
metadataStore, blobStore, err = stores.InitDefaultStores(options.WorkDir)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize default stores: %w", err)
|
||||
}
|
||||
// Update options with the created stores
|
||||
options.MetadataStore = metadataStore
|
||||
options.BlobStore = blobStore
|
||||
} else if options.MetadataStore == nil {
|
||||
// Initialize only the metadata store
|
||||
metadataStore, err = stores.NewDefaultMetadataStore(metadataDir)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize default metadata store: %w", err)
|
||||
}
|
||||
blobStore = options.BlobStore
|
||||
// Update options with the created metadata store
|
||||
options.MetadataStore = metadataStore
|
||||
} else {
|
||||
// For default implementation, the user needs to initialize and provide the stores
|
||||
return nil, errors.New("blob store must be provided")
|
||||
// Initialize only the blob store
|
||||
blobStore, err = stores.NewDefaultBlobStore(blobsDir)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize default blob store: %w", err)
|
||||
}
|
||||
metadataStore = options.MetadataStore
|
||||
// Update options with the created blob store
|
||||
options.BlobStore = blobStore
|
||||
}
|
||||
|
||||
// Create the snapshot manager
|
||||
@ -113,7 +135,7 @@ func New(options AgateOptions) (*Agate, error) {
|
||||
|
||||
// Call OpenFunc if provided to initialize resources in the active directory
|
||||
if options.OpenFunc != nil {
|
||||
if err := options.OpenFunc(options.BlobStore.GetActiveDir()); err != nil {
|
||||
if err := options.OpenFunc(blobStore.GetActiveDir()); err != nil {
|
||||
return nil, fmt.Errorf("failed to open resources during initialization: %w", err)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user