Skip to content

Commit 9a15225

Browse files
committed
server tests
1 parent 824e84a commit 9a15225

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

cli/server_test.go

Lines changed: 140 additions & 0 deletions
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)
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