Adds test for S3 storage class configuration option

Signed-off-by: Brian Bland <brian.bland@docker.com>
This commit is contained in:
Brian Bland 2016-02-01 15:34:36 -08:00
parent 8e7910826e
commit a2ade36ecf

View file

@ -18,7 +18,7 @@ import (
// Hook up gocheck into the "go test" runner. // Hook up gocheck into the "go test" runner.
func Test(t *testing.T) { check.TestingT(t) } func Test(t *testing.T) { check.TestingT(t) }
var s3DriverConstructor func(rootDirectory string) (*Driver, error) var s3DriverConstructor func(rootDirectory string, storageClass s3.StorageClass) (*Driver, error)
var skipS3 func() string var skipS3 func() string
func init() { func init() {
@ -35,7 +35,7 @@ func init() {
} }
defer os.Remove(root) defer os.Remove(root)
s3DriverConstructor = func(rootDirectory string) (*Driver, error) { s3DriverConstructor = func(rootDirectory string, storageClass s3.StorageClass) (*Driver, error) {
encryptBool := false encryptBool := false
if encrypt != "" { if encrypt != "" {
encryptBool, err = strconv.ParseBool(encrypt) encryptBool, err = strconv.ParseBool(encrypt)
@ -70,7 +70,7 @@ func init() {
v4AuthBool, v4AuthBool,
minChunkSize, minChunkSize,
rootDirectory, rootDirectory,
s3.StandardStorage, storageClass,
"", "",
} }
@ -86,7 +86,7 @@ func init() {
} }
testsuites.RegisterSuite(func() (storagedriver.StorageDriver, error) { testsuites.RegisterSuite(func() (storagedriver.StorageDriver, error) {
return s3DriverConstructor(root) return s3DriverConstructor(root, s3.StandardStorage)
}, skipS3) }, skipS3)
} }
@ -101,17 +101,17 @@ func TestEmptyRootList(t *testing.T) {
} }
defer os.Remove(validRoot) defer os.Remove(validRoot)
rootedDriver, err := s3DriverConstructor(validRoot) rootedDriver, err := s3DriverConstructor(validRoot, s3.StandardStorage)
if err != nil { if err != nil {
t.Fatalf("unexpected error creating rooted driver: %v", err) t.Fatalf("unexpected error creating rooted driver: %v", err)
} }
emptyRootDriver, err := s3DriverConstructor("") emptyRootDriver, err := s3DriverConstructor("", s3.StandardStorage)
if err != nil { if err != nil {
t.Fatalf("unexpected error creating empty root driver: %v", err) t.Fatalf("unexpected error creating empty root driver: %v", err)
} }
slashRootDriver, err := s3DriverConstructor("/") slashRootDriver, err := s3DriverConstructor("/", s3.StandardStorage)
if err != nil { if err != nil {
t.Fatalf("unexpected error creating slash root driver: %v", err) t.Fatalf("unexpected error creating slash root driver: %v", err)
} }
@ -139,3 +139,63 @@ func TestEmptyRootList(t *testing.T) {
} }
} }
} }
func TestStorageClass(t *testing.T) {
if skipS3() != "" {
t.Skip(skipS3())
}
rootDir, err := ioutil.TempDir("", "driver-")
if err != nil {
t.Fatalf("unexpected error creating temporary directory: %v", err)
}
defer os.Remove(rootDir)
standardDriver, err := s3DriverConstructor(rootDir, s3.StandardStorage)
if err != nil {
t.Fatalf("unexpected error creating driver with standard storage: %v", err)
}
rrDriver, err := s3DriverConstructor(rootDir, s3.ReducedRedundancy)
if err != nil {
t.Fatalf("unexpected error creating driver with reduced redundancy storage: %v", err)
}
standardFilename := "/test-standard"
rrFilename := "/test-rr"
contents := []byte("contents")
ctx := context.Background()
err = standardDriver.PutContent(ctx, standardFilename, contents)
if err != nil {
t.Fatalf("unexpected error creating content: %v", err)
}
defer standardDriver.Delete(ctx, standardFilename)
err = rrDriver.PutContent(ctx, rrFilename, contents)
if err != nil {
t.Fatalf("unexpected error creating content: %v", err)
}
defer rrDriver.Delete(ctx, rrFilename)
standardDriverUnwrapped := standardDriver.Base.StorageDriver.(*driver)
resp, err := standardDriverUnwrapped.Bucket.GetResponse(standardDriverUnwrapped.s3Path(standardFilename))
if err != nil {
t.Fatalf("unexpected error retrieving standard storage file: %v", err)
}
defer resp.Body.Close()
// Amazon only populates this header value for non-standard storage classes
if storageClass := resp.Header.Get("x-amz-storage-class"); storageClass != "" {
t.Fatalf("unexpected storage class for standard file: %v", storageClass)
}
rrDriverUnwrapped := rrDriver.Base.StorageDriver.(*driver)
resp, err = rrDriverUnwrapped.Bucket.GetResponse(rrDriverUnwrapped.s3Path(rrFilename))
if err != nil {
t.Fatalf("unexpected error retrieving reduced-redundancy storage file: %v", err)
}
defer resp.Body.Close()
if storageClass := resp.Header.Get("x-amz-storage-class"); storageClass != string(s3.ReducedRedundancy) {
t.Fatalf("unexpected storage class for standard file: %v", storageClass)
}
}