github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/vault/vault_selector_test.go (about) 1 // +build unit 2 3 package vault_test 4 5 import ( 6 "fmt" 7 "testing" 8 9 vault_const "github.com/jenkins-x/jx/v2/pkg/vault" 10 11 expect "github.com/Netflix/go-expect" 12 kubevault "github.com/jenkins-x/jx/v2/pkg/kube/vault" 13 "github.com/jenkins-x/jx/v2/pkg/tests" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func Test_GetVault_DoesNotPromptUserIfOnlyOneVaultInNamespace(t *testing.T) { 18 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 19 createMockedVault("myVault", "myVaultNamespace", "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 20 21 selector, err := kubevault.NewVaultSelector(factory.Options) 22 23 vault, err := selector.GetVault("", "myVaultNamespace", true) 24 25 assert.Equal(t, "myVault", vault.Name) 26 assert.Equal(t, "myVaultNamespace", vault.Namespace) 27 assert.Equal(t, "http://foo.bar", vault.URL) 28 assert.Equal(t, "myVault-auth-sa", vault.ServiceAccountName) 29 assert.NoError(t, err) 30 } 31 32 func Test_GetVault_InclusterUsesInternalVaultURL(t *testing.T) { 33 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 34 createMockedVault("myVault", "myVaultNamespace", "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 35 36 selector, err := kubevault.NewVaultSelector(factory.Options) 37 38 vault, err := selector.GetVault("", "myVaultNamespace", false) 39 40 assert.Equal(t, "myVault", vault.Name) 41 assert.Equal(t, "myVaultNamespace", vault.Namespace) 42 assert.Equal(t, fmt.Sprintf("http://myVault:%s", vault_const.DefaultVaultPort), vault.URL) 43 assert.Equal(t, "myVault-auth-sa", vault.ServiceAccountName) 44 assert.NoError(t, err) 45 } 46 47 func Test_GetVault_ErrorsIfNoVaultsInNamespace(t *testing.T) { 48 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 49 createMockedVault("myVault", "myVaultNamespace", "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 50 51 selector, err := kubevault.NewVaultSelector(factory.Options) 52 53 vault, err := selector.GetVault("", "Nothing Here Jim", true) 54 55 assert.Nil(t, vault) 56 assert.EqualError(t, err, "no vaults found in namespace 'Nothing Here Jim'") 57 } 58 59 func Test_GetVault_ErrorsIfRequestedVaultDoesNotExist(t *testing.T) { 60 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 61 createMockedVault("myVault", "myVaultNamespace", "foo.bar", "myJWT", vaultOperatorClient, kubeClient) 62 63 selector, err := kubevault.NewVaultSelector(factory.Options) 64 65 vault, err := selector.GetVault("NoVaultHere", "myVaultNamespace", true) 66 67 assert.Nil(t, vault) 68 assert.EqualError(t, err, "vault 'NoVaultHere' not found in namespace 'myVaultNamespace'") 69 } 70 71 func Test_GetVault_GetExplicitVaultSucceedsWhenTwoVaultsAreDefined(t *testing.T) { 72 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, nil) 73 createMockedVault("vault1", "myVaultNamespace", "one.ah.ah.ah", "Count", vaultOperatorClient, kubeClient) 74 createMockedVault("vault2", "myVaultNamespace", "two.ah.ah.ah", "Von-Count", vaultOperatorClient, kubeClient) 75 76 selector, err := kubevault.NewVaultSelector(factory.Options) 77 78 vault, err := selector.GetVault("vault2", "myVaultNamespace", true) 79 80 assert.Equal(t, "vault2", vault.Name) 81 assert.Equal(t, "myVaultNamespace", vault.Namespace) 82 assert.Equal(t, "http://two.ah.ah.ah", vault.URL) 83 assert.Equal(t, "vault2-auth-sa", vault.ServiceAccountName) 84 assert.NoError(t, err) 85 } 86 87 func Test_GetVault_PromptsUserIfMoreThanOneVaultInNamespace(t *testing.T) { 88 tests.SkipForWindows(t, "go-expect does not work on windows") 89 90 // mock terminal 91 console := tests.NewTerminal(t, nil) 92 defer console.Cleanup() 93 vaultOperatorClient, factory, kubeClient, err := setupMocks(t, &console.Stdio) 94 createMockedVault("vault1", "myVaultNamespace", "one.ah.ah.ah", "Count", vaultOperatorClient, kubeClient) 95 createMockedVault("vault2", "myVaultNamespace", "two.ah.ah.ah", "Von-Count", vaultOperatorClient, kubeClient) 96 97 selector, err := kubevault.NewVaultSelector(factory.Options) 98 99 //Test interactive IO 100 donec := make(chan struct{}) 101 go func() { 102 defer close(donec) 103 console.ExpectString("Select Vault:") 104 console.SendLine("vault2") 105 console.ExpectEOF() 106 }() 107 108 vault, err := selector.GetVault("", "myVaultNamespace", true) 109 110 console.Close() 111 <-donec 112 113 // Dump the terminal's screen. 114 t.Logf(expect.StripTrailingEmptyLines(console.CurrentState())) 115 116 assert.Equal(t, "vault2", vault.Name) 117 assert.Equal(t, "myVaultNamespace", vault.Namespace) 118 assert.Equal(t, "http://two.ah.ah.ah", vault.URL) 119 assert.Equal(t, "vault2-auth-sa", vault.ServiceAccountName) 120 assert.NoError(t, err) 121 }