github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/pkg/scanners/cloudformation/parser/parameters_test.go (about) 1 package parser 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestParameters_UnmarshalJSON(t *testing.T) { 12 tests := []struct { 13 name string 14 source string 15 expected Parameters 16 wantErr bool 17 }{ 18 { 19 name: "original format", 20 source: `[ 21 "Key1=Value1", 22 "Key2=Value2" 23 ]`, 24 expected: map[string]any{ 25 "Key1": "Value1", 26 "Key2": "Value2", 27 }, 28 }, 29 { 30 name: "CloudFormation like format", 31 source: `[ 32 { 33 "ParameterKey": "Key1", 34 "ParameterValue": "Value1" 35 }, 36 { 37 "ParameterKey": "Key2", 38 "ParameterValue": "Value2" 39 } 40 ]`, 41 expected: map[string]any{ 42 "Key1": "Value1", 43 "Key2": "Value2", 44 }, 45 }, 46 { 47 name: "CloudFormation like format, with unknown fields", 48 source: `[ 49 { 50 "ParameterKey": "Key1", 51 "ParameterValue": "Value1" 52 }, 53 { 54 "ParameterKey": "Key2", 55 "ParameterValue": "Value2", 56 "UsePreviousValue": true 57 } 58 ]`, 59 wantErr: true, 60 }, 61 { 62 name: "CodePipeline like format", 63 source: `{ 64 "Parameters": { 65 "Key1": "Value1", 66 "Key2": "Value2" 67 } 68 }`, 69 expected: map[string]any{ 70 "Key1": "Value1", 71 "Key2": "Value2", 72 }, 73 }, 74 } 75 76 for _, tt := range tests { 77 t.Run(tt.name, func(t *testing.T) { 78 var params Parameters 79 80 err := json.Unmarshal([]byte(tt.source), ¶ms) 81 if tt.wantErr { 82 require.Error(t, err) 83 return 84 } 85 require.NoError(t, err) 86 assert.Equal(t, tt.expected, params) 87 }) 88 } 89 }