github.com/cloudfoundry/cli@v7.1.0+incompatible/actor/sharedaction/resource_linux_test.go (about)

     1  // +build !windows,!darwin
     2  
     3  package sharedaction_test
     4  
     5  import (
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	. "code.cloudfoundry.org/cli/actor/sharedaction"
    11  	"code.cloudfoundry.org/cli/actor/sharedaction/sharedactionfakes"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Resource Actions", func() {
    17  	var (
    18  		actor      *Actor
    19  		fakeConfig *sharedactionfakes.FakeConfig
    20  		srcDir     string
    21  	)
    22  
    23  	BeforeEach(func() {
    24  		fakeConfig = new(sharedactionfakes.FakeConfig)
    25  		actor = NewActor(fakeConfig)
    26  
    27  		// Creates the following directory structure:
    28  		// level1/level2/tmpFile1
    29  		// tmpfile2
    30  		// tmpfile3
    31  
    32  		var err error
    33  		srcDir, err = ioutil.TempDir("", "v2-resource-actions")
    34  		Expect(err).ToNot(HaveOccurred())
    35  
    36  		subDir := filepath.Join(srcDir, "level1", "level2")
    37  		err = os.MkdirAll(subDir, 0777)
    38  		Expect(err).ToNot(HaveOccurred())
    39  
    40  		err = ioutil.WriteFile(filepath.Join(subDir, "tmpFile1"), []byte("why hello"), 0644)
    41  		Expect(err).ToNot(HaveOccurred())
    42  
    43  		err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile2"), []byte("Hello, Binky"), 0751)
    44  		Expect(err).ToNot(HaveOccurred())
    45  
    46  		err = ioutil.WriteFile(filepath.Join(srcDir, "tmpFile3"), []byte("Bananarama"), 0655)
    47  		Expect(err).ToNot(HaveOccurred())
    48  
    49  		err = os.Symlink("file-that-may-or-may-not-exist", filepath.Join(srcDir, "symlink1"))
    50  		Expect(err).ToNot(HaveOccurred())
    51  	})
    52  
    53  	AfterEach(func() {
    54  		Expect(os.RemoveAll(srcDir)).ToNot(HaveOccurred())
    55  	})
    56  
    57  	Describe("GatherArchiveResources", func() {
    58  		var (
    59  			archive string
    60  
    61  			resources  []Resource
    62  			executeErr error
    63  		)
    64  
    65  		BeforeEach(func() {
    66  			tmpfile, err := ioutil.TempFile("", "example")
    67  			Expect(err).ToNot(HaveOccurred())
    68  			archive = tmpfile.Name()
    69  			Expect(tmpfile.Close()).ToNot(HaveOccurred())
    70  		})
    71  
    72  		JustBeforeEach(func() {
    73  			err := zipit(srcDir, archive, "")
    74  			Expect(err).ToNot(HaveOccurred())
    75  
    76  			resources, executeErr = actor.GatherArchiveResources(archive)
    77  		})
    78  
    79  		AfterEach(func() {
    80  			Expect(os.RemoveAll(archive)).ToNot(HaveOccurred())
    81  		})
    82  
    83  		When("there is a symlinked file in the archive", func() {
    84  			It("gathers a list of all files in a source archive", func() {
    85  				Expect(executeErr).ToNot(HaveOccurred())
    86  
    87  				Expect(resources).To(Equal(
    88  					[]Resource{
    89  						{Filename: "/", Mode: DefaultFolderPermissions},
    90  						{Filename: "/level1/", Mode: DefaultFolderPermissions},
    91  						{Filename: "/level1/level2/", Mode: DefaultFolderPermissions},
    92  						{Filename: "/level1/level2/tmpFile1", SHA1: "9e36efec86d571de3a38389ea799a796fe4782f4", Size: 9, Mode: DefaultArchiveFilePermissions},
    93  						{Filename: "/symlink1", Mode: 0777 | os.ModeSymlink},
    94  						{Filename: "/tmpFile2", SHA1: "e594bdc795bb293a0e55724137e53a36dc0d9e95", Size: 12, Mode: DefaultArchiveFilePermissions},
    95  						{Filename: "/tmpFile3", SHA1: "f4c9ca85f3e084ffad3abbdabbd2a890c034c879", Size: 10, Mode: DefaultArchiveFilePermissions},
    96  					}))
    97  			})
    98  		})
    99  	})
   100  
   101  	Describe("GatherDirectoryResources", func() {
   102  		var (
   103  			gatheredResources []Resource
   104  			executeErr        error
   105  		)
   106  
   107  		JustBeforeEach(func() {
   108  			gatheredResources, executeErr = actor.GatherDirectoryResources(srcDir)
   109  		})
   110  
   111  		When("a symlink file points to an existing file", func() {
   112  			BeforeEach(func() {
   113  				err := ioutil.WriteFile(filepath.Join(srcDir, "file-that-may-or-may-not-exist"), []byte("Bananarama"), 0655)
   114  				Expect(err).ToNot(HaveOccurred())
   115  			})
   116  
   117  			It("does not open the symlink but gathers the name and mode", func() {
   118  				Expect(executeErr).ToNot(HaveOccurred())
   119  
   120  				Expect(gatheredResources).To(Equal(
   121  					[]Resource{
   122  						{Filename: "file-that-may-or-may-not-exist", SHA1: "f4c9ca85f3e084ffad3abbdabbd2a890c034c879", Size: 10, Mode: 0655},
   123  						{Filename: "level1", Mode: DefaultFolderPermissions},
   124  						{Filename: "level1/level2", Mode: DefaultFolderPermissions},
   125  						{Filename: "level1/level2/tmpFile1", SHA1: "9e36efec86d571de3a38389ea799a796fe4782f4", Size: 9, Mode: 0644},
   126  						{Filename: "symlink1", Mode: 0777 | os.ModeSymlink},
   127  						{Filename: "tmpFile2", SHA1: "e594bdc795bb293a0e55724137e53a36dc0d9e95", Size: 12, Mode: 0751},
   128  						{Filename: "tmpFile3", SHA1: "f4c9ca85f3e084ffad3abbdabbd2a890c034c879", Size: 10, Mode: 0655},
   129  					}))
   130  			})
   131  		})
   132  
   133  		When("a symlink file points to a file that does not exist", func() {
   134  			It("does not open the symlink but gathers the name and mode", func() {
   135  				Expect(executeErr).ToNot(HaveOccurred())
   136  
   137  				Expect(gatheredResources).To(Equal(
   138  					[]Resource{
   139  						{Filename: "level1", Mode: DefaultFolderPermissions},
   140  						{Filename: "level1/level2", Mode: DefaultFolderPermissions},
   141  						{Filename: "level1/level2/tmpFile1", SHA1: "9e36efec86d571de3a38389ea799a796fe4782f4", Size: 9, Mode: 0644},
   142  						{Filename: "symlink1", Mode: 0777 | os.ModeSymlink},
   143  						{Filename: "tmpFile2", SHA1: "e594bdc795bb293a0e55724137e53a36dc0d9e95", Size: 12, Mode: 0751},
   144  						{Filename: "tmpFile3", SHA1: "f4c9ca85f3e084ffad3abbdabbd2a890c034c879", Size: 10, Mode: 0655},
   145  					}))
   146  			})
   147  		})
   148  	})
   149  })