github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/kube/vault/commonhelpers_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  	cmdMocks "github.com/olli-ai/jx/v2/pkg/cmd/clients/mocks"
    11  	"github.com/olli-ai/jx/v2/pkg/cmd/opts"
    12  	"github.com/olli-ai/jx/v2/pkg/cmd/testhelpers"
    13  	gits_test "github.com/olli-ai/jx/v2/pkg/gits/mocks"
    14  	helm_test "github.com/olli-ai/jx/v2/pkg/helm/mocks"
    15  	kubevault "github.com/olli-ai/jx/v2/pkg/kube/vault"
    16  	. "github.com/petergtz/pegomock"
    17  	"github.com/stretchr/testify/assert"
    18  	"gopkg.in/AlecAivazis/survey.v1/terminal"
    19  	v1 "k8s.io/api/core/v1"
    20  	"k8s.io/api/extensions/v1beta1"
    21  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    22  
    23  	"k8s.io/client-go/kubernetes"
    24  )
    25  
    26  func setupMocks(t *testing.T, term *terminal.Stdio) (*fake.Clientset, *kubevault.VaultClientFactory, kubernetes.Interface, error) {
    27  	commonOpts := opts.NewCommonOptionsWithFactory(cmdMocks.NewMockFactory())
    28  	options := &commonOpts
    29  	if term != nil {
    30  		options.In, options.Out, options.Err = term.In, term.Out, term.Err
    31  	}
    32  	testhelpers.ConfigureTestOptions(options, gits_test.NewMockGitter(), helm_test.NewMockHelmer())
    33  	vaultOperatorClient := fake.NewSimpleClientset()
    34  	When(options.VaultOperatorClient()).ThenReturn(vaultOperatorClient, nil)
    35  	f, err := kubevault.NewInteractiveVaultClientFactory(options)
    36  	kubeClient, err := options.KubeClient()
    37  	assert.NoError(t, err)
    38  	return vaultOperatorClient, f, kubeClient, err
    39  }
    40  
    41  func createMockedVault(vaultName string, namespace string, vaultUrl string, jwt string,
    42  	vaultOperatorClient *fake.Clientset, kubeClient kubernetes.Interface) v1alpha1.Vault {
    43  
    44  	role := map[string]interface{}{"name": vaultName + "-auth-sa"}
    45  	auth := map[string]interface{}{"roles": []interface{}{role}}
    46  	v := v1alpha1.Vault{
    47  		ObjectMeta: metav1.ObjectMeta{
    48  			Name:      vaultName,
    49  			Namespace: namespace,
    50  		},
    51  		Spec: v1alpha1.VaultSpec{
    52  			ExternalConfig: map[string]interface{}{
    53  				"auth": []interface{}{auth},
    54  			},
    55  		},
    56  	}
    57  	secretName := vaultName + "-secret"
    58  	_, _ = vaultOperatorClient.VaultV1alpha1().Vaults(namespace).Create(&v)
    59  	serviceAccountName := vaultName + "-auth-sa"
    60  	_, _ = kubeClient.CoreV1().ServiceAccounts(namespace).Create(&v1.ServiceAccount{
    61  		ObjectMeta: metav1.ObjectMeta{Name: serviceAccountName},
    62  		Secrets:    []v1.ObjectReference{{Name: secretName}},
    63  	})
    64  	_, _ = kubeClient.CoreV1().Services(namespace).Create(&v1.Service{ObjectMeta: metav1.ObjectMeta{Name: vaultName}})
    65  	_, _ = kubeClient.ExtensionsV1beta1().Ingresses(namespace).Create(&v1beta1.Ingress{
    66  		ObjectMeta: metav1.ObjectMeta{Name: vaultName},
    67  		Spec:       v1beta1.IngressSpec{Rules: []v1beta1.IngressRule{{Host: vaultUrl}}},
    68  	})
    69  	_, _ = kubeClient.CoreV1().Secrets(namespace).Create(&v1.Secret{
    70  		ObjectMeta: metav1.ObjectMeta{
    71  			Name:        secretName,
    72  			Annotations: map[string]string{"kubernetes.io/service-account.name": serviceAccountName},
    73  		},
    74  		Data: map[string][]byte{"token": []byte(jwt)},
    75  	})
    76  	return v
    77  }