github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/iam/user_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 userDetails struct {
    19  	name string
    20  }
    21  
    22  func Test_IAMUsers(t *testing.T) {
    23  	tests := []struct {
    24  		name    string
    25  		details userDetails
    26  	}{
    27  		{
    28  			name: "basic user",
    29  			details: userDetails{
    30  				name: "test-user",
    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 := bootstrapIAMUser(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.User
    49  			for _, user := range testState.AWS.IAM.Users {
    50  				if user.Name.EqualTo(tt.details.name) {
    51  					found++
    52  					match = user
    53  				}
    54  			}
    55  			require.Equal(t, 1, found)
    56  			assert.Equal(t, arn, match.Metadata.Range().GetLocalFilename())
    57  		})
    58  	}
    59  }
    60  
    61  func bootstrapIAMUser(t *testing.T, ra *aws.RootAdapter, details userDetails) string {
    62  	api := iamapi.NewFromConfig(ra.SessionConfig())
    63  	output, err := api.CreateUser(ra.Context(), &iamapi.CreateUserInput{
    64  		UserName: &details.name,
    65  	})
    66  	require.NoError(t, err)
    67  	return *output.User.Arn
    68  }