@@ -22,22 +22,24 @@ import (
22
22
)
23
23
24
24
const (
25
- fakeExePathLinux = "/home/user/bin/coder"
26
- fakeExePathWindows = `C:\Users\user\bin\coder.exe`
27
- fakeCoderURL = "https://my.cdr.dev"
28
- fakeNewVersion = "1.23.4-rc.5+678-gabcdef-12345678"
29
- fakeOldVersion = "1.22.4-rc.5+678-gabcdef-12345678"
30
- fakeReleaseURLLinux = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/coder-cli-linux-amd64.tar.gz"
31
- fakeReleaseURLWindows = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/coder-cli-windows-amd64.zip"
32
- goosWindows = "windows"
33
- goosLinux = "linux"
25
+ fakeExePathLinux = "/home/user/bin/coder"
26
+ fakeExePathWindows = `C:\Users\user\bin\coder.exe`
27
+ fakeCoderURL = "https://my.cdr.dev"
28
+ fakeNewVersion = "1.23.4-rc.5+678-gabcdef-12345678"
29
+ fakeOldVersion = "1.22.4-rc.5+678-gabcdef-12345678"
30
+ filenameLinux = "coder-cli-linux-amd64.tar.gz"
31
+ filenameWindows = "coder-cli-windows.zip"
32
+ fakeGithubReleaseURL = "https://api.github.com/repos/cdr/coder-cli/releases/tags/v1.23.4-rc.5"
34
33
)
35
34
36
35
var (
37
- apiPrivateVersionURL = fakeCoderURL + "/api/private/version"
38
- fakeError = xerrors .New ("fake error for testing" )
39
- fakeNewVersionJSON = fmt .Sprintf (`{"version":%q}` , fakeNewVersion )
40
- fakeOldVersionJSON = fmt .Sprintf (`{"version":%q}` , fakeOldVersion )
36
+ apiPrivateVersionURL = fakeCoderURL + apiPrivateVersion
37
+ fakeError = xerrors .New ("fake error for testing" )
38
+ fakeNewVersionJSON = fmt .Sprintf (`{"version":%q}` , fakeNewVersion )
39
+ fakeOldVersionJSON = fmt .Sprintf (`{"version":%q}` , fakeOldVersion )
40
+ fakeAssetURLLinux = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/" + filenameLinux
41
+ fakeAssetURLWindows = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/" + filenameWindows
42
+ fakeGithubReleaseJSON = fmt .Sprintf (`{"assets":[{"name":%q,"browser_download_url":%q},{"name":%q,"browser_download_url":%q}]}` , filenameLinux , fakeAssetURLLinux , filenameWindows , fakeAssetURLWindows )
41
43
)
42
44
43
45
func Test_updater_run (t * testing.T ) {
@@ -113,7 +115,8 @@ func Test_updater_run(t *testing.T) {
113
115
run (t , "update coder - explicit version specified" , func (t * testing.T , p * params ) {
114
116
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
115
117
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeOldVersionJSON ), 200 , variadicS (), nil )
116
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
118
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
119
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
117
120
p .VersionF = func () string { return fakeOldVersion }
118
121
p .ConfirmF = fakeConfirmYes
119
122
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
@@ -127,7 +130,8 @@ func Test_updater_run(t *testing.T) {
127
130
run (t , "update coder - old to new" , func (t * testing.T , p * params ) {
128
131
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
129
132
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
130
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
133
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
134
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
131
135
p .VersionF = func () string { return fakeOldVersion }
132
136
p .ConfirmF = fakeConfirmYes
133
137
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
@@ -142,7 +146,8 @@ func Test_updater_run(t *testing.T) {
142
146
p .ExecutablePath = "/home/user/bin/coder-cli"
143
147
fakeFile (t , p .Fakefs , p .ExecutablePath , 0755 , fakeOldVersion )
144
148
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
145
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
149
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
150
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
146
151
p .VersionF = func () string { return fakeOldVersion }
147
152
p .ConfirmF = fakeConfirmYes
148
153
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
@@ -158,7 +163,8 @@ func Test_updater_run(t *testing.T) {
158
163
p .ExecutablePath = fakeExePathWindows
159
164
fakeFile (t , p .Fakefs , fakeExePathWindows , 0755 , fakeOldVersion )
160
165
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
161
- p .HTTPClient .M [fakeReleaseURLWindows ] = newFakeGetterResponse (fakeValidZipBytes , 200 , variadicS (), nil )
166
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
167
+ p .HTTPClient .M [fakeAssetURLWindows ] = newFakeGetterResponse (fakeValidZipBytes , 200 , variadicS (), nil )
162
168
p .VersionF = func () string { return fakeOldVersion }
163
169
p .ConfirmF = fakeConfirmYes
164
170
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
@@ -172,7 +178,8 @@ func Test_updater_run(t *testing.T) {
172
178
run (t , "update coder - old to new forced" , func (t * testing.T , p * params ) {
173
179
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
174
180
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
175
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
181
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
182
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
176
183
p .VersionF = func () string { return fakeOldVersion }
177
184
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
178
185
u := fromParams (p )
@@ -240,10 +247,24 @@ func Test_updater_run(t *testing.T) {
240
247
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
241
248
})
242
249
250
+ run (t , "update coder - failed to query github releases" , func (t * testing.T , p * params ) {
251
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
252
+ p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
253
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte {}, 0 , variadicS (), fakeError )
254
+ p .VersionF = func () string { return fakeOldVersion }
255
+ p .ConfirmF = fakeConfirmYes
256
+ u := fromParams (p )
257
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
258
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
259
+ assertCLIError (t , "update coder - failed to query github releases" , err , "failed to query github assets" , fakeError .Error ())
260
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
261
+ })
262
+
243
263
run (t , "update coder - failed to fetch URL" , func (t * testing.T , p * params ) {
244
264
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
245
265
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
246
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 0 , variadicS (), fakeError )
266
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
267
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse ([]byte {}, 0 , variadicS (), fakeError )
247
268
p .VersionF = func () string { return fakeOldVersion }
248
269
p .ConfirmF = fakeConfirmYes
249
270
u := fromParams (p )
@@ -256,7 +277,8 @@ func Test_updater_run(t *testing.T) {
256
277
run (t , "update coder - release URL 404" , func (t * testing.T , p * params ) {
257
278
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
258
279
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
259
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 404 , variadicS (), nil )
280
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
281
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse ([]byte {}, 404 , variadicS (), nil )
260
282
p .VersionF = func () string { return fakeOldVersion }
261
283
p .ConfirmF = fakeConfirmYes
262
284
u := fromParams (p )
@@ -269,7 +291,8 @@ func Test_updater_run(t *testing.T) {
269
291
run (t , "update coder - invalid tgz archive" , func (t * testing.T , p * params ) {
270
292
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
271
293
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
272
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
294
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
295
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
273
296
p .VersionF = func () string { return fakeOldVersion }
274
297
p .ConfirmF = fakeConfirmYes
275
298
u := fromParams (p )
@@ -284,7 +307,8 @@ func Test_updater_run(t *testing.T) {
284
307
p .ExecutablePath = fakeExePathWindows
285
308
fakeFile (t , p .Fakefs , fakeExePathWindows , 0755 , fakeOldVersion )
286
309
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
287
- p .HTTPClient .M [fakeReleaseURLWindows ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
310
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
311
+ p .HTTPClient .M [fakeAssetURLWindows ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
288
312
p .VersionF = func () string { return fakeOldVersion }
289
313
p .ConfirmF = fakeConfirmYes
290
314
u := fromParams (p )
@@ -299,7 +323,8 @@ func Test_updater_run(t *testing.T) {
299
323
p .Fakefs = afero .NewReadOnlyFs (rwfs )
300
324
fakeFile (t , rwfs , fakeExePathLinux , 0755 , fakeOldVersion )
301
325
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
302
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
326
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
327
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
303
328
p .VersionF = func () string { return fakeOldVersion }
304
329
p .ConfirmF = fakeConfirmYes
305
330
u := fromParams (p )
@@ -312,7 +337,8 @@ func Test_updater_run(t *testing.T) {
312
337
run (t , "update coder - cannot exec new binary" , func (t * testing.T , p * params ) {
313
338
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
314
339
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
315
- p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
340
+ p .HTTPClient .M [fakeGithubReleaseURL ] = newFakeGetterResponse ([]byte (fakeGithubReleaseJSON ), 200 , variadicS (), nil )
341
+ p .HTTPClient .M [fakeAssetURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
316
342
p .VersionF = func () string { return fakeOldVersion }
317
343
p .ConfirmF = fakeConfirmYes
318
344
p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {nil , fakeError }
0 commit comments