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  }