@@ -4,8 +4,11 @@ import (
44 "encoding/json"
55 "fmt"
66 "io/ioutil"
7+ "testing"
78
89 "cdap.io/cdap-operator/api/v1alpha1"
10+ "github.com/google/go-cmp/cmp"
11+ "github.com/google/go-cmp/cmp/cmpopts"
912 "github.com/nsf/jsondiff"
1013 . "github.com/onsi/ginkgo"
1114 . "github.com/onsi/gomega"
@@ -254,3 +257,103 @@ var _ = Describe("Controller Suite", func() {
254257 })
255258 })
256259})
260+
261+ func TestMergeEnvVars (t * testing.T ) {
262+ testCases := []struct {
263+ description string
264+ baseEnvVars []corev1.EnvVar
265+ overwriteEnvVars []corev1.EnvVar
266+ wantEnv []corev1.EnvVar
267+ wantErr error
268+ }{
269+ {
270+ description : "Empty slices returns no env vars" ,
271+ baseEnvVars : []corev1.EnvVar {},
272+ overwriteEnvVars : []corev1.EnvVar {},
273+ wantEnv : []corev1.EnvVar {},
274+ },
275+ {
276+ description : "Only one env var in base slice returns one env var" ,
277+ baseEnvVars : []corev1.EnvVar {corev1.EnvVar {Name : "test" , Value : "test-value" }},
278+ overwriteEnvVars : []corev1.EnvVar {},
279+ wantEnv : []corev1.EnvVar {corev1.EnvVar {Name : "test" , Value : "test-value" }},
280+ },
281+ {
282+ description : "Only one env var in overwrite slice returns one env var" ,
283+ baseEnvVars : []corev1.EnvVar {},
284+ overwriteEnvVars : []corev1.EnvVar {corev1.EnvVar {Name : "test" , Value : "test-value" }},
285+ wantEnv : []corev1.EnvVar {corev1.EnvVar {Name : "test" , Value : "test-value" }},
286+ },
287+ {
288+ description : "One different env var in each slice returns two env var" ,
289+ baseEnvVars : []corev1.EnvVar {corev1.EnvVar {Name : "test-a" , Value : "test-value-a" }},
290+ overwriteEnvVars : []corev1.EnvVar {corev1.EnvVar {Name : "test-b" , Value : "test-value-b" }},
291+ wantEnv : []corev1.EnvVar {
292+ corev1.EnvVar {Name : "test-a" , Value : "test-value-a" },
293+ corev1.EnvVar {Name : "test-b" , Value : "test-value-b" },
294+ },
295+ },
296+ {
297+ description : "Env var in overwrite slice overwrites expected env var from base slice" ,
298+ baseEnvVars : []corev1.EnvVar {
299+ corev1.EnvVar {Name : "test-a" , Value : "test-value-a" },
300+ corev1.EnvVar {Name : "test-b" , Value : "test-value-b" },
301+ },
302+ overwriteEnvVars : []corev1.EnvVar {
303+ corev1.EnvVar {Name : "test-b" , Value : "test-value-d" },
304+ corev1.EnvVar {Name : "test-c" , Value : "test-value-c" },
305+ },
306+ wantEnv : []corev1.EnvVar {
307+ corev1.EnvVar {Name : "test-a" , Value : "test-value-a" },
308+ corev1.EnvVar {Name : "test-b" , Value : "test-value-d" },
309+ corev1.EnvVar {Name : "test-c" , Value : "test-value-c" },
310+ },
311+ },
312+ {
313+ description : "Multiple env vars in both slices returns env vars in sorted order" ,
314+ baseEnvVars : []corev1.EnvVar {
315+ corev1.EnvVar {Name : "a" , Value : "test-value-a" },
316+ corev1.EnvVar {Name : "c" , Value : "test-value-c" },
317+ },
318+ overwriteEnvVars : []corev1.EnvVar {
319+ corev1.EnvVar {Name : "d" , Value : "test-value-d" },
320+ corev1.EnvVar {Name : "b" , Value : "test-value-b" },
321+ },
322+ wantEnv : []corev1.EnvVar {
323+ corev1.EnvVar {Name : "a" , Value : "test-value-a" },
324+ corev1.EnvVar {Name : "b" , Value : "test-value-b" },
325+ corev1.EnvVar {Name : "c" , Value : "test-value-c" },
326+ corev1.EnvVar {Name : "d" , Value : "test-value-d" },
327+ },
328+ },
329+ {
330+ description : "Duplicate env var keys in base slice returns error" ,
331+ baseEnvVars : []corev1.EnvVar {
332+ corev1.EnvVar {Name : "test-a" , Value : "test-value-a" },
333+ corev1.EnvVar {Name : "test-a" , Value : "test-value-b" },
334+ },
335+ overwriteEnvVars : []corev1.EnvVar {},
336+ wantErr : cmpopts .AnyError ,
337+ },
338+ {
339+ description : "Duplicate env var keys in overwrite slice returns error" ,
340+ baseEnvVars : []corev1.EnvVar {},
341+ overwriteEnvVars : []corev1.EnvVar {
342+ corev1.EnvVar {Name : "test-a" , Value : "test-value-a" },
343+ corev1.EnvVar {Name : "test-a" , Value : "test-value-b" },
344+ },
345+ wantErr : cmpopts .AnyError ,
346+ },
347+ }
348+ for _ , testCase := range testCases {
349+ t .Run (testCase .description , func (t * testing.T ) {
350+ gotEnv , err := mergeEnvVars (testCase .baseEnvVars , testCase .overwriteEnvVars )
351+ if got , want := gotEnv , testCase .wantEnv ; ! cmp .Equal (got , want ) {
352+ t .Errorf ("mergeEnvVars(%+v, %+v): unexpected env slice: got %+v, want %+v" , testCase .baseEnvVars , testCase .overwriteEnvVars , got , want )
353+ }
354+ if got , want := err , testCase .wantErr ; ! cmp .Equal (got , want , cmpopts .EquateErrors ()) {
355+ t .Errorf ("mergeEnvVars(%+v, %+v): unexpected env slice: got %v, want %v" , testCase .baseEnvVars , testCase .overwriteEnvVars , got , want )
356+ }
357+ })
358+ }
359+ }
0 commit comments