Skip to content

Commit 983999c

Browse files
committed
Fix media type on unpacking layer
Signed-off-by: Lei Jitang <[email protected]>
1 parent 55691e3 commit 983999c

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

image/manifest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (m *manifest) validate(w walker) error {
8989

9090
func (m *manifest) unpack(w walker, dest string) error {
9191
for _, d := range m.Layers {
92-
if d.MediaType != string(schema.MediaTypeImageConfig) {
92+
if d.MediaType != string(schema.MediaTypeImageLayer) {
9393
continue
9494
}
9595

image/manifest_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"archive/tar"
55
"bytes"
66
"compress/gzip"
7+
"crypto/sha256"
8+
"fmt"
79
"io"
810
"io/ioutil"
911
"os"
@@ -48,3 +50,60 @@ func TestUnpackLayerDuplicateEntries(t *testing.T) {
4850
t.Fatalf("Expected to fail with duplicate entry, got %v", err)
4951
}
5052
}
53+
func TestUnpackLayerRemovePartialyUnpackedFile(t *testing.T) {
54+
tmp1, err := ioutil.TempDir("", "test-layer")
55+
if err != nil {
56+
t.Fatal(err)
57+
}
58+
defer os.RemoveAll(tmp1)
59+
err = os.MkdirAll(filepath.Join(tmp1, "blobs", "sha256"), 0700)
60+
if err != nil {
61+
t.Fatal(err)
62+
}
63+
tarfile := filepath.Join(tmp1, "blobs", "sha256", "test.tar")
64+
f, err := os.Create(tarfile)
65+
if err != nil {
66+
t.Fatal(err)
67+
}
68+
69+
gw := gzip.NewWriter(f)
70+
tw := tar.NewWriter(gw)
71+
72+
tw.WriteHeader(&tar.Header{Name: "test", Size: 4, Mode: 0600})
73+
io.Copy(tw, bytes.NewReader([]byte("test")))
74+
tw.Close()
75+
gw.Close()
76+
f.Close()
77+
78+
// generate sha256 hash
79+
h := sha256.New()
80+
file, err := os.Open(tarfile)
81+
if err != nil {
82+
t.Fatal(err)
83+
}
84+
defer file.Close()
85+
_, err = io.Copy(h, file)
86+
if err != nil {
87+
t.Fatal(err)
88+
}
89+
err = os.Rename(tarfile, filepath.Join(tmp1, "blobs", "sha256", fmt.Sprintf("%x", h.Sum(nil))))
90+
if err != nil {
91+
t.Fatal(err)
92+
}
93+
94+
testManifest := manifest{
95+
Layers: []descriptor{descriptor{
96+
MediaType: "application/vnd.oci.image.layer.tar+gzip",
97+
Digest: fmt.Sprintf("sha256:%s", fmt.Sprintf("%x", h.Sum(nil))),
98+
}},
99+
}
100+
err = testManifest.unpack(newPathWalker(tmp1), filepath.Join(tmp1, "rootfs"))
101+
if err != nil {
102+
t.Fatal(err)
103+
}
104+
105+
_, err = os.Stat(filepath.Join(tmp1, "rootfs", "test"))
106+
if err != nil {
107+
t.Fatal(err)
108+
}
109+
}

0 commit comments

Comments
 (0)