github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/cloudstack/compute/adapt_test.go (about) 1 package compute 2 3 import ( 4 "testing" 5 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 8 "github.com/khulnasoft-lab/defsec/pkg/providers/cloudstack/compute" 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_adaptInstance(t *testing.T) { 18 tests := []struct { 19 name string 20 terraform string 21 expected compute.Instance 22 }{ 23 { 24 name: "sensitive user data", 25 terraform: ` 26 resource "cloudstack_instance" "web" { 27 name = "server-1" 28 user_data = <<EOF 29 export DATABASE_PASSWORD=\"SomeSortOfPassword\" 30 EOF 31 } 32 `, 33 expected: compute.Instance{ 34 Metadata: defsecTypes.NewTestMetadata(), 35 UserData: defsecTypes.String(`export DATABASE_PASSWORD=\"SomeSortOfPassword\" 36 `, defsecTypes.NewTestMetadata()), 37 }, 38 }, 39 { 40 name: "sensitive user data base64 encoded", 41 terraform: ` 42 resource "cloudstack_instance" "web" { 43 name = "server-1" 44 user_data = "ZXhwb3J0IERBVEFCQVNFX1BBU1NXT1JEPSJTb21lU29ydE9mUGFzc3dvcmQi" 45 } 46 `, 47 expected: compute.Instance{ 48 Metadata: defsecTypes.NewTestMetadata(), 49 UserData: defsecTypes.String(`export DATABASE_PASSWORD="SomeSortOfPassword"`, defsecTypes.NewTestMetadata()), 50 }, 51 }, 52 { 53 name: "no user data provided", 54 terraform: ` 55 resource "cloudstack_instance" "web" { 56 } 57 `, 58 expected: compute.Instance{ 59 Metadata: defsecTypes.NewTestMetadata(), 60 UserData: defsecTypes.String("", defsecTypes.NewTestMetadata()), 61 }, 62 }, 63 } 64 65 for _, test := range tests { 66 t.Run(test.name, func(t *testing.T) { 67 modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf") 68 adapted := adaptInstance(modules.GetBlocks()[0]) 69 testutil.AssertDefsecEqual(t, test.expected, adapted) 70 }) 71 } 72 } 73 74 func TestLines(t *testing.T) { 75 src := ` 76 resource "cloudstack_instance" "web" { 77 name = "server-1" 78 user_data = <<EOF 79 export DATABASE_PASSWORD=\"SomeSortOfPassword\" 80 EOF 81 }` 82 83 modules := tftestutil.CreateModulesFromSource(t, src, ".tf") 84 adapted := Adapt(modules) 85 86 require.Len(t, adapted.Instances, 1) 87 instance := adapted.Instances[0] 88 89 assert.Equal(t, 4, instance.UserData.GetMetadata().Range().GetStartLine()) 90 assert.Equal(t, 6, instance.UserData.GetMetadata().Range().GetEndLine()) 91 }