Skip to content

Commit da9c525

Browse files
committed
Implement more types for seeding
1 parent ff73510 commit da9c525

File tree

3 files changed

+86
-34
lines changed

3 files changed

+86
-34
lines changed

coderd/authzquery/authz_test.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,16 @@ func testAuthorizeFunction(t *testing.T, testCase *authorizeTest) {
108108
for objectName, asserts := range testCase.Asserts {
109109
object := data[objectName]
110110
for _, assert := range asserts {
111-
pairs = append(pairs, rec.Pair(assert, object))
111+
canRBAC, ok := object.(rbac.Objecter)
112+
require.True(t, ok, "object %q does not implement rbac.Objecter", objectName)
113+
pairs = append(pairs, rec.Pair(assert, canRBAC.RBACObject()))
112114
}
113115
}
114116
rec.UnorderedAssertActor(t, actor, pairs...)
115117
require.NoError(t, rec.AllAsserted(), "all authz checks asserted")
116118
}
117119

118-
func setupTestData(t *testing.T, testCase *authorizeTest, db database.Store, ctx context.Context) map[string]rbac.Objecter {
119-
rbacObjects := make(map[string]rbac.Objecter)
120+
func setupTestData(t *testing.T, testCase *authorizeTest, db database.Store, ctx context.Context) map[string]interface{} {
120121
// Setup the test data.
121122
orgID := uuid.New()
122123
data := testCase.Data(t, testCase)
@@ -142,9 +143,7 @@ func setupTestData(t *testing.T, testCase *authorizeTest, db database.Store, ctx
142143
})
143144
require.NoError(t, err, "insert template")
144145

145-
// Reinsert the template.
146146
data[name] = template
147-
rbacObjects[name] = template
148147
case database.Workspace:
149148
workspace, err := db.InsertWorkspace(ctx, database.InsertWorkspaceParams{
150149
ID: testCase.Lookup(name),
@@ -158,12 +157,42 @@ func setupTestData(t *testing.T, testCase *authorizeTest, db database.Store, ctx
158157
})
159158
require.NoError(t, err, "insert workspace")
160159

161-
// Reinsert the workspace.
162160
data[name] = workspace
163-
rbacObjects[name] = workspace
161+
case database.WorkspaceBuild:
162+
build, err := db.InsertWorkspaceBuild(ctx, database.InsertWorkspaceBuildParams{
163+
ID: testCase.Lookup(name),
164+
CreatedAt: time.Now(),
165+
UpdatedAt: time.Now(),
166+
WorkspaceID: takeFirst(orig.WorkspaceID, uuid.New()),
167+
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
168+
BuildNumber: takeFirst(orig.BuildNumber, 0),
169+
Transition: takeFirst(orig.Transition, database.WorkspaceTransitionStart),
170+
InitiatorID: takeFirst(orig.InitiatorID, uuid.New()),
171+
JobID: takeFirst(orig.InitiatorID, uuid.New()),
172+
ProvisionerState: []byte{},
173+
Deadline: time.Now(),
174+
Reason: takeFirst(orig.Reason, database.BuildReasonInitiator),
175+
})
176+
require.NoError(t, err, "insert workspace build")
177+
178+
data[name] = build
179+
case database.User:
180+
user, err := db.InsertUser(ctx, database.InsertUserParams{
181+
ID: testCase.Lookup(name),
182+
Email: takeFirst(orig.Email, namesgenerator.GetRandomName(1)),
183+
Username: takeFirst(orig.Username, namesgenerator.GetRandomName(1)),
184+
HashedPassword: []byte{},
185+
CreatedAt: time.Now(),
186+
UpdatedAt: time.Now(),
187+
RBACRoles: []string{},
188+
LoginType: takeFirst(orig.LoginType, database.LoginTypePassword),
189+
})
190+
require.NoError(t, err, "insert user")
191+
192+
data[name] = user
164193
}
165194
}
166-
return rbacObjects
195+
return data
167196
}
168197

169198
// takeFirst will take the first non empty value.

coderd/authzquery/authzquerier.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ var _ database.Store = (*AuthzQuerier)(nil)
2323
type AuthzQuerier struct {
2424
database database.Store
2525
authorizer rbac.Authorizer
26-
27-
// constantActor makes all actors on context ignored.
28-
constantActor *rbac.Subject
2926
}
3027

3128
func NewAuthzQuerier(db database.Store, authorizer rbac.Authorizer) *AuthzQuerier {
@@ -53,10 +50,6 @@ func (q *AuthzQuerier) InTx(function func(querier database.Store) error, txOpts
5350
}, txOpts)
5451
}
5552

56-
func (q *AuthzQuerier) As(subject rbac.Subject) database.Store {
57-
return NewAuthzQuerier(q.database, q.authorizer, subject)
58-
}
59-
6053
// authorizeContext is a helper function to authorize an action on an object.
6154
func (q *AuthzQuerier) authorizeContext(ctx context.Context, action rbac.Action, object rbac.Objecter) error {
6255
act, ok := actorFromContext(ctx)

coderd/authzquery/workspace_test.go

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,67 @@ import (
2222
func TestWorkspaceFunctions(t *testing.T) {
2323
t.Parallel()
2424

25+
const mainWorkspace = "workspace-one"
26+
workspaceData := func(t *testing.T, tc *authorizeTest) map[string]interface{} {
27+
return map[string]interface{}{
28+
"u-one": database.User{},
29+
mainWorkspace: database.Workspace{
30+
Name: "peter-pan",
31+
OwnerID: tc.Lookup("u-one"),
32+
TemplateID: tc.Lookup("t-one"),
33+
},
34+
"t-one": database.Template{},
35+
"b-one": database.WorkspaceBuild{
36+
WorkspaceID: tc.Lookup(mainWorkspace),
37+
//TemplateVersionID: uuid.UUID{},
38+
BuildNumber: 0,
39+
Transition: database.WorkspaceTransitionStart,
40+
InitiatorID: tc.Lookup("u-one"),
41+
//JobID: uuid.UUID{},
42+
},
43+
}
44+
}
45+
2546
testCases := []struct {
2647
Name string
2748
Config *authorizeTest
2849
}{
2950
{
30-
Name: "GetByID",
51+
Name: "GetWorkspaceByID",
3152
Config: &authorizeTest{
32-
Data: func(t *testing.T, tc *authorizeTest) map[string]interface{} {
33-
return map[string]interface{}{
34-
"u-one": database.User{},
35-
"w-one": database.Workspace{
36-
Name: "peter-pan",
37-
OwnerID: tc.Lookup("u-one"),
38-
TemplateID: tc.Lookup("t-one"),
39-
},
40-
"t-one": database.Template{},
41-
}
42-
},
53+
Data: workspaceData,
4354
Test: func(ctx context.Context, t *testing.T, tc *authorizeTest, q authzquery.AuthzStore) {
44-
wrk, err := q.GetWorkspaceByID(ctx, tc.Lookup("w-one"))
55+
_, err := q.GetWorkspaceByID(ctx, tc.Lookup(mainWorkspace))
4556
require.NoError(t, err)
46-
47-
wrk, err = q.GetWorkspaceByID(ctx, tc.Lookup("w-one"))
57+
},
58+
Asserts: map[string][]rbac.Action{
59+
mainWorkspace: {rbac.ActionRead},
60+
},
61+
},
62+
},
63+
{
64+
Name: "GetWorkspaces",
65+
Config: &authorizeTest{
66+
Data: workspaceData,
67+
Test: func(ctx context.Context, t *testing.T, tc *authorizeTest, q authzquery.AuthzStore) {
68+
_, err := q.GetWorkspaces(ctx, database.GetWorkspacesParams{})
4869
require.NoError(t, err)
49-
50-
_, err = q.GetTemplateByID(ctx, wrk.TemplateID)
70+
},
71+
Asserts: map[string][]rbac.Action{
72+
// No rbac checks for this one, uses sql filter
73+
},
74+
},
75+
},
76+
{
77+
Name: "GetLatestWorkspaceBuildByWorkspaceID",
78+
Config: &authorizeTest{
79+
Data: workspaceData,
80+
Test: func(ctx context.Context, t *testing.T, tc *authorizeTest, q authzquery.AuthzStore) {
81+
_, err := q.GetLatestWorkspaceBuildByWorkspaceID(ctx, tc.Lookup(mainWorkspace))
5182
require.NoError(t, err)
5283
},
5384
Asserts: map[string][]rbac.Action{
54-
"w-one": {rbac.ActionRead, rbac.ActionRead},
55-
"t-one": {rbac.ActionRead},
85+
mainWorkspace: {rbac.ActionRead},
5686
},
5787
},
5888
},

0 commit comments

Comments
 (0)