| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package rabbitmq |
| |
| import ( |
| "context" |
| "testing" |
| |
| "github.com/hashicorp/vault/sdk/logical" |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func TestBackend_RoleCreate_DefaultUsernameTemplate(t *testing.T) { |
| cleanup, connectionURI := prepareRabbitMQTestContainer(t) |
| defer cleanup() |
| |
| var resp *logical.Response |
| var err error |
| config := logical.TestBackendConfig() |
| config.StorageView = &logical.InmemStorage{} |
| b := Backend() |
| if err = b.Setup(context.Background(), config); err != nil { |
| t.Fatal(err) |
| } |
| |
| configData := map[string]interface{}{ |
| "connection_uri": connectionURI, |
| "username": "guest", |
| "password": "guest", |
| "username_template": "", |
| } |
| configReq := &logical.Request{ |
| Operation: logical.UpdateOperation, |
| Path: "config/connection", |
| Storage: config.StorageView, |
| Data: configData, |
| } |
| resp, err = b.HandleRequest(context.Background(), 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") |
| } |
| |
| roleData := map[string]interface{}{ |
| "name": "foo", |
| "tags": "bar", |
| } |
| roleReq := &logical.Request{ |
| Operation: logical.UpdateOperation, |
| Path: "roles/foo", |
| Storage: config.StorageView, |
| Data: roleData, |
| } |
| resp, err = b.HandleRequest(context.Background(), roleReq) |
| 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") |
| } |
| |
| credsReq := &logical.Request{ |
| Operation: logical.ReadOperation, |
| Path: "creds/foo", |
| Storage: config.StorageView, |
| DisplayName: "token", |
| } |
| resp, err = b.HandleRequest(context.Background(), credsReq) |
| if err != nil || (resp != nil && resp.IsError()) { |
| t.Fatalf("bad: resp: %#v\nerr:%s", resp, err) |
| } |
| if resp == nil { |
| t.Fatal("missing creds response") |
| } |
| if resp.Data == nil { |
| t.Fatalf("missing creds data") |
| } |
| |
| username, exists := resp.Data["username"] |
| if !exists { |
| t.Fatalf("missing username in response") |
| } |
| |
| require.Regexp(t, `^token-[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$`, username) |
| } |
| |
| func TestBackend_RoleCreate_CustomUsernameTemplate(t *testing.T) { |
| cleanup, connectionURI := prepareRabbitMQTestContainer(t) |
| defer cleanup() |
| |
| var resp *logical.Response |
| var err error |
| config := logical.TestBackendConfig() |
| config.StorageView = &logical.InmemStorage{} |
| b := Backend() |
| if err = b.Setup(context.Background(), config); err != nil { |
| t.Fatal(err) |
| } |
| |
| configData := map[string]interface{}{ |
| "connection_uri": connectionURI, |
| "username": "guest", |
| "password": "guest", |
| "username_template": "foo-{{ .DisplayName }}", |
| } |
| configReq := &logical.Request{ |
| Operation: logical.UpdateOperation, |
| Path: "config/connection", |
| Storage: config.StorageView, |
| Data: configData, |
| } |
| resp, err = b.HandleRequest(context.Background(), 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") |
| } |
| |
| roleData := map[string]interface{}{ |
| "name": "foo", |
| "tags": "bar", |
| } |
| roleReq := &logical.Request{ |
| Operation: logical.UpdateOperation, |
| Path: "roles/foo", |
| Storage: config.StorageView, |
| Data: roleData, |
| } |
| resp, err = b.HandleRequest(context.Background(), roleReq) |
| 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") |
| } |
| |
| credsReq := &logical.Request{ |
| Operation: logical.ReadOperation, |
| Path: "creds/foo", |
| Storage: config.StorageView, |
| DisplayName: "token", |
| } |
| resp, err = b.HandleRequest(context.Background(), credsReq) |
| if err != nil || (resp != nil && resp.IsError()) { |
| t.Fatalf("bad: resp: %#v\nerr:%s", resp, err) |
| } |
| if resp == nil { |
| t.Fatal("missing creds response") |
| } |
| if resp.Data == nil { |
| t.Fatalf("missing creds data") |
| } |
| |
| username, exists := resp.Data["username"] |
| if !exists { |
| t.Fatalf("missing username in response") |
| } |
| |
| require.Regexp(t, `^foo-token$`, username) |
| } |