Skip to content

Commit 551e179

Browse files
probakowskigithub-actions
authored andcommitted
add access check test
1 parent ba3681a commit 551e179

File tree

1 file changed

+50
-6
lines changed

1 file changed

+50
-6
lines changed

lib/auth/dynamicwindows/dynamicwindowsv1/service_test.go

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,43 @@ import (
3737
"github.com/gravitational/teleport/lib/utils"
3838
)
3939

40+
func TestFailedAccessCheck(t *testing.T) {
41+
t.Parallel()
42+
checker := fakeChecker{
43+
allowedVerbs: []string{types.VerbRead, types.VerbList, types.VerbCreate, types.VerbUpdate},
44+
}
45+
s := newService(t, authz.AdminActionAuthMFAVerified, &checker)
46+
desktop, err := types.NewDynamicWindowsDesktopV1("test2", nil, types.DynamicWindowsDesktopSpecV1{Addr: "addr"})
47+
require.NoError(t, err)
48+
req := dynamicwindowsv1.CreateDynamicWindowsDesktopRequest{
49+
Desktop: desktop,
50+
}
51+
_, err = s.CreateDynamicWindowsDesktop(context.Background(), &req)
52+
require.NoError(t, err)
53+
checker.failAccess = true
54+
testCases := []string{
55+
"CreateDynamicWindowsDesktop",
56+
"UpdateDynamicWindowsDesktop",
57+
"UpsertDynamicWindowsDesktop",
58+
"DeleteDynamicWindowsDesktop",
59+
"GetDynamicWindowsDesktop",
60+
}
61+
for _, tt := range testCases {
62+
t.Run(fmt.Sprintf("%s failed access check", tt), func(t *testing.T) {
63+
err := callMethod(s, tt)
64+
require.True(t, trace.IsAccessDenied(err))
65+
})
66+
}
67+
t.Run("ListDynamicWindowsDesktops failed access check", func(t *testing.T) {
68+
req := dynamicwindowsv1.ListDynamicWindowsDesktopsRequest{
69+
PageSize: 10,
70+
}
71+
resp, err := s.ListDynamicWindowsDesktops(context.Background(), &req)
72+
require.NoError(t, err)
73+
require.Empty(t, resp.Desktops)
74+
})
75+
}
76+
4077
func TestServiceAccess(t *testing.T) {
4178
t.Parallel()
4279

@@ -87,7 +124,7 @@ func TestServiceAccess(t *testing.T) {
87124
for _, state := range tt.allowedStates {
88125
for _, verbs := range utils.Combinations(tt.allowedVerbs) {
89126
t.Run(fmt.Sprintf("%v,allowed:%v,verbs:%v", tt.name, stateToString(state), verbs), func(t *testing.T) {
90-
service := newService(t, state, fakeChecker{allowedVerbs: verbs})
127+
service := newService(t, state, &fakeChecker{allowedVerbs: verbs})
91128
err := callMethod(service, tt.name)
92129
// expect access denied except with full set of verbs.
93130
if len(verbs) == len(tt.allowedVerbs) {
@@ -105,7 +142,7 @@ func TestServiceAccess(t *testing.T) {
105142
t.Run(fmt.Sprintf("%v,disallowed:%v", tt.name, stateToString(state)), func(t *testing.T) {
106143
// it is enough to test against tt.allowedVerbs,
107144
// this is the only different data point compared to the test cases above.
108-
service := newService(t, state, fakeChecker{allowedVerbs: tt.allowedVerbs})
145+
service := newService(t, state, &fakeChecker{allowedVerbs: tt.allowedVerbs})
109146
err := callMethod(service, tt.name)
110147
require.True(t, trace.IsAccessDenied(err))
111148
})
@@ -157,16 +194,19 @@ func callMethod(service *Service, method string) error {
157194
if desc.MethodName == method {
158195
_, err := desc.Handler(service, context.Background(), func(arg any) error {
159196
switch arg := arg.(type) {
197+
case *dynamicwindowsv1.GetDynamicWindowsDesktopRequest:
198+
arg.Name = "test2"
199+
160200
case *dynamicwindowsv1.CreateDynamicWindowsDesktopRequest:
161201
arg.Desktop, _ = types.NewDynamicWindowsDesktopV1("test", nil, types.DynamicWindowsDesktopSpecV1{
162202
Addr: "test",
163203
})
164204
case *dynamicwindowsv1.UpdateDynamicWindowsDesktopRequest:
165-
arg.Desktop, _ = types.NewDynamicWindowsDesktopV1("test", nil, types.DynamicWindowsDesktopSpecV1{
205+
arg.Desktop, _ = types.NewDynamicWindowsDesktopV1("test2", nil, types.DynamicWindowsDesktopSpecV1{
166206
Addr: "test",
167207
})
168208
case *dynamicwindowsv1.UpsertDynamicWindowsDesktopRequest:
169-
arg.Desktop, _ = types.NewDynamicWindowsDesktopV1("test", nil, types.DynamicWindowsDesktopSpecV1{
209+
arg.Desktop, _ = types.NewDynamicWindowsDesktopV1("test2", nil, types.DynamicWindowsDesktopSpecV1{
170210
Addr: "test",
171211
})
172212
}
@@ -180,10 +220,11 @@ func callMethod(service *Service, method string) error {
180220

181221
type fakeChecker struct {
182222
allowedVerbs []string
223+
failAccess bool
183224
services.AccessChecker
184225
}
185226

186-
func (f fakeChecker) CheckAccessToRule(_ services.RuleContext, _ string, resource string, verb string) error {
227+
func (f *fakeChecker) CheckAccessToRule(_ services.RuleContext, _ string, resource string, verb string) error {
187228
if resource == types.KindDynamicWindowsDesktop {
188229
if slices.Contains(f.allowedVerbs, verb) {
189230
return nil
@@ -193,7 +234,10 @@ func (f fakeChecker) CheckAccessToRule(_ services.RuleContext, _ string, resourc
193234
return trace.AccessDenied("access denied to rule=%v/verb=%v", resource, verb)
194235
}
195236

196-
func (f fakeChecker) CheckAccess(r services.AccessCheckable, state services.AccessState, matchers ...services.RoleMatcher) error {
237+
func (f *fakeChecker) CheckAccess(r services.AccessCheckable, state services.AccessState, matchers ...services.RoleMatcher) error {
238+
if f.failAccess {
239+
return trace.AccessDenied("denied")
240+
}
197241
return nil
198242
}
199243

0 commit comments

Comments
 (0)