@@ -6,10 +6,8 @@ import (
6
6
"encoding/json"
7
7
"fmt"
8
8
"io"
9
- "net"
10
9
"net/http"
11
10
"net/http/httptest"
12
- "slices"
13
11
"strings"
14
12
"sync/atomic"
15
13
"testing"
@@ -18,12 +16,13 @@ import (
18
16
"github.com/google/uuid"
19
17
"github.com/stretchr/testify/assert"
20
18
"github.com/stretchr/testify/require"
19
+ "golang.org/x/exp/slices"
21
20
"golang.org/x/oauth2"
22
21
23
22
"github.com/coder/coder/v2/coderd/database"
24
23
"github.com/coder/coder/v2/coderd/database/dbauthz"
25
24
"github.com/coder/coder/v2/coderd/database/dbgen"
26
- "github.com/coder/coder/v2/coderd/database/dbmem "
25
+ "github.com/coder/coder/v2/coderd/database/dbtestutil "
27
26
"github.com/coder/coder/v2/coderd/database/dbtime"
28
27
"github.com/coder/coder/v2/coderd/httpapi"
29
28
"github.com/coder/coder/v2/coderd/httpmw"
@@ -83,9 +82,9 @@ func TestAPIKey(t *testing.T) {
83
82
t .Run ("NoCookie" ,func (t * testing.T ) {
84
83
t .Parallel ()
85
84
var (
86
- db = dbmem . New ( )
87
- r = httptest .NewRequest ("GET" ,"/" ,nil )
88
- rw = httptest .NewRecorder ()
85
+ db , _ = dbtestutil . NewDB ( t )
86
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
87
+ rw = httptest .NewRecorder ()
89
88
)
90
89
httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
91
90
DB :db ,
@@ -99,9 +98,9 @@ func TestAPIKey(t *testing.T) {
99
98
t .Run ("NoCookieRedirects" ,func (t * testing.T ) {
100
99
t .Parallel ()
101
100
var (
102
- db = dbmem . New ( )
103
- r = httptest .NewRequest ("GET" ,"/" ,nil )
104
- rw = httptest .NewRecorder ()
101
+ db , _ = dbtestutil . NewDB ( t )
102
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
103
+ rw = httptest .NewRecorder ()
105
104
)
106
105
httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
107
106
DB :db ,
@@ -118,9 +117,9 @@ func TestAPIKey(t *testing.T) {
118
117
t .Run ("InvalidFormat" ,func (t * testing.T ) {
119
118
t .Parallel ()
120
119
var (
121
- db = dbmem . New ( )
122
- r = httptest .NewRequest ("GET" ,"/" ,nil )
123
- rw = httptest .NewRecorder ()
120
+ db , _ = dbtestutil . NewDB ( t )
121
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
122
+ rw = httptest .NewRecorder ()
124
123
)
125
124
r .Header .Set (codersdk .SessionTokenHeader ,"test-wow-hello" )
126
125
@@ -136,9 +135,9 @@ func TestAPIKey(t *testing.T) {
136
135
t .Run ("InvalidIDLength" ,func (t * testing.T ) {
137
136
t .Parallel ()
138
137
var (
139
- db = dbmem . New ( )
140
- r = httptest .NewRequest ("GET" ,"/" ,nil )
141
- rw = httptest .NewRecorder ()
138
+ db , _ = dbtestutil . NewDB ( t )
139
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
140
+ rw = httptest .NewRecorder ()
142
141
)
143
142
r .Header .Set (codersdk .SessionTokenHeader ,"test-wow" )
144
143
@@ -154,9 +153,9 @@ func TestAPIKey(t *testing.T) {
154
153
t .Run ("InvalidSecretLength" ,func (t * testing.T ) {
155
154
t .Parallel ()
156
155
var (
157
- db = dbmem . New ( )
158
- r = httptest .NewRequest ("GET" ,"/" ,nil )
159
- rw = httptest .NewRecorder ()
156
+ db , _ = dbtestutil . NewDB ( t )
157
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
158
+ rw = httptest .NewRecorder ()
160
159
)
161
160
r .Header .Set (codersdk .SessionTokenHeader ,"testtestid-wow" )
162
161
@@ -172,7 +171,7 @@ func TestAPIKey(t *testing.T) {
172
171
t .Run ("NotFound" ,func (t * testing.T ) {
173
172
t .Parallel ()
174
173
var (
175
- db = dbmem . New ( )
174
+ db , _ = dbtestutil . NewDB ( t )
176
175
id ,secret = randomAPIKeyParts ()
177
176
r = httptest .NewRequest ("GET" ,"/" ,nil )
178
177
rw = httptest .NewRecorder ()
@@ -191,10 +190,10 @@ func TestAPIKey(t *testing.T) {
191
190
t .Run ("UserLinkNotFound" ,func (t * testing.T ) {
192
191
t .Parallel ()
193
192
var (
194
- db = dbmem . New ( )
195
- r = httptest .NewRequest ("GET" ,"/" ,nil )
196
- rw = httptest .NewRecorder ()
197
- user = dbgen .User (t ,db , database.User {
193
+ db , _ = dbtestutil . NewDB ( t )
194
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
195
+ rw = httptest .NewRecorder ()
196
+ user = dbgen .User (t ,db , database.User {
198
197
LoginType :database .LoginTypeGithub ,
199
198
})
200
199
// Intentionally not inserting any user link
@@ -219,10 +218,10 @@ func TestAPIKey(t *testing.T) {
219
218
t .Run ("InvalidSecret" ,func (t * testing.T ) {
220
219
t .Parallel ()
221
220
var (
222
- db = dbmem . New ( )
223
- r = httptest .NewRequest ("GET" ,"/" ,nil )
224
- rw = httptest .NewRecorder ()
225
- user = dbgen .User (t ,db , database.User {})
221
+ db , _ = dbtestutil . NewDB ( t )
222
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
223
+ rw = httptest .NewRecorder ()
224
+ user = dbgen .User (t ,db , database.User {})
226
225
227
226
// Use a different secret so they don't match!
228
227
hashed = sha256 .Sum256 ([]byte ("differentsecret" ))
@@ -244,7 +243,7 @@ func TestAPIKey(t *testing.T) {
244
243
t .Run ("Expired" ,func (t * testing.T ) {
245
244
t .Parallel ()
246
245
var (
247
- db = dbmem . New ( )
246
+ db , _ = dbtestutil . NewDB ( t )
248
247
user = dbgen .User (t ,db , database.User {})
249
248
_ ,token = dbgen .APIKey (t ,db , database.APIKey {
250
249
UserID :user .ID ,
@@ -273,7 +272,7 @@ func TestAPIKey(t *testing.T) {
273
272
t .Run ("Valid" ,func (t * testing.T ) {
274
273
t .Parallel ()
275
274
var (
276
- db = dbmem . New ( )
275
+ db , _ = dbtestutil . NewDB ( t )
277
276
user = dbgen .User (t ,db , database.User {})
278
277
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
279
278
UserID :user .ID ,
@@ -309,7 +308,7 @@ func TestAPIKey(t *testing.T) {
309
308
t .Run ("ValidWithScope" ,func (t * testing.T ) {
310
309
t .Parallel ()
311
310
var (
312
- db = dbmem . New ( )
311
+ db , _ = dbtestutil . NewDB ( t )
313
312
user = dbgen .User (t ,db , database.User {})
314
313
_ ,token = dbgen .APIKey (t ,db , database.APIKey {
315
314
UserID :user .ID ,
@@ -347,7 +346,7 @@ func TestAPIKey(t *testing.T) {
347
346
t .Run ("QueryParameter" ,func (t * testing.T ) {
348
347
t .Parallel ()
349
348
var (
350
- db = dbmem . New ( )
349
+ db , _ = dbtestutil . NewDB ( t )
351
350
user = dbgen .User (t ,db , database.User {})
352
351
_ ,token = dbgen .APIKey (t ,db , database.APIKey {
353
352
UserID :user .ID ,
@@ -381,7 +380,7 @@ func TestAPIKey(t *testing.T) {
381
380
t .Run ("ValidUpdateLastUsed" ,func (t * testing.T ) {
382
381
t .Parallel ()
383
382
var (
384
- db = dbmem . New ( )
383
+ db , _ = dbtestutil . NewDB ( t )
385
384
user = dbgen .User (t ,db , database.User {})
386
385
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
387
386
UserID :user .ID ,
@@ -412,7 +411,7 @@ func TestAPIKey(t *testing.T) {
412
411
t .Run ("ValidUpdateExpiry" ,func (t * testing.T ) {
413
412
t .Parallel ()
414
413
var (
415
- db = dbmem . New ( )
414
+ db , _ = dbtestutil . NewDB ( t )
416
415
user = dbgen .User (t ,db , database.User {})
417
416
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
418
417
UserID :user .ID ,
@@ -443,7 +442,7 @@ func TestAPIKey(t *testing.T) {
443
442
t .Run ("NoRefresh" ,func (t * testing.T ) {
444
443
t .Parallel ()
445
444
var (
446
- db = dbmem . New ( )
445
+ db , _ = dbtestutil . NewDB ( t )
447
446
user = dbgen .User (t ,db , database.User {})
448
447
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
449
448
UserID :user .ID ,
@@ -475,7 +474,7 @@ func TestAPIKey(t *testing.T) {
475
474
t .Run ("OAuthNotExpired" ,func (t * testing.T ) {
476
475
t .Parallel ()
477
476
var (
478
- db = dbmem . New ( )
477
+ db , _ = dbtestutil . NewDB ( t )
479
478
user = dbgen .User (t ,db , database.User {})
480
479
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
481
480
UserID :user .ID ,
@@ -511,7 +510,7 @@ func TestAPIKey(t *testing.T) {
511
510
t .Run ("APIKeyExpiredOAuthExpired" ,func (t * testing.T ) {
512
511
t .Parallel ()
513
512
var (
514
- db = dbmem . New ( )
513
+ db , _ = dbtestutil . NewDB ( t )
515
514
user = dbgen .User (t ,db , database.User {})
516
515
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
517
516
UserID :user .ID ,
@@ -561,7 +560,7 @@ func TestAPIKey(t *testing.T) {
561
560
t .Run ("APIKeyExpiredOAuthNotExpired" ,func (t * testing.T ) {
562
561
t .Parallel ()
563
562
var (
564
- db = dbmem . New ( )
563
+ db , _ = dbtestutil . NewDB ( t )
565
564
user = dbgen .User (t ,db , database.User {})
566
565
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
567
566
UserID :user .ID ,
@@ -607,7 +606,7 @@ func TestAPIKey(t *testing.T) {
607
606
t .Run ("OAuthRefresh" ,func (t * testing.T ) {
608
607
t .Parallel ()
609
608
var (
610
- db = dbmem . New ( )
609
+ db , _ = dbtestutil . NewDB ( t )
611
610
user = dbgen .User (t ,db , database.User {})
612
611
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
613
612
UserID :user .ID ,
@@ -630,7 +629,7 @@ func TestAPIKey(t *testing.T) {
630
629
oauthToken := & oauth2.Token {
631
630
AccessToken :"wow" ,
632
631
RefreshToken :"moo" ,
633
- Expiry :dbtime . Now ().AddDate (0 ,0 ,1 ),
632
+ Expiry :dbtestutil . NowInDefaultTimezone ().AddDate (0 ,0 ,1 ),
634
633
}
635
634
httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
636
635
DB :db ,
@@ -665,7 +664,7 @@ func TestAPIKey(t *testing.T) {
665
664
t .Parallel ()
666
665
var (
667
666
ctx = testutil .Context (t ,testutil .WaitShort )
668
- db = dbmem . New ( )
667
+ db , _ = dbtestutil . NewDB ( t )
669
668
user = dbgen .User (t ,db , database.User {})
670
669
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
671
670
UserID :user .ID ,
@@ -715,7 +714,7 @@ func TestAPIKey(t *testing.T) {
715
714
t .Run ("RemoteIPUpdates" ,func (t * testing.T ) {
716
715
t .Parallel ()
717
716
var (
718
- db = dbmem . New ( )
717
+ db , _ = dbtestutil . NewDB ( t )
719
718
user = dbgen .User (t ,db , database.User {})
720
719
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
721
720
UserID :user .ID ,
@@ -740,15 +739,15 @@ func TestAPIKey(t *testing.T) {
740
739
gotAPIKey ,err := db .GetAPIKeyByID (r .Context (),sentAPIKey .ID )
741
740
require .NoError (t ,err )
742
741
743
- require .Equal (t ,net . ParseIP ( "1.1.1.1" ) ,gotAPIKey .IPAddress .IPNet .IP )
742
+ require .Equal (t ,"1.1.1.1" ,gotAPIKey .IPAddress .IPNet .IP . String () )
744
743
})
745
744
746
745
t .Run ("RedirectToLogin" ,func (t * testing.T ) {
747
746
t .Parallel ()
748
747
var (
749
- db = dbmem . New ( )
750
- r = httptest .NewRequest ("GET" ,"/" ,nil )
751
- rw = httptest .NewRecorder ()
748
+ db , _ = dbtestutil . NewDB ( t )
749
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
750
+ rw = httptest .NewRecorder ()
752
751
)
753
752
754
753
httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
@@ -767,9 +766,9 @@ func TestAPIKey(t *testing.T) {
767
766
t .Run ("Optional" ,func (t * testing.T ) {
768
767
t .Parallel ()
769
768
var (
770
- db = dbmem . New ( )
771
- r = httptest .NewRequest ("GET" ,"/" ,nil )
772
- rw = httptest .NewRecorder ()
769
+ db , _ = dbtestutil . NewDB ( t )
770
+ r = httptest .NewRequest ("GET" ,"/" ,nil )
771
+ rw = httptest .NewRecorder ()
773
772
774
773
count int64
775
774
handler = http .HandlerFunc (func (rw http.ResponseWriter ,r * http.Request ) {
@@ -798,7 +797,7 @@ func TestAPIKey(t *testing.T) {
798
797
t .Run ("Tokens" ,func (t * testing.T ) {
799
798
t .Parallel ()
800
799
var (
801
- db = dbmem . New ( )
800
+ db , _ = dbtestutil . NewDB ( t )
802
801
user = dbgen .User (t ,db , database.User {})
803
802
sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
804
803
UserID :user .ID ,
@@ -831,7 +830,7 @@ func TestAPIKey(t *testing.T) {
831
830
t .Run ("MissingConfig" ,func (t * testing.T ) {
832
831
t .Parallel ()
833
832
var (
834
- db = dbmem . New ( )
833
+ db , _ = dbtestutil . NewDB ( t )
835
834
user = dbgen .User (t ,db , database.User {})
836
835
_ ,token = dbgen .APIKey (t ,db , database.APIKey {
837
836
UserID :user .ID ,
@@ -866,7 +865,7 @@ func TestAPIKey(t *testing.T) {
866
865
t .Run ("CustomRoles" ,func (t * testing.T ) {
867
866
t .Parallel ()
868
867
var (
869
- db = dbmem . New ( )
868
+ db , _ = dbtestutil . NewDB ( t )
870
869
org = dbgen .Organization (t ,db , database.Organization {})
871
870
customRole = dbgen .CustomRole (t ,db , database.CustomRole {
872
871
Name :"custom-role" ,
@@ -933,7 +932,7 @@ func TestAPIKey(t *testing.T) {
933
932
t .Parallel ()
934
933
var (
935
934
roleNotExistsName = "role-not-exists"
936
- db = dbmem . New ( )
935
+ db , _ = dbtestutil . NewDB ( t )
937
936
org = dbgen .Organization (t ,db , database.Organization {})
938
937
user = dbgen .User (t ,db , database.User {
939
938
RBACRoles : []string {