github.com/orange-cloudfoundry/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 })