github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/rules/cloud/policies/aws/iam/enforce_user_mfa_test.go (about) 1 package iam 2 3 import ( 4 "testing" 5 "time" 6 7 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 8 9 "github.com/khulnasoft-lab/defsec/pkg/state" 10 11 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/iam" 12 "github.com/khulnasoft-lab/defsec/pkg/scan" 13 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestCheckEnforceUserMFA(t *testing.T) { 18 tests := []struct { 19 name string 20 input iam.IAM 21 expected bool 22 }{ 23 { 24 name: "user logged in without mfa", 25 input: iam.IAM{ 26 Users: []iam.User{ 27 { 28 Metadata: defsecTypes.NewTestMetadata(), 29 Name: defsecTypes.String("other", defsecTypes.NewTestMetadata()), 30 LastAccess: defsecTypes.Time(time.Now(), defsecTypes.NewTestMetadata()), 31 }, 32 }, 33 }, 34 expected: true, 35 }, 36 { 37 name: "user without mfa never logged in", 38 input: iam.IAM{ 39 Users: []iam.User{ 40 { 41 Metadata: defsecTypes.NewTestMetadata(), 42 Name: defsecTypes.String("other", defsecTypes.NewTestMetadata()), 43 LastAccess: defsecTypes.TimeUnresolvable(defsecTypes.NewTestMetadata()), 44 }, 45 }, 46 }, 47 expected: false, 48 }, 49 { 50 name: "user with mfa", 51 input: iam.IAM{ 52 Users: []iam.User{ 53 { 54 Metadata: defsecTypes.NewTestMetadata(), 55 Name: defsecTypes.String("root", defsecTypes.NewTestMetadata()), 56 MFADevices: []iam.MFADevice{ 57 { 58 Metadata: defsecTypes.NewTestMetadata(), 59 IsVirtual: defsecTypes.Bool(true, defsecTypes.NewTestMetadata()), 60 }, 61 }, 62 }, 63 }, 64 }, 65 expected: false, 66 }, 67 } 68 for _, test := range tests { 69 t.Run(test.name, func(t *testing.T) { 70 var testState state.State 71 testState.AWS.IAM = test.input 72 results := CheckEnforceUserMFA.Evaluate(&testState) 73 var found bool 74 for _, result := range results { 75 if result.Status() == scan.StatusFailed && result.Rule().LongID() == CheckEnforceUserMFA.Rule().LongID() { 76 found = true 77 } 78 } 79 if test.expected { 80 assert.True(t, found, "Rule should have been found") 81 } else { 82 assert.False(t, found, "Rule should not have been found") 83 } 84 }) 85 } 86 }