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  }