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  }