MCPcopy Index your code
hub / github.com/coder/coder / TestWorkspaceWatcher

Function TestWorkspaceWatcher

coderd/workspaces_test.go:3825–3973  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

3823}
3824
3825func TestWorkspaceWatcher(t *testing.T) {
3826 t.Parallel()
3827 client, closeFunc := coderdtest.NewWithProvisionerCloser(t, &coderdtest.Options{
3828 IncludeProvisionerDaemon: true,
3829 AllowWorkspaceRenames: true,
3830 })
3831 defer closeFunc.Close()
3832 user := coderdtest.CreateFirstUser(t, client)
3833 authToken := uuid.NewString()
3834 version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
3835 Parse: echo.ParseComplete,
3836 ProvisionPlan: echo.PlanComplete,
3837 ProvisionGraph: []*proto.Response{{
3838 Type: &proto.Response_Graph{
3839 Graph: &proto.GraphComplete{
3840 Resources: []*proto.Resource{{
3841 Name: "example",
3842 Type: "aws_instance",
3843 Agents: []*proto.Agent{{
3844 Id: uuid.NewString(),
3845 Name: "dev",
3846 Auth: &proto.Agent_Token{
3847 Token: authToken,
3848 },
3849 ConnectionTimeoutSeconds: 1,
3850 }},
3851 }},
3852 },
3853 },
3854 }},
3855 })
3856 coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
3857 template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
3858 workspace := coderdtest.CreateWorkspace(t, client, template.ID)
3859 coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
3860 ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
3861 defer cancel()
3862
3863 wc, err := client.WatchWorkspace(ctx, workspace.ID)
3864 require.NoError(t, err)
3865
3866 // Wait events are easier to debug with timestamped logs.
3867 logger := testutil.Logger(t).Named(t.Name())
3868 wait := func(event string, ready func(w codersdk.Workspace) bool) {
3869 for {
3870 select {
3871 case <-ctx.Done():
3872 require.FailNow(t, "timed out waiting for event", event)
3873 case w, ok := <-wc:
3874 require.True(t, ok, "watch channel closed: %s", event)
3875 if ready == nil || ready(w) {
3876 logger.Info(ctx, "done waiting for event",
3877 slog.F("event", event),
3878 slog.F("workspace", w))
3879 return
3880 }
3881 logger.Info(ctx, "skipped update for event",
3882 slog.F("event", event),

Callers

nothing calls this directly

Calls 15

NewWithProvisionerCloserFunction · 0.92
CreateFirstUserFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateWorkspaceFunction · 0.92
LoggerFunction · 0.92
CreateWorkspaceBuildFunction · 0.92
NewFunction · 0.92
AwaitWorkspaceAgentsFunction · 0.92
WatchWorkspaceMethod · 0.80

Tested by

no test coverage detected