MCPcopy Create free account
hub / github.com/containers/image / TestDetectCompression

Function TestDetectCompression

pkg/compression/compression_test.go:14–79  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

12)
13
14func TestDetectCompression(t *testing.T) {
15 cases := []string{
16 "fixtures/Hello.uncompressed",
17 "fixtures/Hello.gz",
18 "fixtures/Hello.bz2",
19 "fixtures/Hello.xz",
20 "fixtures/Hello.zst",
21 }
22
23 // The original stream is preserved.
24 for _, c := range cases {
25 originalContents, err := os.ReadFile(c)
26 require.NoError(t, err, c)
27
28 stream, err := os.Open(c)
29 require.NoError(t, err, c)
30 defer stream.Close()
31
32 _, updatedStream, err := DetectCompression(stream)
33 require.NoError(t, err, c)
34
35 updatedContents, err := io.ReadAll(updatedStream)
36 require.NoError(t, err, c)
37 assert.Equal(t, originalContents, updatedContents, c)
38 }
39
40 // The correct decompressor is chosen, and the result is as expected.
41 for _, c := range cases {
42 stream, err := os.Open(c)
43 require.NoError(t, err, c)
44 defer stream.Close()
45
46 decompressor, updatedStream, err := DetectCompression(stream)
47 require.NoError(t, err, c)
48
49 var uncompressedStream io.Reader
50 if decompressor == nil {
51 uncompressedStream = updatedStream
52 } else {
53 s, err := decompressor(updatedStream)
54 require.NoError(t, err)
55 defer s.Close()
56 uncompressedStream = s
57 }
58
59 uncompressedContents, err := io.ReadAll(uncompressedStream)
60 require.NoError(t, err, c)
61 assert.Equal(t, []byte("Hello"), uncompressedContents, c)
62 }
63
64 // Empty input is handled reasonably.
65 decompressor, updatedStream, err := DetectCompression(bytes.NewReader([]byte{}))
66 require.NoError(t, err)
67 assert.Nil(t, decompressor)
68 updatedContents, err := io.ReadAll(updatedStream)
69 require.NoError(t, err)
70 assert.Equal(t, []byte{}, updatedContents)
71

Callers

nothing calls this directly

Calls 4

DetectCompressionFunction · 0.85
OpenMethod · 0.65
CloseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…