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  })