(t *testing.T, bucketDir string)
| 124 | } |
| 125 | |
| 126 | func testStorage(t *testing.T, bucketDir string) { |
| 127 | if *bucket == "" || *key == "" || *secret == "" { |
| 128 | t.Skip("Skipping test because at least one of -s3_key, -s3_secret, or -s3_bucket flags has not been provided.") |
| 129 | } |
| 130 | if !strings.HasPrefix(*bucket, "camlistore-") || !strings.HasSuffix(*bucket, "-test") { |
| 131 | t.Fatalf("bogus bucket name %q; must begin with 'camlistore-' and end in '-test'", *bucket) |
| 132 | } |
| 133 | |
| 134 | bucketWithDir := path.Join(*bucket, bucketDir) |
| 135 | storagetest.Test(t, func(t *testing.T) blobserver.Storage { |
| 136 | sto, err := newFromConfig(nil, jsonconfig.Obj{ |
| 137 | "aws_access_key": *key, |
| 138 | "aws_secret_access_key": *secret, |
| 139 | "bucket": bucketWithDir, |
| 140 | "cacheSize": float64(0), |
| 141 | }) |
| 142 | if err != nil { |
| 143 | t.Fatalf("newFromConfig error: %v", err) |
| 144 | } |
| 145 | if !testing.Short() { |
| 146 | log.Printf("Warning: this test does many serial operations. Without the go test -short flag, this test will be very slow.") |
| 147 | } |
| 148 | |
| 149 | if bucketWithDir != *bucket { |
| 150 | // Adding "a", and "c" objects in the bucket to make sure objects out of the |
| 151 | // "directory" are not touched and have no influence. |
| 152 | for _, key := range []string{"a", "c"} { |
| 153 | if err != nil { |
| 154 | t.Fatalf("could not insert object %s in bucket %v: %v", key, sto.(*s3Storage).bucket, err) |
| 155 | } |
| 156 | if _, err := sto.(*s3Storage).client.PutObject(&s3.PutObjectInput{ |
| 157 | Bucket: &sto.(*s3Storage).bucket, |
| 158 | Key: aws.String(key), |
| 159 | Body: strings.NewReader(key), |
| 160 | }); err != nil { |
| 161 | t.Fatalf("could not insert object %s in bucket %v: %v", key, sto.(*s3Storage).bucket, err) |
| 162 | } |
| 163 | } |
| 164 | } |
| 165 | clearBucket := func(beforeTests bool) func() { |
| 166 | return func() { |
| 167 | var all []blob.Ref |
| 168 | blobserver.EnumerateAll(ctxbg, sto, func(sb blob.SizedRef) error { |
| 169 | t.Logf("Deleting: %v", sb.Ref) |
| 170 | all = append(all, sb.Ref) |
| 171 | return nil |
| 172 | }) |
| 173 | if err := sto.RemoveBlobs(ctxbg, all); err != nil { |
| 174 | t.Fatalf("Error removing blobs during cleanup: %v", err) |
| 175 | } |
| 176 | if beforeTests { |
| 177 | return |
| 178 | } |
| 179 | if bucketWithDir != *bucket { |
| 180 | // checking that "a" and "c" at the root were left untouched. |
| 181 | for _, key := range []string{"a", "c"} { |
| 182 | if _, err := sto.(*s3Storage).client.GetObject(&s3.GetObjectInput{ |
| 183 | Bucket: &sto.(*s3Storage).bucket, |
no test coverage detected