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 }