4
4
"context"
5
5
"database/sql"
6
6
"encoding/json"
7
+ "errors"
7
8
"fmt"
8
9
"os"
9
10
"reflect"
@@ -25,7 +26,6 @@ import (
25
26
"github.com/coder/coder/v2/coderd/coderdtest"
26
27
"github.com/coder/coder/v2/coderd/database"
27
28
"github.com/coder/coder/v2/coderd/database/dbgen"
28
- "github.com/coder/coder/v2/coderd/database/dbmem"
29
29
"github.com/coder/coder/v2/coderd/database/dbtestutil"
30
30
"github.com/coder/coder/v2/coderd/database/dbtime"
31
31
"github.com/coder/coder/v2/coderd/prometheusmetrics"
@@ -51,13 +51,15 @@ func TestActiveUsers(t *testing.T) {
51
51
}{{
52
52
Name : "None" ,
53
53
Database : func (t * testing.T ) database.Store {
54
- return dbmem .New ()
54
+ db , _ := dbtestutil .NewDB (t )
55
+ return db
55
56
},
56
57
Count : 0 ,
57
58
}, {
58
59
Name : "One" ,
59
60
Database : func (t * testing.T ) database.Store {
60
- db := dbmem .New ()
61
+ db , _ := dbtestutil .NewDB (t )
62
+ dbtestutil .DisableForeignKeysAndTriggers (t , db )
61
63
dbgen .APIKey (t , db , database.APIKey {
62
64
LastUsed : dbtime .Now (),
63
65
})
@@ -67,7 +69,8 @@ func TestActiveUsers(t *testing.T) {
67
69
}, {
68
70
Name : "OneWithExpired" ,
69
71
Database : func (t * testing.T ) database.Store {
70
- db := dbmem .New ()
72
+ db , _ := dbtestutil .NewDB (t )
73
+ dbtestutil .DisableForeignKeysAndTriggers (t , db )
71
74
72
75
dbgen .APIKey (t , db , database.APIKey {
73
76
LastUsed : dbtime .Now (),
@@ -84,7 +87,8 @@ func TestActiveUsers(t *testing.T) {
84
87
}, {
85
88
Name : "Multiple" ,
86
89
Database : func (t * testing.T ) database.Store {
87
- db := dbmem .New ()
90
+ db , _ := dbtestutil .NewDB (t )
91
+ dbtestutil .DisableForeignKeysAndTriggers (t , db )
88
92
dbgen .APIKey (t , db , database.APIKey {
89
93
LastUsed : dbtime .Now (),
90
94
})
@@ -123,21 +127,22 @@ func TestUsers(t *testing.T) {
123
127
}{{
124
128
Name : "None" ,
125
129
Database : func (t * testing.T ) database.Store {
126
- return dbmem .New ()
130
+ db , _ := dbtestutil .NewDB (t )
131
+ return db
127
132
},
128
133
Count : map [database.UserStatus ]int {},
129
134
}, {
130
135
Name : "One" ,
131
136
Database : func (t * testing.T ) database.Store {
132
- db := dbmem . New ( )
137
+ db , _ := dbtestutil . NewDB ( t )
133
138
dbgen .User (t , db , database.User {Status : database .UserStatusActive })
134
139
return db
135
140
},
136
141
Count : map [database.UserStatus ]int {database .UserStatusActive : 1 },
137
142
}, {
138
143
Name : "MultipleStatuses" ,
139
144
Database : func (t * testing.T ) database.Store {
140
- db := dbmem . New ( )
145
+ db , _ := dbtestutil . NewDB ( t )
141
146
142
147
dbgen .User (t , db , database.User {Status : database .UserStatusActive })
143
148
dbgen .User (t , db , database.User {Status : database .UserStatusDormant })
@@ -148,7 +153,7 @@ func TestUsers(t *testing.T) {
148
153
}, {
149
154
Name : "MultipleActive" ,
150
155
Database : func (t * testing.T ) database.Store {
151
- db := dbmem . New ( )
156
+ db , _ := dbtestutil . NewDB ( t )
152
157
dbgen .User (t , db , database.User {Status : database .UserStatusActive })
153
158
dbgen .User (t , db , database.User {Status : database .UserStatusActive })
154
159
dbgen .User (t , db , database.User {Status : database .UserStatusActive })
@@ -216,20 +221,25 @@ func TestWorkspaceLatestBuildTotals(t *testing.T) {
216
221
Total int
217
222
Status map [codersdk.ProvisionerJobStatus ]int
218
223
}{{
219
- Name : "None" ,
220
- Database : dbmem .New ,
221
- Total : 0 ,
224
+ Name : "None" ,
225
+ Database : func () database.Store {
226
+ db , _ := dbtestutil .NewDB (t )
227
+ return db
228
+ },
229
+ Total : 0 ,
222
230
}, {
223
231
Name : "Multiple" ,
224
232
Database : func () database.Store {
225
- db := dbmem .New ()
226
- insertCanceled (t , db )
227
- insertFailed (t , db )
228
- insertFailed (t , db )
229
- insertSuccess (t , db )
230
- insertSuccess (t , db )
231
- insertSuccess (t , db )
232
- insertRunning (t , db )
233
+ db , _ := dbtestutil .NewDB (t )
234
+ u := dbgen .User (t , db , database.User {})
235
+ org := dbgen .Organization (t , db , database.Organization {})
236
+ insertCanceled (t , db , u , org )
237
+ insertFailed (t , db , u , org )
238
+ insertFailed (t , db , u , org )
239
+ insertSuccess (t , db , u , org )
240
+ insertSuccess (t , db , u , org )
241
+ insertSuccess (t , db , u , org )
242
+ insertRunning (t , db , u , org )
233
243
return db
234
244
},
235
245
Total : 7 ,
@@ -287,21 +297,26 @@ func TestWorkspaceLatestBuildStatuses(t *testing.T) {
287
297
ExpectedWorkspaces int
288
298
ExpectedStatuses map [codersdk.ProvisionerJobStatus ]int
289
299
}{{
290
- Name : "None" ,
291
- Database : dbmem .New ,
300
+ Name : "None" ,
301
+ Database : func () database.Store {
302
+ db , _ := dbtestutil .NewDB (t )
303
+ return db
304
+ },
292
305
ExpectedWorkspaces : 0 ,
293
306
}, {
294
307
Name : "Multiple" ,
295
308
Database : func () database.Store {
296
- db := dbmem .New ()
297
- insertTemplates (t , db )
298
- insertCanceled (t , db )
299
- insertFailed (t , db )
300
- insertFailed (t , db )
301
- insertSuccess (t , db )
302
- insertSuccess (t , db )
303
- insertSuccess (t , db )
304
- insertRunning (t , db )
309
+ db , _ := dbtestutil .NewDB (t )
310
+ u := dbgen .User (t , db , database.User {})
311
+ org := dbgen .Organization (t , db , database.Organization {})
312
+ insertTemplates (t , db , u , org )
313
+ insertCanceled (t , db , u , org )
314
+ insertFailed (t , db , u , org )
315
+ insertFailed (t , db , u , org )
316
+ insertSuccess (t , db , u , org )
317
+ insertSuccess (t , db , u , org )
318
+ insertSuccess (t , db , u , org )
319
+ insertRunning (t , db , u , org )
305
320
return db
306
321
},
307
322
ExpectedWorkspaces : 7 ,
@@ -727,76 +742,102 @@ var (
727
742
templateVersionB = uuid .New ()
728
743
)
729
744
730
- func insertTemplates (t * testing.T , db database.Store ) {
745
+ func insertTemplates (t * testing.T , db database.Store , u database. User , org database. Organization ) {
731
746
require .NoError (t , db .InsertTemplate (context .Background (), database.InsertTemplateParams {
732
747
ID : templateA ,
733
748
Name : "template-a" ,
734
749
Provisioner : database .ProvisionerTypeTerraform ,
735
750
MaxPortSharingLevel : database .AppSharingLevelAuthenticated ,
751
+ CreatedBy : u .ID ,
752
+ OrganizationID : org .ID ,
736
753
}))
754
+ pj := dbgen .ProvisionerJob (t , db , nil , database.ProvisionerJob {})
737
755
738
756
require .NoError (t , db .InsertTemplateVersion (context .Background (), database.InsertTemplateVersionParams {
739
- ID : templateVersionA ,
740
- TemplateID : uuid.NullUUID {UUID : templateA },
741
- Name : "version-1a" ,
757
+ ID : templateVersionA ,
758
+ TemplateID : uuid.NullUUID {UUID : templateA },
759
+ Name : "version-1a" ,
760
+ JobID : pj .ID ,
761
+ OrganizationID : org .ID ,
762
+ CreatedBy : u .ID ,
742
763
}))
743
764
744
765
require .NoError (t , db .InsertTemplate (context .Background (), database.InsertTemplateParams {
745
766
ID : templateB ,
746
767
Name : "template-b" ,
747
768
Provisioner : database .ProvisionerTypeTerraform ,
748
769
MaxPortSharingLevel : database .AppSharingLevelAuthenticated ,
770
+ CreatedBy : u .ID ,
771
+ OrganizationID : org .ID ,
749
772
}))
750
773
751
774
require .NoError (t , db .InsertTemplateVersion (context .Background (), database.InsertTemplateVersionParams {
752
- ID : templateVersionB ,
753
- TemplateID : uuid.NullUUID {UUID : templateB },
754
- Name : "version-1b" ,
775
+ ID : templateVersionB ,
776
+ TemplateID : uuid.NullUUID {UUID : templateB },
777
+ Name : "version-1b" ,
778
+ JobID : pj .ID ,
779
+ OrganizationID : org .ID ,
780
+ CreatedBy : u .ID ,
755
781
}))
756
782
}
757
783
758
- func insertUser (t * testing.T , db database.Store ) database.User {
759
- username , err := cryptorand .String (8 )
760
- require .NoError (t , err )
761
-
762
- user , err := db .InsertUser (context .Background (), database.InsertUserParams {
763
- ID : uuid .New (),
764
- Username : username ,
765
- LoginType : database .LoginTypeNone ,
766
- })
784
+ func insertRunning (t * testing.T , db database.Store , u database.User , org database.Organization ) database.ProvisionerJob {
785
+ var templateID , templateVersionID uuid.UUID
786
+ rnd , err := cryptorand .Intn (10 )
767
787
require .NoError (t , err )
768
788
769
- return user
770
- }
789
+ pairs := []struct {
790
+ tplID uuid.UUID
791
+ versionID uuid.UUID
792
+ }{
793
+ {templateA , templateVersionA },
794
+ {templateB , templateVersionB },
795
+ }
796
+ for _ , pair := range pairs {
797
+ _ , err := db .GetTemplateByID (context .Background (), pair .tplID )
798
+ if errors .Is (err , sql .ErrNoRows ) {
799
+ _ = dbgen .Template (t , db , database.Template {
800
+ ID : pair .tplID ,
801
+ OrganizationID : org .ID ,
802
+ CreatedBy : u .ID ,
803
+ })
804
+ _ = dbgen .TemplateVersion (t , db , database.TemplateVersion {
805
+ ID : pair .versionID ,
806
+ OrganizationID : org .ID ,
807
+ CreatedBy : u .ID ,
808
+ })
809
+ } else {
810
+ require .NoError (t , err )
811
+ }
812
+ }
771
813
772
- func insertRunning (t * testing.T , db database.Store ) database.ProvisionerJob {
773
- var template , templateVersion uuid.UUID
774
- rnd , err := cryptorand .Intn (10 )
775
- require .NoError (t , err )
776
814
if rnd > 5 {
777
- template = templateB
778
- templateVersion = templateVersionB
815
+ templateID = templateB
816
+ templateVersionID = templateVersionB
779
817
} else {
780
- template = templateA
781
- templateVersion = templateVersionA
818
+ templateID = templateA
819
+ templateVersionID = templateVersionA
782
820
}
783
821
784
822
workspace , err := db .InsertWorkspace (context .Background (), database.InsertWorkspaceParams {
785
823
ID : uuid .New (),
786
- OwnerID : insertUser ( t , db ) .ID ,
824
+ OwnerID : u .ID ,
787
825
Name : uuid .NewString (),
788
- TemplateID : template ,
826
+ TemplateID : templateID ,
789
827
AutomaticUpdates : database .AutomaticUpdatesNever ,
828
+ OrganizationID : org .ID ,
790
829
})
791
830
require .NoError (t , err )
792
831
793
832
job , err := db .InsertProvisionerJob (context .Background (), database.InsertProvisionerJobParams {
794
- ID : uuid .New (),
795
- CreatedAt : dbtime .Now (),
796
- UpdatedAt : dbtime .Now (),
797
- Provisioner : database .ProvisionerTypeEcho ,
798
- StorageMethod : database .ProvisionerStorageMethodFile ,
799
- Type : database .ProvisionerJobTypeWorkspaceBuild ,
833
+ ID : uuid .New (),
834
+ CreatedAt : dbtime .Now (),
835
+ UpdatedAt : dbtime .Now (),
836
+ Provisioner : database .ProvisionerTypeEcho ,
837
+ StorageMethod : database .ProvisionerStorageMethodFile ,
838
+ Type : database .ProvisionerJobTypeWorkspaceBuild ,
839
+ Input : json .RawMessage ("{}" ),
840
+ OrganizationID : org .ID ,
800
841
})
801
842
require .NoError (t , err )
802
843
err = db .InsertWorkspaceBuild (context .Background (), database.InsertWorkspaceBuildParams {
@@ -806,7 +847,7 @@ func insertRunning(t *testing.T, db database.Store) database.ProvisionerJob {
806
847
BuildNumber : 1 ,
807
848
Transition : database .WorkspaceTransitionStart ,
808
849
Reason : database .BuildReasonInitiator ,
809
- TemplateVersionID : templateVersion ,
850
+ TemplateVersionID : templateVersionID ,
810
851
})
811
852
require .NoError (t , err )
812
853
// This marks the job as started.
@@ -816,14 +857,15 @@ func insertRunning(t *testing.T, db database.Store) database.ProvisionerJob {
816
857
Time : dbtime .Now (),
817
858
Valid : true ,
818
859
},
819
- Types : []database.ProvisionerType {database .ProvisionerTypeEcho },
860
+ Types : []database.ProvisionerType {database .ProvisionerTypeEcho },
861
+ ProvisionerTags : must (json .Marshal (job .Tags )),
820
862
})
821
863
require .NoError (t , err )
822
864
return job
823
865
}
824
866
825
- func insertCanceled (t * testing.T , db database.Store ) {
826
- job := insertRunning (t , db )
867
+ func insertCanceled (t * testing.T , db database.Store , u database. User , org database. Organization ) {
868
+ job := insertRunning (t , db , u , org )
827
869
err := db .UpdateProvisionerJobWithCancelByID (context .Background (), database.UpdateProvisionerJobWithCancelByIDParams {
828
870
ID : job .ID ,
829
871
CanceledAt : sql.NullTime {
@@ -842,8 +884,8 @@ func insertCanceled(t *testing.T, db database.Store) {
842
884
require .NoError (t , err )
843
885
}
844
886
845
- func insertFailed (t * testing.T , db database.Store ) {
846
- job := insertRunning (t , db )
887
+ func insertFailed (t * testing.T , db database.Store , u database. User , org database. Organization ) {
888
+ job := insertRunning (t , db , u , org )
847
889
err := db .UpdateProvisionerJobWithCompleteByID (context .Background (), database.UpdateProvisionerJobWithCompleteByIDParams {
848
890
ID : job .ID ,
849
891
CompletedAt : sql.NullTime {
@@ -858,8 +900,8 @@ func insertFailed(t *testing.T, db database.Store) {
858
900
require .NoError (t , err )
859
901
}
860
902
861
- func insertSuccess (t * testing.T , db database.Store ) {
862
- job := insertRunning (t , db )
903
+ func insertSuccess (t * testing.T , db database.Store , u database. User , org database. Organization ) {
904
+ job := insertRunning (t , db , u , org )
863
905
err := db .UpdateProvisionerJobWithCompleteByID (context .Background (), database.UpdateProvisionerJobWithCompleteByIDParams {
864
906
ID : job .ID ,
865
907
CompletedAt : sql.NullTime {
0 commit comments