@@ -105,11 +105,24 @@ func Test_updater_run(t *testing.T) {
105
105
p .VersionF = func () string { return fakeNewVersion }
106
106
u := fromParams (p )
107
107
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
108
- err := u .Run (p .Ctx , false , fakeCoderURL )
108
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
109
109
assert .Success (t , "update coder - noop" , err )
110
110
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
111
111
})
112
112
113
+ run (t , "update coder - explicit version specified" , func (t * testing.T , p * params ) {
114
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
115
+ p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeOldVersionJSON ), 200 , variadicS (), nil )
116
+ p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
117
+ p .VersionF = func () string { return fakeOldVersion }
118
+ p .ConfirmF = fakeConfirmYes
119
+ u := fromParams (p )
120
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
121
+ err := u .Run (p .Ctx , false , fakeCoderURL , fakeNewVersion )
122
+ assert .Success (t , "update coder - explicit version specified" , err )
123
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
124
+ })
125
+
113
126
run (t , "update coder - old to new" , func (t * testing.T , p * params ) {
114
127
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
115
128
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
@@ -118,7 +131,7 @@ func Test_updater_run(t *testing.T) {
118
131
p .ConfirmF = fakeConfirmYes
119
132
u := fromParams (p )
120
133
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
121
- err := u .Run (p .Ctx , false , fakeCoderURL )
134
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
122
135
assert .Success (t , "update coder - old to new" , err )
123
136
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
124
137
})
@@ -132,7 +145,7 @@ func Test_updater_run(t *testing.T) {
132
145
p .ConfirmF = fakeConfirmYes
133
146
u := fromParams (p )
134
147
assertFileContent (t , p .Fakefs , p .ExecutablePath , fakeOldVersion )
135
- err := u .Run (p .Ctx , false , fakeCoderURL )
148
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
136
149
assert .Success (t , "update coder - old to new - binary renamed" , err )
137
150
assertFileContent (t , p .Fakefs , p .ExecutablePath , fakeNewVersion )
138
151
})
@@ -147,7 +160,7 @@ func Test_updater_run(t *testing.T) {
147
160
p .ConfirmF = fakeConfirmYes
148
161
u := fromParams (p )
149
162
assertFileContent (t , p .Fakefs , fakeExePathWindows , fakeOldVersion )
150
- err := u .Run (p .Ctx , false , fakeCoderURL )
163
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
151
164
assert .Success (t , "update coder - old to new - windows" , err )
152
165
assertFileContent (t , p .Fakefs , fakeExePathWindows , fakeNewVersion )
153
166
})
@@ -159,7 +172,7 @@ func Test_updater_run(t *testing.T) {
159
172
p .VersionF = func () string { return fakeOldVersion }
160
173
u := fromParams (p )
161
174
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
162
- err := u .Run (p .Ctx , true , fakeCoderURL )
175
+ err := u .Run (p .Ctx , true , fakeCoderURL , "" )
163
176
assert .Success (t , "update coder - old to new forced" , err )
164
177
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
165
178
})
@@ -171,33 +184,43 @@ func Test_updater_run(t *testing.T) {
171
184
p .ConfirmF = fakeConfirmNo
172
185
u := fromParams (p )
173
186
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
174
- err := u .Run (p .Ctx , false , fakeCoderURL )
187
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
175
188
assertCLIError (t , "update coder - user cancelled" , err , "failed to confirm update" , "" )
176
189
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
177
190
})
178
191
179
192
run (t , "update coder - cannot stat" , func (t * testing.T , p * params ) {
180
193
u := fromParams (p )
181
- err := u .Run (p .Ctx , false , fakeCoderURL )
194
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
182
195
assertCLIError (t , "update coder - cannot stat" , err , "cannot stat current binary" , os .ErrNotExist .Error ())
183
196
})
184
197
185
198
run (t , "update coder - no permission" , func (t * testing.T , p * params ) {
186
199
fakeFile (t , p .Fakefs , fakeExePathLinux , 0400 , fakeOldVersion )
187
200
u := fromParams (p )
188
201
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
189
- err := u .Run (p .Ctx , false , fakeCoderURL )
202
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
190
203
assertCLIError (t , "update coder - no permission" , err , "missing write permission" , "" )
191
204
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
192
205
})
193
206
207
+ run (t , "update coder - invalid version arg" , func (t * testing.T , p * params ) {
208
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
209
+ p .VersionF = func () string { return fakeOldVersion }
210
+ u := fromParams (p )
211
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
212
+ err := u .Run (p .Ctx , false , fakeCoderURL , "Invalid Semantic Version" )
213
+ assertCLIError (t , "update coder - invalid version arg" , err , "failed to determine desired version of coder" , "Invalid Semantic Version" )
214
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
215
+ })
216
+
194
217
run (t , "update coder - invalid url" , func (t * testing.T , p * params ) {
195
218
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
196
219
p .VersionF = func () string { return fakeOldVersion }
197
220
u := fromParams (p )
198
221
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
199
- err := u .Run (p .Ctx , false , "h$$p://invalid.url" )
200
- assertCLIError (t , "update coder - invalid url" , err , "invalid coder URL " , "first path segment in URL cannot contain colon" )
222
+ err := u .Run (p .Ctx , false , "h$$p://invalid.url" , "" )
223
+ assertCLIError (t , "update coder - invalid url" , err , "failed to determine desired version of coder " , "first path segment in URL cannot contain colon" )
201
224
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
202
225
})
203
226
@@ -207,8 +230,8 @@ func Test_updater_run(t *testing.T) {
207
230
p .VersionF = func () string { return fakeOldVersion }
208
231
u := fromParams (p )
209
232
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
210
- err := u .Run (p .Ctx , false , fakeCoderURL )
211
- assertCLIError (t , "update coder - fetch api version failure" , err , "fetch api version" , fakeError .Error ())
233
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
234
+ assertCLIError (t , "update coder - fetch api version failure" , err , "failed to determine desired version of coder " , fakeError .Error ())
212
235
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
213
236
})
214
237
@@ -220,7 +243,7 @@ func Test_updater_run(t *testing.T) {
220
243
p .ConfirmF = fakeConfirmYes
221
244
u := fromParams (p )
222
245
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
223
- err := u .Run (p .Ctx , false , fakeCoderURL )
246
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
224
247
assertCLIError (t , "update coder - failed to fetch URL" , err , "failed to fetch URL" , fakeError .Error ())
225
248
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
226
249
})
@@ -233,7 +256,7 @@ func Test_updater_run(t *testing.T) {
233
256
p .ConfirmF = fakeConfirmYes
234
257
u := fromParams (p )
235
258
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
236
- err := u .Run (p .Ctx , false , fakeCoderURL )
259
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
237
260
assertCLIError (t , "update coder - release URL 404" , err , "failed to fetch release" , "status code 404" )
238
261
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
239
262
})
@@ -246,7 +269,7 @@ func Test_updater_run(t *testing.T) {
246
269
p .ConfirmF = fakeConfirmYes
247
270
u := fromParams (p )
248
271
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
249
- err := u .Run (p .Ctx , false , fakeCoderURL )
272
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
250
273
assertCLIError (t , "update coder - invalid tgz archive" , err , "failed to extract coder binary from archive" , "unknown archive type" )
251
274
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
252
275
})
@@ -261,7 +284,7 @@ func Test_updater_run(t *testing.T) {
261
284
p .ConfirmF = fakeConfirmYes
262
285
u := fromParams (p )
263
286
assertFileContent (t , p .Fakefs , p .ExecutablePath , fakeOldVersion )
264
- err := u .Run (p .Ctx , false , fakeCoderURL )
287
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
265
288
assertCLIError (t , "update coder - invalid zip archive" , err , "failed to extract coder binary from archive" , "unknown archive type" )
266
289
assertFileContent (t , p .Fakefs , p .ExecutablePath , fakeOldVersion )
267
290
})
@@ -276,7 +299,7 @@ func Test_updater_run(t *testing.T) {
276
299
p .ConfirmF = fakeConfirmYes
277
300
u := fromParams (p )
278
301
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
279
- err := u .Run (p .Ctx , false , fakeCoderURL )
302
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
280
303
assertCLIError (t , "update coder - read-only fs" , err , "failed to create file" , "" )
281
304
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
282
305
})
@@ -285,35 +308,35 @@ func Test_updater_run(t *testing.T) {
285
308
run (t , "update coder - path blocklist - windows" , func (t * testing.T , p * params ) {
286
309
p .ExecutablePath = `C:\Windows\system32\coder.exe`
287
310
u := fromParams (p )
288
- err := u .Run (p .Ctx , false , fakeCoderURL )
311
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
289
312
assertCLIError (t , "update coder - path blocklist - windows" , err , "cowardly refusing to update coder binary" , "blocklisted prefix" )
290
313
})
291
314
} else {
292
315
run (t , "update coder - path blocklist - coder assets dir" , func (t * testing.T , p * params ) {
293
316
p .ExecutablePath = `/var/tmp/coder/coder`
294
317
u := fromParams (p )
295
- err := u .Run (p .Ctx , false , fakeCoderURL )
318
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
296
319
assertCLIError (t , "update coder - path blocklist - windows" , err , "cowardly refusing to update coder binary" , "blocklisted prefix" )
297
320
})
298
321
run (t , "update coder - path blocklist - old homebrew prefix" , func (t * testing.T , p * params ) {
299
322
p .Execer .M ["brew --prefix" ] = fakeExecerResult {[]byte ("/usr/local" ), nil }
300
323
p .ExecutablePath = `/usr/local/bin/coder`
301
324
u := fromParams (p )
302
- err := u .Run (p .Ctx , false , fakeCoderURL )
325
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
303
326
assertCLIError (t , "update coder - path blocklist - old homebrew prefix" , err , "cowardly refusing to update coder binary" , "blocklisted prefix" )
304
327
})
305
328
run (t , "update coder - path blocklist - new homebrew prefix" , func (t * testing.T , p * params ) {
306
329
p .Execer .M ["brew --prefix" ] = fakeExecerResult {[]byte ("/opt/homebrew" ), nil }
307
330
p .ExecutablePath = `/opt/homebrew/bin/coder`
308
331
u := fromParams (p )
309
- err := u .Run (p .Ctx , false , fakeCoderURL )
332
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
310
333
assertCLIError (t , "update coder - path blocklist - new homebrew prefix" , err , "cowardly refusing to update coder binary" , "blocklisted prefix" )
311
334
})
312
335
run (t , "update coder - path blocklist - linuxbrew" , func (t * testing.T , p * params ) {
313
336
p .Execer .M ["brew --prefix" ] = fakeExecerResult {[]byte ("/home/user/.linuxbrew" ), nil }
314
337
p .ExecutablePath = `/home/user/.linuxbrew/bin/coder`
315
338
u := fromParams (p )
316
- err := u .Run (p .Ctx , false , fakeCoderURL )
339
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
317
340
assertCLIError (t , "update coder - path blocklist - linuxbrew" , err , "cowardly refusing to update coder binary" , "blocklisted prefix" )
318
341
})
319
342
}
0 commit comments