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  }