Skip to content

Commit d9e019f

Browse files
committed
dbmem
1 parent 0e8ce10 commit d9e019f

File tree

3 files changed

+80
-5
lines changed

3 files changed

+80
-5
lines changed

coderd/database/dbauthz/dbauthz.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -1748,7 +1748,26 @@ func (q *querier) GetTemplateVersionVariables(ctx context.Context, templateVersi
17481748
}
17491749

17501750
func (q *querier) GetTemplateVersionWorkspaceTags(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionWorkspaceTag, error) {
1751-
panic("not implemented")
1751+
tv, err := q.db.GetTemplateVersionByID(ctx, templateVersionID)
1752+
if err != nil {
1753+
return nil, err
1754+
}
1755+
1756+
var object rbac.Objecter
1757+
template, err := q.db.GetTemplateByID(ctx, tv.TemplateID.UUID)
1758+
if err != nil {
1759+
if !errors.Is(err, sql.ErrNoRows) {
1760+
return nil, err
1761+
}
1762+
object = rbac.ResourceTemplate.InOrg(tv.OrganizationID)
1763+
} else {
1764+
object = tv.RBACObject(template)
1765+
}
1766+
1767+
if err := q.authorizeContext(ctx, rbac.ActionRead, object); err != nil {
1768+
return nil, err
1769+
}
1770+
return q.db.GetTemplateVersionWorkspaceTags(ctx, templateVersionID)
17521771
}
17531772

17541773
// GetTemplateVersionsByIDs is only used for workspace build data.
@@ -2469,7 +2488,10 @@ func (q *querier) InsertTemplateVersionVariable(ctx context.Context, arg databas
24692488
}
24702489

24712490
func (q *querier) InsertTemplateVersionWorkspaceTag(ctx context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
2472-
panic("not implemented")
2491+
if err := q.authorizeContext(ctx, rbac.ActionCreate, rbac.ResourceSystem); err != nil {
2492+
return database.TemplateVersionWorkspaceTag{}, err
2493+
}
2494+
return q.db.InsertTemplateVersionWorkspaceTag(ctx, arg)
24732495
}
24742496

24752497
func (q *querier) InsertUser(ctx context.Context, arg database.InsertUserParams) (database.User, error) {

coderd/database/dbmem/dbmem.go

+24-3
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ type data struct {
162162
templateVersions []database.TemplateVersionTable
163163
templateVersionParameters []database.TemplateVersionParameter
164164
templateVersionVariables []database.TemplateVersionVariable
165+
templateVersionWorkspaceTags []database.TemplateVersionWorkspaceTag
165166
templates []database.TemplateTable
166167
templateUsageStats []database.TemplateUsageStat
167168
workspaceAgents []database.WorkspaceAgent
@@ -4089,7 +4090,17 @@ func (q *FakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVer
40894090
}
40904091

40914092
func (q *FakeQuerier) GetTemplateVersionWorkspaceTags(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionWorkspaceTag, error) {
4092-
panic("not implemented")
4093+
q.mutex.RLock()
4094+
defer q.mutex.RUnlock()
4095+
4096+
workspaceTags := make([]database.TemplateVersionWorkspaceTag, 0)
4097+
for _, workspaceTag := range q.templateVersionWorkspaceTags {
4098+
if workspaceTag.TemplateVersionID != templateVersionID {
4099+
continue
4100+
}
4101+
workspaceTags = append(workspaceTags, workspaceTag)
4102+
}
4103+
return workspaceTags, nil
40934104
}
40944105

40954106
func (q *FakeQuerier) GetTemplateVersionsByIDs(_ context.Context, ids []uuid.UUID) ([]database.TemplateVersion, error) {
@@ -6267,13 +6278,23 @@ func (q *FakeQuerier) InsertTemplateVersionVariable(_ context.Context, arg datab
62676278
return variable, nil
62686279
}
62696280

6270-
func (q *FakeQuerier) InsertTemplateVersionWorkspaceTag(ctx context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
6281+
func (q *FakeQuerier) InsertTemplateVersionWorkspaceTag(_ context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
62716282
err := validateDatabaseType(arg)
62726283
if err != nil {
62736284
return database.TemplateVersionWorkspaceTag{}, err
62746285
}
62756286

6276-
panic("not implemented")
6287+
q.mutex.Lock()
6288+
defer q.mutex.Unlock()
6289+
6290+
//nolint:gosimple
6291+
workspaceTag := database.TemplateVersionWorkspaceTag{
6292+
TemplateVersionID: arg.TemplateVersionID,
6293+
Key: arg.Key,
6294+
Value: arg.Value,
6295+
}
6296+
q.templateVersionWorkspaceTags = append(q.templateVersionWorkspaceTags, workspaceTag)
6297+
return workspaceTag, nil
62776298
}
62786299

62796300
func (q *FakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParams) (database.User, error) {

coderd/provisionerdserver/provisionerdserver_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,38 @@ func TestUpdateJob(t *testing.T) {
750750
require.Equal(t, templateVariables[1].Value, "")
751751
})
752752
})
753+
754+
t.Run("WorkspaceTags", func(t *testing.T) {
755+
t.Parallel()
756+
757+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
758+
defer cancel()
759+
760+
srv, db, _, pd := setup(t, false, &overrides{})
761+
job := setupJob(t, db, pd.ID)
762+
versionID := uuid.New()
763+
err := db.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{
764+
ID: versionID,
765+
JobID: job,
766+
})
767+
require.NoError(t, err)
768+
_, err = srv.UpdateJob(ctx, &proto.UpdateJobRequest{
769+
JobId: job.String(),
770+
WorkspaceTags: map[string]string{
771+
"bird": "tweety",
772+
"cat": "jinx",
773+
},
774+
})
775+
require.NoError(t, err)
776+
777+
workspaceTags, err := db.GetTemplateVersionWorkspaceTags(ctx, versionID)
778+
require.NoError(t, err)
779+
require.Len(t, workspaceTags, 2)
780+
require.Equal(t, workspaceTags[0].Key, "bird")
781+
require.Equal(t, workspaceTags[0].Value, "tweety")
782+
require.Equal(t, workspaceTags[1].Key, "cat")
783+
require.Equal(t, workspaceTags[1].Value, "jinx")
784+
})
753785
}
754786

755787
func TestFailJob(t *testing.T) {

0 commit comments

Comments
 (0)