github.com/mika/distribution@v2.2.2-0.20160108133430-a75790e3d8e0+incompatible/registry/storage/driver/swift/swift_test.go (about)

     1  package swift
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"strconv"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/ncw/swift/swifttest"
    11  
    12  	"github.com/docker/distribution/context"
    13  	storagedriver "github.com/docker/distribution/registry/storage/driver"
    14  	"github.com/docker/distribution/registry/storage/driver/testsuites"
    15  
    16  	"gopkg.in/check.v1"
    17  )
    18  
    19  // Hook up gocheck into the "go test" runner.
    20  func Test(t *testing.T) { check.TestingT(t) }
    21  
    22  var swiftDriverConstructor func(prefix string) (*Driver, error)
    23  
    24  func init() {
    25  	var (
    26  		username           string
    27  		password           string
    28  		authURL            string
    29  		tenant             string
    30  		tenantID           string
    31  		domain             string
    32  		domainID           string
    33  		trustID            string
    34  		container          string
    35  		region             string
    36  		insecureSkipVerify bool
    37  		secretKey          string
    38  		accessKey          string
    39  		containerKey       bool
    40  		tempURLMethods     []string
    41  
    42  		swiftServer *swifttest.SwiftServer
    43  		err         error
    44  	)
    45  	username = os.Getenv("SWIFT_USERNAME")
    46  	password = os.Getenv("SWIFT_PASSWORD")
    47  	authURL = os.Getenv("SWIFT_AUTH_URL")
    48  	tenant = os.Getenv("SWIFT_TENANT_NAME")
    49  	tenantID = os.Getenv("SWIFT_TENANT_ID")
    50  	domain = os.Getenv("SWIFT_DOMAIN_NAME")
    51  	domainID = os.Getenv("SWIFT_DOMAIN_ID")
    52  	trustID = os.Getenv("SWIFT_TRUST_ID")
    53  	container = os.Getenv("SWIFT_CONTAINER_NAME")
    54  	region = os.Getenv("SWIFT_REGION_NAME")
    55  	insecureSkipVerify, _ = strconv.ParseBool(os.Getenv("SWIFT_INSECURESKIPVERIFY"))
    56  	secretKey = os.Getenv("SWIFT_SECRET_KEY")
    57  	accessKey = os.Getenv("SWIFT_ACCESS_KEY")
    58  	containerKey, _ = strconv.ParseBool(os.Getenv("SWIFT_TEMPURL_CONTAINERKEY"))
    59  	tempURLMethods = strings.Split(os.Getenv("SWIFT_TEMPURL_METHODS"), ",")
    60  
    61  	if username == "" || password == "" || authURL == "" || container == "" {
    62  		if swiftServer, err = swifttest.NewSwiftServer("localhost"); err != nil {
    63  			panic(err)
    64  		}
    65  		username = "swifttest"
    66  		password = "swifttest"
    67  		authURL = swiftServer.AuthURL
    68  		container = "test"
    69  	}
    70  
    71  	prefix, err := ioutil.TempDir("", "driver-")
    72  	if err != nil {
    73  		panic(err)
    74  	}
    75  	defer os.Remove(prefix)
    76  
    77  	swiftDriverConstructor = func(root string) (*Driver, error) {
    78  		parameters := Parameters{
    79  			username,
    80  			password,
    81  			authURL,
    82  			tenant,
    83  			tenantID,
    84  			domain,
    85  			domainID,
    86  			trustID,
    87  			region,
    88  			container,
    89  			root,
    90  			insecureSkipVerify,
    91  			defaultChunkSize,
    92  			secretKey,
    93  			accessKey,
    94  			containerKey,
    95  			tempURLMethods,
    96  		}
    97  
    98  		return New(parameters)
    99  	}
   100  
   101  	driverConstructor := func() (storagedriver.StorageDriver, error) {
   102  		return swiftDriverConstructor(prefix)
   103  	}
   104  
   105  	testsuites.RegisterSuite(driverConstructor, testsuites.NeverSkip)
   106  }
   107  
   108  func TestEmptyRootList(t *testing.T) {
   109  	validRoot, err := ioutil.TempDir("", "driver-")
   110  	if err != nil {
   111  		t.Fatalf("unexpected error creating temporary directory: %v", err)
   112  	}
   113  	defer os.Remove(validRoot)
   114  
   115  	rootedDriver, err := swiftDriverConstructor(validRoot)
   116  	if err != nil {
   117  		t.Fatalf("unexpected error creating rooted driver: %v", err)
   118  	}
   119  
   120  	emptyRootDriver, err := swiftDriverConstructor("")
   121  	if err != nil {
   122  		t.Fatalf("unexpected error creating empty root driver: %v", err)
   123  	}
   124  
   125  	slashRootDriver, err := swiftDriverConstructor("/")
   126  	if err != nil {
   127  		t.Fatalf("unexpected error creating slash root driver: %v", err)
   128  	}
   129  
   130  	filename := "/test"
   131  	contents := []byte("contents")
   132  	ctx := context.Background()
   133  	err = rootedDriver.PutContent(ctx, filename, contents)
   134  	if err != nil {
   135  		t.Fatalf("unexpected error creating content: %v", err)
   136  	}
   137  
   138  	keys, err := emptyRootDriver.List(ctx, "/")
   139  	for _, path := range keys {
   140  		if !storagedriver.PathRegexp.MatchString(path) {
   141  			t.Fatalf("unexpected string in path: %q != %q", path, storagedriver.PathRegexp)
   142  		}
   143  	}
   144  
   145  	keys, err = slashRootDriver.List(ctx, "/")
   146  	for _, path := range keys {
   147  		if !storagedriver.PathRegexp.MatchString(path) {
   148  			t.Fatalf("unexpected string in path: %q != %q", path, storagedriver.PathRegexp)
   149  		}
   150  	}
   151  
   152  	// Create an object with a path nested under the existing object
   153  	err = rootedDriver.PutContent(ctx, filename+"/file1", contents)
   154  	if err != nil {
   155  		t.Fatalf("unexpected error creating content: %v", err)
   156  	}
   157  
   158  	err = rootedDriver.Delete(ctx, filename)
   159  	if err != nil {
   160  		t.Fatalf("failed to delete: %v", err)
   161  	}
   162  
   163  	keys, err = rootedDriver.List(ctx, "/")
   164  	if err != nil {
   165  		t.Fatalf("failed to list objects after deletion: %v", err)
   166  	}
   167  
   168  	if len(keys) != 0 {
   169  		t.Fatal("delete did not remove nested objects")
   170  	}
   171  }