89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package archive_test
|
|
|
|
import (
|
|
"archive/tar"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/sclevine/spec"
|
|
"github.com/sclevine/spec/report"
|
|
|
|
"github.com/buildpacks/lifecycle/archive"
|
|
h "github.com/buildpacks/lifecycle/testhelpers"
|
|
)
|
|
|
|
func TestReader(t *testing.T) {
|
|
spec.Run(t, "tar", testNormalizingTarReader, spec.Report(report.Terminal{}))
|
|
}
|
|
|
|
func testNormalizingTarReader(t *testing.T, when spec.G, it spec.S) {
|
|
when("NormalizingTarReader", func() {
|
|
var (
|
|
ftr *fakeTarReader
|
|
ntr *archive.NormalizingTarReader
|
|
)
|
|
|
|
it.Before(func() {
|
|
ftr = &fakeTarReader{}
|
|
ntr = archive.NewNormalizingTarReader(ftr)
|
|
ftr.pushHeader(&tar.Header{Name: "/some/path"})
|
|
})
|
|
|
|
it("converts path separators", func() {
|
|
hdr, err := ntr.Next()
|
|
h.AssertNil(t, err)
|
|
h.AssertEq(t, hdr.Name, `/some/path`)
|
|
})
|
|
|
|
when("#Strip", func() {
|
|
it("removes leading dirs", func() {
|
|
ntr.Strip("/some")
|
|
hdr, err := ntr.Next()
|
|
h.AssertNil(t, err)
|
|
h.AssertEq(t, hdr.Name, `/path`)
|
|
})
|
|
})
|
|
|
|
when("#PrependDir", func() {
|
|
it("prepends the dir", func() {
|
|
ntr.PrependDir("/super-dir")
|
|
hdr, err := ntr.Next()
|
|
h.AssertNil(t, err)
|
|
h.AssertEq(t, hdr.Name, `/super-dir/some/path`)
|
|
})
|
|
})
|
|
|
|
when("#Exclude", func() {
|
|
it("skips excluded entries", func() {
|
|
ftr.pushHeader(&tar.Header{Name: "excluded-dir"})
|
|
ftr.pushHeader(&tar.Header{Name: "excluded-dir/file"})
|
|
ntr.ExcludePaths([]string{"excluded-dir"})
|
|
hdr, err := ntr.Next()
|
|
h.AssertNil(t, err)
|
|
h.AssertEq(t, hdr.Name, `/some/path`)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
type fakeTarReader struct {
|
|
hdrs []*tar.Header
|
|
}
|
|
|
|
func (r *fakeTarReader) Next() (*tar.Header, error) {
|
|
if len(r.hdrs) == 0 {
|
|
return nil, io.EOF
|
|
}
|
|
hdr := r.hdrs[0]
|
|
r.hdrs = r.hdrs[1:]
|
|
return hdr, nil
|
|
}
|
|
|
|
func (r *fakeTarReader) Read(b []byte) (int, error) {
|
|
return 0, io.EOF
|
|
}
|
|
|
|
func (r *fakeTarReader) pushHeader(hdr *tar.Header) {
|
|
r.hdrs = append([]*tar.Header{hdr}, r.hdrs...)
|
|
}
|