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

     1  package apigateway
     2  
     3  import (
     4  	"testing"
     5  
     6  	v2 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/apigateway/v2"
     7  
     8  	"github.com/khulnasoft-lab/defsec/internal/adapters/terraform/tftestutil"
     9  
    10  	"github.com/khulnasoft-lab/defsec/test/testutil"
    11  )
    12  
    13  func Test_adaptAPIsV2(t *testing.T) {
    14  	tests := []struct {
    15  		name      string
    16  		terraform string
    17  		expected  []v2.API
    18  	}{
    19  		{
    20  			name: "defaults",
    21  			terraform: `
    22  resource "aws_apigatewayv2_api" "example" {
    23      protocol_type = "HTTP"
    24  }
    25  `,
    26  			expected: []v2.API{
    27  				{
    28  					Name:         String(""),
    29  					ProtocolType: String("HTTP"),
    30  				},
    31  			},
    32  		},
    33  		{
    34  			name: "full",
    35  			terraform: `
    36  resource "aws_apigatewayv2_api" "example" {
    37      name = "terrasec"
    38      protocol_type = "HTTP"
    39  }
    40  `,
    41  			expected: []v2.API{
    42  				{
    43  					Name:         String("terrasec"),
    44  					ProtocolType: String("HTTP"),
    45  				},
    46  			},
    47  		},
    48  	}
    49  
    50  	for _, test := range tests {
    51  		t.Run(test.name, func(t *testing.T) {
    52  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    53  			adapted := adaptAPIsV2(modules)
    54  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    55  		})
    56  	}
    57  }
    58  
    59  func Test_adaptStageV2(t *testing.T) {
    60  	tests := []struct {
    61  		name      string
    62  		terraform string
    63  		expected  v2.Stage
    64  	}{
    65  		{
    66  			name: "defaults",
    67  			terraform: `
    68  resource "aws_apigatewayv2_stage" "example" {
    69      
    70  }
    71  `,
    72  			expected: v2.Stage{
    73  				Name: String(""),
    74  				AccessLogging: v2.AccessLogging{
    75  					CloudwatchLogGroupARN: String(""),
    76  				},
    77  			},
    78  		},
    79  		{
    80  			name: "basics",
    81  			terraform: `
    82  resource "aws_apigatewayv2_stage" "example" {
    83      name = "terrasec" 
    84      access_log_settings {
    85          destination_arn = "arn:123"
    86      }
    87  }
    88  `,
    89  			expected: v2.Stage{
    90  				Name: String("terrasec"),
    91  				AccessLogging: v2.AccessLogging{
    92  					CloudwatchLogGroupARN: String("arn:123"),
    93  				},
    94  			},
    95  		},
    96  	}
    97  
    98  	for _, test := range tests {
    99  		t.Run(test.name, func(t *testing.T) {
   100  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
   101  			adapted := adaptStageV2(modules.GetBlocks()[0])
   102  			testutil.AssertDefsecEqual(t, test.expected, adapted)
   103  		})
   104  	}
   105  }