check / check (push) Successful in 13m30s
snapshot restore and snapshot verify given an ID that names no snapshot in the local index or at the destination failed with "object not found" on a hashed metadata path. They now look the ID up the way snapshot remove does and say that no such snapshot exists, before printing anything else. Model: opus-5-5
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package vaultik_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"sneak.berlin/go/vaultik/internal/config"
|
|
"sneak.berlin/go/vaultik/internal/log"
|
|
"sneak.berlin/go/vaultik/internal/vaultik"
|
|
)
|
|
|
|
// TestUnknownSnapshotID checks that restore and verify, given an ID that
|
|
// names no snapshot in the local index or on the destination store, say
|
|
// so in the words `snapshot remove` uses and print nothing else.
|
|
func TestUnknownSnapshotID(t *testing.T) {
|
|
log.Initialize(log.Config{})
|
|
t.Parallel()
|
|
|
|
const unknownID = "host1_home_2026-01-01T00:00:00Z"
|
|
|
|
commands := map[string]func(v *vaultik.Vaultik) error{
|
|
"restore": func(v *vaultik.Vaultik) error {
|
|
return v.Restore(&vaultik.RestoreOptions{
|
|
SnapshotID: unknownID,
|
|
TargetDir: t.TempDir(),
|
|
})
|
|
},
|
|
"verify": func(v *vaultik.Vaultik) error {
|
|
return v.VerifySnapshotWithOptions(unknownID, &vaultik.VerifyOptions{})
|
|
},
|
|
"verify --deep": func(v *vaultik.Vaultik) error {
|
|
return v.VerifySnapshotWithOptions(unknownID,
|
|
&vaultik.VerifyOptions{Deep: true})
|
|
},
|
|
}
|
|
|
|
for name, run := range commands {
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
store := newTestStorer()
|
|
addManifest(t, store, "snapshot-001", nil)
|
|
|
|
// A backup wrote to this destination, so it carries the marker.
|
|
require.NoError(t, store.Put(context.Background(), markerFile,
|
|
bytes.NewReader(nil)))
|
|
|
|
tv := vaultik.NewForTesting(store)
|
|
tv.Config = &config.Config{AgeSecretKey: testAgeSecretKey}
|
|
tv.Repositories = newLocalIndex(t, "snapshot-001")
|
|
|
|
err := run(tv.Vaultik)
|
|
|
|
require.EqualError(t, err, "snapshot not found in the local "+
|
|
"index or on the destination store: "+unknownID)
|
|
assert.Empty(t, tv.Stdout.String())
|
|
})
|
|
}
|
|
}
|