github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/ec2/subnet_test.go (about)

     1  package ec2
     2  
     3  import (
     4  	"testing"
     5  
     6  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
     7  
     8  	"github.com/khulnasoft-lab/defsec/pkg/providers/aws/ec2"
     9  
    10  	"github.com/khulnasoft-lab/defsec/internal/adapters/terraform/tftestutil"
    11  
    12  	"github.com/khulnasoft-lab/defsec/test/testutil"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func Test_adaptSubnet(t *testing.T) {
    18  	tests := []struct {
    19  		name      string
    20  		terraform string
    21  		expected  ec2.Subnet
    22  	}{
    23  		{
    24  			name: "map public ip on launch is true",
    25  			terraform: `
    26  			resource "aws_subnet" "example" {
    27  				vpc_id                  = "vpc-123456"
    28  				map_public_ip_on_launch = true
    29  			}
    30  `,
    31  			expected: ec2.Subnet{
    32  				Metadata:            defsecTypes.NewTestMetadata(),
    33  				MapPublicIpOnLaunch: defsecTypes.Bool(true, defsecTypes.NewTestMetadata()),
    34  			},
    35  		},
    36  		{
    37  			name: "map public ip on launch is false",
    38  			terraform: `
    39  			resource "aws_subnet" "example" {
    40  				vpc_id                  = "vpc-123456"
    41  				map_public_ip_on_launch = false
    42  			}
    43  `,
    44  			expected: ec2.Subnet{
    45  				Metadata:            defsecTypes.NewTestMetadata(),
    46  				MapPublicIpOnLaunch: defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    47  			},
    48  		},
    49  		{
    50  			name: "defaults",
    51  			terraform: `
    52  			resource "aws_subnet" "example" {
    53  			    vpc_id = "vpc-123456"
    54  			}
    55  `,
    56  			expected: ec2.Subnet{
    57  				Metadata:            defsecTypes.NewTestMetadata(),
    58  				MapPublicIpOnLaunch: defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    59  			},
    60  		},
    61  	}
    62  
    63  	for _, test := range tests {
    64  		t.Run(test.name, func(t *testing.T) {
    65  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    66  			adapted := adaptSubnet(modules.GetBlocks()[0], modules[0])
    67  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    68  		})
    69  	}
    70  }
    71  
    72  func TestSubnetLines(t *testing.T) {
    73  	src := `
    74  	resource "aws_subnet" "example" {
    75  	    vpc_id                  = "vpc-123456"
    76  	    map_public_ip_on_launch = true
    77  	}`
    78  
    79  	modules := tftestutil.CreateModulesFromSource(t, src, ".tf")
    80  	adapted := Adapt(modules)
    81  
    82  	require.Len(t, adapted.Subnets, 1)
    83  	subnet := adapted.Subnets[0]
    84  
    85  	assert.Equal(t, 2, subnet.Metadata.Range().GetStartLine())
    86  	assert.Equal(t, 5, subnet.Metadata.Range().GetEndLine())
    87  
    88  	assert.Equal(t, 4, subnet.MapPublicIpOnLaunch.GetMetadata().Range().GetStartLine())
    89  	assert.Equal(t, 4, subnet.MapPublicIpOnLaunch.GetMetadata().Range().GetEndLine())
    90  }