...

Source file src/sigs.k8s.io/kustomize/api/kv/kv_test.go

Documentation: sigs.k8s.io/kustomize/api/kv

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package kv
     5  
     6  import (
     7  	"reflect"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  	ldr "sigs.k8s.io/kustomize/api/pkg/loader"
    12  	valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
    13  	"sigs.k8s.io/kustomize/api/types"
    14  	"sigs.k8s.io/kustomize/kyaml/filesys"
    15  )
    16  
    17  func makeKvLoader(fSys filesys.FileSystem) *loader {
    18  	return &loader{
    19  		ldr:       ldr.NewFileLoaderAtRoot(fSys),
    20  		validator: valtest_test.MakeFakeValidator()}
    21  }
    22  
    23  func TestKeyValuesFromLines(t *testing.T) {
    24  	tests := []struct {
    25  		desc          string
    26  		content       string
    27  		expectedPairs []types.Pair
    28  		expectedErr   bool
    29  	}{
    30  		{
    31  			desc: "valid kv content parse",
    32  			content: `
    33  		k1=v1
    34  		k2=v2
    35  		`,
    36  			expectedPairs: []types.Pair{
    37  				{Key: "k1", Value: "v1"},
    38  				{Key: "k2", Value: "v2"},
    39  			},
    40  			expectedErr: false,
    41  		},
    42  		{
    43  			desc: "content with comments",
    44  			content: `
    45  		k1=v1
    46  		#k2=v2
    47  		`,
    48  			expectedPairs: []types.Pair{
    49  				{Key: "k1", Value: "v1"},
    50  			},
    51  			expectedErr: false,
    52  		},
    53  		{
    54  			desc: "no value with equals",
    55  			content: `
    56  		k1=
    57  		`,
    58  			expectedPairs: []types.Pair{
    59  				{Key: "k1", Value: ""},
    60  			},
    61  			expectedErr: false,
    62  		},
    63  		{
    64  			desc: "no value without equals",
    65  			content: `
    66  		k1
    67  		`,
    68  			expectedPairs: []types.Pair{
    69  				{Key: "k1", Value: ""},
    70  			},
    71  			expectedErr: false,
    72  		},
    73  		{
    74  			desc:          "invalid UTF-8 content",
    75  			content:       "Invalid UTF8 Content: \x80\x81",
    76  			expectedPairs: nil,
    77  			expectedErr:   true,
    78  		},
    79  	}
    80  
    81  	kvl := makeKvLoader(filesys.MakeFsInMemory())
    82  	for _, test := range tests {
    83  		pairs, err := kvl.keyValuesFromLines([]byte(test.content))
    84  		if test.expectedErr && err == nil {
    85  			t.Fatalf("%s should return error", test.desc)
    86  		}
    87  		if !reflect.DeepEqual(pairs, test.expectedPairs) {
    88  			t.Errorf("%s should succeed, got:%v exptected:%v", test.desc, pairs, test.expectedPairs)
    89  		}
    90  	}
    91  }
    92  
    93  func TestKeyValuesFromFileSources(t *testing.T) {
    94  	tests := []struct {
    95  		description string
    96  		sources     []string
    97  		expected    []types.Pair
    98  	}{
    99  		{
   100  			description: "create kvs from file sources",
   101  			sources:     []string{"files/app-init.ini"},
   102  			expected: []types.Pair{
   103  				{
   104  					Key:   "app-init.ini",
   105  					Value: "FOO=bar",
   106  				},
   107  			},
   108  		},
   109  	}
   110  
   111  	fSys := filesys.MakeFsInMemory()
   112  	err := fSys.WriteFile("/files/app-init.ini", []byte("FOO=bar"))
   113  	require.NoError(t, err)
   114  	kvl := makeKvLoader(fSys)
   115  	for _, tc := range tests {
   116  		kvs, err := kvl.keyValuesFromFileSources(tc.sources)
   117  		if err != nil {
   118  			t.Fatalf("unexpected error: %v", err)
   119  		}
   120  		if !reflect.DeepEqual(kvs, tc.expected) {
   121  			t.Fatalf("in testcase: %q updated:\n%#v\ndoesn't match expected:\n%#v\n", tc.description, kvs, tc.expected)
   122  		}
   123  	}
   124  }
   125  

View as plain text