github.com/dmaizel/tests@v0.0.0-20210728163746-cae6a2d9cee8/integration/docker/exec_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 "fmt" 9 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/ginkgo/extensions/table" 12 . "github.com/onsi/gomega" 13 ) 14 15 func withUser(user, regexp string) TableEntry { 16 return Entry(fmt.Sprintf("with --user='%s'", user), user, regexp) 17 } 18 19 var _ = Describe("docker exec", func() { 20 var ( 21 args []string 22 id string 23 exitCode int 24 stdout string 25 stderr string 26 ) 27 28 BeforeEach(func() { 29 id = randomDockerName() 30 _, _, exitCode = dockerRun("-td", "--name", id, Image, "sh") 31 Expect(exitCode).To(Equal(0)) 32 }) 33 34 AfterEach(func() { 35 Expect(RemoveDockerContainer(id)).To(BeTrue()) 36 Expect(ExistDockerContainer(id)).NotTo(BeTrue()) 37 }) 38 39 Context("modifying a container with exec", func() { 40 It("should have the changes", func() { 41 args = []string{"-d", id, "sh", "-c", "echo 'hello world' > file"} 42 _, _, exitCode = dockerExec(args...) 43 Expect(exitCode).To(Equal(0)) 44 45 args = []string{id, "sh", "-c", "cat /file"} 46 stdout, _, exitCode = dockerExec(args...) 47 Expect(exitCode).To(Equal(0)) 48 Expect(stdout).NotTo(BeEmpty()) 49 Expect(stdout).To(ContainSubstring("hello world")) 50 }) 51 }) 52 53 Context("check exit code using exec", func() { 54 It("should have the value assigned", func() { 55 _, _, exitCode = dockerExec(id, "sh", "-c", "exit 42") 56 Expect(exitCode).To(Equal(42)) 57 }) 58 }) 59 60 Context("check stdout forwarded using exec", func() { 61 It("should displayed it", func() { 62 args = []string{id, "sh", "-c", "ls /etc/resolv.conf 2>/dev/null"} 63 stdout, _, exitCode = dockerExec(args...) 64 Expect(exitCode).To(Equal(0)) 65 Expect(stdout).To(ContainSubstring("/etc/resolv.conf")) 66 }) 67 }) 68 69 Context("check stderr forwarded using exec", func() { 70 It("should not exist", func() { 71 args = []string{id, "sh", "-c", "ls /etc/foo >/dev/null"} 72 stdout, stderr, exitCode = dockerExec(args...) 73 Expect(exitCode).To(Equal(1)) 74 Expect(stdout).To(BeEmpty()) 75 Expect(stderr).ToNot(BeEmpty()) 76 }) 77 }) 78 79 DescribeTable("check exec honours '--user'", 80 func(user, regexp string) { 81 args = []string{"-t", "--user", user, id, "id"} 82 stdout, stderr, exitCode = dockerExec(args...) 83 Expect(exitCode).To(Equal(0)) 84 Expect(stderr).To(BeEmpty()) 85 Expect(stdout).To(MatchRegexp(regexp)) 86 }, 87 88 // users and groups 89 withUser("daemon", `uid=\d+\(daemon\) gid=\d+\(daemon\)`), 90 withUser("daemon:", `uid=\d+\(daemon\) gid=\d+\(daemon\)`), 91 withUser("daemon:bin", `uid=\d+\(daemon\) gid=\d+\(bin\)`), 92 withUser(":adm", `uid=\d+\(root\) gid=\d+\(adm\)`), 93 94 // uids and gids 95 withUser("999", "uid=999 gid=0"), 96 withUser("999:", "uid=999 gid=0"), 97 withUser("999:888", "uid=999 gid=888"), 98 withUser(":999", `uid=0\(root\) gid=999`), 99 ) 100 })