Skip to content

Commit 032150d

Browse files
committed
server tests
1 parent 17c2249 commit 032150d

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

cli/server_test.go

+140
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import (
4545
"github.com/coder/coder/v2/cli/clitest"
4646
"github.com/coder/coder/v2/cli/config"
4747
"github.com/coder/coder/v2/coderd/coderdtest"
48+
"github.com/coder/coder/v2/coderd/database"
49+
"github.com/coder/coder/v2/coderd/database/dbgen"
4850
"github.com/coder/coder/v2/coderd/database/dbtestutil"
4951
"github.com/coder/coder/v2/coderd/database/migrations"
5052
"github.com/coder/coder/v2/coderd/httpapi"
@@ -306,6 +308,144 @@ func TestServer(t *testing.T) {
306308
require.Less(t, numLines, 20)
307309
})
308310

311+
t.Run("OAuth2GitHubDefaultProvider", func(t *testing.T) {
312+
type testCase struct {
313+
name string
314+
githubDefaultProviderEnabled string
315+
githubClientID string
316+
githubClientSecret string
317+
expectGithubEnabled bool
318+
expectGithubDefaultProviderConfigured bool
319+
createUserPreStart bool
320+
createUserPostRestart bool
321+
}
322+
323+
runGitHubProviderTest := func(t *testing.T, tc testCase) {
324+
t.Parallel()
325+
if !dbtestutil.WillUsePostgres() {
326+
t.Skip("test requires postgres")
327+
}
328+
329+
ctx, cancelFunc := context.WithCancel(testutil.Context(t, testutil.WaitLong))
330+
defer cancelFunc()
331+
332+
dbURL, err := dbtestutil.Open(t)
333+
require.NoError(t, err)
334+
db, _ := dbtestutil.NewDB(t, dbtestutil.WithURL(dbURL))
335+
336+
if tc.createUserPreStart {
337+
_ = dbgen.User(t, db, database.User{})
338+
}
339+
340+
args := []string{
341+
"server",
342+
"--postgres-url", dbURL,
343+
"--http-address", ":0",
344+
}
345+
if tc.githubClientID != "" {
346+
args = append(args, fmt.Sprintf("--oauth2-github-client-id=%s", tc.githubClientID))
347+
}
348+
if tc.githubClientSecret != "" {
349+
args = append(args, fmt.Sprintf("--oauth2-github-client-secret=%s", tc.githubClientSecret))
350+
}
351+
if tc.githubClientID != "" || tc.githubClientSecret != "" {
352+
args = append(args, "--oauth2-github-allow-everyone")
353+
}
354+
if tc.githubDefaultProviderEnabled != "" {
355+
args = append(args, fmt.Sprintf("--oauth2-github-default-provider-enable=%s", tc.githubDefaultProviderEnabled))
356+
}
357+
358+
inv, cfg := clitest.New(t, args...)
359+
errChan := make(chan error, 1)
360+
go func() {
361+
errChan <- inv.WithContext(ctx).Run()
362+
}()
363+
accessURLChan := make(chan *url.URL, 1)
364+
go func() {
365+
accessURLChan <- waitAccessURL(t, cfg)
366+
}()
367+
368+
var accessURL *url.URL
369+
select {
370+
case err := <-errChan:
371+
require.NoError(t, err)
372+
case accessURL = <-accessURLChan:
373+
require.NotNil(t, accessURL)
374+
}
375+
376+
client := codersdk.New(accessURL)
377+
378+
authMethods, err := client.AuthMethods(ctx)
379+
require.NoError(t, err)
380+
require.Equal(t, tc.expectGithubEnabled, authMethods.Github.Enabled)
381+
require.Equal(t, tc.expectGithubDefaultProviderConfigured, authMethods.Github.DefaultProviderConfigured)
382+
383+
cancelFunc()
384+
select {
385+
case err := <-errChan:
386+
require.NoError(t, err)
387+
case <-time.After(testutil.WaitLong):
388+
t.Fatal("server did not exit")
389+
}
390+
391+
if tc.createUserPostRestart {
392+
_ = dbgen.User(t, db, database.User{})
393+
}
394+
395+
// Ensure that it stays at that setting after the server restarts.
396+
inv, cfg = clitest.New(t, args...)
397+
clitest.Start(t, inv)
398+
accessURL = waitAccessURL(t, cfg)
399+
client = codersdk.New(accessURL)
400+
401+
ctx = testutil.Context(t, testutil.WaitLong)
402+
authMethods, err = client.AuthMethods(ctx)
403+
require.NoError(t, err)
404+
require.Equal(t, tc.expectGithubEnabled, authMethods.Github.Enabled)
405+
require.Equal(t, tc.expectGithubDefaultProviderConfigured, authMethods.Github.DefaultProviderConfigured)
406+
}
407+
408+
for _, tc := range []testCase{
409+
{
410+
name: "NewDeployment",
411+
expectGithubEnabled: true,
412+
expectGithubDefaultProviderConfigured: true,
413+
createUserPreStart: false,
414+
createUserPostRestart: true,
415+
},
416+
{
417+
name: "ExistingDeployment",
418+
expectGithubEnabled: false,
419+
expectGithubDefaultProviderConfigured: false,
420+
createUserPreStart: true,
421+
createUserPostRestart: false,
422+
},
423+
{
424+
name: "ManuallyDisabled",
425+
githubDefaultProviderEnabled: "false",
426+
expectGithubEnabled: false,
427+
expectGithubDefaultProviderConfigured: false,
428+
},
429+
{
430+
name: "ConfiguredClientID",
431+
githubClientID: "123",
432+
expectGithubEnabled: true,
433+
expectGithubDefaultProviderConfigured: false,
434+
},
435+
{
436+
name: "ConfiguredClientSecret",
437+
githubClientSecret: "456",
438+
expectGithubEnabled: true,
439+
expectGithubDefaultProviderConfigured: false,
440+
},
441+
} {
442+
tc := tc
443+
t.Run(tc.name, func(t *testing.T) {
444+
runGitHubProviderTest(t, tc)
445+
})
446+
}
447+
})
448+
309449
// Validate that a warning is printed that it may not be externally
310450
// reachable.
311451
t.Run("LocalAccessURL", func(t *testing.T) {

0 commit comments

Comments
 (0)