Skip to content

Commit 37a859f

Browse files
authored
chore(testutil): add testutil.GetRandomName that does not return duplicates (coder#14020)
Fixes coder#13910 Adds testutil.GetRandomName that replaces namesgenerator.GetRandomName but instead appends a monotonically increasing integer instead of a number between 1 and 10.
1 parent 96011e1 commit 37a859f

File tree

5 files changed

+78
-56
lines changed

5 files changed

+78
-56
lines changed

coderd/database/dbgen/dbgen.go

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"time"
1414

1515
"github.com/google/uuid"
16-
"github.com/moby/moby/pkg/namesgenerator"
1716
"github.com/sqlc-dev/pqtype"
1817
"github.com/stretchr/testify/require"
1918

@@ -25,6 +24,7 @@ import (
2524
"github.com/coder/coder/v2/coderd/rbac"
2625
"github.com/coder/coder/v2/coderd/rbac/policy"
2726
"github.com/coder/coder/v2/cryptorand"
27+
"github.com/coder/coder/v2/testutil"
2828
)
2929

3030
// All methods take in a 'seed' object. Any provided fields in the seed will be
@@ -82,15 +82,15 @@ func Template(t testing.TB, db database.Store, seed database.Template) database.
8282
CreatedAt: takeFirst(seed.CreatedAt, dbtime.Now()),
8383
UpdatedAt: takeFirst(seed.UpdatedAt, dbtime.Now()),
8484
OrganizationID: takeFirst(seed.OrganizationID, uuid.New()),
85-
Name: takeFirst(seed.Name, namesgenerator.GetRandomName(1)),
85+
Name: takeFirst(seed.Name, testutil.GetRandomName(t)),
8686
Provisioner: takeFirst(seed.Provisioner, database.ProvisionerTypeEcho),
8787
ActiveVersionID: takeFirst(seed.ActiveVersionID, uuid.New()),
88-
Description: takeFirst(seed.Description, namesgenerator.GetRandomName(1)),
88+
Description: takeFirst(seed.Description, testutil.GetRandomName(t)),
8989
CreatedBy: takeFirst(seed.CreatedBy, uuid.New()),
90-
Icon: takeFirst(seed.Icon, namesgenerator.GetRandomName(1)),
90+
Icon: takeFirst(seed.Icon, testutil.GetRandomName(t)),
9191
UserACL: seed.UserACL,
9292
GroupACL: seed.GroupACL,
93-
DisplayName: takeFirst(seed.DisplayName, namesgenerator.GetRandomName(1)),
93+
DisplayName: takeFirst(seed.DisplayName, testutil.GetRandomName(t)),
9494
AllowUserCancelWorkspaceJobs: seed.AllowUserCancelWorkspaceJobs,
9595
MaxPortSharingLevel: takeFirst(seed.MaxPortSharingLevel, database.AppSharingLevelOwner),
9696
})
@@ -139,7 +139,7 @@ func APIKey(t testing.TB, db database.Store, seed database.APIKey) (key database
139139
func WorkspaceAgentPortShare(t testing.TB, db database.Store, orig database.WorkspaceAgentPortShare) database.WorkspaceAgentPortShare {
140140
ps, err := db.UpsertWorkspaceAgentPortShare(genCtx, database.UpsertWorkspaceAgentPortShareParams{
141141
WorkspaceID: takeFirst(orig.WorkspaceID, uuid.New()),
142-
AgentName: takeFirst(orig.AgentName, namesgenerator.GetRandomName(1)),
142+
AgentName: takeFirst(orig.AgentName, testutil.GetRandomName(t)),
143143
Port: takeFirst(orig.Port, 8080),
144144
ShareLevel: takeFirst(orig.ShareLevel, database.AppSharingLevelPublic),
145145
Protocol: takeFirst(orig.Protocol, database.PortShareProtocolHttp),
@@ -153,11 +153,11 @@ func WorkspaceAgent(t testing.TB, db database.Store, orig database.WorkspaceAgen
153153
ID: takeFirst(orig.ID, uuid.New()),
154154
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
155155
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
156-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
156+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
157157
ResourceID: takeFirst(orig.ResourceID, uuid.New()),
158158
AuthToken: takeFirst(orig.AuthToken, uuid.New()),
159159
AuthInstanceID: sql.NullString{
160-
String: takeFirst(orig.AuthInstanceID.String, namesgenerator.GetRandomName(1)),
160+
String: takeFirst(orig.AuthInstanceID.String, testutil.GetRandomName(t)),
161161
Valid: takeFirst(orig.AuthInstanceID.Valid, true),
162162
},
163163
Architecture: takeFirst(orig.Architecture, "amd64"),
@@ -196,7 +196,7 @@ func Workspace(t testing.TB, db database.Store, orig database.Workspace) databas
196196
OrganizationID: takeFirst(orig.OrganizationID, uuid.New()),
197197
TemplateID: takeFirst(orig.TemplateID, uuid.New()),
198198
LastUsedAt: takeFirst(orig.LastUsedAt, dbtime.Now()),
199-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
199+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
200200
AutostartSchedule: orig.AutostartSchedule,
201201
Ttl: orig.Ttl,
202202
AutomaticUpdates: takeFirst(orig.AutomaticUpdates, database.AutomaticUpdatesNever),
@@ -210,8 +210,8 @@ func WorkspaceAgentLogSource(t testing.TB, db database.Store, orig database.Work
210210
WorkspaceAgentID: takeFirst(orig.WorkspaceAgentID, uuid.New()),
211211
ID: []uuid.UUID{takeFirst(orig.ID, uuid.New())},
212212
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
213-
DisplayName: []string{takeFirst(orig.DisplayName, namesgenerator.GetRandomName(1))},
214-
Icon: []string{takeFirst(orig.Icon, namesgenerator.GetRandomName(1))},
213+
DisplayName: []string{takeFirst(orig.DisplayName, testutil.GetRandomName(t))},
214+
Icon: []string{takeFirst(orig.Icon, testutil.GetRandomName(t))},
215215
})
216216
require.NoError(t, err, "insert workspace agent log source")
217217
return sources[0]
@@ -287,9 +287,9 @@ func WorkspaceBuildParameters(t testing.TB, db database.Store, orig []database.W
287287
func User(t testing.TB, db database.Store, orig database.User) database.User {
288288
user, err := db.InsertUser(genCtx, database.InsertUserParams{
289289
ID: takeFirst(orig.ID, uuid.New()),
290-
Email: takeFirst(orig.Email, namesgenerator.GetRandomName(1)),
291-
Username: takeFirst(orig.Username, namesgenerator.GetRandomName(1)),
292-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
290+
Email: takeFirst(orig.Email, testutil.GetRandomName(t)),
291+
Username: takeFirst(orig.Username, testutil.GetRandomName(t)),
292+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
293293
HashedPassword: takeFirstSlice(orig.HashedPassword, []byte(must(cryptorand.String(32)))),
294294
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
295295
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
@@ -336,9 +336,9 @@ func GitSSHKey(t testing.TB, db database.Store, orig database.GitSSHKey) databas
336336
func Organization(t testing.TB, db database.Store, orig database.Organization) database.Organization {
337337
org, err := db.InsertOrganization(genCtx, database.InsertOrganizationParams{
338338
ID: takeFirst(orig.ID, uuid.New()),
339-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
340-
DisplayName: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
341-
Description: takeFirst(orig.Description, namesgenerator.GetRandomName(1)),
339+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
340+
DisplayName: takeFirst(orig.Name, testutil.GetRandomName(t)),
341+
Description: takeFirst(orig.Description, testutil.GetRandomName(t)),
342342
Icon: takeFirst(orig.Icon, ""),
343343
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
344344
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
@@ -360,7 +360,7 @@ func OrganizationMember(t testing.TB, db database.Store, orig database.Organizat
360360
}
361361

362362
func Group(t testing.TB, db database.Store, orig database.Group) database.Group {
363-
name := takeFirst(orig.Name, namesgenerator.GetRandomName(1))
363+
name := takeFirst(orig.Name, testutil.GetRandomName(t))
364364
group, err := db.InsertGroup(genCtx, database.InsertGroupParams{
365365
ID: takeFirst(orig.ID, uuid.New()),
366366
Name: name,
@@ -470,7 +470,7 @@ func ProvisionerKey(t testing.TB, db database.Store, orig database.ProvisionerKe
470470
ID: takeFirst(orig.ID, uuid.New()),
471471
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
472472
OrganizationID: takeFirst(orig.OrganizationID, uuid.New()),
473-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
473+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
474474
HashedSecret: orig.HashedSecret,
475475
Tags: orig.Tags,
476476
})
@@ -483,9 +483,9 @@ func WorkspaceApp(t testing.TB, db database.Store, orig database.WorkspaceApp) d
483483
ID: takeFirst(orig.ID, uuid.New()),
484484
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
485485
AgentID: takeFirst(orig.AgentID, uuid.New()),
486-
Slug: takeFirst(orig.Slug, namesgenerator.GetRandomName(1)),
487-
DisplayName: takeFirst(orig.DisplayName, namesgenerator.GetRandomName(1)),
488-
Icon: takeFirst(orig.Icon, namesgenerator.GetRandomName(1)),
486+
Slug: takeFirst(orig.Slug, testutil.GetRandomName(t)),
487+
DisplayName: takeFirst(orig.DisplayName, testutil.GetRandomName(t)),
488+
Icon: takeFirst(orig.Icon, testutil.GetRandomName(t)),
489489
Command: sql.NullString{
490490
String: takeFirst(orig.Command.String, "ls"),
491491
Valid: orig.Command.Valid,
@@ -546,7 +546,7 @@ func WorkspaceResource(t testing.TB, db database.Store, orig database.WorkspaceR
546546
JobID: takeFirst(orig.JobID, uuid.New()),
547547
Transition: takeFirst(orig.Transition, database.WorkspaceTransitionStart),
548548
Type: takeFirst(orig.Type, "fake_resource"),
549-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
549+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
550550
Hide: takeFirst(orig.Hide, false),
551551
Icon: takeFirst(orig.Icon, ""),
552552
InstanceType: sql.NullString{
@@ -562,8 +562,8 @@ func WorkspaceResource(t testing.TB, db database.Store, orig database.WorkspaceR
562562
func WorkspaceResourceMetadatums(t testing.TB, db database.Store, seed database.WorkspaceResourceMetadatum) []database.WorkspaceResourceMetadatum {
563563
meta, err := db.InsertWorkspaceResourceMetadata(genCtx, database.InsertWorkspaceResourceMetadataParams{
564564
WorkspaceResourceID: takeFirst(seed.WorkspaceResourceID, uuid.New()),
565-
Key: []string{takeFirst(seed.Key, namesgenerator.GetRandomName(1))},
566-
Value: []string{takeFirst(seed.Value.String, namesgenerator.GetRandomName(1))},
565+
Key: []string{takeFirst(seed.Key, testutil.GetRandomName(t))},
566+
Value: []string{takeFirst(seed.Value.String, testutil.GetRandomName(t))},
567567
Sensitive: []bool{takeFirst(seed.Sensitive, false)},
568568
})
569569
require.NoError(t, err, "insert meta data")
@@ -577,9 +577,9 @@ func WorkspaceProxy(t testing.TB, db database.Store, orig database.WorkspaceProx
577577

578578
proxy, err := db.InsertWorkspaceProxy(genCtx, database.InsertWorkspaceProxyParams{
579579
ID: takeFirst(orig.ID, uuid.New()),
580-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
581-
DisplayName: takeFirst(orig.DisplayName, namesgenerator.GetRandomName(1)),
582-
Icon: takeFirst(orig.Icon, namesgenerator.GetRandomName(1)),
580+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
581+
DisplayName: takeFirst(orig.DisplayName, testutil.GetRandomName(t)),
582+
Icon: takeFirst(orig.Icon, testutil.GetRandomName(t)),
583583
TokenHashedSecret: hashedSecret[:],
584584
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
585585
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
@@ -659,9 +659,9 @@ func TemplateVersion(t testing.TB, db database.Store, orig database.TemplateVers
659659
OrganizationID: takeFirst(orig.OrganizationID, uuid.New()),
660660
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
661661
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
662-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
662+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
663663
Message: orig.Message,
664-
Readme: takeFirst(orig.Readme, namesgenerator.GetRandomName(1)),
664+
Readme: takeFirst(orig.Readme, testutil.GetRandomName(t)),
665665
JobID: takeFirst(orig.JobID, uuid.New()),
666666
CreatedBy: takeFirst(orig.CreatedBy, uuid.New()),
667667
})
@@ -683,11 +683,11 @@ func TemplateVersion(t testing.TB, db database.Store, orig database.TemplateVers
683683
func TemplateVersionVariable(t testing.TB, db database.Store, orig database.TemplateVersionVariable) database.TemplateVersionVariable {
684684
version, err := db.InsertTemplateVersionVariable(genCtx, database.InsertTemplateVersionVariableParams{
685685
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
686-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
687-
Description: takeFirst(orig.Description, namesgenerator.GetRandomName(1)),
686+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
687+
Description: takeFirst(orig.Description, testutil.GetRandomName(t)),
688688
Type: takeFirst(orig.Type, "string"),
689689
Value: takeFirst(orig.Value, ""),
690-
DefaultValue: takeFirst(orig.DefaultValue, namesgenerator.GetRandomName(1)),
690+
DefaultValue: takeFirst(orig.DefaultValue, testutil.GetRandomName(t)),
691691
Required: takeFirst(orig.Required, false),
692692
Sensitive: takeFirst(orig.Sensitive, false),
693693
})
@@ -698,8 +698,8 @@ func TemplateVersionVariable(t testing.TB, db database.Store, orig database.Temp
698698
func TemplateVersionWorkspaceTag(t testing.TB, db database.Store, orig database.TemplateVersionWorkspaceTag) database.TemplateVersionWorkspaceTag {
699699
workspaceTag, err := db.InsertTemplateVersionWorkspaceTag(genCtx, database.InsertTemplateVersionWorkspaceTagParams{
700700
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
701-
Key: takeFirst(orig.Key, namesgenerator.GetRandomName(1)),
702-
Value: takeFirst(orig.Value, namesgenerator.GetRandomName(1)),
701+
Key: takeFirst(orig.Key, testutil.GetRandomName(t)),
702+
Value: takeFirst(orig.Value, testutil.GetRandomName(t)),
703703
})
704704
require.NoError(t, err, "insert template version workspace tag")
705705
return workspaceTag
@@ -710,20 +710,20 @@ func TemplateVersionParameter(t testing.TB, db database.Store, orig database.Tem
710710

711711
version, err := db.InsertTemplateVersionParameter(genCtx, database.InsertTemplateVersionParameterParams{
712712
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
713-
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
714-
Description: takeFirst(orig.Description, namesgenerator.GetRandomName(1)),
713+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
714+
Description: takeFirst(orig.Description, testutil.GetRandomName(t)),
715715
Type: takeFirst(orig.Type, "string"),
716716
Mutable: takeFirst(orig.Mutable, false),
717-
DefaultValue: takeFirst(orig.DefaultValue, namesgenerator.GetRandomName(1)),
718-
Icon: takeFirst(orig.Icon, namesgenerator.GetRandomName(1)),
717+
DefaultValue: takeFirst(orig.DefaultValue, testutil.GetRandomName(t)),
718+
Icon: takeFirst(orig.Icon, testutil.GetRandomName(t)),
719719
Options: takeFirstSlice(orig.Options, []byte("[]")),
720720
ValidationRegex: takeFirst(orig.ValidationRegex, ""),
721721
ValidationMin: takeFirst(orig.ValidationMin, sql.NullInt32{}),
722722
ValidationMax: takeFirst(orig.ValidationMax, sql.NullInt32{}),
723723
ValidationError: takeFirst(orig.ValidationError, ""),
724724
ValidationMonotonic: takeFirst(orig.ValidationMonotonic, ""),
725725
Required: takeFirst(orig.Required, false),
726-
DisplayName: takeFirst(orig.DisplayName, namesgenerator.GetRandomName(1)),
726+
DisplayName: takeFirst(orig.DisplayName, testutil.GetRandomName(t)),
727727
DisplayOrder: takeFirst(orig.DisplayOrder, 0),
728728
Ephemeral: takeFirst(orig.Ephemeral, false),
729729
})
@@ -783,7 +783,7 @@ func WorkspaceAgentStat(t testing.TB, db database.Store, orig database.Workspace
783783
func OAuth2ProviderApp(t testing.TB, db database.Store, seed database.OAuth2ProviderApp) database.OAuth2ProviderApp {
784784
app, err := db.InsertOAuth2ProviderApp(genCtx, database.InsertOAuth2ProviderAppParams{
785785
ID: takeFirst(seed.ID, uuid.New()),
786-
Name: takeFirst(seed.Name, namesgenerator.GetRandomName(1)),
786+
Name: takeFirst(seed.Name, testutil.GetRandomName(t)),
787787
CreatedAt: takeFirst(seed.CreatedAt, dbtime.Now()),
788788
UpdatedAt: takeFirst(seed.UpdatedAt, dbtime.Now()),
789789
Icon: takeFirst(seed.Icon, ""),
@@ -836,8 +836,8 @@ func OAuth2ProviderAppToken(t testing.TB, db database.Store, seed database.OAuth
836836

837837
func CustomRole(t testing.TB, db database.Store, seed database.CustomRole) database.CustomRole {
838838
role, err := db.UpsertCustomRole(genCtx, database.UpsertCustomRoleParams{
839-
Name: takeFirst(seed.Name, strings.ToLower(namesgenerator.GetRandomName(1))),
840-
DisplayName: namesgenerator.GetRandomName(1),
839+
Name: takeFirst(seed.Name, strings.ToLower(testutil.GetRandomName(t))),
840+
DisplayName: testutil.GetRandomName(t),
841841
OrganizationID: seed.OrganizationID,
842842
SitePermissions: takeFirstSlice(seed.SitePermissions, []database.CustomRolePermission{}),
843843
OrgPermissions: takeFirstSlice(seed.SitePermissions, []database.CustomRolePermission{}),

coderd/httpapi/name_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import (
44
"strings"
55
"testing"
66

7-
"github.com/moby/moby/pkg/namesgenerator"
87
"github.com/stretchr/testify/assert"
98
"github.com/stretchr/testify/require"
109

1110
"github.com/coder/coder/v2/coderd/httpapi"
11+
"github.com/coder/coder/v2/testutil"
1212
)
1313

1414
func TestUsernameValid(t *testing.T) {
@@ -168,7 +168,7 @@ func TestGeneratedTemplateVersionNameValid(t *testing.T) {
168168
t.Parallel()
169169

170170
for i := 0; i < 1000; i++ {
171-
name := namesgenerator.GetRandomName(1)
171+
name := testutil.GetRandomName(t)
172172
err := httpapi.TemplateVersionNameValid(name)
173173
require.NoError(t, err, "invalid template version name: %s", name)
174174
}

coderd/httpmw/oauth2_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import (
77
"net/url"
88
"testing"
99

10-
"github.com/moby/moby/pkg/namesgenerator"
1110
"github.com/stretchr/testify/assert"
1211
"github.com/stretchr/testify/require"
1312
"golang.org/x/oauth2"
1413

1514
"github.com/coder/coder/v2/coderd/httpmw"
1615
"github.com/coder/coder/v2/codersdk"
16+
"github.com/coder/coder/v2/testutil"
1717
)
1818

1919
type testOAuth2Provider struct {
@@ -128,7 +128,7 @@ func TestOAuth2(t *testing.T) {
128128
})
129129
t.Run("PresetConvertState", func(t *testing.T) {
130130
t.Parallel()
131-
customState := namesgenerator.GetRandomName(1)
131+
customState := testutil.GetRandomName(t)
132132
req := httptest.NewRequest("GET", "/?oidc_merge_state="+customState+"&redirect="+url.QueryEscape("/dashboard"), nil)
133133
res := httptest.NewRecorder()
134134
tp := newTestOAuth2Provider(t, oauth2.AccessTypeOffline)

0 commit comments

Comments
 (0)