Skip to content

Commit

Permalink
Merge pull request #345 from sayoun/add_snapshot_tests
Browse files Browse the repository at this point in the history
add snapshot package tests
  • Loading branch information
poolpOrg authored Feb 5, 2025
2 parents 224fab8 + c2d1ed4 commit 2e829e8
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 0 deletions.
133 changes: 133 additions & 0 deletions snapshot/snapshot_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package snapshot

import (
"fmt"
"os"
"testing"
"time"

"github.com/PlakarKorp/plakar/appcontext"
"github.com/PlakarKorp/plakar/caching"
"github.com/PlakarKorp/plakar/encryption/keypair"
"github.com/PlakarKorp/plakar/logging"
"github.com/PlakarKorp/plakar/repository"
"github.com/PlakarKorp/plakar/snapshot/importer/fs"
"github.com/PlakarKorp/plakar/storage"
bfs "github.com/PlakarKorp/plakar/storage/backends/fs"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)

func generateSnapshot(t *testing.T, keyPair *keypair.KeyPair) *Snapshot {
// init temporary directories
tmpRepoDirRoot, err := os.MkdirTemp("", "tmp_repo")
require.NoError(t, err)
tmpRepoDir := fmt.Sprintf("%s/repo", tmpRepoDirRoot)
tmpCacheDir, err := os.MkdirTemp("", "tmp_cache")
require.NoError(t, err)
tmpBackupDir, err := os.MkdirTemp("", "tmp_to_backup")
require.NoError(t, err)
t.Cleanup(func() {
os.RemoveAll(tmpRepoDir)
os.RemoveAll(tmpCacheDir)
os.RemoveAll(tmpBackupDir)
os.RemoveAll(tmpRepoDirRoot)
})
// create a temporary file to backup later
err = os.WriteFile(tmpBackupDir+"/dummy.txt", []byte("hello"), 0644)
require.NoError(t, err)

// create a storage
r := bfs.NewRepository("fs://" + tmpRepoDir)
require.NotNil(t, r)
config := storage.NewConfiguration()
err = r.Create("fs://"+tmpRepoDir, *config)
require.NoError(t, err)

// open the storage to load the configuration
err = r.Open("fs://" + tmpRepoDir)
require.NoError(t, err)

// create a repository
ctx := appcontext.NewAppContext()
cache := caching.NewManager(tmpCacheDir)
ctx.SetCache(cache)
if keyPair != nil {
ctx.Identity = uuid.New()
ctx.Keypair = keyPair
}
logger := logging.NewLogger(os.Stdout, os.Stderr)
logger.EnableTrace("all")
ctx.SetLogger(logger)
repo, err := repository.New(ctx, r, nil)
require.NoError(t, err, "creating repository")

// create a snapshot
snap, err := New(repo)
require.NoError(t, err)
require.NotNil(t, snap)

imp, err := fs.NewFSImporter(tmpBackupDir)
require.NoError(t, err)
snap.Backup(tmpBackupDir, imp, &BackupOptions{Name: "test_backup", MaxConcurrency: 1})

return snap
}

func TestSnapshot(t *testing.T) {
snap := generateSnapshot(t, nil)
defer snap.Close()

appCtx := snap.AppContext()
require.NotNil(t, appCtx)
require.NotNil(t, appCtx.GetCache())
defer appCtx.GetCache().Close()

events := appCtx.Events()
require.NotNil(t, events)

err := snap.repository.RebuildState()
require.NoError(t, err)

snapFs, err := snap.Filesystem()
require.NoError(t, err)
require.NotNil(t, snapFs)

iter, err := snap.ListObjects()
require.NoError(t, err)
require.NotNil(t, iter)
for o, err := range iter {
require.NoError(t, err)
require.NotNil(t, o)
lo, err := snap.LookupObject(o)
require.NoError(t, err)
require.NotNil(t, lo)
}

iter2, err := snap.ListChunks()
require.NoError(t, err)
require.NotNil(t, iter2)
for o, err := range iter2 {
require.NoError(t, err)
require.NotNil(t, o)
}

snap2, err := Load(snap.repository, snap.Header.Identifier)
require.NoError(t, err)
require.NotNil(t, snap2)

require.Equal(t, snap.Header.Identifier, snap2.Header.Identifier)
require.Equal(t, snap.Header.Timestamp.Truncate(time.Nanosecond), snap2.Header.Timestamp.Truncate(time.Nanosecond))

snap3, err := Clone(snap.repository, snap.Header.Identifier)
require.NoError(t, err)
require.NotNil(t, snap3)

require.NotEqual(t, snap.Header.Identifier, snap3.Header.Identifier)

snap4, err := Fork(snap.repository, snap.Header.Identifier)
require.NoError(t, err)
require.NotNil(t, snap4)

require.NotEqual(t, snap.Header.Identifier, snap4.Header.Identifier)
}
20 changes: 20 additions & 0 deletions snapshot/verify_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package snapshot

import (
"testing"

"github.com/PlakarKorp/plakar/encryption/keypair"
"github.com/stretchr/testify/require"
)

func TestVerify(t *testing.T) {
defaultKeyPair, err := keypair.Generate()
require.NoError(t, err)

snap := generateSnapshot(t, defaultKeyPair)
defer snap.Close()

verified, err := snap.Verify()
require.NoError(t, err)
require.True(t, verified)
}

0 comments on commit 2e829e8

Please sign in to comment.