A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/coder/coder/commit/49fcffc2661b861dbfc90e021a6744b0e4faf43e below:

stop workspace before update (#18425) · coder/coder@49fcffc · GitHub

@@ -34,49 +34,125 @@ func TestUpdate(t *testing.T) {

34 34

t.Run("OK", func(t *testing.T) {

35 35

t.Parallel()

36 36 37 +

// Given: a workspace exists on the latest template version.

37 38

client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})

38 39

owner := coderdtest.CreateFirstUser(t, client)

39 -

member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)

40 +

member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)

40 41

version1 := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)

41 42 42 43

coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID)

43 44

template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version1.ID)

44 45 45 -

inv, root := clitest.New(t, "create",

46 -

"my-workspace",

47 -

"--template", template.Name,

48 -

"-y",

49 -

)

46 +

ws := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {

47 +

cwr.Name = "my-workspace"

48 +

})

49 +

require.False(t, ws.Outdated, "newly created workspace with active template version must not be outdated")

50 + 51 +

// Given: the template version is updated

52 +

version2 := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{

53 +

Parse: echo.ParseComplete,

54 +

ProvisionApply: echo.ApplyComplete,

55 +

ProvisionPlan: echo.PlanComplete,

56 +

}, template.ID)

57 +

_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version2.ID)

58 + 59 +

ctx := testutil.Context(t, testutil.WaitShort)

60 +

err := client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{

61 +

ID: version2.ID,

62 +

})

63 +

require.NoError(t, err, "failed to update active template version")

64 + 65 +

// Then: the workspace is marked as 'outdated'

66 +

ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})

67 +

require.NoError(t, err, "member failed to get workspace they themselves own")

68 +

require.True(t, ws.Outdated, "workspace must be outdated after template version update")

69 + 70 +

// When: the workspace is updated

71 +

inv, root := clitest.New(t, "update", ws.Name)

50 72

clitest.SetupConfig(t, member, root)

51 73 52 -

err := inv.Run()

53 -

require.NoError(t, err)

74 +

err = inv.Run()

75 +

require.NoError(t, err, "update command failed")

76 + 77 +

// Then: the workspace is no longer 'outdated'

78 +

ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})

79 +

require.NoError(t, err, "member failed to get workspace they themselves own after update")

80 +

require.Equal(t, version2.ID.String(), ws.LatestBuild.TemplateVersionID.String(), "workspace must have latest template version after update")

81 +

require.False(t, ws.Outdated, "workspace must not be outdated after update")

82 + 83 +

// Then: the workspace must have been started with the new template version

84 +

require.Equal(t, int32(3), ws.LatestBuild.BuildNumber, "workspace must have 3 builds after update")

85 +

require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "latest build must be a start transition")

86 + 87 +

// Then: the previous workspace build must be a stop transition with the old

88 +

// template version.

89 +

// This is important to ensure that the workspace resources are recreated

90 +

// correctly. Simply running a start transition with the new template

91 +

// version may not recreate resources that were changed in the new

92 +

// template version. This can happen, for example, if a user specifies

93 +

// ignore_changes in the template.

94 +

prevBuild, err := member.WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(ctx, codersdk.Me, ws.Name, "2")

95 +

require.NoError(t, err, "failed to get previous workspace build")

96 +

require.Equal(t, codersdk.WorkspaceTransitionStop, prevBuild.Transition, "previous build must be a stop transition")

97 +

require.Equal(t, version1.ID.String(), prevBuild.TemplateVersionID.String(), "previous build must have the old template version")

98 +

})

54 99 55 -

ws, err := client.WorkspaceByOwnerAndName(context.Background(), memberUser.Username, "my-workspace", codersdk.WorkspaceOptions{})

56 -

require.NoError(t, err)

57 -

require.Equal(t, version1.ID.String(), ws.LatestBuild.TemplateVersionID.String())

100 +

t.Run("Stopped", func(t *testing.T) {

101 +

t.Parallel()

102 + 103 +

// Given: a workspace exists on the latest template version.

104 +

client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})

105 +

owner := coderdtest.CreateFirstUser(t, client)

106 +

member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)

107 +

version1 := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)

108 + 109 +

coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID)

110 +

template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version1.ID)

58 111 112 +

ws := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {

113 +

cwr.Name = "my-workspace"

114 +

})

115 +

require.False(t, ws.Outdated, "newly created workspace with active template version must not be outdated")

116 + 117 +

// Given: the template version is updated

59 118

version2 := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{

60 119

Parse: echo.ParseComplete,

61 120

ProvisionApply: echo.ApplyComplete,

62 121

ProvisionPlan: echo.PlanComplete,

63 122

}, template.ID)

64 123

_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version2.ID)

65 124 66 -

err = client.UpdateActiveTemplateVersion(context.Background(), template.ID, codersdk.UpdateActiveTemplateVersion{

125 +

ctx := testutil.Context(t, testutil.WaitShort)

126 +

err := client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{

67 127

ID: version2.ID,

68 128

})

69 -

require.NoError(t, err)

129 +

require.NoError(t, err, "failed to update active template version")

130 + 131 +

// Given: the workspace is in a stopped state.

132 +

coderdtest.MustTransitionWorkspace(t, member, ws.ID, codersdk.WorkspaceTransitionStart, codersdk.WorkspaceTransitionStop)

70 133 71 -

inv, root = clitest.New(t, "update", ws.Name)

134 +

// Then: the workspace is marked as 'outdated'

135 +

ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})

136 +

require.NoError(t, err, "member failed to get workspace they themselves own")

137 +

require.True(t, ws.Outdated, "workspace must be outdated after template version update")

138 + 139 +

// When: the workspace is updated

140 +

inv, root := clitest.New(t, "update", ws.Name)

72 141

clitest.SetupConfig(t, member, root)

73 142 74 143

err = inv.Run()

75 -

require.NoError(t, err)

76 - 77 -

ws, err = member.WorkspaceByOwnerAndName(context.Background(), memberUser.Username, "my-workspace", codersdk.WorkspaceOptions{})

78 -

require.NoError(t, err)

79 -

require.Equal(t, version2.ID.String(), ws.LatestBuild.TemplateVersionID.String())

144 +

require.NoError(t, err, "update command failed")

145 + 146 +

// Then: the workspace is no longer 'outdated'

147 +

ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})

148 +

require.NoError(t, err, "member failed to get workspace they themselves own after update")

149 +

require.Equal(t, version2.ID.String(), ws.LatestBuild.TemplateVersionID.String(), "workspace must have latest template version after update")

150 +

require.False(t, ws.Outdated, "workspace must not be outdated after update")

151 + 152 +

// Then: the workspace must have been started with the new template version

153 +

require.Equal(t, codersdk.WorkspaceTransitionStart, ws.LatestBuild.Transition, "latest build must be a start transition")

154 +

// Then: we expect 3 builds, as we manually stopped the workspace.

155 +

require.Equal(t, int32(3), ws.LatestBuild.BuildNumber, "workspace must have 3 builds after update")

80 156

})

81 157

}

82 158

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4