...

Source file src/sigs.k8s.io/kustomize/api/internal/generators/secret_test.go

Documentation: sigs.k8s.io/kustomize/api/internal/generators

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package generators_test
     5  
     6  import (
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	. "sigs.k8s.io/kustomize/api/internal/generators"
    12  	"sigs.k8s.io/kustomize/api/kv"
    13  	"sigs.k8s.io/kustomize/api/pkg/loader"
    14  	valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
    15  	"sigs.k8s.io/kustomize/api/types"
    16  	"sigs.k8s.io/kustomize/kyaml/filesys"
    17  )
    18  
    19  func TestMakeSecret(t *testing.T) {
    20  	type expected struct {
    21  		out    string
    22  		errMsg string
    23  	}
    24  
    25  	testCases := map[string]struct {
    26  		args types.SecretArgs
    27  		exp  expected
    28  	}{
    29  		"construct secret from env": {
    30  			args: types.SecretArgs{
    31  				GeneratorArgs: types.GeneratorArgs{
    32  					Name: "envSecret",
    33  					KvPairSources: types.KvPairSources{
    34  						EnvSources: []string{
    35  							filepath.Join("secret", "app.env"),
    36  						},
    37  					},
    38  				},
    39  			},
    40  			exp: expected{
    41  				out: `apiVersion: v1
    42  kind: Secret
    43  metadata:
    44    name: envSecret
    45  type: Opaque
    46  data:
    47    DB_PASSWORD: cXdlcnR5
    48    DB_USERNAME: YWRtaW4=
    49  `,
    50  			},
    51  		},
    52  		"construct secret from text file": {
    53  			args: types.SecretArgs{
    54  				GeneratorArgs: types.GeneratorArgs{
    55  					Name: "fileSecret1",
    56  					KvPairSources: types.KvPairSources{
    57  						FileSources: []string{
    58  							filepath.Join("secret", "app-init.ini"),
    59  						},
    60  					},
    61  				},
    62  			},
    63  			exp: expected{
    64  				out: `apiVersion: v1
    65  kind: Secret
    66  metadata:
    67    name: fileSecret1
    68  type: Opaque
    69  data:
    70    app-init.ini: Rk9PPWJhcgpCQVI9YmF6Cg==
    71  `,
    72  			},
    73  		},
    74  		"construct secret from text and binary file": {
    75  			args: types.SecretArgs{
    76  				GeneratorArgs: types.GeneratorArgs{
    77  					Name: "fileSecret2",
    78  					KvPairSources: types.KvPairSources{
    79  						FileSources: []string{
    80  							filepath.Join("secret", "app-init.ini"),
    81  							filepath.Join("secret", "app.bin"),
    82  						},
    83  					},
    84  				},
    85  			},
    86  			exp: expected{
    87  				out: `apiVersion: v1
    88  kind: Secret
    89  metadata:
    90    name: fileSecret2
    91  type: Opaque
    92  data:
    93    app-init.ini: Rk9PPWJhcgpCQVI9YmF6Cg==
    94    app.bin: //0=
    95  `,
    96  			},
    97  		},
    98  		"construct secret from literal": {
    99  			args: types.SecretArgs{
   100  				GeneratorArgs: types.GeneratorArgs{
   101  					Name: "literalSecret1",
   102  					KvPairSources: types.KvPairSources{
   103  						LiteralSources: []string{"a=x", "b=y", "c=\"Hello World\"", "d='true'"},
   104  					},
   105  					Options: &types.GeneratorOptions{
   106  						Labels: map[string]string{
   107  							"foo": "bar",
   108  						},
   109  					},
   110  				},
   111  			},
   112  			exp: expected{
   113  				out: `apiVersion: v1
   114  kind: Secret
   115  metadata:
   116    name: literalSecret1
   117    labels:
   118      foo: 'bar'
   119  type: Opaque
   120  data:
   121    a: eA==
   122    b: eQ==
   123    c: SGVsbG8gV29ybGQ=
   124    d: dHJ1ZQ==
   125  `,
   126  			},
   127  		},
   128  		"construct secret with type": {
   129  			args: types.SecretArgs{
   130  				GeneratorArgs: types.GeneratorArgs{
   131  					Name: "literalSecret1",
   132  					KvPairSources: types.KvPairSources{
   133  						LiteralSources: []string{"a=x"},
   134  					},
   135  					Options: &types.GeneratorOptions{
   136  						Labels: map[string]string{
   137  							"foo": "bar",
   138  						},
   139  					},
   140  				},
   141  				Type: "foobar",
   142  			},
   143  			exp: expected{
   144  				out: `apiVersion: v1
   145  kind: Secret
   146  metadata:
   147    name: literalSecret1
   148    labels:
   149      foo: 'bar'
   150  type: foobar
   151  data:
   152    a: eA==
   153  `,
   154  			},
   155  		},
   156  		"construct secret from literal with GeneratorOptions in SecretArgs": {
   157  			args: types.SecretArgs{
   158  				GeneratorArgs: types.GeneratorArgs{
   159  					Name: "literalSecret2",
   160  					KvPairSources: types.KvPairSources{
   161  						LiteralSources: []string{"a=x", "b=y", "c=\"Hello World\"", "d='true'"},
   162  					},
   163  					Options: &types.GeneratorOptions{
   164  						Labels: map[string]string{
   165  							"veggie": "celery",
   166  							"dog":    "beagle",
   167  							"cat":    "annoying",
   168  						},
   169  						Annotations: map[string]string{
   170  							"river": "Missouri",
   171  							"city":  "Iowa City",
   172  						},
   173  						Immutable: true,
   174  					},
   175  				},
   176  			},
   177  			exp: expected{
   178  				out: `apiVersion: v1
   179  kind: Secret
   180  metadata:
   181    name: literalSecret2
   182    labels:
   183      cat: 'annoying'
   184      dog: 'beagle'
   185      veggie: 'celery'
   186    annotations:
   187      city: 'Iowa City'
   188      river: 'Missouri'
   189  type: Opaque
   190  data:
   191    a: eA==
   192    b: eQ==
   193    c: SGVsbG8gV29ybGQ=
   194    d: dHJ1ZQ==
   195  immutable: true
   196  `,
   197  			},
   198  		},
   199  	}
   200  	fSys := filesys.MakeFsInMemory()
   201  	fSys.WriteFile(
   202  		filesys.RootedPath("secret", "app.env"),
   203  		[]byte("DB_USERNAME=admin\nDB_PASSWORD=qwerty\n"))
   204  	fSys.WriteFile(
   205  		filesys.RootedPath("secret", "app-init.ini"),
   206  		[]byte("FOO=bar\nBAR=baz\n"))
   207  	fSys.WriteFile(
   208  		filesys.RootedPath("secret", "app.bin"),
   209  		[]byte{0xff, 0xfd})
   210  	kvLdr := kv.NewLoader(
   211  		loader.NewFileLoaderAtRoot(fSys),
   212  		valtest_test.MakeFakeValidator())
   213  
   214  	for n := range testCases {
   215  		tc := testCases[n]
   216  		t.Run(n, func(t *testing.T) {
   217  			rn, err := MakeSecret(kvLdr, &tc.args)
   218  			if err != nil {
   219  				if !assert.EqualError(t, err, tc.exp.errMsg) {
   220  					t.FailNow()
   221  				}
   222  				return
   223  			}
   224  			if tc.exp.errMsg != "" {
   225  				t.Fatalf("%s: should return error '%s'", n, tc.exp.errMsg)
   226  			}
   227  			output := rn.MustString()
   228  			if !assert.Equal(t, tc.exp.out, output) {
   229  				t.FailNow()
   230  			}
   231  		})
   232  	}
   233  }
   234  

View as plain text