Skip to content

Commit 6fdad02

Browse files
fix: avoid sharing echo.Responses across tests (#17211)
Closes coder/internal#551 We've noticed lots of flakes in `go test -race` tests that use the echo provisioner. I believe the root cause of this to be #17012, where we started mutating the `echo.Responses`. This only caused issues as we previously shared `echo.Responses` across multiple test cases. This PR is therefore the same as #17128, but I believe this is all the cases where an `echo.Responses` is shared between tests - including tests that haven't flaked (yet).
1 parent d575e7f commit 6fdad02

File tree

3 files changed

+59
-52
lines changed

3 files changed

+59
-52
lines changed

cli/restart_test.go

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ import (
2020
func TestRestart(t *testing.T) {
2121
t.Parallel()
2222

23-
echoResponses := prepareEchoResponses([]*proto.RichParameter{
24-
{
25-
Name: ephemeralParameterName,
26-
Description: ephemeralParameterDescription,
27-
Mutable: true,
28-
Ephemeral: true,
29-
},
30-
})
23+
echoResponses := func() *echo.Responses {
24+
return prepareEchoResponses([]*proto.RichParameter{
25+
{
26+
Name: ephemeralParameterName,
27+
Description: ephemeralParameterDescription,
28+
Mutable: true,
29+
Ephemeral: true,
30+
},
31+
})
32+
}
3133

3234
t.Run("OK", func(t *testing.T) {
3335
t.Parallel()
@@ -66,7 +68,7 @@ func TestRestart(t *testing.T) {
6668
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
6769
owner := coderdtest.CreateFirstUser(t, client)
6870
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
69-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
71+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
7072
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
7173
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
7274
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
@@ -120,7 +122,7 @@ func TestRestart(t *testing.T) {
120122
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
121123
owner := coderdtest.CreateFirstUser(t, client)
122124
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
123-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
125+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
124126
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
125127
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
126128
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
@@ -174,7 +176,7 @@ func TestRestart(t *testing.T) {
174176
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
175177
owner := coderdtest.CreateFirstUser(t, client)
176178
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
177-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
179+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
178180
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
179181
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
180182
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
@@ -228,7 +230,7 @@ func TestRestart(t *testing.T) {
228230
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
229231
owner := coderdtest.CreateFirstUser(t, client)
230232
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
231-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
233+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
232234
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
233235
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
234236
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
@@ -280,24 +282,26 @@ func TestRestart(t *testing.T) {
280282
func TestRestartWithParameters(t *testing.T) {
281283
t.Parallel()
282284

283-
echoResponses := &echo.Responses{
284-
Parse: echo.ParseComplete,
285-
ProvisionPlan: []*proto.Response{
286-
{
287-
Type: &proto.Response_Plan{
288-
Plan: &proto.PlanComplete{
289-
Parameters: []*proto.RichParameter{
290-
{
291-
Name: immutableParameterName,
292-
Description: immutableParameterDescription,
293-
Required: true,
285+
echoResponses := func() *echo.Responses {
286+
return &echo.Responses{
287+
Parse: echo.ParseComplete,
288+
ProvisionPlan: []*proto.Response{
289+
{
290+
Type: &proto.Response_Plan{
291+
Plan: &proto.PlanComplete{
292+
Parameters: []*proto.RichParameter{
293+
{
294+
Name: immutableParameterName,
295+
Description: immutableParameterDescription,
296+
Required: true,
297+
},
294298
},
295299
},
296300
},
297301
},
298302
},
299-
},
300-
ProvisionApply: echo.ApplyComplete,
303+
ProvisionApply: echo.ApplyComplete,
304+
}
301305
}
302306

303307
t.Run("DoNotAskForImmutables", func(t *testing.T) {
@@ -307,7 +311,7 @@ func TestRestartWithParameters(t *testing.T) {
307311
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
308312
owner := coderdtest.CreateFirstUser(t, client)
309313
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
310-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
314+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
311315
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
312316
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
313317
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {

cli/start_test.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,27 @@ var (
7979
func TestStart(t *testing.T) {
8080
t.Parallel()
8181

82-
echoResponses := &echo.Responses{
83-
Parse: echo.ParseComplete,
84-
ProvisionPlan: []*proto.Response{
85-
{
86-
Type: &proto.Response_Plan{
87-
Plan: &proto.PlanComplete{
88-
Parameters: []*proto.RichParameter{
89-
{
90-
Name: ephemeralParameterName,
91-
Description: ephemeralParameterDescription,
92-
Mutable: true,
93-
Ephemeral: true,
82+
echoResponses := func() *echo.Responses {
83+
return &echo.Responses{
84+
Parse: echo.ParseComplete,
85+
ProvisionPlan: []*proto.Response{
86+
{
87+
Type: &proto.Response_Plan{
88+
Plan: &proto.PlanComplete{
89+
Parameters: []*proto.RichParameter{
90+
{
91+
Name: ephemeralParameterName,
92+
Description: ephemeralParameterDescription,
93+
Mutable: true,
94+
Ephemeral: true,
95+
},
9496
},
9597
},
9698
},
9799
},
98100
},
99-
},
100-
ProvisionApply: echo.ApplyComplete,
101+
ProvisionApply: echo.ApplyComplete,
102+
}
101103
}
102104

103105
t.Run("BuildOptions", func(t *testing.T) {
@@ -106,7 +108,7 @@ func TestStart(t *testing.T) {
106108
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
107109
owner := coderdtest.CreateFirstUser(t, client)
108110
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
109-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
111+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
110112
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
111113
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
112114
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
@@ -160,7 +162,7 @@ func TestStart(t *testing.T) {
160162
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
161163
owner := coderdtest.CreateFirstUser(t, client)
162164
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
163-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
165+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
164166
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
165167
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
166168
workspace := coderdtest.CreateWorkspace(t, member, template.ID)

cli/update_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,22 @@ func TestUpdateWithRichParameters(t *testing.T) {
101101
immutableParameterValue = "4"
102102
)
103103

104-
echoResponses := prepareEchoResponses([]*proto.RichParameter{
105-
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
106-
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
107-
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
108-
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
109-
},
110-
)
104+
echoResponses := func() *echo.Responses {
105+
return prepareEchoResponses([]*proto.RichParameter{
106+
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
107+
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
108+
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
109+
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
110+
})
111+
}
111112

112113
t.Run("ImmutableCannotBeCustomized", func(t *testing.T) {
113114
t.Parallel()
114115

115116
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
116117
owner := coderdtest.CreateFirstUser(t, client)
117118
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
118-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
119+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
119120
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
120121

121122
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
@@ -166,7 +167,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
166167
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
167168
owner := coderdtest.CreateFirstUser(t, client)
168169
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
169-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
170+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
170171
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
171172

172173
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
@@ -231,7 +232,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
231232
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
232233
owner := coderdtest.CreateFirstUser(t, client)
233234
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
234-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
235+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
235236
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
236237

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

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy