@@ -43,7 +43,7 @@ func TestUsageReconciler_ReconcileTimeRange(t *testing.T) {
43
43
Role : db .TeamMembershipRole_Member ,
44
44
}
45
45
workspace := dbtest .NewWorkspace (t , db.Workspace {
46
- ID : "gitpodio-gitpod-gyjr82jkfnd " ,
46
+ ID : "gitpodio-gitpod-gyjr82jkfna " ,
47
47
OwnerID : userID ,
48
48
})
49
49
instances := []db.WorkspaceInstance {
@@ -71,7 +71,7 @@ func TestUsageReconciler_ReconcileTimeRange(t *testing.T) {
71
71
},
72
72
}
73
73
74
- expectedRuntime := instances [0 ].TotalRuntime (scenarioRunTime ) + instances [1 ].TotalRuntime (scenarioRunTime )
74
+ expectedRuntime := instances [0 ].WorkspaceRuntimeSeconds (scenarioRunTime ) + instances [1 ].WorkspaceRuntimeSeconds (scenarioRunTime )
75
75
76
76
return Scenario {
77
77
Name : "oen team with one workspace" ,
@@ -88,8 +88,57 @@ func TestUsageReconciler_ReconcileTimeRange(t *testing.T) {
88
88
Teams : 1 ,
89
89
Report : []TeamUsage {
90
90
{
91
- TeamID : teamID .String (),
92
- WorkspacesRuntime : expectedRuntime ,
91
+ TeamID : teamID .String (),
92
+ WorkspaceSeconds : expectedRuntime ,
93
+ },
94
+ },
95
+ },
96
+ }
97
+ })(),
98
+ (func () Scenario {
99
+ runTime := time .Date (2022 , 05 , 31 , 23 , 59 , 59 , 999999 , time .UTC )
100
+ teamID , userID := uuid .New (), uuid .New ()
101
+ workspaceID := "gitpodio-gitpod-gyjr82jkfnd"
102
+ var instances []db.WorkspaceInstance
103
+ for i := 0 ; i < 100 ; i ++ {
104
+ instances = append (instances , db.WorkspaceInstance {
105
+ ID : uuid .New (),
106
+ WorkspaceID : workspaceID ,
107
+ CreationTime : db .NewVarcharTime (time .Date (2022 , 05 , 01 , 00 , 00 , 00 , 00 , time .UTC )),
108
+ StoppedTime : db .NewVarcharTime (time .Date (2022 , 05 , 31 , 23 , 59 , 59 , 999999 , time .UTC )),
109
+ Status : instanceStatus ,
110
+ })
111
+ }
112
+
113
+ return Scenario {
114
+ Name : "many long running instances do not overflow number of seconds in usage" ,
115
+ NowFunc : func () time.Time { return runTime },
116
+ Memberships : []db.TeamMembership {
117
+ {
118
+ ID : uuid .New (),
119
+ TeamID : teamID ,
120
+ UserID : userID ,
121
+ Role : db .TeamMembershipRole_Member ,
122
+ },
123
+ },
124
+ Workspaces : []db.Workspace {
125
+ dbtest .NewWorkspace (t , db.Workspace {
126
+ ID : workspaceID ,
127
+ OwnerID : userID ,
128
+ }),
129
+ },
130
+ Instances : instances ,
131
+ Expected : & UsageReconcileStatus {
132
+ StartTime : startOfMay ,
133
+ EndTime : startOfJune ,
134
+ WorkspaceInstances : 100 ,
135
+ InvalidWorkspaceInstances : 0 ,
136
+ Workspaces : 1 ,
137
+ Teams : 1 ,
138
+ Report : []TeamUsage {
139
+ {
140
+ TeamID : teamID .String (),
141
+ WorkspaceSeconds : 9.223372036854766e+11 ,
93
142
},
94
143
},
95
144
},
@@ -98,18 +147,21 @@ func TestUsageReconciler_ReconcileTimeRange(t *testing.T) {
98
147
}
99
148
100
149
for _ , scenario := range scenarios {
101
- conn := db .ConnectForTests (t )
102
- require .NoError (t , conn .Create (scenario .Memberships ).Error )
103
- require .NoError (t , conn .Create (scenario .Workspaces ).Error )
104
- require .NoError (t , conn .Create (scenario .Instances ).Error )
150
+ t .Run (scenario .Name , func (t * testing.T ) {
151
+ conn := db .ConnectForTests (t )
152
+ require .NoError (t , conn .Create (scenario .Memberships ).Error )
153
+ require .NoError (t , conn .Create (scenario .Workspaces ).Error )
154
+ require .NoError (t , conn .Create (scenario .Instances ).Error )
155
+
156
+ reconciler := & UsageReconciler {
157
+ nowFunc : scenario .NowFunc ,
158
+ conn : conn ,
159
+ }
160
+ status , err := reconciler .ReconcileTimeRange (context .Background (), startOfMay , startOfJune )
161
+ require .NoError (t , err )
105
162
106
- reconciler := & UsageReconciler {
107
- nowFunc : scenario .NowFunc ,
108
- conn : conn ,
109
- }
110
- status , err := reconciler .ReconcileTimeRange (context .Background (), startOfMay , startOfJune )
111
- require .NoError (t , err )
163
+ require .Equal (t , scenario .Expected , status )
164
+ })
112
165
113
- require .Equal (t , scenario .Expected , status )
114
166
}
115
167
}
0 commit comments