github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/pkg/scanners/cloudformation/parser/fn_select_test.go (about) 1 package parser 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func Test_resolve_select_value(t *testing.T) { 11 12 source := `--- 13 Parameters: 14 EngineIndex: 15 Type: Integer 16 Default: 1 17 Resources: 18 ElasticacheCluster: 19 Type: 'AWS::ElastiCache::CacheCluster' 20 Properties: 21 Engine: !Select [ !Ref EngineIndex, [memcached, redis ]] 22 CacheNodeType: cache.t2.micro 23 NumCacheNodes: '1' 24 ` 25 ctx := createTestFileContext(t, source) 26 require.NotNil(t, ctx) 27 28 testRes := ctx.GetResourceByLogicalID("ElasticacheCluster") 29 assert.NotNil(t, testRes) 30 31 engineProp := testRes.GetProperty("Engine") 32 require.True(t, engineProp.IsNotNil()) 33 require.True(t, engineProp.IsString()) 34 35 require.Equal(t, "redis", engineProp.AsString()) 36 } 37 38 func Test_SelectPseudoListParam(t *testing.T) { 39 src := `--- 40 Resources: 41 myASGrpOne: 42 Type: AWS::AutoScaling::AutoScalingGroup 43 Version: "2009-05-15" 44 Properties: 45 AvailabilityZones: 46 - "us-east-1a" 47 LaunchConfigurationName: 48 Ref: MyLaunchConfiguration 49 MinSize: "0" 50 MaxSize: "0" 51 NotificationConfigurations: 52 - TopicARN: 53 Fn::Select: 54 - "1" 55 - Ref: AWS::NotificationARNs 56 NotificationTypes: 57 - autoscaling:EC2_INSTANCE_LAUNCH 58 - autoscaling:EC2_INSTANCE_LAUNCH_ERROR 59 60 ` 61 62 ctx := createTestFileContext(t, src) 63 require.NotNil(t, ctx) 64 65 resource := ctx.GetResourceByLogicalID("myASGrpOne") 66 require.NotNil(t, resource) 67 68 notification := resource.GetProperty("NotificationConfigurations") 69 require.True(t, notification.IsNotNil()) 70 require.True(t, notification.IsList()) 71 first := notification.AsList()[0] 72 require.True(t, first.IsMap()) 73 topic, ok := first.AsMap()["TopicARN"] 74 require.True(t, ok) 75 require.Equal(t, "notification::arn::2", topic.AsString()) 76 77 }