func TestBackend_basic(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) d1 := map[string]interface{}{ "connection_url": os.Getenv("PG_URL"), } d2 := map[string]interface{}{ "value": os.Getenv("PG_URL"), } logicaltest.Test(t, logicaltest.TestCase{ AcceptanceTest: true, PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, d1, false), testAccStepRole(t), testAccStepReadCreds(t, b, "web"), testAccStepConfig(t, d2, false), testAccStepRole(t), testAccStepReadCreds(t, b, "web"), }, }) }
func TestBackend_basicHostRevoke(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "connection_url": connURL, } // for host based mysql user logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData, false), testAccStepRole(t, false), testAccStepReadCreds(t, "web"), }, }) }
func TestBackend_roleCrud(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURI := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "uri": connURI, } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(connData, false), testAccStepRole(), testAccStepReadRole("web", testDb, testMongoDBRoles), testAccStepDeleteRole("web"), testAccStepReadRole("web", "", ""), }, }) }
func TestBackend_roleReadOnly(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "connection_url": connURL, } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData, false), testAccStepCreateRole(t, "web", testRole, false), testAccStepCreateRole(t, "web-readonly", testReadOnlyRole, false), testAccStepReadRole(t, "web-readonly", testReadOnlyRole), testAccStepCreateTable(t, b, config.StorageView, "web", connURL), testAccStepReadCreds(t, b, config.StorageView, "web-readonly", connURL), testAccStepDropTable(t, b, config.StorageView, "web", connURL), testAccStepDeleteRole(t, "web-readonly"), testAccStepDeleteRole(t, "web"), testAccStepReadRole(t, "web-readonly", ""), }, }) }
func TestBackend_BlockStatements(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "connection_url": connURL, } jsonBlockStatement, err := json.Marshal(testBlockStatementRoleSlice) if err != nil { t.Fatal(err) } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData, false), // This will also validate the query testAccStepCreateRole(t, "web-block", testBlockStatementRole, true), testAccStepCreateRole(t, "web-block", string(jsonBlockStatement), false), }, }) }
func TestBackend_management(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "address": connURL, "token": dockertest.ConsulACLMasterToken, } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData), testAccStepWriteManagementPolicy(t, "test", ""), testAccStepReadManagementToken(t, "test", connData), }, }) }
func TestBackend_roleCrud(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "connection_url": connURL, } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData, false), // test SQL with wildcard based user testAccStepRole(t, true), testAccStepReadRole(t, "web", testRoleWildCard), testAccStepDeleteRole(t, "web"), // test SQL with host based user testAccStepRole(t, false), testAccStepReadRole(t, "web", testRoleHost), testAccStepDeleteRole(t, "web"), }, }) }
func TestBackend_leaseWriteRead(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "connection_url": connURL, } logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, connData, false), testAccStepWriteLease(t), testAccStepReadLease(t), }, }) }
func TestBackend_PathListRoles(t *testing.T) { var resp *logical.Response var err error config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b := Backend() if _, err := b.Setup(config); err != nil { t.Fatal(err) } roleData := map[string]interface{}{ "arn": "testarn", } roleReq := &logical.Request{ Operation: logical.UpdateOperation, Storage: config.StorageView, Data: roleData, } for i := 1; i <= 10; i++ { roleReq.Path = "roles/testrole" + strconv.Itoa(i) resp, err = b.HandleRequest(roleReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("bad: role creation failed. resp:%#v\n err:%v", resp, err) } } resp, err = b.HandleRequest(&logical.Request{ Operation: logical.ListOperation, Path: "roles", Storage: config.StorageView, }) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("bad: listing roles failed. resp:%#v\n err:%v", resp, err) } if len(resp.Data["keys"].([]string)) != 10 { t.Fatalf("failed to list all 10 roles") } resp, err = b.HandleRequest(&logical.Request{ Operation: logical.ListOperation, Path: "roles/", Storage: config.StorageView, }) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("bad: listing roles failed. resp:%#v\n err:%v", resp, err) } if len(resp.Data["keys"].([]string)) != 10 { t.Fatalf("failed to list all 10 roles") } }
func TestBackend_role_lease(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepWritePolicy(t, "test", testPolicy, "6h"), testAccStepReadPolicy(t, "test", testPolicy, 6*time.Hour), testAccStepDeletePolicy(t, "test"), }, }) }
func TestBackend_crud(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepWritePolicy(t, "test", testPolicy, ""), testAccStepReadPolicy(t, "test", testPolicy, 0), testAccStepDeletePolicy(t, "test"), }, }) }
func TestBackend_ConfigTidyIdentities(t *testing.T) { // create a backend config := logical.TestBackendConfig() storage := &logical.InmemStorage{} config.StorageView = storage b, err := Backend(config) if err != nil { t.Fatal(err) } _, err = b.Setup(config) if err != nil { t.Fatal(err) } // test update operation tidyRequest := &logical.Request{ Operation: logical.UpdateOperation, Path: "config/tidy/identity-whitelist", Storage: storage, } data := map[string]interface{}{ "safety_buffer": "60", "disable_periodic_tidy": true, } tidyRequest.Data = data _, err = b.HandleRequest(tidyRequest) if err != nil { t.Fatal(err) } // test read operation tidyRequest.Operation = logical.ReadOperation resp, err := b.HandleRequest(tidyRequest) if err != nil { t.Fatal(err) } if resp == nil || resp.IsError() { t.Fatalf("failed to read config/tidy/identity-whitelist endpoint") } if resp.Data["safety_buffer"].(int) != 60 || !resp.Data["disable_periodic_tidy"].(bool) { t.Fatalf("bad: expected: safety_buffer:60 disable_periodic_tidy:true actual: safety_buffer:%s disable_periodic_tidy:%t\n", resp.Data["safety_buffer"].(int), resp.Data["disable_periodic_tidy"].(bool)) } // test delete operation tidyRequest.Operation = logical.DeleteOperation resp, err = b.HandleRequest(tidyRequest) if err != nil { t.Fatal(err) } if resp != nil { t.Fatalf("failed to delete config/tidy/identity-whitelist") } }
func TestBackend_basic(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t), testAccStepRole(t), testAccStepReadCreds(t, "web"), }, }) }
func TestBackend_roleCrud(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t), testAccStepRole(t), testAccStepReadRole(t, "web", testRole), testAccStepDeleteRole(t, "web"), testAccStepReadRole(t, "web", ""), }, }) }
func TestBackend_roleCrud(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t), testAccStepRole(t), testAccStepReadRole(t, "web", "administrator", `{"/": {"configure": ".*", "write": ".*", "read": ".*"}}`), testAccStepDeleteRole(t, "web"), testAccStepReadRole(t, "web", "", ""), }, }) }
func TestBackend_role_lease(t *testing.T) { _, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepWritePolicy(t, "test", testPolicy, "6h"), testAccStepReadPolicy(t, "test", testPolicy, 6*time.Hour), testAccStepDeletePolicy(t, "test"), }, }) }
func TestBackend_crud(t *testing.T) { _, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepWritePolicy(t, "test", testPolicy, ""), testAccStepReadPolicy(t, "test", testPolicy, DefaultLeaseDuration), testAccStepDeletePolicy(t, "test"), }, }) }
func TestBackend_management(t *testing.T) { config, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, config), testAccStepWriteManagementPolicy(t, "test", ""), testAccStepReadManagementToken(t, "test", config), }, }) }
func TestBackend_config_access(t *testing.T) { if os.Getenv(logicaltest.TestEnvVar) == "" { t.Skip(fmt.Sprintf("Acceptance tests skipped unless env '%s' set", logicaltest.TestEnvVar)) return } accessConfig, process := testStartConsulServer(t) defer testStopConsulServer(t, process) config := logical.TestBackendConfig() storage := &logical.InmemStorage{} config.StorageView = storage b := Backend() _, err := b.Setup(config) if err != nil { t.Fatal(err) } confReq := &logical.Request{ Operation: logical.UpdateOperation, Path: "config/access", Storage: storage, Data: accessConfig, } resp, err := b.HandleRequest(confReq) if err != nil || (resp != nil && resp.IsError()) || resp != nil { t.Fatalf("failed to write configuration: resp:%#v err:%s", resp, err) } confReq.Operation = logical.ReadOperation resp, err = b.HandleRequest(confReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("failed to write configuration: resp:%#v err:%s", resp, err) } expected := map[string]interface{}{ "address": "127.0.0.1:8500", "scheme": "http", } if !reflect.DeepEqual(expected, resp.Data) { t.Fatalf("bad: expected:%#v\nactual:%#v\n", expected, resp.Data) } if resp.Data["token"] != nil { t.Fatalf("token should not be set in the response") } }
func TestBackend_config_access(t *testing.T) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } cid, connURL := prepareTestContainer(t, config.StorageView, b) if cid != "" { defer cleanupTestContainer(t, cid) } connData := map[string]interface{}{ "address": connURL, "token": dockertest.ConsulACLMasterToken, } confReq := &logical.Request{ Operation: logical.UpdateOperation, Path: "config/access", Storage: config.StorageView, Data: connData, } resp, err := b.HandleRequest(confReq) if err != nil || (resp != nil && resp.IsError()) || resp != nil { t.Fatalf("failed to write configuration: resp:%#v err:%s", resp, err) } confReq.Operation = logical.ReadOperation resp, err = b.HandleRequest(confReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("failed to write configuration: resp:%#v err:%s", resp, err) } expected := map[string]interface{}{ "address": connData["address"].(string), "scheme": "http", } if !reflect.DeepEqual(expected, resp.Data) { t.Fatalf("bad: expected:%#v\nactual:%#v\n", expected, resp.Data) } if resp.Data["token"] != nil { t.Fatalf("token should not be set in the response") } }
func createBackendWithStorage(t *testing.T) (*backend, logical.Storage) { config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Backend(config) if err != nil { t.Fatal(err) } if b == nil { t.Fatalf("failed to create backend") } _, err = b.Backend.Setup(config) if err != nil { t.Fatal(err) } return b, config.StorageView }
func TestBackend_roleCrud(t *testing.T) { if os.Getenv(logicaltest.TestEnvVar) == "" { t.Skip(fmt.Sprintf("Acceptance tests skipped unless env '%s' set", logicaltest.TestEnvVar)) return } b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t), testAccStepRole(t), testAccStepReadRole(t, "web", "administrator", `{"/": {"configure": ".*", "write": ".*", "read": ".*"}}`), testAccStepDeleteRole(t, "web"), testAccStepReadRole(t, "web", "", ""), }, }) }
// Set the following env vars for the below test case to work. // // RABBITMQ_CONNECTION_URI // RABBITMQ_USERNAME // RABBITMQ_PASSWORD func TestBackend_basic(t *testing.T) { if os.Getenv(logicaltest.TestEnvVar) == "" { t.Skip(fmt.Sprintf("Acceptance tests skipped unless env '%s' set", logicaltest.TestEnvVar)) return } b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t), testAccStepRole(t), testAccStepReadCreds(t, b, "web"), }, }) }
func TestBackend_roleCrud(t *testing.T) { b, _ := Factory(logical.TestBackendConfig()) d := map[string]interface{}{ "connection_url": os.Getenv("PG_URL"), } logicaltest.Test(t, logicaltest.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, d, false), testAccStepRole(t), testAccStepReadRole(t, "web", testRole), testAccStepDeleteRole(t, "web"), testAccStepReadRole(t, "web", ""), }, }) }
func TestBackend_config_lease_RU(t *testing.T) { var resp *logical.Response var err error config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b := Backend() if _, err = b.Setup(config); err != nil { t.Fatal(err) } configData := map[string]interface{}{ "ttl": "10h", "max_ttl": "20h", } configReq := &logical.Request{ Operation: logical.UpdateOperation, Path: "config/lease", Storage: config.StorageView, Data: configData, } resp, err = b.HandleRequest(configReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("bad: resp: %#v\nerr:%s", resp, err) } if resp != nil { t.Fatal("expected a nil response") } configReq.Operation = logical.ReadOperation resp, err = b.HandleRequest(configReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("bad: resp: %#v\nerr:%s", resp, err) } if resp == nil { t.Fatal("expected a response") } if resp.Data["ttl"].(time.Duration) != 36000 { t.Fatalf("bad: ttl: expected:36000 actual:%d", resp.Data["ttl"].(time.Duration)) } if resp.Data["max_ttl"].(time.Duration) != 72000 { t.Fatalf("bad: ttl: expected:72000 actual:%d", resp.Data["ttl"].(time.Duration)) } }
func TestBackend_management(t *testing.T) { if os.Getenv("VAULT_ACC") == "" { return } config, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ AcceptanceTest: true, PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, config), testAccStepWriteManagementPolicy(t, "test", ""), testAccStepReadManagementToken(t, "test", config), }, }) }
func TestBackend_role_lease(t *testing.T) { if os.Getenv("VAULT_ACC") == "" { return } _, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ AcceptanceTest: true, PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepWritePolicy(t, "test", testPolicy, "6h"), testAccStepReadPolicy(t, "test", testPolicy, 6*time.Hour), testAccStepDeletePolicy(t, "test"), }, }) }
func TestBackend_basic(t *testing.T) { if os.Getenv(logicaltest.TestEnvVar) == "" { t.Skip(fmt.Sprintf("Acceptance tests skipped unless env '%s' set", logicaltest.TestEnvVar)) return } config, process := testStartConsulServer(t) defer testStopConsulServer(t, process) b, _ := Factory(logical.TestBackendConfig()) logicaltest.Test(t, logicaltest.TestCase{ AcceptanceTest: true, PreCheck: func() { testAccPreCheck(t) }, Backend: b, Steps: []logicaltest.TestStep{ testAccStepConfig(t, config), testAccStepWritePolicy(t, "test", testPolicy, ""), testAccStepReadToken(t, "test", config), }, }) }
func TestBackend_config_connection(t *testing.T) { var resp *logical.Response var err error config := logical.TestBackendConfig() config.StorageView = &logical.InmemStorage{} b, err := Factory(config) if err != nil { t.Fatal(err) } configData := map[string]interface{}{ "value": "", "connection_url": "sample_connection_url", "max_open_connections": 9, "max_idle_connections": 7, "verify_connection": false, } configReq := &logical.Request{ Operation: logical.UpdateOperation, Path: "config/connection", Storage: config.StorageView, Data: configData, } resp, err = b.HandleRequest(configReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("err:%s resp:%#v\n", err, resp) } configReq.Operation = logical.ReadOperation resp, err = b.HandleRequest(configReq) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("err:%s resp:%#v\n", err, resp) } delete(configData, "verify_connection") if !reflect.DeepEqual(configData, resp.Data) { t.Fatalf("bad: expected:%#v\nactual:%#v\n", configData, resp.Data) } }
func TestBackend_TidyRoleTags(t *testing.T) { config := logical.TestBackendConfig() storage := &logical.InmemStorage{} config.StorageView = storage b, err := Backend(config) if err != nil { t.Fatal(err) } _, err = b.Setup(config) if err != nil { t.Fatal(err) } // test update operation _, err = b.HandleRequest(&logical.Request{ Operation: logical.UpdateOperation, Path: "tidy/roletag-blacklist", Storage: storage, }) if err != nil { t.Fatal(err) } }