github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/teams_test.go (about) 1 // +build unit 2 3 package kube 4 5 import ( 6 "testing" 7 8 "github.com/pkg/errors" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "k8s.io/client-go/kubernetes" 12 "k8s.io/client-go/kubernetes/scheme" 13 14 kube_mocks "k8s.io/client-go/kubernetes/fake" 15 ) 16 17 func TestGetAdminNamespace(t *testing.T) { 18 t.Parallel() 19 namespace := `apiVersion: v1 20 kind: Namespace 21 metadata: 22 annotations: 23 jenkins-x.io/created-by: Jenkins X 24 jenkins-x.io/admin-namespace: admin-namespace 25 labels: 26 env: dev 27 team: myteam 28 name: myteam 29 status: 30 phase: Active` 31 32 client, err := createMockClient(namespace) 33 require.NoError(t, err, "failed to create mock client") 34 adminNamespace, err := GetAdminNamespace(client, "myteam") 35 assert.NoError(t, err, "GetAdminNamespace should not error") 36 assert.Equal(t, "admin-namespace", adminNamespace) 37 } 38 39 func TestGetAdminNamespaceDefaulted(t *testing.T) { 40 t.Parallel() 41 namespace := `apiVersion: v1 42 kind: Namespace 43 metadata: 44 annotations: 45 jenkins-x.io/created-by: Jenkins X 46 labels: 47 env: dev 48 team: myteam 49 name: myteam 50 status: 51 phase: Active` 52 53 client, err := createMockClient(namespace) 54 require.NoError(t, err, "failed to create mock client") 55 adminNamespace, err := GetAdminNamespace(client, "myteam") 56 assert.NoError(t, err, "error occurred calling GetAdminNamespace") 57 assert.Equal(t, "myteam", adminNamespace) 58 } 59 60 // TestGetAdminNamespaceOnNonTeam tests that when there are no annotations the code does not blow up. 61 // there should always be one annotation "jenkins-x.io/created-by: Jenkins X" for a team but better to not blow up 62 func TestGetAdminNamespaceOnNonTeam(t *testing.T) { 63 64 t.Parallel() 65 namespace := `apiVersion: v1 66 kind: Namespace 67 metadata: 68 name: myteam 69 status: 70 phase: Active` 71 72 client, err := createMockClient(namespace) 73 require.NoError(t, err, "failed to create mock client") 74 adminNamespace, err := GetAdminNamespace(client, "myteam") 75 assert.NoError(t, err, "error occurred calling GetAdminNamespace") 76 assert.Equal(t, "myteam", adminNamespace) 77 } 78 79 func TestSetAdminNamespace(t *testing.T) { 80 t.Parallel() 81 namespace := `apiVersion: v1 82 kind: Namespace 83 metadata: 84 annotations: 85 jenkins-x.io/created-by: Jenkins X 86 labels: 87 env: dev 88 team: myteam 89 name: myteam 90 status: 91 phase: Active` 92 client, err := createMockClient(namespace) 93 require.NoError(t, err, "failed to create mock client") 94 err = SetAdminNamespace(client, "myteam", "my-admin-namespace") 95 assert.NoError(t, err, "error occurred calling SetAdminNamespace") 96 adminNs, err := GetAdminNamespace(client, "myteam") 97 assert.NoError(t, err, "error occurred calling GetAdminNamespace") 98 assert.Equal(t, "my-admin-namespace", adminNs) 99 } 100 101 func createMockClient(objDef string) (kubernetes.Interface, error) { 102 decode := scheme.Codecs.UniversalDeserializer().Decode 103 obj, _, err := decode([]byte(objDef), nil, nil) 104 if err != nil { 105 return nil, errors.Wrapf(err, "could not decode data") 106 } 107 108 mockKubeClient := kube_mocks.NewSimpleClientset(obj) 109 return mockKubeClient, nil 110 }