github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/render/helm/values_test.go (about) 1 package helm 2 3 import ( 4 "testing" 5 6 "github.com/emosbaugh/yaml" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestGetAllKeys(t *testing.T) { 11 t.Run("get all keys", func(t *testing.T) { 12 req := require.New(t) 13 14 req.Equal([]interface{}(nil), getAllKeys(yaml.MapSlice{})) 15 16 m1 := yaml.MapSlice{ 17 {Key: "a", Value: 5}, 18 } 19 m2 := yaml.MapSlice{ 20 {Key: "b", Value: true}, 21 } 22 m3 := yaml.MapSlice{ 23 {Key: "a", Value: "value"}, 24 {Key: "b", Value: false}, 25 {Key: "c", Value: nil}, 26 } 27 req.Equal( 28 []interface{}{"a", "b", "c"}, 29 getAllKeys(m1, m2, m3), 30 ) 31 }) 32 } 33 34 func TestMergeHelmValues(t *testing.T) { 35 tests := []struct { 36 name string 37 base string 38 user string 39 vendor string 40 expected string 41 }{ 42 { 43 name: "merge, vendor values only", 44 base: "", 45 user: "", 46 vendor: "#comment line\nkey1: 1 # this is a comment\nkey2: a\n", 47 expected: "#comment line\nkey1: 1 # this is a comment\nkey2: a\n", 48 }, 49 50 { 51 name: "merge, vendor and user values", 52 base: `key1: 1 53 key2: 54 - item1 55 deep_key: 56 level1: 57 level2: 58 myvalue: 3 59 key3: a`, 60 user: `key1: 1 61 key2: 62 - item1 63 - item2_added_by_user 64 deep_key: 65 level1: 66 level2: 67 myvalue: modified-by-user-5 68 key3: a`, 69 vendor: `key1: 1 70 key2: 71 - item1 72 deep_key: 73 level1: 74 newkey: added-by-vendor 75 level2: 76 myvalue: 5 77 key3: modified-by-vendor`, 78 expected: `key1: 1 79 key2: 80 - item1 81 - item2_added_by_user 82 deep_key: 83 level1: 84 newkey: added-by-vendor 85 level2: 86 myvalue: modified-by-user-5 87 key3: modified-by-vendor 88 `, 89 }, 90 91 { 92 name: "comments", 93 base: "", 94 user: `# user comment 95 key3: 4 96 # another user comment`, 97 vendor: "# comment prefix\nkey1: 1\n # indented comment\n\n# empty line\nnested_key:\n # nested comment line 1\n # nested comment line 2\n key2: 2 # inline comment\n # nested comment line 3\nkey3: 3\n# comment suffix\n", 98 expected: "# comment prefix\nkey1: 1\n # indented comment\n\n# empty line\nnested_key:\n # nested comment line 1\n # nested comment line 2\n key2: 2\n # inline comment\n # nested comment line 3\nkey3: 4\n# comment suffix\n", 99 }, 100 { 101 name: "mysql", 102 base: "", 103 user: "mysqlPassword: my-super-secret-password", 104 vendor: `## mysql image version 105 ## ref: https://hub.docker.com/r/library/mysql/tags/ 106 ## 107 image: "mysql" 108 imageTag: "5.7.14" 109 110 ## Specify password for root user 111 ## 112 ## Default: random 10 character string 113 # mysqlRootPassword: testing 114 115 ## Create a database user 116 ## 117 # mysqlUser: 118 ## Default: random 10 character string 119 # mysqlPassword: 120 121 ## Allow unauthenticated access, uncomment to enable 122 ## 123 # mysqlAllowEmptyPassword: true 124 125 ## Create a database 126 ## 127 # mysqlDatabase: 128 129 ## Specify an imagePullPolicy (Required) 130 ## It's recommended to change this to 'Always' if the image tag is 'latest' 131 ## ref: http://kubernetes.io/docs/user-guide/images/#updating-images 132 ## 133 imagePullPolicy: IfNotPresent`, 134 expected: `## mysql image version 135 ## ref: https://hub.docker.com/r/library/mysql/tags/ 136 ## 137 image: mysql 138 imageTag: 5.7.14 139 140 ## Specify password for root user 141 ## 142 ## Default: random 10 character string 143 # mysqlRootPassword: testing 144 145 ## Create a database user 146 ## 147 # mysqlUser: 148 ## Default: random 10 character string 149 # mysqlPassword: 150 151 ## Allow unauthenticated access, uncomment to enable 152 ## 153 # mysqlAllowEmptyPassword: true 154 155 ## Create a database 156 ## 157 # mysqlDatabase: 158 159 ## Specify an imagePullPolicy (Required) 160 ## It's recommended to change this to 'Always' if the image tag is 'latest' 161 ## ref: http://kubernetes.io/docs/user-guide/images/#updating-images 162 ## 163 imagePullPolicy: IfNotPresent 164 mysqlPassword: my-super-secret-password 165 `, 166 }, 167 } 168 169 for _, test := range tests { 170 t.Run(test.name, func(t *testing.T) { 171 req := require.New(t) 172 merged, err := MergeHelmValues(test.base, test.user, test.vendor, true) 173 req.NoError(err) 174 req.Equal(test.expected, merged) 175 }) 176 } 177 }