mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
fix: avoid sharing echo.Responses
across tests (#17211)
Closes https://github.com/coder/internal/issues/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 https://github.com/coder/coder/pull/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 https://github.com/coder/coder/pull/17128, but I believe this is all the cases where an `echo.Responses` is shared between tests - including tests that haven't flaked (yet).
This commit is contained in:
@ -20,7 +20,8 @@ import (
|
|||||||
func TestRestart(t *testing.T) {
|
func TestRestart(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
echoResponses := prepareEchoResponses([]*proto.RichParameter{
|
echoResponses := func() *echo.Responses {
|
||||||
|
return prepareEchoResponses([]*proto.RichParameter{
|
||||||
{
|
{
|
||||||
Name: ephemeralParameterName,
|
Name: ephemeralParameterName,
|
||||||
Description: ephemeralParameterDescription,
|
Description: ephemeralParameterDescription,
|
||||||
@ -28,6 +29,7 @@ func TestRestart(t *testing.T) {
|
|||||||
Ephemeral: true,
|
Ephemeral: true,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
t.Run("OK", func(t *testing.T) {
|
t.Run("OK", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -66,7 +68,7 @@ func TestRestart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
@ -120,7 +122,7 @@ func TestRestart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
@ -174,7 +176,7 @@ func TestRestart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
@ -228,7 +230,7 @@ func TestRestart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
@ -280,7 +282,8 @@ func TestRestart(t *testing.T) {
|
|||||||
func TestRestartWithParameters(t *testing.T) {
|
func TestRestartWithParameters(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
echoResponses := &echo.Responses{
|
echoResponses := func() *echo.Responses {
|
||||||
|
return &echo.Responses{
|
||||||
Parse: echo.ParseComplete,
|
Parse: echo.ParseComplete,
|
||||||
ProvisionPlan: []*proto.Response{
|
ProvisionPlan: []*proto.Response{
|
||||||
{
|
{
|
||||||
@ -299,6 +302,7 @@ func TestRestartWithParameters(t *testing.T) {
|
|||||||
},
|
},
|
||||||
ProvisionApply: echo.ApplyComplete,
|
ProvisionApply: echo.ApplyComplete,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t.Run("DoNotAskForImmutables", func(t *testing.T) {
|
t.Run("DoNotAskForImmutables", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -307,7 +311,7 @@ func TestRestartWithParameters(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
|
||||||
|
@ -79,7 +79,8 @@ var (
|
|||||||
func TestStart(t *testing.T) {
|
func TestStart(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
echoResponses := &echo.Responses{
|
echoResponses := func() *echo.Responses {
|
||||||
|
return &echo.Responses{
|
||||||
Parse: echo.ParseComplete,
|
Parse: echo.ParseComplete,
|
||||||
ProvisionPlan: []*proto.Response{
|
ProvisionPlan: []*proto.Response{
|
||||||
{
|
{
|
||||||
@ -99,6 +100,7 @@ func TestStart(t *testing.T) {
|
|||||||
},
|
},
|
||||||
ProvisionApply: echo.ApplyComplete,
|
ProvisionApply: echo.ApplyComplete,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t.Run("BuildOptions", func(t *testing.T) {
|
t.Run("BuildOptions", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -106,7 +108,7 @@ func TestStart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
@ -160,7 +162,7 @@ func TestStart(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
workspace := coderdtest.CreateWorkspace(t, member, template.ID)
|
||||||
|
@ -101,13 +101,14 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
|||||||
immutableParameterValue = "4"
|
immutableParameterValue = "4"
|
||||||
)
|
)
|
||||||
|
|
||||||
echoResponses := prepareEchoResponses([]*proto.RichParameter{
|
echoResponses := func() *echo.Responses {
|
||||||
|
return prepareEchoResponses([]*proto.RichParameter{
|
||||||
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
|
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
|
||||||
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
|
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
|
||||||
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
|
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
|
||||||
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
|
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
|
||||||
},
|
})
|
||||||
)
|
}
|
||||||
|
|
||||||
t.Run("ImmutableCannotBeCustomized", func(t *testing.T) {
|
t.Run("ImmutableCannotBeCustomized", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -115,7 +116,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
|
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
@ -166,7 +167,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
|
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
@ -231,7 +232,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
|||||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
member, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
|
||||||
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses)
|
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, echoResponses())
|
||||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||||
|
|
||||||
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
|
||||||
|
Reference in New Issue
Block a user