github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/internal/adapters/terraform/aws/apigateway/apiv1_test.go (about) 1 package apigateway 2 3 import ( 4 "testing" 5 6 v1 "github.com/aquasecurity/defsec/pkg/providers/aws/apigateway/v1" 7 "github.com/aquasecurity/trivy-iac/internal/adapters/terraform/tftestutil" 8 "github.com/aquasecurity/trivy-iac/test/testutil" 9 ) 10 11 func Test_adaptAPIMethodsV1(t *testing.T) { 12 tests := []struct { 13 name string 14 terraform string 15 expected []v1.Method 16 }{ 17 { 18 name: "defaults", 19 terraform: ` 20 resource "aws_api_gateway_rest_api" "MyDemoAPI" { 21 name = "MyDemoAPI" 22 description = "This is my API for demonstration purposes" 23 } 24 25 resource "aws_api_gateway_resource" "example" { 26 rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id 27 } 28 29 resource "aws_api_gateway_method" "example" { 30 rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id 31 resource_id = aws_api_gateway_resource.example.id 32 http_method = "GET" 33 authorization = "NONE" 34 } 35 `, 36 expected: []v1.Method{ 37 { 38 HTTPMethod: String("GET"), 39 AuthorizationType: String("NONE"), 40 APIKeyRequired: Bool(false), 41 }, 42 }, 43 }, 44 { 45 name: "basic", 46 terraform: ` 47 resource "aws_api_gateway_rest_api" "MyDemoAPI" { 48 name = "MyDemoAPI" 49 description = "This is my API for demonstration purposes" 50 } 51 52 resource "aws_api_gateway_resource" "example" { 53 rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id 54 } 55 56 resource "aws_api_gateway_method" "example" { 57 rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id 58 resource_id = aws_api_gateway_resource.example.id 59 http_method = "GET" 60 authorization = "NONE" 61 api_key_required = true 62 } 63 `, 64 expected: []v1.Method{ 65 { 66 HTTPMethod: String("GET"), 67 AuthorizationType: String("NONE"), 68 APIKeyRequired: Bool(true), 69 }, 70 }, 71 }, 72 } 73 74 for _, test := range tests { 75 t.Run(test.name, func(t *testing.T) { 76 modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf") 77 restApiBlock := modules.GetBlocks()[1] 78 adapted := adaptAPIMethodsV1(modules, restApiBlock) 79 testutil.AssertDefsecEqual(t, test.expected, adapted) 80 }) 81 } 82 } 83 84 func Test_adaptAPIsV1(t *testing.T) { 85 tests := []struct { 86 name string 87 terraform string 88 expected []v1.API 89 }{ 90 { 91 name: "defaults", 92 terraform: ` 93 resource "aws_api_gateway_rest_api" "example" { 94 95 } 96 `, 97 expected: []v1.API{ 98 { 99 Name: String(""), 100 }, 101 }, 102 }, 103 { 104 name: "full", 105 terraform: ` 106 resource "aws_api_gateway_rest_api" "example" { 107 name = "tfsec" 108 } 109 `, 110 expected: []v1.API{ 111 { 112 Name: String("tfsec"), 113 }, 114 }, 115 }, 116 } 117 118 for _, test := range tests { 119 t.Run(test.name, func(t *testing.T) { 120 modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf") 121 adapted := adaptAPIsV1(modules) 122 testutil.AssertDefsecEqual(t, test.expected, adapted) 123 }) 124 } 125 }