github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/kube/vault/vault_factory_test.go (about) 1 // +build unit 2 3 package vault_test 4 5 import ( 6 "testing" 7 8 "github.com/olli-ai/jx/v2/pkg/vault" 9 10 "github.com/banzaicloud/bank-vaults/operator/pkg/apis/vault/v1alpha1" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestGetConfigData(t *testing.T) { 15 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 16 17 vaultName, namespace := "myVault", "myVaultNamespace" 18 createMockedVault(vaultName, namespace, "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 19 20 // Invoke the function under test 21 config, jwt, saName, err := factory.GetConfigData(vaultName, namespace, true, false) 22 23 assert.Equal(t, "http://foo.bar", config.Address) 24 assert.Equal(t, "myJWT", jwt) 25 assert.Equal(t, "myVault-auth-sa", saName) 26 assert.NoError(t, err) 27 } 28 29 func TestGetConfigData_DefaultNamespacesUsed(t *testing.T) { 30 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 31 32 vaultName, namespace := "myVault", "jx" // "jx" is the default namespace used by the kubeClient 33 createMockedVault(vaultName, namespace, "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 34 35 // Invoke the function under test 36 config, jwt, saName, err := factory.GetConfigData("", "", true, false) 37 38 assert.Equal(t, "http://foo.bar", config.Address) 39 assert.Equal(t, "myJWT", jwt) 40 assert.Equal(t, "myVault-auth-sa", saName) 41 assert.NoError(t, err) 42 } 43 44 func TestGetConfigData_ErrorsWhenNoVaultsInNamespace(t *testing.T) { 45 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 46 47 vaultName, namespace := "myVault", "myVaultNamespace" 48 createMockedVault(vaultName, namespace, "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 49 50 // Invoke the function under test 51 config, jwt, saName, err := factory.GetConfigData("", "Nothing In This Namespace", true, false) 52 53 assert.Nil(t, config) 54 assert.Empty(t, jwt) 55 assert.Empty(t, saName) 56 assert.EqualError(t, err, "no vaults found in namespace 'Nothing In This Namespace'") 57 } 58 59 func TestGetConfigData_ConfigUsedFromVaultSelector(t *testing.T) { 60 // Two vaults are configured in the same namespace, the user specifies one with the -m flag 61 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 62 63 namespace := "myVaultNamespace" 64 _ = createMockedVault("vault1", namespace, "one.ah.ah.ah", "count", vaultOperatorClient, kubeClient) 65 vault2 := createMockedVault("vault2", namespace, "two.ah.ah.ah", "von-count", vaultOperatorClient, kubeClient) 66 67 // Create a mock Selector that just returns the second vault 68 factory.Selector = PredefinedVaultSelector{vaultToReturn: vault2, url: "http://two.ah.ah.ah"} 69 70 // Invoke the function under test 71 config, jwt, saName, err := factory.GetConfigData("", namespace, true, false) 72 73 assert.Equal(t, "http://two.ah.ah.ah", config.Address) 74 assert.Equal(t, "von-count", jwt) 75 assert.Equal(t, "vault2-auth-sa", saName) 76 assert.NoError(t, err) 77 } 78 79 // PredefinedVaultSelector is a dummy Selector that returns a pre-defined vault 80 type PredefinedVaultSelector struct { 81 vaultToReturn v1alpha1.Vault 82 url string 83 } 84 85 func (p PredefinedVaultSelector) GetVault(name string, namespaces string, incluster bool) (*vault.Vault, error) { 86 return &vault.Vault{ 87 Name: p.vaultToReturn.Name, 88 Namespace: p.vaultToReturn.Namespace, 89 ServiceAccountName: p.vaultToReturn.Name + "-auth-sa", 90 URL: p.url, 91 }, nil 92 }