@@ -30,34 +30,30 @@ import (
30
30
"github.com/coder/coder/v2/testutil"
31
31
)
32
32
33
- type storeType int
34
-
35
- const (
36
- spyStoreType storeType = iota
37
- errorStoreType
38
- )
39
-
40
33
type storeSpy struct {
41
34
database.Store
42
35
43
36
claims * atomic.Int32
44
37
claimParams * atomic.Pointer [database.ClaimPrebuiltWorkspaceParams ]
45
38
claimedWorkspace * atomic.Pointer [database.ClaimPrebuiltWorkspaceRow ]
39
+
40
+ claimingErr error
46
41
}
47
42
48
- func newStoreSpy (db database.Store ) * storeSpy {
43
+ func newStoreSpy (db database.Store , claimingErr error ) * storeSpy {
49
44
return & storeSpy {
50
45
Store : db ,
51
46
claims : & atomic.Int32 {},
52
47
claimParams : & atomic.Pointer [database.ClaimPrebuiltWorkspaceParams ]{},
53
48
claimedWorkspace : & atomic.Pointer [database.ClaimPrebuiltWorkspaceRow ]{},
49
+ claimingErr : claimingErr ,
54
50
}
55
51
}
56
52
57
53
func (m * storeSpy ) InTx (fn func (store database.Store ) error , opts * database.TxOptions ) error {
58
54
// Pass spy down into transaction store.
59
55
return m .Store .InTx (func (store database.Store ) error {
60
- spy := newStoreSpy (store )
56
+ spy := newStoreSpy (store , m . claimingErr )
61
57
spy .claims = m .claims
62
58
spy .claimParams = m .claimParams
63
59
spy .claimedWorkspace = m .claimedWorkspace
@@ -67,6 +63,10 @@ func (m *storeSpy) InTx(fn func(store database.Store) error, opts *database.TxOp
67
63
}
68
64
69
65
func (m * storeSpy ) ClaimPrebuiltWorkspace (ctx context.Context , arg database.ClaimPrebuiltWorkspaceParams ) (database.ClaimPrebuiltWorkspaceRow , error ) {
66
+ if m .claimingErr != nil {
67
+ return database.ClaimPrebuiltWorkspaceRow {}, m .claimingErr
68
+ }
69
+
70
70
m .claims .Add (1 )
71
71
m .claimParams .Store (& arg )
72
72
result , err := m .Store .ClaimPrebuiltWorkspace (ctx , arg )
@@ -76,32 +76,6 @@ func (m *storeSpy) ClaimPrebuiltWorkspace(ctx context.Context, arg database.Clai
76
76
return result , err
77
77
}
78
78
79
- type errorStore struct {
80
- claimingErr error
81
-
82
- database.Store
83
- }
84
-
85
- func newErrorStore (db database.Store , claimingErr error ) * errorStore {
86
- return & errorStore {
87
- Store : db ,
88
- claimingErr : claimingErr ,
89
- }
90
- }
91
-
92
- func (es * errorStore ) InTx (fn func (store database.Store ) error , opts * database.TxOptions ) error {
93
- // Pass failure store down into transaction store.
94
- return es .Store .InTx (func (store database.Store ) error {
95
- newES := newErrorStore (store , es .claimingErr )
96
-
97
- return fn (newES )
98
- }, opts )
99
- }
100
-
101
- func (es * errorStore ) ClaimPrebuiltWorkspace (ctx context.Context , arg database.ClaimPrebuiltWorkspaceParams ) (database.ClaimPrebuiltWorkspaceRow , error ) {
102
- return database.ClaimPrebuiltWorkspaceRow {}, es .claimingErr
103
- }
104
-
105
79
func TestClaimPrebuild (t * testing.T ) {
106
80
t .Parallel ()
107
81
@@ -119,30 +93,25 @@ func TestClaimPrebuild(t *testing.T) {
119
93
cases := map [string ]struct {
120
94
expectPrebuildClaimed bool
121
95
markPrebuildsClaimable bool
122
- storeType storeType
123
96
storeError error // should be set only for errorStoreType
124
97
}{
125
98
"no eligible prebuilds to claim" : {
126
99
expectPrebuildClaimed : false ,
127
100
markPrebuildsClaimable : false ,
128
- storeType : spyStoreType ,
129
101
},
130
102
"claiming an eligible prebuild should succeed" : {
131
103
expectPrebuildClaimed : true ,
132
104
markPrebuildsClaimable : true ,
133
- storeType : spyStoreType ,
134
105
},
135
106
136
107
"no claimable prebuilt workspaces error is returned" : {
137
108
expectPrebuildClaimed : false ,
138
109
markPrebuildsClaimable : true ,
139
- storeType : errorStoreType ,
140
110
storeError : agplprebuilds .ErrNoClaimablePrebuiltWorkspaces ,
141
111
},
142
112
"unexpected claiming error is returned" : {
143
113
expectPrebuildClaimed : false ,
144
114
markPrebuildsClaimable : true ,
145
- storeType : errorStoreType ,
146
115
storeError : unexpectedClaimingError ,
147
116
},
148
117
}
@@ -157,15 +126,7 @@ func TestClaimPrebuild(t *testing.T) {
157
126
ctx := testutil .Context (t , testutil .WaitSuperLong )
158
127
db , pubsub := dbtestutil .NewDB (t )
159
128
160
- var wrappedStore database.Store
161
- switch tc .storeType {
162
- case spyStoreType :
163
- wrappedStore = newStoreSpy (db )
164
- case errorStoreType :
165
- wrappedStore = newErrorStore (db , tc .storeError )
166
- default :
167
- t .Fatal ("unknown store type" )
168
- }
129
+ wrappedStore := newStoreSpy (db , tc .storeError )
169
130
expectedPrebuildsCount := desiredInstances * presetCount
170
131
171
132
logger := testutil .Logger (t )
@@ -262,7 +223,7 @@ func TestClaimPrebuild(t *testing.T) {
262
223
})
263
224
264
225
switch {
265
- case tc .storeType == errorStoreType && errors .Is (tc .storeError , agplprebuilds .ErrNoClaimablePrebuiltWorkspaces ):
226
+ case tc .storeError != nil && errors .Is (tc .storeError , agplprebuilds .ErrNoClaimablePrebuiltWorkspaces ):
266
227
require .NoError (t , err )
267
228
coderdtest .AwaitWorkspaceBuildJobCompleted (t , userClient , userWorkspace .LatestBuild .ID )
268
229
@@ -272,7 +233,7 @@ func TestClaimPrebuild(t *testing.T) {
272
233
require .Equal (t , expectedPrebuildsCount , len (currentPrebuilds ))
273
234
return
274
235
275
- case tc .storeType == errorStoreType && errors .Is (tc .storeError , unexpectedClaimingError ):
236
+ case tc .storeError != nil && errors .Is (tc .storeError , unexpectedClaimingError ):
276
237
// Then: unexpected error happened and was propagated all the way to the caller
277
238
require .Error (t , err )
278
239
require .ErrorContains (t , err , unexpectedClaimingError .Error ())
@@ -290,7 +251,7 @@ func TestClaimPrebuild(t *testing.T) {
290
251
}
291
252
292
253
// at this point we know that wrappedStore has *storeSpy type
293
- spy := wrappedStore .( * storeSpy )
254
+ spy := wrappedStore
294
255
295
256
// Then: a prebuild should have been claimed.
296
257
require .EqualValues (t , spy .claims .Load (), 1 )
0 commit comments