get.porter.sh/porter@v1.3.0/pkg/secrets/strategy_test.go (about) 1 package secrets 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestSet_Merge(t *testing.T) { 10 set := Set{ 11 "first": "first", 12 "second": "second", 13 "third": "third", 14 } 15 16 is := assert.New(t) 17 18 err := set.Merge(Set{}) 19 is.NoError(err) 20 is.Len(set, 3) 21 is.NotContains(set, "fourth") 22 23 err = set.Merge(Set{"fourth": "fourth"}) 24 is.NoError(err) 25 is.Len(set, 4) 26 is.Contains(set, "fourth") 27 28 err = set.Merge(Set{"second": "bis"}) 29 is.EqualError(err, `ambiguous value resolution: "second" is already present in base sets, cannot merge`) 30 } 31 32 func TestSource_UnmarshalRaw(t *testing.T) { 33 tests := []struct { 34 name string 35 raw map[string]interface{} 36 want Source 37 err string 38 }{ 39 { 40 name: "empty map", 41 raw: map[string]interface{}{}, 42 want: Source{}, 43 }, 44 { 45 name: "string", 46 raw: map[string]interface{}{ 47 "env": "SOME_VALUE", 48 }, 49 want: Source{ 50 Strategy: "env", 51 Hint: "SOME_VALUE", 52 }, 53 }, 54 { 55 name: "array value", 56 raw: map[string]interface{}{ 57 "value": []interface{}{1, 2, "3"}, 58 }, 59 want: Source{ 60 Strategy: "value", 61 Hint: "[1,2,\"3\"]", 62 }, 63 }, 64 { 65 name: "map value", 66 raw: map[string]interface{}{ 67 "value": map[string]interface{}{ 68 "abc": "def", 69 }, 70 }, 71 want: Source{ 72 Strategy: "value", 73 Hint: `{"abc":"def"}`, 74 }, 75 }, 76 { 77 name: "integer value", 78 raw: map[string]interface{}{ 79 "value": 10, 80 }, 81 want: Source{ 82 Strategy: "value", 83 Hint: "10", 84 }, 85 }, 86 { 87 name: "float value", 88 raw: map[string]interface{}{ 89 "value": 3.1415, 90 }, 91 want: Source{ 92 Strategy: "value", 93 Hint: "3.1415", 94 }, 95 }, 96 { 97 name: "boolean value", 98 raw: map[string]interface{}{ 99 "value": true, 100 }, 101 want: Source{ 102 Strategy: "value", 103 Hint: "true", 104 }, 105 }, 106 { 107 name: "null value", 108 raw: map[string]interface{}{ 109 "value": nil, 110 }, 111 want: Source{ 112 Strategy: "value", 113 Hint: "", 114 }, 115 }, 116 { 117 name: "multiple keys", 118 raw: map[string]interface{}{ 119 "env": "abc", 120 "value": "def", 121 }, 122 err: "multiple key/value pairs specified for source but only one may be defined", 123 }, 124 } 125 for _, tc := range tests { 126 t.Run(tc.name, func(t *testing.T) { 127 s := Source{} 128 err := s.UnmarshalRaw(tc.raw) 129 130 if tc.err != "" { 131 assert.EqualError(t, err, tc.err) 132 } else if err != nil { 133 t.Errorf("unexpected error: %v", err) 134 } 135 assert.Equal(t, tc.want, s) 136 }) 137 } 138 }