2015-03-14 17:15:47 +00:00
|
|
|
package restic_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/restic/restic"
|
|
|
|
"github.com/restic/restic/backend"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCache(t *testing.T) {
|
2015-03-28 14:07:08 +00:00
|
|
|
server := setupBackend(t)
|
|
|
|
defer teardownBackend(t, server)
|
|
|
|
key := setupKey(t, server, "geheim")
|
|
|
|
server.SetKey(key)
|
2015-03-14 17:15:47 +00:00
|
|
|
|
|
|
|
cache, err := restic.NewCache(server)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
arch, err := restic.NewArchiver(server)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
// archive some files, this should automatically cache all blobs from the snapshot
|
|
|
|
_, id, err := arch.Snapshot(nil, []string{*benchArchiveDirectory}, nil)
|
|
|
|
|
|
|
|
// try to load map from cache
|
|
|
|
rd, err := cache.Load(backend.Snapshot, "blobs", id)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
dec := json.NewDecoder(rd)
|
|
|
|
|
|
|
|
m := &restic.Map{}
|
|
|
|
err = dec.Decode(m)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
// remove cached blob list
|
|
|
|
ok(t, cache.Purge(backend.Snapshot, "blobs", id))
|
|
|
|
|
2015-03-22 13:41:51 +00:00
|
|
|
// load map from cache again, this should fail
|
|
|
|
rd, err = cache.Load(backend.Snapshot, "blobs", id)
|
|
|
|
assert(t, err != nil, "Expected failure did not occur")
|
|
|
|
|
2015-03-14 17:15:47 +00:00
|
|
|
// recreate cached blob list
|
2015-03-22 13:41:51 +00:00
|
|
|
err = cache.RefreshSnapshots(server, nil)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
// load map from cache again
|
|
|
|
rd, err = cache.Load(backend.Snapshot, "blobs", id)
|
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
dec = json.NewDecoder(rd)
|
|
|
|
|
|
|
|
m2 := &restic.Map{}
|
|
|
|
err = dec.Decode(m2)
|
2015-03-14 17:15:47 +00:00
|
|
|
ok(t, err)
|
|
|
|
|
|
|
|
// compare maps
|
|
|
|
assert(t, m.Equals(m2), "Maps are not equal")
|
|
|
|
}
|