github.com/dmaizel/tests@v0.0.0-20210728163746-cae6a2d9cee8/integration/docker/cp_test.go (about)

     1  // Copyright (c) 2018 Intel Corporation
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package docker
     6  
     7  import (
     8  	"io/ioutil"
     9  	"os"
    10  	"path"
    11  
    12  	"github.com/kata-containers/tests"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  )
    16  
    17  var _ = Describe("docker cp", func() {
    18  	var (
    19  		id       string
    20  		exitCode int
    21  		stdout   string
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		id = randomDockerName()
    26  		_, _, exitCode = dockerRun("-td", "--name", id, Image, "sh")
    27  		Expect(exitCode).To(Equal(0))
    28  	})
    29  
    30  	AfterEach(func() {
    31  		Expect(RemoveDockerContainer(id)).To(BeTrue())
    32  		Expect(ExistDockerContainer(id)).NotTo(BeTrue())
    33  	})
    34  
    35  	Context("check files after a docker cp", func() {
    36  		It("should have the corresponding files", func() {
    37  			file, err := ioutil.TempFile(os.TempDir(), "file")
    38  			Expect(err).ToNot(HaveOccurred())
    39  			err = file.Close()
    40  			Expect(err).ToNot(HaveOccurred())
    41  			defer os.Remove(file.Name())
    42  			Expect(file.Name()).To(BeAnExistingFile())
    43  
    44  			_, _, exitCode = dockerCp(file.Name(), id+":/root/")
    45  			Expect(exitCode).To(Equal(0))
    46  
    47  			stdout, _, exitCode = dockerExec(id, "ls", "/root/")
    48  			Expect(exitCode).To(Equal(0))
    49  			testFile := path.Base(file.Name())
    50  			Expect(stdout).To(ContainSubstring(testFile))
    51  		})
    52  	})
    53  })
    54  
    55  var _ = Describe("[Serial Test] docker cp with volume attached", func() {
    56  	var (
    57  		id          string
    58  		exitCode    int
    59  		hostPath    string
    60  		cmd         *tests.Command
    61  		dirBeforeCp string
    62  		dirAfterCp  string
    63  	)
    64  
    65  	BeforeEach(func() {
    66  		hostPath = "/dev"
    67  		id = randomDockerName()
    68  	})
    69  
    70  	AfterEach(func() {
    71  		Expect(ExistDockerContainer(id)).NotTo(BeTrue())
    72  	})
    73  
    74  	Context("check host path integrity", func() {
    75  		It("should not be modified", func() {
    76  			file, err := ioutil.TempFile(os.TempDir(), "file")
    77  			Expect(err).ToNot(HaveOccurred())
    78  			err = file.Close()
    79  			Expect(err).ToNot(HaveOccurred())
    80  			defer os.Remove(file.Name())
    81  			Expect(file.Name()).To(BeAnExistingFile())
    82  
    83  			// check hostPath before running docker cp
    84  			cmd = tests.NewCommand("ls", hostPath)
    85  			dirBeforeCp, _, exitCode = cmd.Run()
    86  			Expect(exitCode).To(BeZero())
    87  
    88  			_, _, exitCode = dockerRun("-td", "-v", hostPath+":"+hostPath, "--name", id, Image, "sh")
    89  			Expect(exitCode).To(Equal(0))
    90  			_, _, exitCode = dockerCp(file.Name(), id+":/")
    91  			Expect(exitCode).To(BeZero())
    92  			Expect(RemoveDockerContainer(id)).To(BeTrue())
    93  
    94  			// check hostPath after running docker cp
    95  			cmd = tests.NewCommand("ls", hostPath)
    96  			dirAfterCp, _, exitCode = cmd.Run()
    97  			Expect(exitCode).To(BeZero())
    98  
    99  			// hostPath files and directories should be the same
   100  			Expect(dirBeforeCp).To(Equal(dirAfterCp))
   101  		})
   102  	})
   103  })
   104  
   105  var _ = Describe("[Serial Test] docker cp with volume", func() {
   106  	var (
   107  		id            string
   108  		exitCode      int
   109  		hostPath      string
   110  		cmd           *tests.Command
   111  		mountBeforeCp string
   112  		mountAfterCp  string
   113  	)
   114  
   115  	BeforeEach(func() {
   116  		hostPath = "/dev"
   117  		id = randomDockerName()
   118  	})
   119  
   120  	AfterEach(func() {
   121  		Expect(ExistDockerContainer(id)).NotTo(BeTrue())
   122  	})
   123  
   124  	Context("check mount points", func() {
   125  		It("should be removed", func() {
   126  			file, err := ioutil.TempFile(os.TempDir(), "file")
   127  			Expect(err).ToNot(HaveOccurred())
   128  			err = file.Close()
   129  			Expect(err).ToNot(HaveOccurred())
   130  			defer os.Remove(file.Name())
   131  			Expect(file.Name()).To(BeAnExistingFile())
   132  
   133  			// check mount before cp
   134  			cmd = tests.NewCommand("mount")
   135  			mountBeforeCp, _, exitCode = cmd.Run()
   136  			Expect(exitCode).To(BeZero())
   137  
   138  			_, _, exitCode = dockerRun("-td", "-v", hostPath+":"+hostPath, "--name", id, Image, "sh")
   139  			Expect(exitCode).To(BeZero())
   140  
   141  			_, _, exitCode = dockerCp(file.Name(), id+":"+hostPath)
   142  			Expect(exitCode).To(BeZero())
   143  
   144  			// remove container
   145  			Expect(RemoveDockerContainer(id)).To(BeTrue())
   146  
   147  			// check mount points
   148  			cmd = tests.NewCommand("mount")
   149  			mountAfterCp, _, exitCode = cmd.Run()
   150  			Expect(exitCode).To(BeZero())
   151  
   152  			// check variables have the same content
   153  			Expect(mountBeforeCp).To(Equal(mountAfterCp))
   154  		})
   155  	})
   156  })