github.com/loafoe/cli@v7.1.0+incompatible/actor/v2action/buildpack_unix_test.go (about)

     1  // +build !windows
     2  
     3  package v2action_test
     4  
     5  import (
     6  	"fmt"
     7  	"io/ioutil"
     8  	"os"
     9  	"path/filepath"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  
    14  	. "code.cloudfoundry.org/cli/actor/v2action"
    15  	"code.cloudfoundry.org/cli/integration/helpers"
    16  	"code.cloudfoundry.org/ykk"
    17  )
    18  
    19  var _ = Describe("Buildpack", func() {
    20  	Describe("Zipit", func() {
    21  		var (
    22  			source string
    23  			target string
    24  
    25  			executeErr error
    26  		)
    27  
    28  		JustBeforeEach(func() {
    29  			executeErr = Zipit(source, target, "testzip-")
    30  		})
    31  
    32  		When("the source directory exists", func() {
    33  			var subDir string
    34  
    35  			BeforeEach(func() {
    36  				var err error
    37  
    38  				source, err = ioutil.TempDir("", "zipit-source-")
    39  				Expect(err).ToNot(HaveOccurred())
    40  
    41  				err = ioutil.WriteFile(filepath.Join(source, "file1"), []byte{}, 0700)
    42  				Expect(err).ToNot(HaveOccurred())
    43  
    44  				err = ioutil.WriteFile(filepath.Join(source, "file2"), []byte{}, 0644)
    45  				Expect(err).ToNot(HaveOccurred())
    46  
    47  				subDir, err = ioutil.TempDir(source, "zipit-subdir-")
    48  				Expect(err).ToNot(HaveOccurred())
    49  
    50  				err = ioutil.WriteFile(filepath.Join(subDir, "file3"), []byte{}, 0755)
    51  				Expect(err).ToNot(HaveOccurred())
    52  
    53  				p := filepath.FromSlash(fmt.Sprintf("buildpack-%s.zip", helpers.RandomName()))
    54  				target, err = filepath.Abs(p)
    55  				Expect(err).ToNot(HaveOccurred())
    56  			})
    57  
    58  			AfterEach(func() {
    59  				Expect(os.RemoveAll(source)).ToNot(HaveOccurred())
    60  				Expect(os.RemoveAll(target)).ToNot(HaveOccurred())
    61  			})
    62  
    63  			It("preserves the file permissions in the zip", func() {
    64  				Expect(executeErr).ToNot(HaveOccurred())
    65  				zipFile, err := os.Open(target)
    66  				Expect(err).ToNot(HaveOccurred())
    67  				defer zipFile.Close()
    68  
    69  				zipStat, _ := zipFile.Stat()
    70  				reader, err := ykk.NewReader(zipFile, zipStat.Size())
    71  				Expect(err).ToNot(HaveOccurred())
    72  
    73  				Expect(reader.File).To(HaveLen(4))
    74  				Expect(reader.File[0].Name).To(Equal("file1"))
    75  				Expect(reader.File[0].Mode()).To(Equal(os.FileMode(0700)))
    76  
    77  				Expect(reader.File[1].Name).To(Equal("file2"))
    78  				Expect(reader.File[1].Mode()).To(Equal(os.FileMode(0644)))
    79  
    80  				dirName := fmt.Sprintf("%s/", filepath.Base(subDir))
    81  				Expect(reader.File[2].Name).To(Equal(dirName))
    82  				Expect(reader.File[2].Mode()).To(Equal(os.ModeDir | 0700))
    83  
    84  				Expect(reader.File[3].Name).To(Equal(filepath.Join(dirName, "file3")))
    85  				Expect(reader.File[3].Mode()).To(Equal(os.FileMode(0755)))
    86  			})
    87  		})
    88  	})
    89  })