package filesystem import ( "io/ioutil" "os" "reflect" "testing" storagedriver "github.com/distribution/distribution/v3/registry/storage/driver" "github.com/distribution/distribution/v3/registry/storage/driver/testsuites" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } func init() { root, err := ioutil.TempDir("", "driver-") if err != nil { panic(err) } defer os.Remove(root) driver, err := FromParameters(map[string]interface{}{ "rootdirectory": root, }) if err != nil { panic(err) } testsuites.RegisterSuite(func() (storagedriver.StorageDriver, error) { return driver, nil }, testsuites.NeverSkip) } func TestFromParametersImpl(t *testing.T) { tests := []struct { params map[string]interface{} // technically the yaml can contain anything expected DriverParameters pass bool }{ // check we use default threads and root dirs { params: map[string]interface{}{}, expected: DriverParameters{ RootDirectory: defaultRootDirectory, MaxThreads: defaultMaxThreads, }, pass: true, }, // Testing initiation with a string maxThreads which can't be parsed { params: map[string]interface{}{ "maxthreads": "fail", }, expected: DriverParameters{}, pass: false, }, { params: map[string]interface{}{ "maxthreads": "100", }, expected: DriverParameters{ RootDirectory: defaultRootDirectory, MaxThreads: uint64(100), }, pass: true, }, { params: map[string]interface{}{ "maxthreads": 100, }, expected: DriverParameters{ RootDirectory: defaultRootDirectory, MaxThreads: uint64(100), }, pass: true, }, // check that we use minimum thread counts { params: map[string]interface{}{ "maxthreads": 1, }, expected: DriverParameters{ RootDirectory: defaultRootDirectory, MaxThreads: minThreads, }, pass: true, }, } for _, item := range tests { params, err := fromParametersImpl(item.params) if !item.pass { // We only need to assert that expected failures have an error if err == nil { t.Fatalf("expected error configuring filesystem driver with invalid param: %+v", item.params) } continue } if err != nil { t.Fatalf("unexpected error creating filesystem driver: %s", err) } // Note that we get a pointer to params back if !reflect.DeepEqual(*params, item.expected) { t.Fatalf("unexpected params from filesystem driver. expected %+v, got %+v", item.expected, params) } } }