github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/iam/group_test.go (about) 1 package iam 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws" 9 10 iamapi "github.com/aws/aws-sdk-go-v2/service/iam" 11 12 "github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws/test" 13 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/iam" 14 "github.com/khulnasoft-lab/defsec/pkg/state" 15 "github.com/stretchr/testify/require" 16 ) 17 18 type groupDetails struct { 19 name string 20 } 21 22 func Test_IAMGroups(t *testing.T) { 23 tests := []struct { 24 name string 25 details groupDetails 26 }{ 27 { 28 name: "basic group", 29 details: groupDetails{ 30 name: "test-group", 31 }, 32 }, 33 } 34 35 ra, stack, err := test.CreateLocalstackAdapter(t) 36 defer func() { _ = stack.Stop() }() 37 require.NoError(t, err) 38 39 for _, tt := range tests { 40 t.Run(tt.name, func(t *testing.T) { 41 arn := bootstrapIAMGroup(t, ra, tt.details) 42 testState := &state.State{} 43 iamAdapter := &adapter{} 44 err := iamAdapter.Adapt(ra, testState) 45 require.NoError(t, err) 46 47 var found int 48 var match iam.Group 49 for _, group := range testState.AWS.IAM.Groups { 50 if group.Name.EqualTo(tt.details.name) { 51 found++ 52 match = group 53 } 54 } 55 require.Equal(t, 1, found) 56 assert.Equal(t, arn, match.Metadata.Range().GetLocalFilename()) 57 }) 58 } 59 } 60 61 func bootstrapIAMGroup(t *testing.T, ra *aws.RootAdapter, details groupDetails) string { 62 api := iamapi.NewFromConfig(ra.SessionConfig()) 63 output, err := api.CreateGroup(ra.Context(), &iamapi.CreateGroupInput{ 64 GroupName: &details.name, 65 }) 66 require.NoError(t, err) 67 return *output.Group.Arn 68 }