Skip to content

Commit b7dd560

Browse files
committed
more test coverage
1 parent 7352253 commit b7dd560

File tree

4 files changed

+55
-36
lines changed

4 files changed

+55
-36
lines changed

coderd/externalauth/externalauth_test.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/coreos/go-oidc/v3/oidc"
1313
"github.com/golang-jwt/jwt/v4"
1414
"github.com/google/uuid"
15+
"github.com/prometheus/client_golang/prometheus"
1516
"github.com/stretchr/testify/require"
1617
"golang.org/x/oauth2"
1718
"golang.org/x/xerrors"
@@ -22,6 +23,7 @@ import (
2223
"github.com/coder/coder/v2/coderd/database/dbauthz"
2324
"github.com/coder/coder/v2/coderd/database/dbmem"
2425
"github.com/coder/coder/v2/coderd/externalauth"
26+
"github.com/coder/coder/v2/coderd/promoauth"
2527
"github.com/coder/coder/v2/codersdk"
2628
"github.com/coder/coder/v2/testutil"
2729
)
@@ -94,7 +96,7 @@ func TestRefreshToken(t *testing.T) {
9496
t.Run("FalseIfTokenSourceFails", func(t *testing.T) {
9597
t.Parallel()
9698
config := &externalauth.Config{
97-
OAuth2Config: &testutil.OAuth2Config{
99+
InstrumentedOAuth2Config: &testutil.OAuth2Config{
98100
TokenSourceFunc: func() (*oauth2.Token, error) {
99101
return nil, xerrors.New("failure")
100102
},
@@ -301,9 +303,10 @@ func TestRefreshToken(t *testing.T) {
301303

302304
func TestExchangeWithClientSecret(t *testing.T) {
303305
t.Parallel()
306+
instrument := promoauth.NewFactory(prometheus.NewRegistry())
304307
// This ensures a provider that requires the custom
305308
// client secret exchange works.
306-
configs, err := externalauth.ConvertConfig([]codersdk.ExternalAuthConfig{{
309+
configs, err := externalauth.ConvertConfig(instrument, []codersdk.ExternalAuthConfig{{
307310
// JFrog just happens to require this custom type.
308311

309312
Type: codersdk.EnhancedExternalAuthProviderJFrog.String(),
@@ -335,6 +338,8 @@ func TestExchangeWithClientSecret(t *testing.T) {
335338

336339
func TestConvertYAML(t *testing.T) {
337340
t.Parallel()
341+
342+
instrument := promoauth.NewFactory(prometheus.NewRegistry())
338343
for _, tc := range []struct {
339344
Name string
340345
Input []codersdk.ExternalAuthConfig
@@ -387,7 +392,7 @@ func TestConvertYAML(t *testing.T) {
387392
tc := tc
388393
t.Run(tc.Name, func(t *testing.T) {
389394
t.Parallel()
390-
output, err := externalauth.ConvertConfig(tc.Input, &url.URL{})
395+
output, err := externalauth.ConvertConfig(instrument, tc.Input, &url.URL{})
391396
if tc.Error != "" {
392397
require.Error(t, err)
393398
require.Contains(t, err.Error(), tc.Error)
@@ -399,7 +404,7 @@ func TestConvertYAML(t *testing.T) {
399404

400405
t.Run("CustomScopesAndEndpoint", func(t *testing.T) {
401406
t.Parallel()
402-
config, err := externalauth.ConvertConfig([]codersdk.ExternalAuthConfig{{
407+
config, err := externalauth.ConvertConfig(instrument, []codersdk.ExternalAuthConfig{{
403408
Type: string(codersdk.EnhancedExternalAuthProviderGitLab),
404409
ClientID: "id",
405410
ClientSecret: "secret",
@@ -433,10 +438,12 @@ func setupOauth2Test(t *testing.T, settings testConfig) (*oidctest.FakeIDP, *ext
433438
append([]oidctest.FakeIDPOpt{}, settings.FakeIDPOpts...)...,
434439
)
435440

441+
f := promoauth.NewFactory(prometheus.NewRegistry())
436442
config := &externalauth.Config{
437-
OAuth2Config: fake.OIDCConfig(t, nil, settings.CoderOIDCConfigOpts...),
438-
ID: providerID,
439-
ValidateURL: fake.WellknownConfig().UserInfoURL,
443+
InstrumentedOAuth2Config: f.New("test-oauth2",
444+
fake.OIDCConfig(t, nil, settings.CoderOIDCConfigOpts...)),
445+
ID: providerID,
446+
ValidateURL: fake.WellknownConfig().UserInfoURL,
440447
}
441448
settings.ExternalAuthOpt(config)
442449

coderd/externalauth_test.go

+22-22
Original file line numberDiff line numberDiff line change
@@ -316,10 +316,10 @@ func TestExternalAuthCallback(t *testing.T) {
316316
client := coderdtest.New(t, &coderdtest.Options{
317317
IncludeProvisionerDaemon: true,
318318
ExternalAuthConfigs: []*externalauth.Config{{
319-
OAuth2Config: &testutil.OAuth2Config{},
320-
ID: "github",
321-
Regex: regexp.MustCompile(`github\.com`),
322-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
319+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
320+
ID: "github",
321+
Regex: regexp.MustCompile(`github\.com`),
322+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
323323
}},
324324
})
325325
user := coderdtest.CreateFirstUser(t, client)
@@ -347,10 +347,10 @@ func TestExternalAuthCallback(t *testing.T) {
347347
client := coderdtest.New(t, &coderdtest.Options{
348348
IncludeProvisionerDaemon: true,
349349
ExternalAuthConfigs: []*externalauth.Config{{
350-
OAuth2Config: &testutil.OAuth2Config{},
351-
ID: "github",
352-
Regex: regexp.MustCompile(`github\.com`),
353-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
350+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
351+
ID: "github",
352+
Regex: regexp.MustCompile(`github\.com`),
353+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
354354
}},
355355
})
356356
resp := coderdtest.RequestExternalAuthCallback(t, "github", client)
@@ -361,10 +361,10 @@ func TestExternalAuthCallback(t *testing.T) {
361361
client := coderdtest.New(t, &coderdtest.Options{
362362
IncludeProvisionerDaemon: true,
363363
ExternalAuthConfigs: []*externalauth.Config{{
364-
OAuth2Config: &testutil.OAuth2Config{},
365-
ID: "github",
366-
Regex: regexp.MustCompile(`github\.com`),
367-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
364+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
365+
ID: "github",
366+
Regex: regexp.MustCompile(`github\.com`),
367+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
368368
}},
369369
})
370370
_ = coderdtest.CreateFirstUser(t, client)
@@ -387,11 +387,11 @@ func TestExternalAuthCallback(t *testing.T) {
387387
client := coderdtest.New(t, &coderdtest.Options{
388388
IncludeProvisionerDaemon: true,
389389
ExternalAuthConfigs: []*externalauth.Config{{
390-
ValidateURL: srv.URL,
391-
OAuth2Config: &testutil.OAuth2Config{},
392-
ID: "github",
393-
Regex: regexp.MustCompile(`github\.com`),
394-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
390+
ValidateURL: srv.URL,
391+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
392+
ID: "github",
393+
Regex: regexp.MustCompile(`github\.com`),
394+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
395395
}},
396396
})
397397
user := coderdtest.CreateFirstUser(t, client)
@@ -443,7 +443,7 @@ func TestExternalAuthCallback(t *testing.T) {
443443
client := coderdtest.New(t, &coderdtest.Options{
444444
IncludeProvisionerDaemon: true,
445445
ExternalAuthConfigs: []*externalauth.Config{{
446-
OAuth2Config: &testutil.OAuth2Config{
446+
InstrumentedOAuth2Config: &testutil.OAuth2Config{
447447
Token: &oauth2.Token{
448448
AccessToken: "token",
449449
RefreshToken: "something",
@@ -497,10 +497,10 @@ func TestExternalAuthCallback(t *testing.T) {
497497
client := coderdtest.New(t, &coderdtest.Options{
498498
IncludeProvisionerDaemon: true,
499499
ExternalAuthConfigs: []*externalauth.Config{{
500-
OAuth2Config: &testutil.OAuth2Config{},
501-
ID: "github",
502-
Regex: regexp.MustCompile(`github\.com`),
503-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
500+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
501+
ID: "github",
502+
Regex: regexp.MustCompile(`github\.com`),
503+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
504504
}},
505505
})
506506
user := coderdtest.CreateFirstUser(t, client)

coderd/promoauth/oauth2_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ import (
1010
"github.com/stretchr/testify/require"
1111

1212
"github.com/coder/coder/v2/coderd/coderdtest/oidctest"
13+
"github.com/coder/coder/v2/coderd/externalauth"
1314
"github.com/coder/coder/v2/coderd/promoauth"
1415
"github.com/coder/coder/v2/testutil"
1516
)
1617

17-
func TestMaintainDefault(t *testing.T) {
18+
func TestInstrument(t *testing.T) {
1819
t.Parallel()
1920

2021
ctx := testutil.Context(t, testutil.WaitShort)
@@ -25,7 +26,12 @@ func TestMaintainDefault(t *testing.T) {
2526
}
2627

2728
factory := promoauth.NewFactory(reg)
28-
cfg := factory.New("test", idp.OIDCConfig(t, []string{}))
29+
const id = "test"
30+
cfg := externalauth.Config{
31+
InstrumentedOAuth2Config: factory.New(id, idp.OIDCConfig(t, []string{})),
32+
ID: "test",
33+
ValidateURL: must(idp.IssuerURL().Parse("/oauth2/userinfo")).String(),
34+
}
2935

3036
// 0 Requests before we start
3137
require.Equal(t, count(), 0)
@@ -44,6 +50,12 @@ func TestMaintainDefault(t *testing.T) {
4450
require.NotEqual(t, token.AccessToken, refreshed.AccessToken, "token refreshed")
4551
require.Equal(t, count(), 2)
4652

53+
// Try a validate
54+
valid, _, err := cfg.ValidateToken(ctx, refreshed.AccessToken)
55+
require.NoError(t, err)
56+
require.True(t, valid)
57+
require.Equal(t, count(), 3)
58+
4759
// Verify the default client was not broken. This check is added because we
4860
// extend the http.DefaultTransport. If a `.Clone()` is not done, this can be
4961
// mis-used. It is cheap to run this quick check.
@@ -56,7 +68,7 @@ func TestMaintainDefault(t *testing.T) {
5668
require.NoError(t, err)
5769
_ = resp.Body.Close()
5870

59-
require.Equal(t, count(), 2)
71+
require.Equal(t, count(), 3)
6072
}
6173

6274
func must[V any](v V, err error) V {

coderd/templateversions_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,10 @@ func TestTemplateVersionsExternalAuth(t *testing.T) {
335335
client := coderdtest.New(t, &coderdtest.Options{
336336
IncludeProvisionerDaemon: true,
337337
ExternalAuthConfigs: []*externalauth.Config{{
338-
OAuth2Config: &testutil.OAuth2Config{},
339-
ID: "github",
340-
Regex: regexp.MustCompile(`github\.com`),
341-
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
338+
InstrumentedOAuth2Config: &testutil.OAuth2Config{},
339+
ID: "github",
340+
Regex: regexp.MustCompile(`github\.com`),
341+
Type: codersdk.EnhancedExternalAuthProviderGitHub.String(),
342342
}},
343343
})
344344
user := coderdtest.CreateFirstUser(t, client)

0 commit comments

Comments
 (0)