github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/package_stemcell/packagers/packager_utility_test.go (about) 1 package packagers 2 3 import ( 4 "archive/tar" 5 "bytes" 6 "compress/gzip" 7 "crypto/sha1" 8 "fmt" 9 "io" 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 ) 17 18 var _ bool = Describe("Packager Utility", func() { 19 Context("TarGenerator", func() { 20 var sourceDir string 21 var destinationDir string 22 23 BeforeEach(func() { 24 sourceDir, _ = ioutil.TempDir(os.TempDir(), "packager-utility-test-source") 25 destinationDir, _ = ioutil.TempDir(os.TempDir(), "packager-utility-test-destination") 26 }) 27 28 It("should tar all files inside provided folder and return its sha1", func() { 29 err := ioutil.WriteFile(filepath.Join(sourceDir, "file1"), []byte("file1 content\n"), 0777) 30 Expect(err).NotTo(HaveOccurred()) 31 err = ioutil.WriteFile(filepath.Join(sourceDir, "file2"), []byte("file2 content\n"), 0777) 32 Expect(err).NotTo(HaveOccurred()) 33 fileContentMap := make(map[string]string) 34 fileContentMap["file1"] = "file1 content\n" 35 fileContentMap["file2"] = "file2 content\n" 36 37 tarball := filepath.Join(destinationDir, "tarball") 38 39 sha1Sum, err := TarGenerator(tarball, sourceDir) 40 41 Expect(err).NotTo(HaveOccurred()) 42 43 _, err = os.Stat(tarball) 44 Expect(err).NotTo(HaveOccurred()) 45 var fileReader, _ = os.OpenFile(tarball, os.O_RDONLY, 0777) 46 47 gzr, err := gzip.NewReader(fileReader) 48 Expect(err).ToNot(HaveOccurred()) 49 defer gzr.Close() 50 tarfileReader := tar.NewReader(gzr) 51 count := 0 52 for { 53 header, err := tarfileReader.Next() 54 if err == io.EOF { 55 break 56 } 57 count++ 58 Expect(err).NotTo(HaveOccurred()) 59 buf := new(bytes.Buffer) 60 _, err = buf.ReadFrom(tarfileReader) 61 if err != nil { 62 break 63 } 64 Expect(fileContentMap[header.Name]).To(Equal(buf.String())) 65 } 66 Expect(count).To(Equal(2)) 67 68 tarballFile, err := os.Open(tarball) 69 defer tarballFile.Close() 70 expectedSha1 := sha1.New() 71 io.Copy(expectedSha1, tarballFile) 72 73 sum := fmt.Sprintf("%x", expectedSha1.Sum(nil)) 74 Expect(sha1Sum).To(Equal(sum)) 75 }) 76 77 AfterEach(func() { 78 os.RemoveAll(sourceDir) 79 os.RemoveAll(destinationDir) 80 }) 81 }) 82 83 Context("CreateManifest", func() { 84 It("Creates a manifest correctly", func() { 85 expectedManifest := `--- 86 name: bosh-vsphere-esxi-windows1-go_agent 87 version: 'version' 88 api_version: 3 89 sha1: sha1sum 90 operating_system: windows1 91 cloud_properties: 92 infrastructure: vsphere 93 hypervisor: esxi 94 stemcell_formats: 95 - vsphere-ovf 96 - vsphere-ova 97 ` 98 result := CreateManifest("1", "version", "sha1sum") 99 Expect(result).To(Equal(expectedManifest)) 100 }) 101 }) 102 103 Context("StemcellFileName", func() { 104 It("formats a file name appropriately", func() { 105 expectedName := "bosh-stemcell-1200.1-vsphere-esxi-windows2012R2-go_agent.tgz" 106 Expect(StemcellFilename("1200.1", "2012R2")).To(Equal(expectedName)) 107 }) 108 }) 109 })