github.com/loafoe/cli@v7.1.0+incompatible/integration/v6/push/symlink_resources_test.go (about)

     1  package push
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"code.cloudfoundry.org/cli/integration/helpers"
     9  
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  	. "github.com/onsi/gomega/gexec"
    13  )
    14  
    15  var _ = Describe("push with symlinked resources", func() {
    16  	var (
    17  		appName string
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		appName = helpers.NewAppName()
    22  	})
    23  
    24  	When("pushing a directory", func() {
    25  		When("the directory contains a symlink to a file in the directory", func() {
    26  			When("the file exists", func() {
    27  				It("should push the symlink", func() {
    28  					helpers.WithHelloWorldApp(func(dir string) {
    29  						targetFile := filepath.Join(dir, "targetFile")
    30  						Expect(ioutil.WriteFile(targetFile, []byte("foo bar baz"), 0777)).ToNot(HaveOccurred())
    31  						relativePath, err := filepath.Rel(dir, targetFile)
    32  						Expect(err).ToNot(HaveOccurred())
    33  
    34  						err = os.Symlink(relativePath, filepath.Join(dir, "symlinkFile"))
    35  						Expect(err).ToNot(HaveOccurred())
    36  
    37  						session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, appName, "--no-start")
    38  
    39  						Eventually(session).Should(Exit(0))
    40  					})
    41  
    42  					helpers.VerifyAppPackageContentsV2(appName, "symlinkFile", "targetFile", "Staticfile", "index.html")
    43  				})
    44  			})
    45  
    46  			When("the file doesn't exists", func() {
    47  				It("should push the symlink", func() {
    48  					helpers.WithHelloWorldApp(func(dir string) {
    49  						tempFile, err := ioutil.TempFile(dir, "tempFile")
    50  						Expect(err).ToNot(HaveOccurred())
    51  						tempFile.Close()
    52  						relativePath, err := filepath.Rel(dir, tempFile.Name())
    53  						Expect(err).ToNot(HaveOccurred())
    54  
    55  						err = os.Symlink(relativePath, filepath.Join(dir, "symlinkFile"))
    56  						Expect(err).ToNot(HaveOccurred())
    57  						Expect(os.Remove(tempFile.Name()))
    58  
    59  						session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, appName, "--no-start")
    60  
    61  						Eventually(session).Should(Exit(0))
    62  					})
    63  
    64  					helpers.VerifyAppPackageContentsV2(appName, "symlinkFile", "Staticfile", "index.html")
    65  				})
    66  			})
    67  		})
    68  
    69  		When("the directory contains a symlink to subdirectory in the directory", func() {
    70  			It("should push the symlink", func() {
    71  				helpers.WithHelloWorldApp(func(dir string) {
    72  					targetDir, err := ioutil.TempDir(dir, "target-dir")
    73  					Expect(err).ToNot(HaveOccurred())
    74  					relativePath, err := filepath.Rel(dir, targetDir)
    75  					Expect(err).ToNot(HaveOccurred())
    76  
    77  					err = os.Symlink(relativePath, filepath.Join(dir, "symlinkFile"))
    78  					Expect(err).ToNot(HaveOccurred())
    79  					Expect(os.RemoveAll(targetDir)).ToNot(HaveOccurred())
    80  
    81  					session := helpers.CustomCF(helpers.CFEnv{WorkingDirectory: dir}, PushCommandName, appName, "--no-start")
    82  
    83  					Eventually(session).Should(Exit(0))
    84  				})
    85  
    86  				helpers.VerifyAppPackageContentsV2(appName, "symlinkFile", "Staticfile", "index.html")
    87  			})
    88  		})
    89  	})
    90  
    91  	When("pushing an archive", func() {
    92  		var archive string
    93  
    94  		AfterEach(func() {
    95  			Expect(os.RemoveAll(archive)).ToNot(HaveOccurred())
    96  		})
    97  
    98  		When("the archive contains a symlink to a file in the directory", func() {
    99  			BeforeEach(func() {
   100  				helpers.WithHelloWorldApp(func(appDir string) {
   101  					helpers.WithHelloWorldApp(func(appDir string) {
   102  						tmpfile, err := ioutil.TempFile("", "push-archive-integration")
   103  						Expect(err).ToNot(HaveOccurred())
   104  						archive = tmpfile.Name()
   105  						Expect(tmpfile.Close()).ToNot(HaveOccurred())
   106  
   107  						targetFile := filepath.Join(appDir, "targetFile")
   108  						Expect(ioutil.WriteFile(targetFile, []byte("some random data"), 0777)).ToNot(HaveOccurred())
   109  						relativePath, err := filepath.Rel(appDir, targetFile)
   110  						Expect(err).ToNot(HaveOccurred())
   111  
   112  						err = os.Symlink(relativePath, filepath.Join(appDir, "symlinkFile"))
   113  						Expect(err).ToNot(HaveOccurred())
   114  
   115  						err = helpers.Zipit(appDir, archive, "")
   116  						Expect(err).ToNot(HaveOccurred())
   117  					})
   118  				})
   119  			})
   120  
   121  			It("should push the symlink", func() {
   122  				session := helpers.CF(PushCommandName, appName, "--no-start", "-p", archive)
   123  
   124  				Eventually(session).Should(Exit(0))
   125  				helpers.VerifyAppPackageContentsV2(appName, "symlinkFile", "targetFile", "Staticfile", "index.html")
   126  			})
   127  		})
   128  	})
   129  })