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), &params)
    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  }