github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/vault/vault_test.go (about) 1 // +build unit 2 3 package vault_test 4 5 import ( 6 "testing" 7 8 "github.com/banzaicloud/bank-vaults/operator/pkg/apis/vault/v1alpha1" 9 "github.com/banzaicloud/bank-vaults/operator/pkg/client/clientset/versioned/fake" 10 "github.com/jenkins-x/jx-logging/pkg/log" 11 "github.com/jenkins-x/jx/v2/pkg/kube/vault" 12 "github.com/stretchr/testify/assert" 13 "k8s.io/apimachinery/pkg/api/errors" 14 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 15 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 16 ) 17 18 func TestCreateOrUpdateVault_with_no_preexisting_CRD_creates_vault(t *testing.T) { 19 namespace := "test-ns" 20 vaultName := "foo-vault" 21 22 vaultCRD := &v1alpha1.Vault{ 23 TypeMeta: metav1.TypeMeta{ 24 Kind: "Vault", 25 APIVersion: "vault.banzaicloud.com/v1alpha1", 26 }, 27 ObjectMeta: metav1.ObjectMeta{ 28 Name: vaultName, 29 Namespace: namespace, 30 }, 31 Spec: v1alpha1.VaultSpec{ 32 Config: v1alpha1.VaultConfig{}, 33 ExternalConfig: v1alpha1.VaultExternalConfig{}, 34 }, 35 } 36 37 vaultOperatorClient := fake.NewSimpleClientset() 38 39 _, err := vaultOperatorClient.VaultV1alpha1().Vaults(namespace).Get(vaultName, v1.GetOptions{}) 40 assert.Error(t, err) 41 statusError := err.(*errors.StatusError) 42 assert.Equal(t, int32(404), statusError.Status().Code) 43 44 out := log.CaptureOutput(func() { 45 err = vault.CreateOrUpdateVault(vaultCRD, vaultOperatorClient, namespace) 46 assert.NoError(t, err) 47 }) 48 assert.Contains(t, out, "Vault 'foo-vault' in namespace 'test-ns' created") 49 50 persistedCRD, err := vaultOperatorClient.VaultV1alpha1().Vaults(namespace).Get(vaultName, v1.GetOptions{}) 51 assert.NoError(t, err) 52 assert.NotNil(t, persistedCRD) 53 assert.Equal(t, vaultCRD, persistedCRD) 54 } 55 56 func TestCreateOrUpdateVault_with_preexisting_CRD_updates_vault(t *testing.T) { 57 namespace := "test-ns" 58 vaultName := "foo-vault" 59 60 vaultCRD := &v1alpha1.Vault{ 61 TypeMeta: metav1.TypeMeta{ 62 Kind: "Vault", 63 APIVersion: "vault.banzaicloud.com/v1alpha1", 64 }, 65 ObjectMeta: metav1.ObjectMeta{ 66 Name: vaultName, 67 Namespace: namespace, 68 }, 69 Spec: v1alpha1.VaultSpec{}, 70 } 71 72 vaultOperatorClient := fake.NewSimpleClientset() 73 74 vaultCRD, err := vaultOperatorClient.VaultV1alpha1().Vaults(namespace).Create(vaultCRD) 75 assert.NoError(t, err) 76 assert.Equal(t, int32(0), vaultCRD.Spec.Size) 77 78 // use an update to Size for verification of the update 79 vaultCRD.Spec.Size = 1 80 out := log.CaptureOutput(func() { 81 err = vault.CreateOrUpdateVault(vaultCRD, vaultOperatorClient, namespace) 82 assert.NoError(t, err) 83 }) 84 assert.Contains(t, out, "Vault 'foo-vault' in namespace 'test-ns' updated") 85 86 persistedCRD, err := vaultOperatorClient.VaultV1alpha1().Vaults(namespace).Get(vaultName, v1.GetOptions{}) 87 assert.NoError(t, err) 88 assert.NotNil(t, persistedCRD) 89 assert.Equal(t, int32(1), vaultCRD.Spec.Size) 90 }