mirror of
https://github.com/octoleo/restic.git
synced 2024-11-30 00:33:57 +00:00
MemoryBackend: handle config correctly, add tests for that
This commit is contained in:
parent
538e5878a1
commit
480054bc3a
@ -12,7 +12,34 @@ import (
|
||||
. "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) {
|
||||
testBackendConfig(b, t)
|
||||
|
||||
for _, tpe := range []backend.Type{
|
||||
backend.Data, backend.Key, backend.Lock,
|
||||
backend.Snapshot, backend.Index,
|
||||
|
@ -103,11 +103,18 @@ func (e *tempMemEntry) Size() uint {
|
||||
}
|
||||
|
||||
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())
|
||||
}
|
||||
|
||||
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.
|
||||
@ -123,6 +130,10 @@ func memGet(be *MemoryBackend, t Type, name string) (io.ReadCloser, error) {
|
||||
be.m.Lock()
|
||||
defer be.m.Unlock()
|
||||
|
||||
if t == Config {
|
||||
name = ""
|
||||
}
|
||||
|
||||
debug.Log("MemoryBackend.Get", "get %v %v", t, name)
|
||||
|
||||
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()
|
||||
defer be.m.Unlock()
|
||||
|
||||
if t == Config {
|
||||
name = ""
|
||||
}
|
||||
|
||||
debug.Log("MemoryBackend.GetReader", "get %v %v", t, name)
|
||||
|
||||
if _, ok := be.data[entry{t, name}]; !ok {
|
||||
|
Loading…
Reference in New Issue
Block a user