Skip to content

Commit 5c9e424

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

File tree

2 files changed

+61
-1
lines changed

2 files changed

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

0 commit comments

Comments
 (0)