4
4
"bytes"
5
5
"context"
6
6
"encoding/base64"
7
+ "fmt"
7
8
"io/fs"
8
9
"io/ioutil"
9
10
"net"
@@ -28,6 +29,12 @@ const (
28
29
fakeReleaseURLWindows = "https://github.com/cdr/coder-cli/releases/download/v1.23.4-rc.5/coder-cli-windows-amd64.zip"
29
30
)
30
31
32
+ var (
33
+ apiPrivateVersionURL = fakeCoderURL + "/api/private/version"
34
+ fakeNewVersionJson = fmt .Sprintf (`{"version":%q}` , fakeNewVersion )
35
+ fakeOldVersionJson = fmt .Sprintf (`{"version":%q}` , fakeOldVersion )
36
+ )
37
+
31
38
func Test_updater_run (t * testing.T ) {
32
39
t .Parallel ()
33
40
@@ -84,7 +91,7 @@ func Test_updater_run(t *testing.T) {
84
91
85
92
run (t , "update coder - noop" , func (t * testing.T , p * params ) {
86
93
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeNewVersion )
87
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
94
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
88
95
p .VersionF = func () string { return fakeNewVersion }
89
96
u := fromParams (p )
90
97
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
@@ -95,7 +102,7 @@ func Test_updater_run(t *testing.T) {
95
102
96
103
run (t , "update coder - old to new" , func (t * testing.T , p * params ) {
97
104
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
98
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
105
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
99
106
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
100
107
p .VersionF = func () string { return fakeOldVersion }
101
108
p .ConfirmF = fakeConfirmYes
@@ -109,7 +116,7 @@ func Test_updater_run(t *testing.T) {
109
116
run (t , "update coder - old to new - binary renamed" , func (t * testing.T , p * params ) {
110
117
p .ExecutablePath = "/home/user/bin/coder-cli"
111
118
fakeFile (t , p .Fakefs , p .ExecutablePath , 0755 , fakeOldVersion )
112
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
119
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
113
120
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
114
121
p .VersionF = func () string { return fakeOldVersion }
115
122
p .ConfirmF = fakeConfirmYes
@@ -124,7 +131,7 @@ func Test_updater_run(t *testing.T) {
124
131
p .OsF = func () string { return "windows" }
125
132
p .ExecutablePath = fakeExePathWindows
126
133
fakeFile (t , p .Fakefs , fakeExePathWindows , 0755 , fakeOldVersion )
127
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
134
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
128
135
p .HttpClient .M [fakeReleaseURLWindows ] = newFakeGetterResponse (fakeValidZipBytes , 200 , variadicS (), nil )
129
136
p .VersionF = func () string { return fakeOldVersion }
130
137
p .ConfirmF = fakeConfirmYes
@@ -137,7 +144,7 @@ func Test_updater_run(t *testing.T) {
137
144
138
145
run (t , "update coder - old to new forced" , func (t * testing.T , p * params ) {
139
146
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
140
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
147
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
141
148
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
142
149
p .VersionF = func () string { return fakeOldVersion }
143
150
u := fromParams (p )
@@ -149,7 +156,7 @@ func Test_updater_run(t *testing.T) {
149
156
150
157
run (t , "update coder - user cancelled" , func (t * testing.T , p * params ) {
151
158
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
152
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
159
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
153
160
p .VersionF = func () string { return fakeOldVersion }
154
161
p .ConfirmF = fakeConfirmNo
155
162
u := fromParams (p )
@@ -186,7 +193,7 @@ func Test_updater_run(t *testing.T) {
186
193
187
194
run (t , "update coder - fetch api version failure" , func (t * testing.T , p * params ) {
188
195
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
189
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS (), net .ErrClosed )
196
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte {}, 401 , variadicS (), net .ErrClosed )
190
197
p .VersionF = func () string { return fakeOldVersion }
191
198
u := fromParams (p )
192
199
assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
@@ -197,7 +204,7 @@ func Test_updater_run(t *testing.T) {
197
204
198
205
run (t , "update coder - failed to fetch URL" , func (t * testing.T , p * params ) {
199
206
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
200
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
207
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
201
208
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 0 , variadicS (), net .ErrClosed )
202
209
p .VersionF = func () string { return fakeOldVersion }
203
210
p .ConfirmF = fakeConfirmYes
@@ -210,7 +217,7 @@ func Test_updater_run(t *testing.T) {
210
217
211
218
run (t , "update coder - release URL 404" , func (t * testing.T , p * params ) {
212
219
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
213
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
220
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
214
221
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 404 , variadicS (), nil )
215
222
p .VersionF = func () string { return fakeOldVersion }
216
223
p .ConfirmF = fakeConfirmYes
@@ -223,7 +230,7 @@ func Test_updater_run(t *testing.T) {
223
230
224
231
run (t , "update coder - invalid tgz archive" , func (t * testing.T , p * params ) {
225
232
fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
226
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
233
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
227
234
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
228
235
p .VersionF = func () string { return fakeOldVersion }
229
236
p .ConfirmF = fakeConfirmYes
@@ -238,7 +245,7 @@ func Test_updater_run(t *testing.T) {
238
245
p .OsF = func () string { return "windows" }
239
246
p .ExecutablePath = fakeExePathWindows
240
247
fakeFile (t , p .Fakefs , fakeExePathWindows , 0755 , fakeOldVersion )
241
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
248
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
242
249
p .HttpClient .M [fakeReleaseURLWindows ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
243
250
p .VersionF = func () string { return fakeOldVersion }
244
251
p .ConfirmF = fakeConfirmYes
@@ -253,7 +260,7 @@ func Test_updater_run(t *testing.T) {
253
260
rwfs := p .Fakefs
254
261
p .Fakefs = afero .NewReadOnlyFs (rwfs )
255
262
fakeFile (t , rwfs , fakeExePathLinux , 0755 , fakeOldVersion )
256
- p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
263
+ p .HttpClient .M [apiPrivateVersionURL ] = newFakeGetterResponse ([]byte ( fakeNewVersionJson ), 200 , variadicS (), nil )
257
264
p .HttpClient .M [fakeReleaseURLLinux ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
258
265
p .VersionF = func () string { return fakeOldVersion }
259
266
p .ConfirmF = fakeConfirmYes
@@ -280,6 +287,7 @@ func newFakeGetter(t *testing.T) *fakeGetter {
280
287
281
288
// Get returns the configured response for url. If no response configured, test fails immediately.
282
289
func (f * fakeGetter ) Get (url string ) (* http.Response , error ) {
290
+ f .T .Helper ()
283
291
val , ok := f .M [url ]
284
292
if ! ok {
285
293
f .T .Errorf ("unhandled url: %s" , url )
0 commit comments