diff --git a/backend/backend_test.go b/backend/backend_test.go deleted file mode 100644 index 297170f56..000000000 --- a/backend/backend_test.go +++ /dev/null @@ -1,275 +0,0 @@ -package backend_test - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "math/rand" - "sort" - "testing" - - crand "crypto/rand" - - "github.com/restic/restic/backend" - . "github.com/restic/restic/test" -) - -func testBackendConfig(b backend.Backend, t *testing.T) { - // create config and read it back - _, err := b.GetReader(backend.Config, "", 0, 0) - 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.GetReader(backend.Config, name, 0, 0) - 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 testGetReader(b backend.Backend, t testing.TB) { - length := rand.Intn(1<<24) + 2000 - - data := make([]byte, length) - _, err := io.ReadFull(crand.Reader, data) - OK(t, err) - - blob, err := b.Create() - OK(t, err) - - id := backend.Hash(data) - - _, err = blob.Write([]byte(data)) - OK(t, err) - OK(t, blob.Finalize(backend.Data, id.String())) - - for i := 0; i < 500; i++ { - l := rand.Intn(length + 2000) - o := rand.Intn(length + 2000) - - d := data - if o < len(d) { - d = d[o:] - } else { - o = len(d) - d = d[:0] - } - - if l > 0 && l < len(d) { - d = d[:l] - } - - rd, err := b.GetReader(backend.Data, id.String(), uint(o), uint(l)) - OK(t, err) - buf, err := ioutil.ReadAll(rd) - OK(t, err) - - if !bytes.Equal(buf, d) { - t.Fatalf("data not equal") - } - } - - OK(t, b.Remove(backend.Data, id.String())) -} - -func testWrite(b backend.Backend, t testing.TB) { - length := rand.Intn(1<<23) + 2000 - - data := make([]byte, length) - _, err := io.ReadFull(crand.Reader, data) - OK(t, err) - id := backend.Hash(data) - - for i := 0; i < 10; i++ { - blob, err := b.Create() - OK(t, err) - - o := 0 - for o < len(data) { - l := rand.Intn(len(data) - o) - if len(data)-o < 20 { - l = len(data) - o - } - - n, err := blob.Write(data[o : o+l]) - OK(t, err) - if n != l { - t.Fatalf("wrong number of bytes written, want %v, got %v", l, n) - } - - o += l - } - - name := fmt.Sprintf("%s-%d", id, i) - OK(t, blob.Finalize(backend.Data, name)) - - rd, err := b.GetReader(backend.Data, name, 0, 0) - OK(t, err) - - buf, err := ioutil.ReadAll(rd) - OK(t, err) - - if len(buf) != len(data) { - t.Fatalf("number of bytes does not match, want %v, got %v", len(data), len(buf)) - } - - if !bytes.Equal(buf, data) { - t.Fatalf("data not equal") - } - } -} - -func store(t testing.TB, b backend.Backend, tpe backend.Type, data []byte) { - id := backend.Hash(data) - - blob, err := b.Create() - OK(t, err) - - _, err = blob.Write([]byte(data)) - OK(t, err) - OK(t, blob.Finalize(tpe, id.String())) -} - -func read(t testing.TB, rd io.Reader, expectedData []byte) { - buf, err := ioutil.ReadAll(rd) - OK(t, err) - if expectedData != nil { - Equals(t, expectedData, buf) - } -} - -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, - } { - // detect non-existing files - for _, test := range TestStrings { - id, err := backend.ParseID(test.id) - OK(t, err) - - // test if blob is already in repository - ret, err := b.Test(tpe, id.String()) - OK(t, err) - Assert(t, !ret, "blob was found to exist before creating") - - // try to open not existing blob - _, err = b.GetReader(tpe, id.String(), 0, 0) - Assert(t, err != nil, "blob data could be extracted before creation") - - // try to read not existing blob - _, err = b.GetReader(tpe, id.String(), 0, 1) - Assert(t, err != nil, "blob reader could be obtained before creation") - - // try to get string out, should fail - ret, err = b.Test(tpe, id.String()) - OK(t, err) - Assert(t, !ret, "id %q was found (but should not have)", test.id) - } - - // add files - for _, test := range TestStrings { - store(t, b, tpe, []byte(test.data)) - - // test GetReader() - rd, err := b.GetReader(tpe, test.id, 0, uint(len(test.data))) - OK(t, err) - Assert(t, rd != nil, "GetReader() returned nil") - - read(t, rd, []byte(test.data)) - OK(t, rd.Close()) - - // try to read it out with an offset and a length - start := 1 - end := len(test.data) - 2 - length := end - start - rd, err = b.GetReader(tpe, test.id, uint(start), uint(length)) - OK(t, err) - Assert(t, rd != nil, "GetReader() returned nil") - - read(t, rd, []byte(test.data[start:end])) - OK(t, rd.Close()) - } - - // test adding the first file again - test := TestStrings[0] - - // create blob - blob, err := b.Create() - OK(t, err) - - _, err = blob.Write([]byte(test.data)) - OK(t, err) - err = blob.Finalize(tpe, test.id) - Assert(t, err != nil, "expected error, got %v", err) - - // remove and recreate - err = b.Remove(tpe, test.id) - OK(t, err) - - // test that the blob is gone - ok, err := b.Test(tpe, test.id) - OK(t, err) - Assert(t, ok == false, "removed blob still present") - - // create blob - blob, err = b.Create() - OK(t, err) - - _, err = io.Copy(blob, bytes.NewReader([]byte(test.data))) - OK(t, err) - OK(t, blob.Finalize(tpe, test.id)) - - // list items - IDs := backend.IDs{} - - for _, test := range TestStrings { - id, err := backend.ParseID(test.id) - OK(t, err) - IDs = append(IDs, id) - } - - sort.Sort(IDs) - - i := 0 - for s := range b.List(tpe, nil) { - Equals(t, IDs[i].String(), s) - i++ - } - - // remove content if requested - if TestCleanup { - for _, test := range TestStrings { - id, err := backend.ParseID(test.id) - OK(t, err) - - found, err := b.Test(tpe, id.String()) - OK(t, err) - - OK(t, b.Remove(tpe, id.String())) - - found, err = b.Test(tpe, id.String()) - OK(t, err) - Assert(t, !found, fmt.Sprintf("id %q not found after removal", id)) - } - } - } - - testGetReader(b, t) - testWrite(b, t) -} diff --git a/backend/s3_test.go b/backend/s3_test.go deleted file mode 100644 index 6d79f9cd8..000000000 --- a/backend/s3_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package backend_test - -import ( - "net/url" - "os" - "testing" - - "github.com/restic/restic/backend/s3" - . "github.com/restic/restic/test" -) - -type deleter interface { - Delete() error -} - -func TestS3Backend(t *testing.T) { - if TestS3Server == "" { - t.Skip("s3 test server not available") - } - - url, err := url.Parse(TestS3Server) - OK(t, err) - - cfg := s3.Config{ - Endpoint: url.Host, - Bucket: "restictestbucket", - KeyID: os.Getenv("AWS_ACCESS_KEY_ID"), - Secret: os.Getenv("AWS_SECRET_ACCESS_KEY"), - } - - if url.Scheme == "http" { - cfg.UseHTTP = true - } - - be, err := s3.Open(cfg) - OK(t, err) - - testBackend(be, t) - - del := be.(deleter) - OK(t, del.Delete()) -}