@@ -6,10 +6,8 @@ import (
66"encoding/json"
77"fmt"
88"io"
9- "net"
109"net/http"
1110"net/http/httptest"
12- "slices"
1311"strings"
1412"sync/atomic"
1513"testing"
@@ -18,12 +16,13 @@ import (
1816"github.com/google/uuid"
1917"github.com/stretchr/testify/assert"
2018"github.com/stretchr/testify/require"
19+ "golang.org/x/exp/slices"
2120"golang.org/x/oauth2"
2221
2322"github.com/coder/coder/v2/coderd/database"
2423"github.com/coder/coder/v2/coderd/database/dbauthz"
2524"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 "
2726"github.com/coder/coder/v2/coderd/database/dbtime"
2827"github.com/coder/coder/v2/coderd/httpapi"
2928"github.com/coder/coder/v2/coderd/httpmw"
@@ -83,9 +82,9 @@ func TestAPIKey(t *testing.T) {
8382t .Run ("NoCookie" ,func (t * testing.T ) {
8483t .Parallel ()
8584var (
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 ()
8988)
9089httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
9190DB :db ,
@@ -99,9 +98,9 @@ func TestAPIKey(t *testing.T) {
9998t .Run ("NoCookieRedirects" ,func (t * testing.T ) {
10099t .Parallel ()
101100var (
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 ()
105104)
106105httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
107106DB :db ,
@@ -118,9 +117,9 @@ func TestAPIKey(t *testing.T) {
118117t .Run ("InvalidFormat" ,func (t * testing.T ) {
119118t .Parallel ()
120119var (
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 ()
124123)
125124r .Header .Set (codersdk .SessionTokenHeader ,"test-wow-hello" )
126125
@@ -136,9 +135,9 @@ func TestAPIKey(t *testing.T) {
136135t .Run ("InvalidIDLength" ,func (t * testing.T ) {
137136t .Parallel ()
138137var (
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 ()
142141)
143142r .Header .Set (codersdk .SessionTokenHeader ,"test-wow" )
144143
@@ -154,9 +153,9 @@ func TestAPIKey(t *testing.T) {
154153t .Run ("InvalidSecretLength" ,func (t * testing.T ) {
155154t .Parallel ()
156155var (
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 ()
160159)
161160r .Header .Set (codersdk .SessionTokenHeader ,"testtestid-wow" )
162161
@@ -172,7 +171,7 @@ func TestAPIKey(t *testing.T) {
172171t .Run ("NotFound" ,func (t * testing.T ) {
173172t .Parallel ()
174173var (
175- db = dbmem . New ( )
174+ db , _ = dbtestutil . NewDB ( t )
176175id ,secret = randomAPIKeyParts ()
177176r = httptest .NewRequest ("GET" ,"/" ,nil )
178177rw = httptest .NewRecorder ()
@@ -191,10 +190,10 @@ func TestAPIKey(t *testing.T) {
191190t .Run ("UserLinkNotFound" ,func (t * testing.T ) {
192191t .Parallel ()
193192var (
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 {
198197LoginType :database .LoginTypeGithub ,
199198})
200199// Intentionally not inserting any user link
@@ -219,10 +218,10 @@ func TestAPIKey(t *testing.T) {
219218t .Run ("InvalidSecret" ,func (t * testing.T ) {
220219t .Parallel ()
221220var (
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 {})
226225
227226// Use a different secret so they don't match!
228227hashed = sha256 .Sum256 ([]byte ("differentsecret" ))
@@ -244,7 +243,7 @@ func TestAPIKey(t *testing.T) {
244243t .Run ("Expired" ,func (t * testing.T ) {
245244t .Parallel ()
246245var (
247- db = dbmem . New ( )
246+ db , _ = dbtestutil . NewDB ( t )
248247user = dbgen .User (t ,db , database.User {})
249248_ ,token = dbgen .APIKey (t ,db , database.APIKey {
250249UserID :user .ID ,
@@ -273,7 +272,7 @@ func TestAPIKey(t *testing.T) {
273272t .Run ("Valid" ,func (t * testing.T ) {
274273t .Parallel ()
275274var (
276- db = dbmem . New ( )
275+ db , _ = dbtestutil . NewDB ( t )
277276user = dbgen .User (t ,db , database.User {})
278277sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
279278UserID :user .ID ,
@@ -309,7 +308,7 @@ func TestAPIKey(t *testing.T) {
309308t .Run ("ValidWithScope" ,func (t * testing.T ) {
310309t .Parallel ()
311310var (
312- db = dbmem . New ( )
311+ db , _ = dbtestutil . NewDB ( t )
313312user = dbgen .User (t ,db , database.User {})
314313_ ,token = dbgen .APIKey (t ,db , database.APIKey {
315314UserID :user .ID ,
@@ -347,7 +346,7 @@ func TestAPIKey(t *testing.T) {
347346t .Run ("QueryParameter" ,func (t * testing.T ) {
348347t .Parallel ()
349348var (
350- db = dbmem . New ( )
349+ db , _ = dbtestutil . NewDB ( t )
351350user = dbgen .User (t ,db , database.User {})
352351_ ,token = dbgen .APIKey (t ,db , database.APIKey {
353352UserID :user .ID ,
@@ -381,7 +380,7 @@ func TestAPIKey(t *testing.T) {
381380t .Run ("ValidUpdateLastUsed" ,func (t * testing.T ) {
382381t .Parallel ()
383382var (
384- db = dbmem . New ( )
383+ db , _ = dbtestutil . NewDB ( t )
385384user = dbgen .User (t ,db , database.User {})
386385sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
387386UserID :user .ID ,
@@ -412,7 +411,7 @@ func TestAPIKey(t *testing.T) {
412411t .Run ("ValidUpdateExpiry" ,func (t * testing.T ) {
413412t .Parallel ()
414413var (
415- db = dbmem . New ( )
414+ db , _ = dbtestutil . NewDB ( t )
416415user = dbgen .User (t ,db , database.User {})
417416sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
418417UserID :user .ID ,
@@ -443,7 +442,7 @@ func TestAPIKey(t *testing.T) {
443442t .Run ("NoRefresh" ,func (t * testing.T ) {
444443t .Parallel ()
445444var (
446- db = dbmem . New ( )
445+ db , _ = dbtestutil . NewDB ( t )
447446user = dbgen .User (t ,db , database.User {})
448447sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
449448UserID :user .ID ,
@@ -475,7 +474,7 @@ func TestAPIKey(t *testing.T) {
475474t .Run ("OAuthNotExpired" ,func (t * testing.T ) {
476475t .Parallel ()
477476var (
478- db = dbmem . New ( )
477+ db , _ = dbtestutil . NewDB ( t )
479478user = dbgen .User (t ,db , database.User {})
480479sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
481480UserID :user .ID ,
@@ -511,7 +510,7 @@ func TestAPIKey(t *testing.T) {
511510t .Run ("APIKeyExpiredOAuthExpired" ,func (t * testing.T ) {
512511t .Parallel ()
513512var (
514- db = dbmem . New ( )
513+ db , _ = dbtestutil . NewDB ( t )
515514user = dbgen .User (t ,db , database.User {})
516515sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
517516UserID :user .ID ,
@@ -561,7 +560,7 @@ func TestAPIKey(t *testing.T) {
561560t .Run ("APIKeyExpiredOAuthNotExpired" ,func (t * testing.T ) {
562561t .Parallel ()
563562var (
564- db = dbmem . New ( )
563+ db , _ = dbtestutil . NewDB ( t )
565564user = dbgen .User (t ,db , database.User {})
566565sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
567566UserID :user .ID ,
@@ -607,7 +606,7 @@ func TestAPIKey(t *testing.T) {
607606t .Run ("OAuthRefresh" ,func (t * testing.T ) {
608607t .Parallel ()
609608var (
610- db = dbmem . New ( )
609+ db , _ = dbtestutil . NewDB ( t )
611610user = dbgen .User (t ,db , database.User {})
612611sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
613612UserID :user .ID ,
@@ -630,7 +629,7 @@ func TestAPIKey(t *testing.T) {
630629oauthToken := & oauth2.Token {
631630AccessToken :"wow" ,
632631RefreshToken :"moo" ,
633- Expiry :dbtime . Now ().AddDate (0 ,0 ,1 ),
632+ Expiry :dbtestutil . NowInDefaultTimezone ().AddDate (0 ,0 ,1 ),
634633}
635634httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
636635DB :db ,
@@ -665,7 +664,7 @@ func TestAPIKey(t *testing.T) {
665664t .Parallel ()
666665var (
667666ctx = testutil .Context (t ,testutil .WaitShort )
668- db = dbmem . New ( )
667+ db , _ = dbtestutil . NewDB ( t )
669668user = dbgen .User (t ,db , database.User {})
670669sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
671670UserID :user .ID ,
@@ -715,7 +714,7 @@ func TestAPIKey(t *testing.T) {
715714t .Run ("RemoteIPUpdates" ,func (t * testing.T ) {
716715t .Parallel ()
717716var (
718- db = dbmem . New ( )
717+ db , _ = dbtestutil . NewDB ( t )
719718user = dbgen .User (t ,db , database.User {})
720719sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
721720UserID :user .ID ,
@@ -740,15 +739,15 @@ func TestAPIKey(t *testing.T) {
740739gotAPIKey ,err := db .GetAPIKeyByID (r .Context (),sentAPIKey .ID )
741740require .NoError (t ,err )
742741
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 () )
744743})
745744
746745t .Run ("RedirectToLogin" ,func (t * testing.T ) {
747746t .Parallel ()
748747var (
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 ()
752751)
753752
754753httpmw .ExtractAPIKeyMW (httpmw.ExtractAPIKeyConfig {
@@ -767,9 +766,9 @@ func TestAPIKey(t *testing.T) {
767766t .Run ("Optional" ,func (t * testing.T ) {
768767t .Parallel ()
769768var (
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 ()
773772
774773count int64
775774handler = http .HandlerFunc (func (rw http.ResponseWriter ,r * http.Request ) {
@@ -798,7 +797,7 @@ func TestAPIKey(t *testing.T) {
798797t .Run ("Tokens" ,func (t * testing.T ) {
799798t .Parallel ()
800799var (
801- db = dbmem . New ( )
800+ db , _ = dbtestutil . NewDB ( t )
802801user = dbgen .User (t ,db , database.User {})
803802sentAPIKey ,token = dbgen .APIKey (t ,db , database.APIKey {
804803UserID :user .ID ,
@@ -831,7 +830,7 @@ func TestAPIKey(t *testing.T) {
831830t .Run ("MissingConfig" ,func (t * testing.T ) {
832831t .Parallel ()
833832var (
834- db = dbmem . New ( )
833+ db , _ = dbtestutil . NewDB ( t )
835834user = dbgen .User (t ,db , database.User {})
836835_ ,token = dbgen .APIKey (t ,db , database.APIKey {
837836UserID :user .ID ,
@@ -866,7 +865,7 @@ func TestAPIKey(t *testing.T) {
866865t .Run ("CustomRoles" ,func (t * testing.T ) {
867866t .Parallel ()
868867var (
869- db = dbmem . New ( )
868+ db , _ = dbtestutil . NewDB ( t )
870869org = dbgen .Organization (t ,db , database.Organization {})
871870customRole = dbgen .CustomRole (t ,db , database.CustomRole {
872871Name :"custom-role" ,
@@ -933,7 +932,7 @@ func TestAPIKey(t *testing.T) {
933932t .Parallel ()
934933var (
935934roleNotExistsName = "role-not-exists"
936- db = dbmem . New ( )
935+ db , _ = dbtestutil . NewDB ( t )
937936org = dbgen .Organization (t ,db , database.Organization {})
938937user = dbgen .User (t ,db , database.User {
939938RBACRoles : []string {