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  }