forked from TrueCloudLab/restic
MemoryBackend: handle config correctly, add tests for that
This commit is contained in:
parent
538e5878a1
commit
480054bc3a
2 changed files with 43 additions and 1 deletions
|
@ -12,7 +12,34 @@ import (
|
||||||
. "github.com/restic/restic/test"
|
. "github.com/restic/restic/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func testBackendConfig(b backend.Backend, t *testing.T) {
|
||||||
|
// create config and read it back
|
||||||
|
_, err := b.Get(backend.Config, "")
|
||||||
|
Assert(t, err != nil, "did not get expected error for non-existing config")
|
||||||
|
|
||||||
|
blob, err := b.Create()
|
||||||
|
OK(t, err)
|
||||||
|
|
||||||
|
_, err = blob.Write([]byte("Config"))
|
||||||
|
OK(t, err)
|
||||||
|
OK(t, blob.Finalize(backend.Config, ""))
|
||||||
|
|
||||||
|
// try accessing the config with different names, should all return the
|
||||||
|
// same config
|
||||||
|
for _, name := range []string{"", "foo", "bar", "0000000000000000000000000000000000000000000000000000000000000000"} {
|
||||||
|
rd, err := b.Get(backend.Config, name)
|
||||||
|
Assert(t, err == nil, "unable to read config")
|
||||||
|
|
||||||
|
buf, err := ioutil.ReadAll(rd)
|
||||||
|
OK(t, err)
|
||||||
|
OK(t, rd.Close())
|
||||||
|
Assert(t, string(buf) == "Config", "wrong data returned for config")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testBackend(b backend.Backend, t *testing.T) {
|
func testBackend(b backend.Backend, t *testing.T) {
|
||||||
|
testBackendConfig(b, t)
|
||||||
|
|
||||||
for _, tpe := range []backend.Type{
|
for _, tpe := range []backend.Type{
|
||||||
backend.Data, backend.Key, backend.Lock,
|
backend.Data, backend.Key, backend.Lock,
|
||||||
backend.Snapshot, backend.Index,
|
backend.Snapshot, backend.Index,
|
||||||
|
|
|
@ -103,11 +103,18 @@ func (e *tempMemEntry) Size() uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *tempMemEntry) Finalize(t Type, name string) error {
|
func (e *tempMemEntry) Finalize(t Type, name string) error {
|
||||||
|
if t == Config {
|
||||||
|
name = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
debug.Log("MemoryBackend", "save blob %p as %v %v", e, t, name)
|
||||||
return e.be.insert(t, name, e.data.Bytes())
|
return e.be.insert(t, name, e.data.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
func memCreate(be *MemoryBackend) (Blob, error) {
|
func memCreate(be *MemoryBackend) (Blob, error) {
|
||||||
return &tempMemEntry{be: be}, nil
|
blob := &tempMemEntry{be: be}
|
||||||
|
debug.Log("MemoryBackend.Create", "create new blob %p", blob)
|
||||||
|
return blob, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// readCloser wraps a reader and adds a noop Close method.
|
// readCloser wraps a reader and adds a noop Close method.
|
||||||
|
@ -123,6 +130,10 @@ func memGet(be *MemoryBackend, t Type, name string) (io.ReadCloser, error) {
|
||||||
be.m.Lock()
|
be.m.Lock()
|
||||||
defer be.m.Unlock()
|
defer be.m.Unlock()
|
||||||
|
|
||||||
|
if t == Config {
|
||||||
|
name = ""
|
||||||
|
}
|
||||||
|
|
||||||
debug.Log("MemoryBackend.Get", "get %v %v", t, name)
|
debug.Log("MemoryBackend.Get", "get %v %v", t, name)
|
||||||
|
|
||||||
if _, ok := be.data[entry{t, name}]; !ok {
|
if _, ok := be.data[entry{t, name}]; !ok {
|
||||||
|
@ -136,6 +147,10 @@ func memGetReader(be *MemoryBackend, t Type, name string, offset, length uint) (
|
||||||
be.m.Lock()
|
be.m.Lock()
|
||||||
defer be.m.Unlock()
|
defer be.m.Unlock()
|
||||||
|
|
||||||
|
if t == Config {
|
||||||
|
name = ""
|
||||||
|
}
|
||||||
|
|
||||||
debug.Log("MemoryBackend.GetReader", "get %v %v", t, name)
|
debug.Log("MemoryBackend.GetReader", "get %v %v", t, name)
|
||||||
|
|
||||||
if _, ok := be.data[entry{t, name}]; !ok {
|
if _, ok := be.data[entry{t, name}]; !ok {
|
||||||
|
|
Loading…
Reference in a new issue