github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/package_stemcell/stemcell_generator/tar/tar_writer_test.go (about) 1 package tar_test 2 3 import ( 4 archiveTar "archive/tar" 5 "bytes" 6 "compress/gzip" 7 "github.com/cloudfoundry-incubator/stembuild/package_stemcell/stemcell_generator/tar/tarfakes" 8 "io" 9 "io/ioutil" 10 "os" 11 "path/filepath" 12 13 "github.com/cloudfoundry-incubator/stembuild/package_stemcell/stemcell_generator/tar" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 ) 17 18 var _ = Describe("TarWriter", func() { 19 Describe("Write", func() { 20 var ( 21 workingDir string 22 fakeTarable *tarfakes.FakeTarable 23 ) 24 25 BeforeEach(func() { 26 tmpDir := os.TempDir() 27 var err error 28 workingDir, err = ioutil.TempDir(tmpDir, "TarWriterTest") 29 Expect(err).NotTo(HaveOccurred()) 30 31 fakeFile := bytes.NewReader([]byte{}) 32 fakeTarable = &tarfakes.FakeTarable{} 33 fakeTarable.ReadStub = fakeFile.Read 34 fakeTarable.SizeStub = fakeFile.Size 35 fakeTarable.NameReturns("some-file") 36 }) 37 38 AfterEach(func() { 39 os.RemoveAll(workingDir) 40 }) 41 42 It("should not fail", func() { 43 w := tar.NewTarWriter() 44 45 err := os.Chdir(workingDir) 46 Expect(err).NotTo(HaveOccurred()) 47 48 err = w.Write("some-file", fakeTarable) 49 50 Expect(err).NotTo(HaveOccurred()) 51 }) 52 53 It("creates a file with the filename", func() { 54 w := tar.NewTarWriter() 55 56 err := os.Chdir(workingDir) 57 Expect(err).NotTo(HaveOccurred()) 58 59 err = w.Write("some-file", fakeTarable) 60 61 Expect(err).NotTo(HaveOccurred()) 62 63 tarBall := filepath.Join(workingDir, "some-file") 64 Expect(tarBall).To(BeAnExistingFile()) 65 }) 66 67 It("tars and zips the given readers", func() { 68 w := tar.NewTarWriter() 69 expectedContents := []string{"file1 content", "file2 slightly longer content"} 70 fakeFile1 := bytes.NewReader([]byte(expectedContents[0])) 71 fakeFile2 := bytes.NewReader([]byte(expectedContents[1])) 72 fakeTarable1 := &tarfakes.FakeTarable{} 73 fakeTarable2 := &tarfakes.FakeTarable{} 74 75 fakeTarable1.ReadStub = fakeFile1.Read 76 fakeTarable1.SizeStub = fakeFile1.Size 77 fakeTarable1.NameReturns("firstfile") 78 79 fakeTarable2.ReadStub = fakeFile2.Read 80 fakeTarable2.SizeStub = fakeFile2.Size 81 fakeTarable2.NameReturns("secondfile") 82 83 err := os.Chdir(workingDir) 84 Expect(err).NotTo(HaveOccurred()) 85 86 err = w.Write("some-zipped-tar", fakeTarable1, fakeTarable2) 87 88 var fileReader, _ = os.OpenFile("some-zipped-tar", os.O_RDONLY, 0777) 89 90 gzr, err := gzip.NewReader(fileReader) 91 Expect(err).ToNot(HaveOccurred()) 92 defer gzr.Close() 93 tarfileReader := archiveTar.NewReader(gzr) 94 var actualContents []string 95 var actualFilenames []string 96 for { 97 header, err := tarfileReader.Next() 98 if err == io.EOF { 99 break 100 } 101 Expect(err).NotTo(HaveOccurred()) 102 actualFilenames = append(actualFilenames, header.Name) 103 Expect(header.Mode).To(Equal(int64(os.FileMode(0644)))) 104 105 buf := new(bytes.Buffer) 106 _, err = buf.ReadFrom(tarfileReader) 107 if err != nil { 108 break 109 } 110 actualContents = append(actualContents, buf.String()) 111 } 112 113 Expect(actualContents).To(ConsistOf(expectedContents)) 114 Expect(actualFilenames).To(ConsistOf("firstfile", "secondfile")) 115 116 }) 117 }) 118 })