github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/archive/tar_builder_test.go (about)

     1  package archive_test
     2  
     3  import (
     4  	"archive/tar"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/buildpacks/pack/pkg/archive"
    10  
    11  	h "github.com/buildpacks/pack/testhelpers"
    12  
    13  	"github.com/heroku/color"
    14  	"github.com/sclevine/spec"
    15  	"github.com/sclevine/spec/report"
    16  )
    17  
    18  func TestTarBuilder(t *testing.T) {
    19  	color.Disable(true)
    20  	defer color.Disable(false)
    21  	spec.Run(t, "TarBuilder", testTarBuilder, spec.Sequential(), spec.Report(report.Terminal{}))
    22  }
    23  
    24  func testTarBuilder(t *testing.T, when spec.G, it spec.S) {
    25  	var (
    26  		tmpDir     string
    27  		tarBuilder archive.TarBuilder
    28  	)
    29  
    30  	it.Before(func() {
    31  		var err error
    32  		tmpDir, err = os.MkdirTemp("", "tar-builder-test")
    33  		h.AssertNil(t, err)
    34  		tarBuilder = archive.TarBuilder{}
    35  	})
    36  
    37  	it.After(func() {
    38  		h.AssertNil(t, os.RemoveAll(tmpDir))
    39  	})
    40  
    41  	when("#AddFile", func() {
    42  		it("adds file", func() {
    43  			tarBuilder.AddFile("file1", 0777, archive.NormalizedDateTime, []byte("file-1 content"))
    44  			reader := tarBuilder.Reader(archive.DefaultTarWriterFactory())
    45  			tr := tar.NewReader(reader)
    46  
    47  			verify := h.NewTarVerifier(t, tr, 0, 0)
    48  			verify.NextFile("file1", "file-1 content", int64(os.ModePerm))
    49  			verify.NoMoreFilesExist()
    50  		})
    51  	})
    52  
    53  	when("#AddDir", func() {
    54  		it("adds dir", func() {
    55  			tarBuilder.AddDir("path/of/dir", 0777, archive.NormalizedDateTime)
    56  			reader := tarBuilder.Reader(archive.DefaultTarWriterFactory())
    57  			tr := tar.NewReader(reader)
    58  
    59  			verify := h.NewTarVerifier(t, tr, 0, 0)
    60  			verify.NextDirectory("path/of/dir", int64(os.ModePerm))
    61  			verify.NoMoreFilesExist()
    62  		})
    63  	})
    64  
    65  	when("#WriteToPath", func() {
    66  		it("writes to path", func() {
    67  			path := filepath.Join(tmpDir, "some.txt")
    68  			h.AssertNil(t, tarBuilder.WriteToPath(path, archive.DefaultTarWriterFactory()))
    69  		})
    70  
    71  		it("fails if dir doesn't exist", func() {
    72  			path := "dir/some.txt"
    73  			h.AssertError(t, tarBuilder.WriteToPath(path, archive.DefaultTarWriterFactory()), "create file for tar")
    74  		})
    75  	})
    76  }