9
9
"net"
10
10
"net/http"
11
11
"os"
12
+ "path/filepath"
12
13
"strings"
13
14
"testing"
14
15
@@ -18,11 +19,11 @@ import (
18
19
)
19
20
20
21
const (
21
- fakeExePath = "/coder"
22
- fakeCoderURL = "https://my.cdr.dev"
23
- fakeNewVersion = "1.23.4-rc.5+678-gabcdef-12345678"
24
- fakeOldVersion = "1.22.4-rc.5+678-gabcdef-12345678"
25
- fakeReleaseURL = "https://github.com/cdr/coder-cli/releases/download/v1.23.4/coder-cli-linux-amd64.tar.gz"
22
+ fakeExePathLinux = "/home/user/bin /coder"
23
+ fakeCoderURL = "https://my.cdr.dev"
24
+ fakeNewVersion = "1.23.4-rc.5+678-gabcdef-12345678"
25
+ fakeOldVersion = "1.22.4-rc.5+678-gabcdef-12345678"
26
+ fakeReleaseURL = "https://github.com/cdr/coder-cli/releases/download/v1.23.4/coder-cli-linux-amd64.tar.gz"
26
27
)
27
28
28
29
func Test_updater_run (t * testing.T ) {
@@ -61,7 +62,7 @@ func Test_updater_run(t *testing.T) {
61
62
return "" , nil
62
63
},
63
64
Ctx : ctx ,
64
- ExecutablePath : fakeExePath ,
65
+ ExecutablePath : fakeExePathLinux ,
65
66
Fakefs : fakefs ,
66
67
HttpClient : newFakeGetter (t ),
67
68
// This must be overridden inside run()
@@ -76,51 +77,51 @@ func Test_updater_run(t *testing.T) {
76
77
}
77
78
78
79
run (t , "update coder - noop" , func (t * testing.T , p * params ) {
79
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeNewVersion )
80
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeNewVersion )
80
81
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
81
82
p .VersionF = func () string { return fakeNewVersion }
82
83
u := fromParams (p )
83
- assertFileContent (t , p .Fakefs , fakeExePath , fakeNewVersion )
84
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
84
85
err := u .Run (p .Ctx , false , fakeCoderURL )
85
86
assert .Success (t , "update coder - noop" , err )
86
- assertFileContent (t , p .Fakefs , fakeExePath , fakeNewVersion )
87
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
87
88
})
88
89
89
90
run (t , "update coder - old to new" , func (t * testing.T , p * params ) {
90
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
91
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
91
92
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
92
93
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
93
94
p .VersionF = func () string { return fakeOldVersion }
94
95
p .ConfirmF = fakeConfirmYes
95
96
u := fromParams (p )
96
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
97
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
97
98
err := u .Run (p .Ctx , false , fakeCoderURL )
98
99
assert .Success (t , "update coder - old to new" , err )
99
- assertFileContent (t , p .Fakefs , fakeExePath , fakeNewVersion )
100
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
100
101
})
101
102
102
103
run (t , "update coder - old to new forced" , func (t * testing.T , p * params ) {
103
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
104
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
104
105
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
105
106
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
106
107
p .VersionF = func () string { return fakeOldVersion }
107
108
u := fromParams (p )
108
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
109
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
109
110
err := u .Run (p .Ctx , true , fakeCoderURL )
110
111
assert .Success (t , "update coder - old to new forced" , err )
111
- assertFileContent (t , p .Fakefs , fakeExePath , fakeNewVersion )
112
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeNewVersion )
112
113
})
113
114
114
115
run (t , "update coder - user cancelled" , func (t * testing.T , p * params ) {
115
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
116
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
116
117
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
117
118
p .VersionF = func () string { return fakeOldVersion }
118
119
p .ConfirmF = fakeConfirmNo
119
120
u := fromParams (p )
120
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
121
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
121
122
err := u .Run (p .Ctx , false , fakeCoderURL )
122
123
assert .ErrorContains (t , "update coder - user cancelled" , err , "failed to confirm update" )
123
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
124
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
124
125
})
125
126
126
127
run (t , "update coder - cannot stat" , func (t * testing.T , p * params ) {
@@ -130,87 +131,87 @@ func Test_updater_run(t *testing.T) {
130
131
})
131
132
132
133
run (t , "update coder - no permission" , func (t * testing.T , p * params ) {
133
- fakeFile (t , p .Fakefs , fakeExePath , 0400 , fakeOldVersion )
134
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0400 , fakeOldVersion )
134
135
u := fromParams (p )
135
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
136
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
136
137
err := u .Run (p .Ctx , false , fakeCoderURL )
137
138
assert .ErrorContains (t , "update coder - no permission" , err , "missing write permission" )
138
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
139
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
139
140
})
140
141
141
142
run (t , "update coder - invalid url" , func (t * testing.T , p * params ) {
142
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
143
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
143
144
p .VersionF = func () string { return fakeOldVersion }
144
145
u := fromParams (p )
145
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
146
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
146
147
err := u .Run (p .Ctx , false , "h$$p://invalid.url" )
147
148
assert .ErrorContains (t , "update coder - invalid url" , err , "invalid coder URL" )
148
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
149
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
149
150
})
150
151
151
152
run (t , "update coder - fetch api version failure" , func (t * testing.T , p * params ) {
152
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
153
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
153
154
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS (), net .ErrClosed )
154
155
p .VersionF = func () string { return fakeOldVersion }
155
156
u := fromParams (p )
156
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
157
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
157
158
err := u .Run (p .Ctx , false , fakeCoderURL )
158
159
assert .ErrorContains (t , "update coder - fetch api version failure" , err , "fetch api version" )
159
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
160
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
160
161
})
161
162
162
163
run (t , "update coder - failed to fetch URL" , func (t * testing.T , p * params ) {
163
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
164
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
164
165
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
165
166
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse ([]byte {}, 0 , variadicS (), net .ErrClosed )
166
167
p .VersionF = func () string { return fakeOldVersion }
167
168
p .ConfirmF = fakeConfirmYes
168
169
u := fromParams (p )
169
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
170
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
170
171
err := u .Run (p .Ctx , false , fakeCoderURL )
171
172
assert .ErrorContains (t , "update coder - release URL 404" , err , "failed to fetch URL" )
172
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
173
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
173
174
})
174
175
175
176
run (t , "update coder - release URL 404" , func (t * testing.T , p * params ) {
176
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
177
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
177
178
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
178
179
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse ([]byte {}, 404 , variadicS (), nil )
179
180
p .VersionF = func () string { return fakeOldVersion }
180
181
p .ConfirmF = fakeConfirmYes
181
182
u := fromParams (p )
182
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
183
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
183
184
err := u .Run (p .Ctx , false , fakeCoderURL )
184
185
assert .ErrorContains (t , "update coder - release URL 404" , err , "failed to fetch release" )
185
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
186
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
186
187
})
187
188
188
189
run (t , "update coder - invalid archive" , func (t * testing.T , p * params ) {
189
- fakeFile (t , p .Fakefs , fakeExePath , 0755 , fakeOldVersion )
190
+ fakeFile (t , p .Fakefs , fakeExePathLinux , 0755 , fakeOldVersion )
190
191
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
191
192
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse ([]byte {}, 200 , variadicS (), nil )
192
193
p .VersionF = func () string { return fakeOldVersion }
193
194
p .ConfirmF = fakeConfirmYes
194
195
u := fromParams (p )
195
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
196
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
196
197
err := u .Run (p .Ctx , false , fakeCoderURL )
197
198
assert .ErrorContains (t , "update coder - invalid archive" , err , "failed to extract coder binary from archive" )
198
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
199
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
199
200
})
200
201
201
202
run (t , "update coder - read-only fs" , func (t * testing.T , p * params ) {
202
203
rwfs := p .Fakefs
203
204
p .Fakefs = afero .NewReadOnlyFs (rwfs )
204
- fakeFile (t , rwfs , fakeExePath , 0755 , fakeOldVersion )
205
+ fakeFile (t , rwfs , fakeExePathLinux , 0755 , fakeOldVersion )
205
206
p .HttpClient .M [fakeCoderURL + "/api" ] = newFakeGetterResponse ([]byte {}, 401 , variadicS ("coder-version: " + fakeNewVersion ), nil )
206
207
p .HttpClient .M [fakeReleaseURL ] = newFakeGetterResponse (fakeValidTgzBytes , 200 , variadicS (), nil )
207
208
p .VersionF = func () string { return fakeOldVersion }
208
209
p .ConfirmF = fakeConfirmYes
209
210
u := fromParams (p )
210
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
211
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
211
212
err := u .Run (p .Ctx , false , fakeCoderURL )
212
213
assert .ErrorContains (t , "update coder - read-only fs" , err , "failed to create file" )
213
- assertFileContent (t , p .Fakefs , fakeExePath , fakeOldVersion )
214
+ assertFileContent (t , p .Fakefs , fakeExePathLinux , fakeOldVersion )
214
215
})
215
216
}
216
217
@@ -278,6 +279,10 @@ func fakeConfirmNo(_ string) (string, error) {
278
279
//nolint:unparam
279
280
func fakeFile (t * testing.T , fs afero.Fs , name string , perm fs.FileMode , content string ) {
280
281
t .Helper ()
282
+ err := fs .MkdirAll (filepath .Dir (name ), 0750 )
283
+ if err != nil {
284
+ panic (err )
285
+ }
281
286
f , err := fs .OpenFile (name , os .O_RDWR | os .O_CREATE | os .O_TRUNC , perm )
282
287
if err != nil {
283
288
panic (err )
0 commit comments