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  }