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  })