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  })