Skip to content

Commit c214b2c

Browse files
test io.Reader failure
1 parent 897e2c7 commit c214b2c

File tree

4 files changed

+46
-5
lines changed

4 files changed

+46
-5
lines changed

bogusreader_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package selfupdate
2+
3+
import (
4+
"errors"
5+
"io"
6+
)
7+
8+
type bogusReader struct{}
9+
10+
func (r *bogusReader) Read(p []byte) (n int, err error) {
11+
return 0, errors.New("cannot read")
12+
}
13+
14+
// Verify interface
15+
var _ io.Reader = &bogusReader{}

decompress.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ var (
4040
// These wrapped errors can be returned:
4141
// - ErrCannotDecompressFile
4242
// - ErrExecutableNotFoundInArchive
43-
// - ErrCannotReadStream
4443
func DecompressCommand(src io.Reader, url, cmd, os, arch string) (io.Reader, error) {
4544
for _, fileType := range fileTypes {
4645
if strings.HasSuffix(url, fileType.ext) {
@@ -58,7 +57,7 @@ func unzip(src io.Reader, cmd, os, arch string) (io.Reader, error) {
5857
// So we need to read the HTTP response into a buffer at first.
5958
buf, err := ioutil.ReadAll(src)
6059
if err != nil {
61-
return nil, fmt.Errorf("%w for zip file: %v", ErrCannotReadStream, err)
60+
return nil, fmt.Errorf("%w zip file: %v", ErrCannotDecompressFile, err)
6261
}
6362

6463
r := bytes.NewReader(buf)
@@ -111,7 +110,7 @@ func untarxz(src io.Reader, cmd, os, arch string) (io.Reader, error) {
111110

112111
xzip, err := xz.NewReader(src)
113112
if err != nil {
114-
return nil, fmt.Errorf("%w .tar.xz file: %s", ErrCannotDecompressFile, err)
113+
return nil, fmt.Errorf("%w tar.xz file: %s", ErrCannotDecompressFile, err)
115114
}
116115

117116
return unarchiveTar(xzip, cmd, os, arch)

decompress_test.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func TestDecompressInvalidArchive(t *testing.T) {
7878
{"testdata/invalid-gzip.tar.gz", "failed to decompress tar.gz file"},
7979
{"testdata/invalid.xz", "failed to decompress xzip file"},
8080
{"testdata/invalid-tar.tar.xz", "failed to decompress tar file"},
81-
{"testdata/invalid-xz.tar.xz", "failed to decompress .tar.xz file"},
81+
{"testdata/invalid-xz.tar.xz", "failed to decompress tar.xz file"},
8282
} {
8383
f, err := os.Open(a.name)
8484
require.NoError(t, err)
@@ -142,3 +142,31 @@ func TestMatchExecutableName(t *testing.T) {
142142
})
143143
}
144144
}
145+
146+
func TestErrorFromReader(t *testing.T) {
147+
extensions := []string{
148+
"zip",
149+
"tar.gz",
150+
"tgz",
151+
"gzip",
152+
"gz",
153+
"tar.xz",
154+
"xz",
155+
"bz2",
156+
}
157+
158+
for _, extension := range extensions {
159+
t.Run(extension, func(t *testing.T) {
160+
reader, err := DecompressCommand(&bogusReader{}, "foo."+extension, "foo."+extension, runtime.GOOS, runtime.GOARCH)
161+
if err != nil {
162+
t.Log(err)
163+
assert.True(t, errors.Is(err, ErrCannotDecompressFile))
164+
} else {
165+
// bz2 does not return an error straight away: it only fails when you start reading from the output reader
166+
_, err = ioutil.ReadAll(reader)
167+
t.Log(err)
168+
assert.Error(t, err)
169+
}
170+
})
171+
}
172+
}

errors.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,4 @@ var (
1515
ErrInvalidECDSASignature = errors.New("invalid ECDSA signature")
1616
ErrCannotDecompressFile = errors.New("failed to decompress")
1717
ErrExecutableNotFoundInArchive = errors.New("executable not found")
18-
ErrCannotReadStream = errors.New("error reading from stream")
1918
)

0 commit comments

Comments
 (0)