github.com/lusis/distribution@v2.0.1+incompatible/registry/storage/driver/s3/s3_test.go (about) 1 package s3 2 3 import ( 4 "io/ioutil" 5 "os" 6 "strconv" 7 "testing" 8 9 "github.com/AdRoll/goamz/aws" 10 storagedriver "github.com/docker/distribution/registry/storage/driver" 11 "github.com/docker/distribution/registry/storage/driver/testsuites" 12 13 "gopkg.in/check.v1" 14 ) 15 16 // Hook up gocheck into the "go test" runner. 17 func Test(t *testing.T) { check.TestingT(t) } 18 19 type S3DriverConstructor func(rootDirectory string) (*Driver, error) 20 21 func init() { 22 accessKey := os.Getenv("AWS_ACCESS_KEY") 23 secretKey := os.Getenv("AWS_SECRET_KEY") 24 bucket := os.Getenv("S3_BUCKET") 25 encrypt := os.Getenv("S3_ENCRYPT") 26 secure := os.Getenv("S3_SECURE") 27 v4auth := os.Getenv("S3_USE_V4_AUTH") 28 region := os.Getenv("AWS_REGION") 29 root, err := ioutil.TempDir("", "driver-") 30 if err != nil { 31 panic(err) 32 } 33 defer os.Remove(root) 34 35 s3DriverConstructor := func(rootDirectory string) (*Driver, error) { 36 encryptBool := false 37 if encrypt != "" { 38 encryptBool, err = strconv.ParseBool(encrypt) 39 if err != nil { 40 return nil, err 41 } 42 } 43 44 secureBool := true 45 if secure != "" { 46 secureBool, err = strconv.ParseBool(secure) 47 if err != nil { 48 return nil, err 49 } 50 } 51 52 v4AuthBool := false 53 if v4auth != "" { 54 v4AuthBool, err = strconv.ParseBool(v4auth) 55 if err != nil { 56 return nil, err 57 } 58 } 59 60 parameters := DriverParameters{ 61 accessKey, 62 secretKey, 63 bucket, 64 aws.GetRegion(region), 65 encryptBool, 66 secureBool, 67 v4AuthBool, 68 minChunkSize, 69 rootDirectory, 70 } 71 72 return New(parameters) 73 } 74 75 // Skip S3 storage driver tests if environment variable parameters are not provided 76 skipCheck := func() string { 77 if accessKey == "" || secretKey == "" || region == "" || bucket == "" || encrypt == "" { 78 return "Must set AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_REGION, S3_BUCKET, and S3_ENCRYPT to run S3 tests" 79 } 80 return "" 81 } 82 83 driverConstructor := func() (storagedriver.StorageDriver, error) { 84 return s3DriverConstructor(root) 85 } 86 87 testsuites.RegisterInProcessSuite(driverConstructor, skipCheck) 88 89 // s3Constructor := func() (*Driver, error) { 90 // return s3DriverConstructor(aws.GetRegion(region)) 91 // } 92 93 RegisterS3DriverSuite(s3DriverConstructor, skipCheck) 94 95 // testsuites.RegisterIPCSuite(driverName, map[string]string{ 96 // "accesskey": accessKey, 97 // "secretkey": secretKey, 98 // "region": region.Name, 99 // "bucket": bucket, 100 // "encrypt": encrypt, 101 // }, skipCheck) 102 // } 103 } 104 105 func RegisterS3DriverSuite(s3DriverConstructor S3DriverConstructor, skipCheck testsuites.SkipCheck) { 106 check.Suite(&S3DriverSuite{ 107 Constructor: s3DriverConstructor, 108 SkipCheck: skipCheck, 109 }) 110 } 111 112 type S3DriverSuite struct { 113 Constructor S3DriverConstructor 114 testsuites.SkipCheck 115 } 116 117 func (suite *S3DriverSuite) SetUpSuite(c *check.C) { 118 if reason := suite.SkipCheck(); reason != "" { 119 c.Skip(reason) 120 } 121 } 122 123 func (suite *S3DriverSuite) TestEmptyRootList(c *check.C) { 124 validRoot, err := ioutil.TempDir("", "driver-") 125 c.Assert(err, check.IsNil) 126 defer os.Remove(validRoot) 127 128 rootedDriver, err := suite.Constructor(validRoot) 129 c.Assert(err, check.IsNil) 130 emptyRootDriver, err := suite.Constructor("") 131 c.Assert(err, check.IsNil) 132 slashRootDriver, err := suite.Constructor("/") 133 c.Assert(err, check.IsNil) 134 135 filename := "/test" 136 contents := []byte("contents") 137 err = rootedDriver.PutContent(filename, contents) 138 c.Assert(err, check.IsNil) 139 defer rootedDriver.Delete(filename) 140 141 keys, err := emptyRootDriver.List("/") 142 for _, path := range keys { 143 c.Assert(storagedriver.PathRegexp.MatchString(path), check.Equals, true) 144 } 145 146 keys, err = slashRootDriver.List("/") 147 for _, path := range keys { 148 c.Assert(storagedriver.PathRegexp.MatchString(path), check.Equals, true) 149 } 150 }