forked from TrueCloudLab/distribution
9c88801a12
Back in the before time, the best practices surrounding usage of Context weren't quite worked out. We defined our own type to make usage easier. As this packaged was used elsewhere, it make it more and more challenging to integrate with the forked `Context` type. Now that it is available in the standard library, we can just use that one directly. To make usage more consistent, we now use `dcontext` when referring to the distribution context package. Signed-off-by: Stephen J Day <stephen.day@docker.com>
142 lines
3.6 KiB
Go
142 lines
3.6 KiB
Go
// +build include_oss
|
|
|
|
package oss
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"strconv"
|
|
"testing"
|
|
|
|
alioss "github.com/denverdino/aliyungo/oss"
|
|
"github.com/docker/distribution/context"
|
|
storagedriver "github.com/docker/distribution/registry/storage/driver"
|
|
"github.com/docker/distribution/registry/storage/driver/testsuites"
|
|
"gopkg.in/check.v1"
|
|
)
|
|
|
|
// Hook up gocheck into the "go test" runner.
|
|
func Test(t *testing.T) { check.TestingT(t) }
|
|
|
|
var ossDriverConstructor func(rootDirectory string) (*Driver, error)
|
|
|
|
var skipCheck func() string
|
|
|
|
func init() {
|
|
accessKey := os.Getenv("ALIYUN_ACCESS_KEY_ID")
|
|
secretKey := os.Getenv("ALIYUN_ACCESS_KEY_SECRET")
|
|
bucket := os.Getenv("OSS_BUCKET")
|
|
region := os.Getenv("OSS_REGION")
|
|
internal := os.Getenv("OSS_INTERNAL")
|
|
encrypt := os.Getenv("OSS_ENCRYPT")
|
|
secure := os.Getenv("OSS_SECURE")
|
|
endpoint := os.Getenv("OSS_ENDPOINT")
|
|
root, err := ioutil.TempDir("", "driver-")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer os.Remove(root)
|
|
|
|
ossDriverConstructor = func(rootDirectory string) (*Driver, error) {
|
|
encryptBool := false
|
|
if encrypt != "" {
|
|
encryptBool, err = strconv.ParseBool(encrypt)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
secureBool := false
|
|
if secure != "" {
|
|
secureBool, err = strconv.ParseBool(secure)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
internalBool := false
|
|
if internal != "" {
|
|
internalBool, err = strconv.ParseBool(internal)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
parameters := DriverParameters{
|
|
AccessKeyID: accessKey,
|
|
AccessKeySecret: secretKey,
|
|
Bucket: bucket,
|
|
Region: alioss.Region(region),
|
|
Internal: internalBool,
|
|
ChunkSize: minChunkSize,
|
|
RootDirectory: rootDirectory,
|
|
Encrypt: encryptBool,
|
|
Secure: secureBool,
|
|
Endpoint: endpoint,
|
|
}
|
|
|
|
return New(parameters)
|
|
}
|
|
|
|
// Skip OSS storage driver tests if environment variable parameters are not provided
|
|
skipCheck = func() string {
|
|
if accessKey == "" || secretKey == "" || region == "" || bucket == "" || encrypt == "" {
|
|
return "Must set ALIYUN_ACCESS_KEY_ID, ALIYUN_ACCESS_KEY_SECRET, OSS_REGION, OSS_BUCKET, and OSS_ENCRYPT to run OSS tests"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
testsuites.RegisterSuite(func() (storagedriver.StorageDriver, error) {
|
|
return ossDriverConstructor(root)
|
|
}, skipCheck)
|
|
}
|
|
|
|
func TestEmptyRootList(t *testing.T) {
|
|
if skipCheck() != "" {
|
|
t.Skip(skipCheck())
|
|
}
|
|
|
|
validRoot, err := ioutil.TempDir("", "driver-")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating temporary directory: %v", err)
|
|
}
|
|
defer os.Remove(validRoot)
|
|
|
|
rootedDriver, err := ossDriverConstructor(validRoot)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating rooted driver: %v", err)
|
|
}
|
|
|
|
emptyRootDriver, err := ossDriverConstructor("")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating empty root driver: %v", err)
|
|
}
|
|
|
|
slashRootDriver, err := ossDriverConstructor("/")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating slash root driver: %v", err)
|
|
}
|
|
|
|
filename := "/test"
|
|
contents := []byte("contents")
|
|
ctx := context.Background()
|
|
err = rootedDriver.PutContent(ctx, filename, contents)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating content: %v", err)
|
|
}
|
|
defer rootedDriver.Delete(ctx, filename)
|
|
|
|
keys, err := emptyRootDriver.List(ctx, "/")
|
|
for _, path := range keys {
|
|
if !storagedriver.PathRegexp.MatchString(path) {
|
|
t.Fatalf("unexpected string in path: %q != %q", path, storagedriver.PathRegexp)
|
|
}
|
|
}
|
|
|
|
keys, err = slashRootDriver.List(ctx, "/")
|
|
for _, path := range keys {
|
|
if !storagedriver.PathRegexp.MatchString(path) {
|
|
t.Fatalf("unexpected string in path: %q != %q", path, storagedriver.PathRegexp)
|
|
}
|
|
}
|
|
}
|