@@ -22,15 +22,16 @@ 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
+ fakeUpdatedExePathLinux = "/home/user/bin/coder.new"
27
+ fakeExePathWindows = `C:\Users\user\bin\coder.exe`
28
+ fakeCoderURL = "https://my.cdr.dev"
29
+ fakeNewVersion = "1.23.4-rc.5+678-gabcdef-12345678"
30
+ fakeOldVersion = "1.22.4-rc.5+678-gabcdef-12345678"
31
+ fakeReleaseURLLinux = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/coder-cli-linux-amd64.tar.gz"
32
+ fakeReleaseURLWindows = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/coder-cli-windows-amd64.zip"
33
+ goosWindows = "windows"
34
+ goosLinux = "linux"
34
35
)
35
36
36
37
var (
@@ -116,6 +117,7 @@ func Test_updater_run(t *testing.T) {
116
117
p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
117
118
p .VersionF = func () string { return fakeOldVersion }
118
119
p .ConfirmF = fakeConfirmYes
120
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
119
121
u := fromParams (p )
120
122
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
121
123
err := u .Run (p .Ctx , false , fakeCoderURL , fakeNewVersion )
@@ -129,6 +131,7 @@ func Test_updater_run(t *testing.T) {
129
131
p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
130
132
p .VersionF = func () string { return fakeOldVersion }
131
133
p .ConfirmF = fakeConfirmYes
134
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
132
135
u := fromParams (p )
133
136
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
134
137
err := u .Run (p .Ctx , false , fakeCoderURL , "" )
@@ -143,6 +146,7 @@ func Test_updater_run(t *testing.T) {
143
146
p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
144
147
p .VersionF = func () string { return fakeOldVersion }
145
148
p .ConfirmF = fakeConfirmYes
149
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
146
150
u := fromParams (p )
147
151
assertFileContent (t , p .Fakefs , p .ExecutablePath , fakeOldVersion )
148
152
err := u .Run (p .Ctx , false , fakeCoderURL , "" )
@@ -158,6 +162,7 @@ func Test_updater_run(t *testing.T) {
158
162
p .HTTPClient .M [fakeReleaseURLWindows ] = newFakeGetterResponse (fakeValidZipBytes , 200 , variadicS (), nil )
159
163
p .VersionF = func () string { return fakeOldVersion }
160
164
p .ConfirmF = fakeConfirmYes
165
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
161
166
u := fromParams (p )
162
167
assertFileContent (t , p .Fakefs , fakeExePathWindows , fakeOldVersion )
163
168
err := u .Run (p .Ctx , false , fakeCoderURL , "" )
@@ -170,6 +175,7 @@ func Test_updater_run(t *testing.T) {
170
175
p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
171
176
p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
172
177
p .VersionF = func () string { return fakeOldVersion }
178
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {[]byte (fakeNewVersion ), nil }
173
179
u := fromParams (p )
174
180
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
175
181
err := u .Run (p .Ctx , true , fakeCoderURL , "" )
@@ -304,6 +310,20 @@ func Test_updater_run(t *testing.T) {
304
310
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
305
311
})
306
312
313
+ run (t , "update coder - cannot exec new binary" , func (t * testing.T , p * params ) {
314
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
315
+ p .HTTPClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte (fakeNewVersionJSON ), 200 , variadicS (), nil )
316
+ p .HTTPClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
317
+ p .VersionF = func () string { return fakeOldVersion }
318
+ p .ConfirmF = fakeConfirmYes
319
+ p .Execer .M [p .ExecutablePath + ".new --version" ] = fakeExecerResult {nil , fakeError }
320
+ u := fromParams (p )
321
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
322
+ err := u .Run (p .Ctx , false , fakeCoderURL , "" )
323
+ assertCLIError (t , "update coder - cannot exec new binary" , err , "failed to check version of updated coder binary" , "" )
324
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
325
+ })
326
+
307
327
if runtime .GOOS == goosWindows {
308
328
run (t , "update coder - path blocklist - windows" , func (t * testing.T , p * params ) {
309
329
p .ExecutablePath = `C:\Windows\system32\coder.exe`
0 commit comments