Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit 513282a

Browse files
committed
internal/cmd/update_test.go: create dirs in memfs
1 parent 1373e79 commit 513282a

File tree

1 file changed

+44
-39
lines changed

1 file changed

+44
-39
lines changed

internal/cmd/update_test.go

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net"
1010
"net/http"
1111
"os"
12+
"path/filepath"
1213
"strings"
1314
"testing"
1415

@@ -18,11 +19,11 @@ import (
1819
)
1920

2021
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"
2627
)
2728

2829
func Test_updater_run(t *testing.T) {
@@ -61,7 +62,7 @@ func Test_updater_run(t *testing.T) {
6162
return "", nil
6263
},
6364
Ctx: ctx,
64-
ExecutablePath: fakeExePath,
65+
ExecutablePath: fakeExePathLinux,
6566
Fakefs: fakefs,
6667
HttpClient: newFakeGetter(t),
6768
// This must be overridden inside run()
@@ -76,51 +77,51 @@ func Test_updater_run(t *testing.T) {
7677
}
7778

7879
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)
8081
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
8182
p.VersionF = func() string { return fakeNewVersion }
8283
u := fromParams(p)
83-
assertFileContent(t, p.Fakefs, fakeExePath, fakeNewVersion)
84+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeNewVersion)
8485
err := u.Run(p.Ctx, false, fakeCoderURL)
8586
assert.Success(t, "update coder - noop", err)
86-
assertFileContent(t, p.Fakefs, fakeExePath, fakeNewVersion)
87+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeNewVersion)
8788
})
8889

8990
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)
9192
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
9293
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse(fakeValidTgzBytes, 200, variadicS(), nil)
9394
p.VersionF = func() string { return fakeOldVersion }
9495
p.ConfirmF = fakeConfirmYes
9596
u := fromParams(p)
96-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
97+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
9798
err := u.Run(p.Ctx, false, fakeCoderURL)
9899
assert.Success(t, "update coder - old to new", err)
99-
assertFileContent(t, p.Fakefs, fakeExePath, fakeNewVersion)
100+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeNewVersion)
100101
})
101102

102103
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)
104105
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
105106
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse(fakeValidTgzBytes, 200, variadicS(), nil)
106107
p.VersionF = func() string { return fakeOldVersion }
107108
u := fromParams(p)
108-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
109+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
109110
err := u.Run(p.Ctx, true, fakeCoderURL)
110111
assert.Success(t, "update coder - old to new forced", err)
111-
assertFileContent(t, p.Fakefs, fakeExePath, fakeNewVersion)
112+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeNewVersion)
112113
})
113114

114115
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)
116117
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
117118
p.VersionF = func() string { return fakeOldVersion }
118119
p.ConfirmF = fakeConfirmNo
119120
u := fromParams(p)
120-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
121+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
121122
err := u.Run(p.Ctx, false, fakeCoderURL)
122123
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)
124125
})
125126

126127
run(t, "update coder - cannot stat", func(t *testing.T, p *params) {
@@ -130,87 +131,87 @@ func Test_updater_run(t *testing.T) {
130131
})
131132

132133
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)
134135
u := fromParams(p)
135-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
136+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
136137
err := u.Run(p.Ctx, false, fakeCoderURL)
137138
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)
139140
})
140141

141142
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)
143144
p.VersionF = func() string { return fakeOldVersion }
144145
u := fromParams(p)
145-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
146+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
146147
err := u.Run(p.Ctx, false, "h$$p://invalid.url")
147148
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)
149150
})
150151

151152
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)
153154
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS(), net.ErrClosed)
154155
p.VersionF = func() string { return fakeOldVersion }
155156
u := fromParams(p)
156-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
157+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
157158
err := u.Run(p.Ctx, false, fakeCoderURL)
158159
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)
160161
})
161162

162163
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)
164165
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
165166
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse([]byte{}, 0, variadicS(), net.ErrClosed)
166167
p.VersionF = func() string { return fakeOldVersion }
167168
p.ConfirmF = fakeConfirmYes
168169
u := fromParams(p)
169-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
170+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
170171
err := u.Run(p.Ctx, false, fakeCoderURL)
171172
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)
173174
})
174175

175176
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)
177178
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
178179
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse([]byte{}, 404, variadicS(), nil)
179180
p.VersionF = func() string { return fakeOldVersion }
180181
p.ConfirmF = fakeConfirmYes
181182
u := fromParams(p)
182-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
183+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
183184
err := u.Run(p.Ctx, false, fakeCoderURL)
184185
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)
186187
})
187188

188189
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)
190191
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
191192
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse([]byte{}, 200, variadicS(), nil)
192193
p.VersionF = func() string { return fakeOldVersion }
193194
p.ConfirmF = fakeConfirmYes
194195
u := fromParams(p)
195-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
196+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
196197
err := u.Run(p.Ctx, false, fakeCoderURL)
197198
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)
199200
})
200201

201202
run(t, "update coder - read-only fs", func(t *testing.T, p *params) {
202203
rwfs := p.Fakefs
203204
p.Fakefs = afero.NewReadOnlyFs(rwfs)
204-
fakeFile(t, rwfs, fakeExePath, 0755, fakeOldVersion)
205+
fakeFile(t, rwfs, fakeExePathLinux, 0755, fakeOldVersion)
205206
p.HttpClient.M[fakeCoderURL+"/api"] = newFakeGetterResponse([]byte{}, 401, variadicS("coder-version: "+fakeNewVersion), nil)
206207
p.HttpClient.M[fakeReleaseURL] = newFakeGetterResponse(fakeValidTgzBytes, 200, variadicS(), nil)
207208
p.VersionF = func() string { return fakeOldVersion }
208209
p.ConfirmF = fakeConfirmYes
209210
u := fromParams(p)
210-
assertFileContent(t, p.Fakefs, fakeExePath, fakeOldVersion)
211+
assertFileContent(t, p.Fakefs, fakeExePathLinux, fakeOldVersion)
211212
err := u.Run(p.Ctx, false, fakeCoderURL)
212213
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)
214215
})
215216
}
216217

@@ -278,6 +279,10 @@ func fakeConfirmNo(_ string) (string, error) {
278279
//nolint:unparam
279280
func fakeFile(t *testing.T, fs afero.Fs, name string, perm fs.FileMode, content string) {
280281
t.Helper()
282+
err := fs.MkdirAll(filepath.Dir(name), 0750)
283+
if err != nil {
284+
panic(err)
285+
}
281286
f, err := fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, perm)
282287
if err != nil {
283288
panic(err)

0 commit comments

Comments
 (0)