github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/creds/kubernetes/kubernetes_test.go (about) 1 package kubernetes_test 2 3 import ( 4 "context" 5 6 "code.cloudfoundry.org/lager/lagertest" 7 "github.com/pf-qiu/concourse/v6/atc" 8 "github.com/pf-qiu/concourse/v6/atc/creds" 9 "github.com/pf-qiu/concourse/v6/atc/creds/kubernetes" 10 "github.com/pf-qiu/concourse/v6/vars" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/ginkgo/extensions/table" 13 . "github.com/onsi/gomega" 14 v1 "k8s.io/api/core/v1" 15 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 16 "k8s.io/client-go/kubernetes/fake" 17 ) 18 19 type Example struct { 20 Setup func() 21 22 Template interface{} 23 24 Result interface{} 25 Err error 26 } 27 28 func (example Example) Assert(vs vars.Variables) { 29 if example.Setup != nil { 30 example.Setup() 31 } 32 33 var res interface{} 34 var err error 35 36 switch t := example.Template.(type) { 37 case string: 38 res, err = creds.NewString(vs, t).Evaluate() 39 case atc.Source: 40 res, err = creds.NewSource(vs, t).Evaluate() 41 case atc.Params: 42 res, err = creds.NewParams(vs, t).Evaluate() 43 } 44 45 if example.Err != nil { 46 Expect(err.Error()).To(ContainSubstring(example.Err.Error())) 47 } else { 48 Expect(res).To(Equal(example.Result)) 49 } 50 } 51 52 var _ = Describe("Kubernetes", func() { 53 var fakeClientset *fake.Clientset 54 var vs vars.Variables 55 56 var secretName = "some-secret-name" 57 58 BeforeEach(func() { 59 fakeClientset = fake.NewSimpleClientset() 60 61 factory := kubernetes.NewKubernetesFactory( 62 lagertest.NewTestLogger("test"), 63 fakeClientset, 64 "prefix-", 65 ) 66 67 vs = creds.NewVariables(factory.NewSecrets(), "some-team", "some-pipeline", false) 68 }) 69 70 DescribeTable("var lookup", func(ex Example) { 71 ex.Assert(vs) 72 }, 73 74 Entry("bogus vars", Example{ 75 Template: "((bogus)) ((vars))", 76 Err: vars.UndefinedVarsError{Vars: []string{"bogus", "vars"}}, 77 }), 78 79 Entry("team-scoped vars with a value field", Example{ 80 Setup: func() { 81 fakeClientset.CoreV1().Secrets("prefix-some-team").Create(context.TODO(), &v1.Secret{ 82 ObjectMeta: metav1.ObjectMeta{ 83 Name: secretName, 84 }, 85 Data: map[string][]byte{ 86 "value": []byte("some-value"), 87 }, 88 }, metav1.CreateOptions{}) 89 }, 90 91 Template: "((" + secretName + "))", 92 Result: "some-value", 93 }), 94 95 Entry("pipeline-scoped vars with a value field", Example{ 96 Setup: func() { 97 fakeClientset.CoreV1().Secrets("prefix-some-team").Create(context.TODO(), &v1.Secret{ 98 ObjectMeta: metav1.ObjectMeta{ 99 Name: "some-pipeline." + secretName, 100 }, 101 Data: map[string][]byte{ 102 "value": []byte("some-value"), 103 }, 104 }, metav1.CreateOptions{}) 105 }, 106 107 Template: "((" + secretName + "))", 108 Result: "some-value", 109 }), 110 111 Entry("pipeline-scoped vars with arbitrary fields", Example{ 112 Setup: func() { 113 fakeClientset.CoreV1().Secrets("prefix-some-team").Create(context.TODO(), &v1.Secret{ 114 ObjectMeta: metav1.ObjectMeta{ 115 Name: "some-pipeline." + secretName, 116 }, 117 Data: map[string][]byte{ 118 "some-field": []byte("some-field-value"), 119 }, 120 }, metav1.CreateOptions{}) 121 }, 122 123 Template: atc.Source{ 124 "some-source": "((" + secretName + "))", 125 }, 126 Result: atc.Source{ 127 "some-source": map[string]interface{}{ 128 "some-field": "some-field-value", 129 }, 130 }, 131 }), 132 133 Entry("pipeline-scoped vars with arbitrary fields accessed via template", Example{ 134 Setup: func() { 135 fakeClientset.CoreV1().Secrets("prefix-some-team").Create(context.TODO(), &v1.Secret{ 136 ObjectMeta: metav1.ObjectMeta{ 137 Name: "some-pipeline." + secretName, 138 }, 139 Data: map[string][]byte{ 140 "some-field": []byte("some-field-value"), 141 }, 142 }, metav1.CreateOptions{}) 143 }, 144 145 Template: "((" + secretName + ".some-field))", 146 Result: "some-field-value", 147 }), 148 ) 149 })