Skip to content

Commit 35cf509

Browse files
committed
more tests
1 parent 02e5ddc commit 35cf509

File tree

1 file changed

+100
-60
lines changed

1 file changed

+100
-60
lines changed

coderd/workspacebuilds_test.go

Lines changed: 100 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/google/uuid"
1313
"github.com/stretchr/testify/assert"
1414
"github.com/stretchr/testify/require"
15+
"golang.org/x/xerrors"
1516

1617
"github.com/coder/coder/coderd/audit"
1718
"github.com/coder/coder/coderd/coderdtest"
@@ -1154,76 +1155,115 @@ func TestMigrateLegacyToRichParameters(t *testing.T) {
11541155

11551156
func TestWorkspaceBuildDebugMode(t *testing.T) {
11561157
t.Parallel()
1157-
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1158-
user := coderdtest.CreateFirstUser(t, client)
1159-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
1160-
Parse: echo.ParseComplete,
1161-
ProvisionPlan: echo.ProvisionComplete,
1162-
ProvisionApply: []*proto.Provision_Response{{
1163-
Type: &proto.Provision_Response_Log{
1164-
Log: &proto.Log{
1165-
Level: proto.LogLevel_DEBUG,
1166-
Output: "want-it",
1158+
1159+
t.Run("AsRegularUser", func(t *testing.T) {
1160+
t.Parallel()
1161+
1162+
// Create users
1163+
templateAuthorClient := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1164+
templateAuthor := coderdtest.CreateFirstUser(t, templateAuthorClient)
1165+
regularUserClient, _ := coderdtest.CreateAnotherUser(t, templateAuthorClient, templateAuthor.OrganizationID)
1166+
1167+
// Template owner: create a template
1168+
version := coderdtest.CreateTemplateVersion(t, templateAuthorClient, templateAuthor.OrganizationID, nil)
1169+
template := coderdtest.CreateTemplate(t, templateAuthorClient, templateAuthor.OrganizationID, version.ID)
1170+
coderdtest.AwaitTemplateVersionJob(t, templateAuthorClient, version.ID)
1171+
1172+
// Regular user: create a workspace
1173+
workspace := coderdtest.CreateWorkspace(t, regularUserClient, templateAuthor.OrganizationID, template.ID)
1174+
coderdtest.AwaitWorkspaceBuildJob(t, regularUserClient, workspace.LatestBuild.ID)
1175+
1176+
// Regular user: try to start a workspace build in debug mode
1177+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1178+
defer cancel()
1179+
1180+
_, err := regularUserClient.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
1181+
TemplateVersionID: workspace.LatestBuild.TemplateVersionID,
1182+
Transition: codersdk.WorkspaceTransitionStart,
1183+
LogLevel: "debug",
1184+
})
1185+
1186+
// Regular user: expect an error
1187+
require.NotNil(t, err)
1188+
var sdkError *codersdk.Error
1189+
isSdkError := xerrors.As(err, &sdkError)
1190+
require.True(t, isSdkError)
1191+
require.Contains(t, sdkError.Message, "Workspace builds with a custom log level are restricted to template authors only.")
1192+
})
1193+
t.Run("AsTemplateAuthor", func(t *testing.T) {
1194+
t.Parallel()
1195+
1196+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1197+
user := coderdtest.CreateFirstUser(t, client)
1198+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
1199+
Parse: echo.ParseComplete,
1200+
ProvisionPlan: echo.ProvisionComplete,
1201+
ProvisionApply: []*proto.Provision_Response{{
1202+
Type: &proto.Provision_Response_Log{
1203+
Log: &proto.Log{
1204+
Level: proto.LogLevel_DEBUG,
1205+
Output: "want-it",
1206+
},
11671207
},
1168-
},
1169-
}, {
1170-
Type: &proto.Provision_Response_Log{
1171-
Log: &proto.Log{
1172-
Level: proto.LogLevel_TRACE,
1173-
Output: "dont-want-it",
1208+
}, {
1209+
Type: &proto.Provision_Response_Log{
1210+
Log: &proto.Log{
1211+
Level: proto.LogLevel_TRACE,
1212+
Output: "dont-want-it",
1213+
},
11741214
},
1175-
},
1176-
}, {
1177-
Type: &proto.Provision_Response_Log{
1178-
Log: &proto.Log{
1179-
Level: proto.LogLevel_DEBUG,
1180-
Output: "done",
1215+
}, {
1216+
Type: &proto.Provision_Response_Log{
1217+
Log: &proto.Log{
1218+
Level: proto.LogLevel_DEBUG,
1219+
Output: "done",
1220+
},
11811221
},
1182-
},
1183-
}, {
1184-
Type: &proto.Provision_Response_Complete{
1185-
Complete: &proto.Provision_Complete{},
1186-
},
1187-
}},
1188-
})
1189-
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
1190-
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1222+
}, {
1223+
Type: &proto.Provision_Response_Complete{
1224+
Complete: &proto.Provision_Complete{},
1225+
},
1226+
}},
1227+
})
1228+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
1229+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
11911230

1192-
// Create workspace
1193-
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
1194-
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
1231+
// Create workspace
1232+
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
1233+
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
11951234

1196-
// Create workspace build
1197-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1198-
defer cancel()
1235+
// Create workspace build
1236+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1237+
defer cancel()
11991238

1200-
build, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
1201-
TemplateVersionID: workspace.LatestBuild.TemplateVersionID,
1202-
Transition: codersdk.WorkspaceTransitionStart,
1203-
ProvisionerState: []byte(" "),
1204-
LogLevel: "debug",
1205-
})
1206-
require.Nil(t, err)
1239+
build, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
1240+
TemplateVersionID: workspace.LatestBuild.TemplateVersionID,
1241+
Transition: codersdk.WorkspaceTransitionStart,
1242+
ProvisionerState: []byte(" "),
1243+
LogLevel: "debug",
1244+
})
1245+
require.Nil(t, err)
12071246

1208-
build = coderdtest.AwaitWorkspaceBuildJob(t, client, build.ID)
1247+
build = coderdtest.AwaitWorkspaceBuildJob(t, client, build.ID)
12091248

1210-
// Watch for incoming logs
1211-
logs, closer, err := client.WorkspaceBuildLogsAfter(ctx, build.ID, 0)
1212-
require.NoError(t, err)
1213-
defer closer.Close()
1249+
// Watch for incoming logs
1250+
logs, closer, err := client.WorkspaceBuildLogsAfter(ctx, build.ID, 0)
1251+
require.NoError(t, err)
1252+
defer closer.Close()
12141253

1215-
for {
1216-
log, ok := <-logs
1217-
if !ok {
1218-
break
1219-
}
1254+
for {
1255+
log, ok := <-logs
1256+
if !ok {
1257+
break
1258+
}
12201259

1221-
if log.Output == "dont-want-it" {
1222-
require.Failf(t, "unexpected log message", "%s log message shouldn't be logged: %s", log.Level, log.Output)
1223-
}
1260+
if log.Output == "dont-want-it" {
1261+
require.Failf(t, "unexpected log message", "%s log message shouldn't be logged: %s", log.Level, log.Output)
1262+
}
12241263

1225-
if log.Output == "done" {
1226-
return
1264+
if log.Output == "done" {
1265+
return
1266+
}
12271267
}
1228-
}
1268+
})
12291269
}

0 commit comments

Comments
 (0)