summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/apiv2/23-containersArchive.at81
-rw-r--r--test/e2e/common_test.go8
-rw-r--r--test/e2e/libpod_suite_remote_test.go1
-rw-r--r--test/e2e/libpod_suite_test.go3
-rw-r--r--test/e2e/libpod_suite_varlink_test.go207
-rw-r--r--test/e2e/network_connect_disconnect_test.go217
-rw-r--r--test/e2e/network_create_test.go6
-rw-r--r--test/e2e/network_test.go153
-rw-r--r--test/e2e/pod_create_test.go20
-rw-r--r--test/e2e/run_networking_test.go29
-rw-r--r--test/e2e/system_reset_test.go2
-rw-r--r--test/endpoint/commit.go49
-rw-r--r--test/endpoint/config.go24
-rw-r--r--test/endpoint/endpoint.go225
-rw-r--r--test/endpoint/endpoint_suite_test.go72
-rw-r--r--test/endpoint/exists_test.go68
-rw-r--r--test/endpoint/pull_test.go46
-rw-r--r--test/endpoint/setup.go214
-rw-r--r--test/endpoint/version_test.go43
-rw-r--r--test/system/010-images.bats6
-rw-r--r--test/system/030-run.bats20
-rw-r--r--test/system/040-ps.bats47
-rw-r--r--test/system/070-build.bats17
-rw-r--r--test/system/075-exec.bats3
-rw-r--r--test/system/200-pod.bats4
25 files changed, 394 insertions, 1171 deletions
diff --git a/test/apiv2/23-containersArchive.at b/test/apiv2/23-containersArchive.at
new file mode 100644
index 000000000..459800196
--- /dev/null
+++ b/test/apiv2/23-containersArchive.at
@@ -0,0 +1,81 @@
+# -*- sh -*-
+#
+# test more container-related endpoints
+#
+
+red='\e[31m'
+nc='\e[0m'
+
+podman pull $IMAGE &>/dev/null
+
+# Ensure clean slate
+podman rm -a -f &>/dev/null
+
+CTR="ArchiveTestingCtr"
+
+TMPD=$(mktemp -d)
+pushd "${TMPD}"
+echo "Hello" > "hello.txt"
+tar --format=posix -cvf "hello.tar" "hello.txt" &> /dev/null
+popd
+
+HELLO_TAR="${TMPD}/hello.tar"
+
+podman run -d --name "${CTR}" "${IMAGE}" top
+
+function cleanUpArchiveTest() {
+ podman container stop "${CTR}" &> /dev/null
+ podman container rm "${CTR}" &> /dev/null
+ rm -fr "${TMPD}" &> /dev/null
+}
+
+t HEAD "containers/nonExistentCtr/archive?path=%2F" 404
+t HEAD "containers/${CTR}/archive?path=%2Fnon%2Fexistent%2Fpath" 404
+t HEAD "containers/${CTR}/archive?path=%2Fetc%2Fpasswd" 200
+
+curl "http://$HOST:$PORT/containers/${CTR}/archive?path=%2Ftmp%2F" \
+ -X PUT \
+ -H "Content-Type: application/x-tar" \
+ --upload-file "${HELLO_TAR}" &> /dev/null
+
+if ! podman exec -it "${CTR}" "grep" "Hello" "/tmp/hello.txt" &> /dev/null ; then
+ echo -e "${red}NOK: The hello.txt file has not been uploaded.${nc}" 1>&2;
+ cleanUpArchiveTest
+ exit 1
+fi
+
+t HEAD "containers/${CTR}/archive?path=%2Ftmp%2Fhello.txt" 200
+
+curl "http://$HOST:$PORT/containers/${CTR}/archive?path=%2Ftmp%2Fhello.txt" \
+ --dump-header "${TMPD}/headers.txt" \
+ -o "${TMPD}/body.tar" \
+ -X GET &> /dev/null
+
+PATH_STAT="$(grep X-Docker-Container-Path-Stat "${TMPD}/headers.txt" | cut -d " " -f 2 | base64 -d --ignore-garbage)"
+
+ARCHIVE_TEST_ERROR=""
+
+if [ "$(echo "${PATH_STAT}" | jq ".name")" != '"hello.txt"' ]; then
+ echo -e "${red}NOK: Wrong name in X-Docker-Container-Path-Stat header.${nc}" 1>&2;
+ ARCHIVE_TEST_ERROR="1"
+fi
+
+if [ "$(echo "${PATH_STAT}" | jq ".size")" != "6" ]; then
+ echo -e "${red}NOK: Wrong size in X-Docker-Container-Path-Stat header.${nc}" 1>&2;
+ ARCHIVE_TEST_ERROR="1"
+fi
+
+if ! tar -tf "${TMPD}/body.tar" | grep "hello.txt" &> /dev/null; then
+ echo -e "${red}NOK: Body doesn't contain expected file.${nc}" 1>&2;
+ ARCHIVE_TEST_ERROR="1"
+fi
+
+if [ "$(tar -xf "${TMPD}/body.tar" hello.txt --to-stdout)" != "Hello" ]; then
+ echo -e "${red}NOK: Content of file doesn't match.${nc}" 1>&2;
+ ARCHIVE_TEST_ERROR="1"
+fi
+
+cleanUpArchiveTest
+if [[ "${ARCHIVE_TEST_ERROR}" ]] ; then
+ exit 1;
+fi
diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
index facafcb77..16d8bb770 100644
--- a/test/e2e/common_test.go
+++ b/test/e2e/common_test.go
@@ -661,7 +661,7 @@ func (p *PodmanTestIntegration) PodmanAsUser(args []string, uid, gid uint32, cwd
return &PodmanSessionIntegration{podmanSession}
}
-// We don't support running Varlink when local
+// RestartRemoteService stop and start API Server, usually to change config
func (p *PodmanTestIntegration) RestartRemoteService() {
p.StopRemoteService()
p.StartRemoteService()
@@ -788,3 +788,9 @@ func generateNetworkConfig(p *PodmanTestIntegration) (string, string) {
return name, path
}
+
+func (p *PodmanTestIntegration) removeCNINetwork(name string) {
+ session := p.Podman([]string{"network", "rm", "-f", name})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeNumerically("<=", 1))
+}
diff --git a/test/e2e/libpod_suite_remote_test.go b/test/e2e/libpod_suite_remote_test.go
index fe8b8fe56..da57bb4c0 100644
--- a/test/e2e/libpod_suite_remote_test.go
+++ b/test/e2e/libpod_suite_remote_test.go
@@ -107,7 +107,6 @@ func (p *PodmanTestIntegration) StopRemoteService() {
}
} else {
- //p.ResetVarlinkAddress()
parentPid := fmt.Sprintf("%d", p.RemoteSession.Pid)
pgrep := exec.Command("pgrep", "-P", parentPid)
fmt.Printf("running: pgrep %s\n", parentPid)
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go
index c37b24ab6..0ae30ca10 100644
--- a/test/e2e/libpod_suite_test.go
+++ b/test/e2e/libpod_suite_test.go
@@ -59,13 +59,12 @@ func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
}
func (p *PodmanTestIntegration) StopRemoteService() {}
-func (p *PodmanTestIntegration) DelayForVarlink() {}
// SeedImages is a no-op for localized testing
func (p *PodmanTestIntegration) SeedImages() error {
return nil
}
-// We don't support running Varlink when local
+// We don't support running API service when local
func (p *PodmanTestIntegration) StartRemoteService() {
}
diff --git a/test/e2e/libpod_suite_varlink_test.go b/test/e2e/libpod_suite_varlink_test.go
deleted file mode 100644
index 275a1115e..000000000
--- a/test/e2e/libpod_suite_varlink_test.go
+++ /dev/null
@@ -1,207 +0,0 @@
-// +build remoteclientvarlink
-
-package integration
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "os"
- "os/exec"
- "path/filepath"
- "strconv"
- "strings"
- "syscall"
- "time"
-
- "github.com/containers/podman/v2/pkg/rootless"
-
- "github.com/onsi/ginkgo"
-)
-
-func IsRemote() bool {
- return true
-}
-
-func SkipIfRemote(reason string) {
- ginkgo.Skip("[remote]: " + reason)
-}
-
-// Podman is the exec call to podman on the filesystem
-func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
- podmanSession := p.PodmanBase(args, false, false)
- return &PodmanSessionIntegration{podmanSession}
-}
-
-// PodmanExtraFiles is the exec call to podman on the filesystem and passes down extra files
-func (p *PodmanTestIntegration) PodmanExtraFiles(args []string, extraFiles []*os.File) *PodmanSessionIntegration {
- podmanSession := p.PodmanAsUserBase(args, 0, 0, "", nil, false, false, nil, extraFiles)
- return &PodmanSessionIntegration{podmanSession}
-}
-
-// PodmanNoCache calls podman with out adding the imagecache
-func (p *PodmanTestIntegration) PodmanNoCache(args []string) *PodmanSessionIntegration {
- podmanSession := p.PodmanBase(args, false, true)
- return &PodmanSessionIntegration{podmanSession}
-}
-
-// PodmanNoEvents calls the Podman command without an imagecache and without an
-// events backend. It is used mostly for caching and uncaching images.
-func (p *PodmanTestIntegration) PodmanNoEvents(args []string) *PodmanSessionIntegration {
- podmanSession := p.PodmanBase(args, true, true)
- return &PodmanSessionIntegration{podmanSession}
-}
-
-func (p *PodmanTestIntegration) setDefaultRegistriesConfigEnv() {
- defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf")
- os.Setenv("REGISTRIES_CONFIG_PATH", defaultFile)
-}
-
-func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
- outfile := filepath.Join(p.TempDir, "registries.conf")
- os.Setenv("REGISTRIES_CONFIG_PATH", outfile)
- ioutil.WriteFile(outfile, b, 0644)
-}
-
-func resetRegistriesConfigEnv() {
- os.Setenv("REGISTRIES_CONFIG_PATH", "")
-}
-func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
- pti := PodmanTestCreateUtil(tempDir, true)
- pti.StartRemoteService()
- return pti
-}
-
-func (p *PodmanTestIntegration) ResetVarlinkAddress() {
- //os.Unsetenv("PODMAN_VARLINK_ADDRESS")
-}
-
-func (p *PodmanTestIntegration) SetVarlinkAddress(addr string) {
- //os.Setenv("PODMAN_VARLINK_ADDRESS", addr)
-}
-
-func (p *PodmanTestIntegration) StartVarlink() {
- if os.Geteuid() == 0 {
- os.MkdirAll("/run/podman", 0755)
- }
- varlinkEndpoint := p.RemoteSocket
- p.SetVarlinkAddress(p.RemoteSocket)
-
- args := []string{"varlink", "--time", "0", varlinkEndpoint}
- podmanOptions := getVarlinkOptions(p, args)
- command := exec.Command(p.PodmanBinary, podmanOptions...)
- fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
- command.Start()
- command.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
- p.RemoteCommand = command
- p.RemoteSession = command.Process
- p.DelayForService()
-}
-
-func (p *PodmanTestIntegration) StopVarlink() {
- var out bytes.Buffer
- var pids []int
- varlinkSession := p.RemoteSession
-
- if !rootless.IsRootless() {
- if err := varlinkSession.Kill(); err != nil {
- fmt.Fprintf(os.Stderr, "error on varlink stop-kill %q", err)
- }
- if _, err := varlinkSession.Wait(); err != nil {
- fmt.Fprintf(os.Stderr, "error on varlink stop-wait %q", err)
- }
-
- } else {
- p.ResetVarlinkAddress()
- parentPid := fmt.Sprintf("%d", p.RemoteSession.Pid)
- pgrep := exec.Command("pgrep", "-P", parentPid)
- fmt.Printf("running: pgrep %s\n", parentPid)
- pgrep.Stdout = &out
- err := pgrep.Run()
- if err != nil {
- fmt.Fprint(os.Stderr, "unable to find varlink pid")
- }
-
- for _, s := range strings.Split(out.String(), "\n") {
- if len(s) == 0 {
- continue
- }
- p, err := strconv.Atoi(s)
- if err != nil {
- fmt.Fprintf(os.Stderr, "unable to convert %s to int", s)
- }
- if p != 0 {
- pids = append(pids, p)
- }
- }
-
- pids = append(pids, p.RemoteSession.Pid)
- for _, pid := range pids {
- syscall.Kill(pid, syscall.SIGKILL)
- }
- }
- socket := strings.Split(p.RemoteSocket, ":")[1]
- if err := os.Remove(socket); err != nil {
- fmt.Println(err)
- }
-}
-
-//MakeOptions assembles all the podman main options
-func (p *PodmanTestIntegration) makeOptions(args []string, noEvents, noCache bool) []string {
- return args
-}
-
-//MakeOptions assembles all the podman main options
-func getVarlinkOptions(p *PodmanTestIntegration, args []string) []string {
- podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
- p.CrioRoot, p.RunRoot, p.OCIRuntime, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
- if os.Getenv("HOOK_OPTION") != "" {
- podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
- }
- podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
- podmanOptions = append(podmanOptions, args...)
- return podmanOptions
-}
-
-func (p *PodmanTestIntegration) RestoreArtifactToCache(image string) error {
- fmt.Printf("Restoring %s...\n", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- p.CrioRoot = p.ImageCacheDir
- restore := p.PodmanNoEvents([]string{"load", "-q", "-i", destName})
- restore.WaitWithDefaultTimeout()
- return nil
-}
-
-// SeedImages restores all the artifacts into the main store for remote tests
-func (p *PodmanTestIntegration) SeedImages() error {
- return p.RestoreAllArtifacts()
-}
-
-// RestoreArtifact puts the cached image into our test store
-func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
- fmt.Printf("Restoring %s...\n", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- args := []string{"load", "-q", "-i", destName}
- podmanOptions := getVarlinkOptions(p, args)
- command := exec.Command(p.PodmanBinary, podmanOptions...)
- fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
- command.Start()
- command.Wait()
- return nil
-}
-
-func (p *PodmanTestIntegration) DelayForVarlink() {
- for i := 0; i < 5; i++ {
- session := p.Podman([]string{"info"})
- session.WaitWithDefaultTimeout()
- if session.ExitCode() == 0 || i == 4 {
- break
- }
- time.Sleep(1 * time.Second)
- }
-}
-
-func populateCache(podman *PodmanTestIntegration) {}
-func removeCache() {}
diff --git a/test/e2e/network_connect_disconnect_test.go b/test/e2e/network_connect_disconnect_test.go
new file mode 100644
index 000000000..7cdad9bf2
--- /dev/null
+++ b/test/e2e/network_connect_disconnect_test.go
@@ -0,0 +1,217 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/containers/podman/v2/test/utils"
+ "github.com/containers/storage/pkg/stringid"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman network connect and disconnect", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest *PodmanTestIntegration
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanTestCreate(tempdir)
+ podmanTest.Setup()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+ f := CurrentGinkgoTestDescription()
+ processTestResult(f)
+
+ })
+
+ It("bad network name in disconnect should result in error", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ dis := podmanTest.Podman([]string{"network", "disconnect", "foobar", "test"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).ToNot(BeZero())
+
+ })
+
+ It("bad container name in network disconnect should result in error", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ dis := podmanTest.Podman([]string{"network", "disconnect", netName, "foobar"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).ToNot(BeZero())
+
+ })
+
+ It("podman network disconnect", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ ctr := podmanTest.Podman([]string{"run", "-dt", "--name", "test", "--network", netName, ALPINE, "top"})
+ ctr.WaitWithDefaultTimeout()
+ Expect(ctr.ExitCode()).To(BeZero())
+
+ exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+
+ dis := podmanTest.Podman([]string{"network", "disconnect", netName, "test"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).To(BeZero())
+
+ exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).ToNot(BeZero())
+ })
+
+ It("bad network name in connect should result in error", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ dis := podmanTest.Podman([]string{"network", "connect", "foobar", "test"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).ToNot(BeZero())
+
+ })
+
+ It("bad container name in network connect should result in error", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ dis := podmanTest.Podman([]string{"network", "connect", netName, "foobar"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).ToNot(BeZero())
+
+ })
+
+ It("podman connect on a container that already is connected to the network should error", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ ctr := podmanTest.Podman([]string{"create", "--name", "test", "--network", netName, ALPINE, "top"})
+ ctr.WaitWithDefaultTimeout()
+ Expect(ctr.ExitCode()).To(BeZero())
+
+ con := podmanTest.Podman([]string{"network", "connect", netName, "test"})
+ con.WaitWithDefaultTimeout()
+ Expect(con.ExitCode()).ToNot(BeZero())
+ })
+
+ It("podman network connect", func() {
+ SkipIfRemote("This requires a pending PR to be merged before it will work")
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ ctr := podmanTest.Podman([]string{"run", "-dt", "--name", "test", "--network", netName, ALPINE, "top"})
+ ctr.WaitWithDefaultTimeout()
+ Expect(ctr.ExitCode()).To(BeZero())
+
+ exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+
+ // Create a second network
+ newNetName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session = podmanTest.Podman([]string{"network", "create", newNetName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(newNetName)
+
+ connect := podmanTest.Podman([]string{"network", "connect", newNetName, "test"})
+ connect.WaitWithDefaultTimeout()
+ Expect(connect.ExitCode()).To(BeZero())
+
+ exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth1"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+ })
+
+ It("podman network connect when not running", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName)
+
+ ctr := podmanTest.Podman([]string{"create", "--name", "test", ALPINE, "top"})
+ ctr.WaitWithDefaultTimeout()
+ Expect(ctr.ExitCode()).To(BeZero())
+
+ dis := podmanTest.Podman([]string{"network", "connect", netName, "test"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).To(BeZero())
+
+ start := podmanTest.Podman([]string{"start", "test"})
+ start.WaitWithDefaultTimeout()
+ Expect(start.ExitCode()).To(BeZero())
+
+ exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+
+ exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth1"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+ })
+
+ It("podman network disconnect when not running", func() {
+ SkipIfRootless("network connect and disconnect are only rootfull")
+ netName1 := "aliasTest" + stringid.GenerateNonCryptoID()
+ session := podmanTest.Podman([]string{"network", "create", netName1})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName1)
+
+ netName2 := "aliasTest" + stringid.GenerateNonCryptoID()
+ session2 := podmanTest.Podman([]string{"network", "create", netName2})
+ session2.WaitWithDefaultTimeout()
+ Expect(session2.ExitCode()).To(BeZero())
+ defer podmanTest.removeCNINetwork(netName2)
+
+ ctr := podmanTest.Podman([]string{"create", "--name", "test", "--network", netName1 + "," + netName2, ALPINE, "top"})
+ ctr.WaitWithDefaultTimeout()
+ Expect(ctr.ExitCode()).To(BeZero())
+
+ dis := podmanTest.Podman([]string{"network", "disconnect", netName1, "test"})
+ dis.WaitWithDefaultTimeout()
+ Expect(dis.ExitCode()).To(BeZero())
+
+ start := podmanTest.Podman([]string{"start", "test"})
+ start.WaitWithDefaultTimeout()
+ Expect(start.ExitCode()).To(BeZero())
+
+ exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).To(BeZero())
+
+ exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth1"})
+ exec.WaitWithDefaultTimeout()
+ Expect(exec.ExitCode()).ToNot(BeZero())
+ })
+})
diff --git a/test/e2e/network_create_test.go b/test/e2e/network_create_test.go
index cb997d10a..043046c33 100644
--- a/test/e2e/network_create_test.go
+++ b/test/e2e/network_create_test.go
@@ -55,12 +55,6 @@ func genericPluginsToPortMap(plugins interface{}, pluginType string) (network.Po
return portMap, err
}
-func (p *PodmanTestIntegration) removeCNINetwork(name string) {
- session := p.Podman([]string{"network", "rm", "-f", name})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeNumerically("<=", 1))
-}
-
func removeNetworkDevice(name string) {
session := SystemExec("ip", []string{"link", "delete", name})
session.WaitWithDefaultTimeout()
diff --git a/test/e2e/network_test.go b/test/e2e/network_test.go
index adcf74f7e..20e1d5b6b 100644
--- a/test/e2e/network_test.go
+++ b/test/e2e/network_test.go
@@ -347,159 +347,6 @@ var _ = Describe("Podman network", func() {
Expect(c3.ExitCode()).To(BeZero())
})
- It("bad network name in disconnect should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- dis := podmanTest.Podman([]string{"network", "disconnect", "foobar", "test"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
-
- })
-
- It("bad container name in network disconnect should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- dis := podmanTest.Podman([]string{"network", "disconnect", netName, "foobar"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
-
- })
-
- It("podman network disconnect with invalid container state should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- ctr := podmanTest.Podman([]string{"create", "--name", "test", "--network", netName, ALPINE, "top"})
- ctr.WaitWithDefaultTimeout()
- Expect(ctr.ExitCode()).To(BeZero())
-
- dis := podmanTest.Podman([]string{"network", "disconnect", netName, "test"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
- })
-
- It("podman network disconnect", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- ctr := podmanTest.Podman([]string{"run", "-dt", "--name", "test", "--network", netName, ALPINE, "top"})
- ctr.WaitWithDefaultTimeout()
- Expect(ctr.ExitCode()).To(BeZero())
-
- exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
- exec.WaitWithDefaultTimeout()
- Expect(exec.ExitCode()).To(BeZero())
-
- dis := podmanTest.Podman([]string{"network", "disconnect", netName, "test"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).To(BeZero())
-
- exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
- exec.WaitWithDefaultTimeout()
- Expect(exec.ExitCode()).ToNot(BeZero())
- })
-
- It("bad network name in connect should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- dis := podmanTest.Podman([]string{"network", "connect", "foobar", "test"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
-
- })
-
- It("bad container name in network connect should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- dis := podmanTest.Podman([]string{"network", "connect", netName, "foobar"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
-
- })
-
- It("podman connect on a container that already is connected to the network should error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- ctr := podmanTest.Podman([]string{"create", "--name", "test", "--network", netName, ALPINE, "top"})
- ctr.WaitWithDefaultTimeout()
- Expect(ctr.ExitCode()).To(BeZero())
-
- con := podmanTest.Podman([]string{"network", "connect", netName, "test"})
- con.WaitWithDefaultTimeout()
- Expect(con.ExitCode()).ToNot(BeZero())
- })
-
- It("podman network connect with invalid container state should result in error", func() {
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- ctr := podmanTest.Podman([]string{"create", "--name", "test", "--network", netName, ALPINE, "top"})
- ctr.WaitWithDefaultTimeout()
- Expect(ctr.ExitCode()).To(BeZero())
-
- dis := podmanTest.Podman([]string{"network", "connect", netName, "test"})
- dis.WaitWithDefaultTimeout()
- Expect(dis.ExitCode()).ToNot(BeZero())
- })
-
- It("podman network connect", func() {
- SkipIfRemote("This requires a pending PR to be merged before it will work")
- SkipIfRootless("network connect and disconnect are only rootfull")
- netName := "aliasTest" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", netName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(netName)
-
- ctr := podmanTest.Podman([]string{"run", "-dt", "--name", "test", "--network", netName, ALPINE, "top"})
- ctr.WaitWithDefaultTimeout()
- Expect(ctr.ExitCode()).To(BeZero())
-
- exec := podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth0"})
- exec.WaitWithDefaultTimeout()
- Expect(exec.ExitCode()).To(BeZero())
-
- // Create a second network
- newNetName := "aliasTest" + stringid.GenerateNonCryptoID()
- session = podmanTest.Podman([]string{"network", "create", newNetName})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(BeZero())
- defer podmanTest.removeCNINetwork(newNetName)
-
- connect := podmanTest.Podman([]string{"network", "connect", newNetName, "test"})
- connect.WaitWithDefaultTimeout()
- Expect(connect.ExitCode()).To(BeZero())
-
- exec = podmanTest.Podman([]string{"exec", "-it", "test", "ip", "addr", "show", "eth1"})
- exec.WaitWithDefaultTimeout()
- Expect(exec.ExitCode()).To(BeZero())
- })
-
It("podman network create/remove macvlan", func() {
net := "macvlan" + stringid.GenerateNonCryptoID()
nc := podmanTest.Podman([]string{"network", "create", "--macvlan", "lo", net})
diff --git a/test/e2e/pod_create_test.go b/test/e2e/pod_create_test.go
index ccfbcefae..be0a2f6f0 100644
--- a/test/e2e/pod_create_test.go
+++ b/test/e2e/pod_create_test.go
@@ -9,7 +9,6 @@ import (
"github.com/containers/podman/v2/pkg/rootless"
. "github.com/containers/podman/v2/test/utils"
- "github.com/containers/storage/pkg/stringid"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
@@ -477,23 +476,4 @@ entrypoint ["/fromimage"]
Expect(status3.ExitCode()).To(Equal(0))
Expect(strings.Contains(status3.OutputToString(), "Degraded")).To(BeTrue())
})
-
- It("podman create pod invalid network config", func() {
- net1 := "n1" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", net1})
- session.WaitWithDefaultTimeout()
- defer podmanTest.removeCNINetwork(net1)
- Expect(session.ExitCode()).To(BeZero())
-
- session = podmanTest.Podman([]string{"pod", "create", "--network", "host", "--network", net1})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(Equal(125))
- Expect(session.ErrorToString()).To(ContainSubstring("host"))
- Expect(session.ErrorToString()).To(ContainSubstring("bridge"))
-
- session = podmanTest.Podman([]string{"pod", "create", "--network", "container:abc"})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(Equal(125))
- Expect(session.ErrorToString()).To(ContainSubstring("pods presently do not support network mode container"))
- })
})
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index 1d416498c..3e80e953e 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -665,33 +665,4 @@ var _ = Describe("Podman run networking", func() {
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(BeZero())
})
-
- It("podman run with multiple networks", func() {
- net1 := "n1" + stringid.GenerateNonCryptoID()
- session := podmanTest.Podman([]string{"network", "create", net1})
- session.WaitWithDefaultTimeout()
- defer podmanTest.removeCNINetwork(net1)
- Expect(session.ExitCode()).To(BeZero())
-
- net2 := "n2" + stringid.GenerateNonCryptoID()
- session = podmanTest.Podman([]string{"network", "create", net2})
- session.WaitWithDefaultTimeout()
- defer podmanTest.removeCNINetwork(net2)
- Expect(session.ExitCode()).To(BeZero())
-
- run := podmanTest.Podman([]string{"run", "--network", net1, "--network", net2, ALPINE, "ip", "-o", "-4", "addr"})
- run.WaitWithDefaultTimeout()
- Expect(run.ExitCode()).To(BeZero())
- Expect(len(run.OutputToStringArray())).To(Equal(3))
- Expect(run.OutputToString()).To(ContainSubstring("lo"))
- Expect(run.OutputToString()).To(ContainSubstring("eth0"))
- Expect(run.OutputToString()).To(ContainSubstring("eth1"))
-
- //invalid config network host and cni should fail
- run = podmanTest.Podman([]string{"run", "--network", "host", "--network", net2, ALPINE, "ip", "-o", "-4", "addr"})
- run.WaitWithDefaultTimeout()
- Expect(run.ExitCode()).To(Equal(125))
- Expect(run.ErrorToString()).To(ContainSubstring("host"))
- Expect(run.ErrorToString()).To(ContainSubstring("bridge"))
- })
})
diff --git a/test/e2e/system_reset_test.go b/test/e2e/system_reset_test.go
index b2d350436..e716ce4f3 100644
--- a/test/e2e/system_reset_test.go
+++ b/test/e2e/system_reset_test.go
@@ -59,7 +59,7 @@ var _ = Describe("podman system reset", func() {
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
- // If remote then the varlink service should have exited
+ // If remote then the API service should have exited
// On local tests this is a noop
podmanTest.StartRemoteService()
diff --git a/test/endpoint/commit.go b/test/endpoint/commit.go
deleted file mode 100644
index 97e10efb0..000000000
--- a/test/endpoint/commit.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "encoding/json"
- "os"
-
- . "github.com/containers/podman/v2/test/utils"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Podman commit", func() {
- var (
- tempdir string
- err error
- endpointTest *EndpointTestIntegration
- )
-
- BeforeEach(func() {
- tempdir, err = CreateTempDirInTempDir()
- if err != nil {
- os.Exit(1)
- }
- endpointTest = Setup(tempdir)
- endpointTest.StartVarlinkWithCache()
- })
-
- AfterEach(func() {
- endpointTest.Cleanup()
-
- })
-
- It("ensure commit with uppercase image name does not panic", func() {
- body := make(map[string]string)
- body["image_name"] = "FOO"
- body["format"] = "oci"
- body["name"] = "top"
- b, err := json.Marshal(body)
- Expect(err).To(BeNil())
- // run the container to be committed
- _ = endpointTest.startTopContainer("top")
- result := endpointTest.Varlink("Commit", string(b), false)
- // This indicates an error occurred
- Expect(len(result.StdErrToString())).To(BeNumerically(">", 0))
- })
-
-})
diff --git a/test/endpoint/config.go b/test/endpoint/config.go
deleted file mode 100644
index 9d2a5a239..000000000
--- a/test/endpoint/config.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import "encoding/json"
-
-var (
- STORAGE_FS = "vfs"
- STORAGE_OPTIONS = "--storage-driver vfs"
- ROOTLESS_STORAGE_FS = "vfs"
- ROOTLESS_STORAGE_OPTIONS = "--storage-driver vfs"
- CACHE_IMAGES = []string{ALPINE, BB, fedoraMinimal, nginx, redis, registry, infra, labels}
- nginx = "quay.io/libpod/alpine_nginx:latest"
- BB_GLIBC = "docker.io/library/busybox:glibc"
- registry = "docker.io/library/registry:2.6"
- labels = "quay.io/libpod/alpine_labels:latest"
-)
-
-func makeNameMessage(name string) string {
- n := make(map[string]string)
- n["name"] = name
- b, _ := json.Marshal(n)
- return string(b)
-}
diff --git a/test/endpoint/endpoint.go b/test/endpoint/endpoint.go
deleted file mode 100644
index d2c143824..000000000
--- a/test/endpoint/endpoint.go
+++ /dev/null
@@ -1,225 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "os"
- "os/exec"
- "strconv"
- "strings"
- "syscall"
- "time"
-
- "github.com/containers/podman/v2/pkg/rootless"
- iopodman "github.com/containers/podman/v2/pkg/varlink"
- . "github.com/onsi/ginkgo"
- "github.com/onsi/gomega/gexec"
-)
-
-var (
- ARTIFACT_DIR = "/tmp/.artifacts"
- CGROUP_MANAGER = "systemd"
- defaultWaitTimeout = 90
- //RESTORE_IMAGES = []string{ALPINE, BB}
- INTEGRATION_ROOT string
- ImageCacheDir = "/tmp/podman/imagecachedir"
- VarlinkBinary = "/usr/bin/varlink"
- ALPINE = "docker.io/library/alpine:latest"
- infra = "k8s.gcr.io/pause:3.2"
- BB = "docker.io/library/busybox:latest"
- redis = "docker.io/library/redis:alpine"
- fedoraMinimal = "quay.io/libpod/fedora-minimal:latest"
-)
-
-type EndpointTestIntegration struct {
- ArtifactPath string
- CNIConfigDir string
- CgroupManager string
- ConmonBinary string
- CrioRoot string
- //Host HostOS
- ImageCacheDir string
- ImageCacheFS string
- OCIRuntime string
- PodmanBinary string
- RemoteTest bool
- RunRoot string
- SignaturePolicyPath string
- StorageOptions string
- TmpDir string
- Timings []string
- VarlinkBinary string
- VarlinkCommand *exec.Cmd
- VarlinkEndpoint string
- VarlinkSession *os.Process
-}
-
-func (p *EndpointTestIntegration) StartVarlink() {
- p.startVarlink(false)
-}
-
-func (p *EndpointTestIntegration) StartVarlinkWithCache() {
- p.startVarlink(true)
-}
-
-func (p *EndpointTestIntegration) startVarlink(useImageCache bool) {
- var (
- counter int
- )
- if os.Geteuid() == 0 {
- os.MkdirAll("/run/podman", 0755)
- }
- varlinkEndpoint := p.VarlinkEndpoint
- //p.SetVarlinkAddress(p.RemoteSocket)
-
- args := []string{"varlink", "--time", "0", varlinkEndpoint}
- podmanOptions := getVarlinkOptions(p, args)
- if useImageCache {
- cacheOptions := []string{"--storage-opt", fmt.Sprintf("%s.imagestore=%s", p.ImageCacheFS, p.ImageCacheDir)}
- podmanOptions = append(cacheOptions, podmanOptions...)
- }
- command := exec.Command(p.PodmanBinary, podmanOptions...)
- fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
- command.Start()
- command.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
- p.VarlinkCommand = command
- p.VarlinkSession = command.Process
- for {
- if result := p.endpointReady(); result == 0 {
- break
- }
- fmt.Println("Waiting for varlink connection to become active", counter)
- time.Sleep(250 * time.Millisecond)
- counter++
- if counter > 40 {
- Fail("varlink endpoint never became ready")
- }
- }
-}
-
-func (p *EndpointTestIntegration) endpointReady() int {
- session := p.Varlink("GetVersion", "", false)
- return session.ExitCode()
-}
-
-func (p *EndpointTestIntegration) StopVarlink() {
- var out bytes.Buffer
- var pids []int
- varlinkSession := p.VarlinkSession
-
- if !rootless.IsRootless() {
- if err := varlinkSession.Kill(); err != nil {
- fmt.Fprintf(os.Stderr, "error on varlink stop-kill %q", err)
- }
- if _, err := varlinkSession.Wait(); err != nil {
- fmt.Fprintf(os.Stderr, "error on varlink stop-wait %q", err)
- }
-
- } else {
- //p.ResetVarlinkAddress()
- parentPid := fmt.Sprintf("%d", p.VarlinkSession.Pid)
- pgrep := exec.Command("pgrep", "-P", parentPid)
- fmt.Printf("running: pgrep %s\n", parentPid)
- pgrep.Stdout = &out
- err := pgrep.Run()
- if err != nil {
- fmt.Fprint(os.Stderr, "unable to find varlink pid")
- }
-
- for _, s := range strings.Split(out.String(), "\n") {
- if len(s) == 0 {
- continue
- }
- p, err := strconv.Atoi(s)
- if err != nil {
- fmt.Fprintf(os.Stderr, "unable to convert %s to int", s)
- }
- if p != 0 {
- pids = append(pids, p)
- }
- }
-
- pids = append(pids, p.VarlinkSession.Pid)
- for _, pid := range pids {
- syscall.Kill(pid, syscall.SIGKILL)
- }
- }
- socket := strings.Split(p.VarlinkEndpoint, ":")[1]
- if err := os.Remove(socket); err != nil {
- fmt.Println(err)
- }
-}
-
-type EndpointSession struct {
- *gexec.Session
-}
-
-func getVarlinkOptions(p *EndpointTestIntegration, args []string) []string {
- podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
- p.CrioRoot, p.RunRoot, p.OCIRuntime, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
- if os.Getenv("HOOK_OPTION") != "" {
- podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
- }
- podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
- podmanOptions = append(podmanOptions, args...)
- return podmanOptions
-}
-
-func (p *EndpointTestIntegration) Varlink(endpoint, message string, more bool) *EndpointSession {
- //call unix:/run/user/1000/podman/io.podman/io.podman.GetContainerStats '{"name": "foobar" }'
- var (
- command *exec.Cmd
- )
-
- args := []string{"call"}
- if more {
- args = append(args, "-m")
- }
- args = append(args, []string{fmt.Sprintf("%s/io.podman.%s", p.VarlinkEndpoint, endpoint)}...)
- if len(message) > 0 {
- args = append(args, message)
- }
- command = exec.Command(p.VarlinkBinary, args...)
- session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
- if err != nil {
- Fail(fmt.Sprintf("unable to run varlink command: %s\n%v", strings.Join(args, " "), err))
- }
- session.Wait(defaultWaitTimeout)
- return &EndpointSession{session}
-}
-
-func (s *EndpointSession) StdErrToString() string {
- fields := strings.Fields(string(s.Err.Contents()))
- return strings.Join(fields, " ")
-}
-
-func (s *EndpointSession) OutputToString() string {
- fields := strings.Fields(string(s.Out.Contents()))
- return strings.Join(fields, " ")
-}
-
-func (s *EndpointSession) OutputToBytes() []byte {
- out := s.OutputToString()
- return []byte(out)
-}
-
-func (s *EndpointSession) OutputToStringMap() map[string]string {
- var out map[string]string
- json.Unmarshal(s.OutputToBytes(), &out)
- return out
-}
-
-func (s *EndpointSession) OutputToMapToInt() map[string]int {
- var out map[string]int
- json.Unmarshal(s.OutputToBytes(), &out)
- return out
-}
-
-func (s *EndpointSession) OutputToMoreResponse() iopodman.MoreResponse {
- out := make(map[string]iopodman.MoreResponse)
- json.Unmarshal(s.OutputToBytes(), &out)
- return out["reply"]
-}
diff --git a/test/endpoint/endpoint_suite_test.go b/test/endpoint/endpoint_suite_test.go
deleted file mode 100644
index 1cd5c2b9d..000000000
--- a/test/endpoint/endpoint_suite_test.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "testing"
-
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-func TestEndpoint(t *testing.T) {
- RegisterFailHandler(Fail)
- RunSpecs(t, "Endpoint Suite")
-}
-
-var LockTmpDir string
-
-var _ = SynchronizedBeforeSuite(func() []byte {
- // Cache images
- cwd, _ := os.Getwd()
- INTEGRATION_ROOT = filepath.Join(cwd, "../../")
- podman := Setup("/tmp")
- podman.ArtifactPath = ARTIFACT_DIR
- if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
- if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- }
-
- // make cache dir
- if err := os.MkdirAll(ImageCacheDir, 0777); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
-
- podman.StartVarlink()
- for _, image := range CACHE_IMAGES {
- podman.createArtifact(image)
- }
- podman.StopVarlink()
- // If running localized tests, the cache dir is created and populated. if the
- // tests are remote, this is a no-op
- populateCache(podman)
-
- path, err := ioutil.TempDir("", "libpodlock")
- if err != nil {
- fmt.Println(err)
- os.Exit(1)
- }
- return []byte(path)
-}, func(data []byte) {
- LockTmpDir = string(data)
-})
-
-var _ = SynchronizedAfterSuite(func() {},
- func() {
- podman := Setup("/tmp")
- if err := os.RemoveAll(podman.CrioRoot); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- if err := os.RemoveAll(podman.ImageCacheDir); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- })
diff --git a/test/endpoint/exists_test.go b/test/endpoint/exists_test.go
deleted file mode 100644
index f7fa8eb44..000000000
--- a/test/endpoint/exists_test.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "os"
-
- . "github.com/containers/podman/v2/test/utils"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Podman exists", func() {
- var (
- tempdir string
- err error
- endpointTest *EndpointTestIntegration
- )
-
- BeforeEach(func() {
- tempdir, err = CreateTempDirInTempDir()
- if err != nil {
- os.Exit(1)
- }
- endpointTest = Setup(tempdir)
- endpointTest.StartVarlinkWithCache()
- })
-
- AfterEach(func() {
- endpointTest.Cleanup()
- //f := CurrentGinkgoTestDescription()
- //processTestResult(f)
-
- })
-
- It("image exists in local storage", func() {
- result := endpointTest.Varlink("ImageExists", makeNameMessage(ALPINE), false)
- Expect(result.ExitCode()).To(BeZero())
-
- output := result.OutputToMapToInt()
- Expect(output["exists"]).To(BeZero())
- })
-
- It("image exists in local storage by shortname", func() {
- result := endpointTest.Varlink("ImageExists", makeNameMessage("alpine"), false)
- Expect(result.ExitCode()).To(BeZero())
-
- output := result.OutputToMapToInt()
- Expect(output["exists"]).To(BeZero())
- })
-
- It("image does not exist in local storage", func() {
- result := endpointTest.Varlink("ImageExists", makeNameMessage("alpineforest"), false)
- Expect(result.ExitCode()).To(BeZero())
-
- output := result.OutputToMapToInt()
- Expect(output["exists"]).To(Equal(1))
- })
-
- It("container exists in local storage by name", func() {
- _ = endpointTest.startTopContainer("top")
- result := endpointTest.Varlink("ContainerExists", makeNameMessage("top"), false)
- Expect(result.ExitCode()).To(BeZero())
- output := result.OutputToMapToInt()
- Expect(output["exists"]).To(BeZero())
- })
-
-})
diff --git a/test/endpoint/pull_test.go b/test/endpoint/pull_test.go
deleted file mode 100644
index b3683b7db..000000000
--- a/test/endpoint/pull_test.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "os"
-
- . "github.com/containers/podman/v2/test/utils"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Podman pull", func() {
- var (
- tempdir string
- err error
- endpointTest *EndpointTestIntegration
- )
-
- BeforeEach(func() {
- tempdir, err = CreateTempDirInTempDir()
- if err != nil {
- os.Exit(1)
- }
- endpointTest = Setup(tempdir)
- endpointTest.StartVarlink()
- })
-
- AfterEach(func() {
- endpointTest.Cleanup()
- //f := CurrentGinkgoTestDescription()
- //processTestResult(f)
-
- })
-
- It("podman pull", func() {
- session := endpointTest.Varlink("PullImage", makeNameMessage(ALPINE), false)
- Expect(session.ExitCode()).To(BeZero())
-
- result := endpointTest.Varlink("ImageExists", makeNameMessage(ALPINE), false)
- Expect(result.ExitCode()).To(BeZero())
-
- output := result.OutputToMapToInt()
- Expect(output["exists"]).To(BeZero())
- })
-})
diff --git a/test/endpoint/setup.go b/test/endpoint/setup.go
deleted file mode 100644
index 6bbc8d2bc..000000000
--- a/test/endpoint/setup.go
+++ /dev/null
@@ -1,214 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "encoding/json"
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
-
- "github.com/containers/podman/v2/pkg/rootless"
- iopodman "github.com/containers/podman/v2/pkg/varlink"
- "github.com/containers/storage/pkg/stringid"
- "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
- "github.com/sirupsen/logrus"
-)
-
-func Setup(tempDir string) *EndpointTestIntegration {
- var (
- endpoint string
- )
- cwd, _ := os.Getwd()
- INTEGRATION_ROOT = filepath.Join(cwd, "../../")
-
- podmanBinary := filepath.Join(cwd, "../../bin/podman")
- if os.Getenv("PODMAN_BINARY") != "" {
- podmanBinary = os.Getenv("PODMAN_BINARY")
- }
- conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
- altConmonBinary := "/usr/bin/conmon"
- if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
- conmonBinary = altConmonBinary
- }
- if os.Getenv("CONMON_BINARY") != "" {
- conmonBinary = os.Getenv("CONMON_BINARY")
- }
- storageOptions := STORAGE_OPTIONS
- if os.Getenv("STORAGE_OPTIONS") != "" {
- storageOptions = os.Getenv("STORAGE_OPTIONS")
- }
- cgroupManager := CGROUP_MANAGER
- if rootless.IsRootless() {
- cgroupManager = "cgroupfs"
- }
- if os.Getenv("CGROUP_MANAGER") != "" {
- cgroupManager = os.Getenv("CGROUP_MANAGER")
- }
-
- ociRuntime := os.Getenv("OCI_RUNTIME")
- if ociRuntime == "" {
- ociRuntime = "runc"
- }
- os.Setenv("DISABLE_HC_SYSTEMD", "true")
- CNIConfigDir := "/etc/cni/net.d"
-
- storageFs := STORAGE_FS
- if rootless.IsRootless() {
- storageFs = ROOTLESS_STORAGE_FS
- }
-
- uuid := stringid.GenerateNonCryptoID()
- if !rootless.IsRootless() {
- endpoint = fmt.Sprintf("unix:/run/podman/io.podman-%s", uuid)
- } else {
- runtimeDir := os.Getenv("XDG_RUNTIME_DIR")
- socket := fmt.Sprintf("io.podman-%s", uuid)
- fqpath := filepath.Join(runtimeDir, socket)
- endpoint = fmt.Sprintf("unix:%s", fqpath)
- }
-
- eti := EndpointTestIntegration{
- ArtifactPath: ARTIFACT_DIR,
- CNIConfigDir: CNIConfigDir,
- CgroupManager: cgroupManager,
- ConmonBinary: conmonBinary,
- CrioRoot: filepath.Join(tempDir, "crio"),
- ImageCacheDir: ImageCacheDir,
- ImageCacheFS: storageFs,
- OCIRuntime: ociRuntime,
- PodmanBinary: podmanBinary,
- RunRoot: filepath.Join(tempDir, "crio-run"),
- SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
- StorageOptions: storageOptions,
- TmpDir: tempDir,
- // Timings: nil,
- VarlinkBinary: VarlinkBinary,
- VarlinkCommand: nil,
- VarlinkEndpoint: endpoint,
- VarlinkSession: nil,
- }
- return &eti
-}
-
-func (p *EndpointTestIntegration) Cleanup() {
- // Remove all containers
- // TODO Make methods to do all this?
-
- p.stopAllContainers()
-
- // TODO need to make stop all pods
-
- p.StopVarlink()
- // Nuke tempdir
- if err := os.RemoveAll(p.TmpDir); err != nil {
- fmt.Printf("%q\n", err)
- }
-
- // Clean up the registries configuration file ENV variable set in Create
- resetRegistriesConfigEnv()
-}
-
-func (p *EndpointTestIntegration) listContainers() []iopodman.Container {
- containers := p.Varlink("ListContainers", "", false)
- var varlinkContainers map[string][]iopodman.Container
- if err := json.Unmarshal(containers.OutputToBytes(), &varlinkContainers); err != nil {
- logrus.Error("failed to unmarshal containers")
- }
- return varlinkContainers["containers"]
-}
-
-func (p *EndpointTestIntegration) stopAllContainers() {
- containers := p.listContainers()
- for _, container := range containers {
- p.stopContainer(container.Id)
- }
-}
-
-func (p *EndpointTestIntegration) stopContainer(cid string) {
- p.Varlink("StopContainer", fmt.Sprintf("{\"name\":\"%s\", \"timeout\":0}", cid), false)
-}
-
-func resetRegistriesConfigEnv() {
- os.Setenv("REGISTRIES_CONFIG_PATH", "")
-}
-
-func (p *EndpointTestIntegration) createArtifact(image string) {
- if os.Getenv("NO_TEST_CACHE") != "" {
- return
- }
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- fmt.Printf("Caching %s at %s...", image, destName)
- if _, err := os.Stat(destName); os.IsNotExist(err) {
- pull := p.Varlink("PullImage", fmt.Sprintf("{\"name\":\"%s\"}", image), false)
- Expect(pull.ExitCode()).To(Equal(0))
-
- imageSave := iopodman.ImageSaveOptions{
- // Name:image,
- // Output: destName,
- // Format: "oci-archive",
- }
- imageSave.Name = image
- imageSave.Output = destName
- imageSave.Format = "oci-archive"
- foo := make(map[string]iopodman.ImageSaveOptions)
- foo["options"] = imageSave
- f, _ := json.Marshal(foo)
- save := p.Varlink("ImageSave", string(f), false)
- result := save.OutputToMoreResponse()
- Expect(save.ExitCode()).To(Equal(0))
- Expect(os.Rename(result.Id, destName)).To(BeNil())
- fmt.Printf("\n")
- } else {
- fmt.Printf(" already exists.\n")
- }
-}
-
-func populateCache(p *EndpointTestIntegration) {
- p.CrioRoot = p.ImageCacheDir
- p.StartVarlink()
- for _, image := range CACHE_IMAGES {
- p.RestoreArtifactToCache(image)
- }
- p.StopVarlink()
-}
-
-func (p *EndpointTestIntegration) RestoreArtifactToCache(image string) error {
- fmt.Printf("Restoring %s...\n", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- // fmt.Println(destName, p.ImageCacheDir)
- load := p.Varlink("LoadImage", fmt.Sprintf("{\"name\": \"%s\", \"inputFile\": \"%s\"}", image, destName), false)
- Expect(load.ExitCode()).To(BeZero())
- return nil
-}
-
-func (p *EndpointTestIntegration) startTopContainer(name string) string {
- t := true
- args := iopodman.Create{
- Args: []string{"docker.io/library/alpine:latest", "top"},
- Tty: &t,
- Detach: &t,
- }
- if len(name) > 0 {
- args.Name = &name
- }
- b, err := json.Marshal(args)
- if err != nil {
- ginkgo.Fail("failed to marshal data for top container")
- }
- input := fmt.Sprintf("{\"create\":%s}", string(b))
- top := p.Varlink("CreateContainer", input, false)
- if top.ExitCode() != 0 {
- ginkgo.Fail("failed to start top container")
- }
- start := p.Varlink("StartContainer", fmt.Sprintf("{\"name\":\"%s\"}", name), false)
- if start.ExitCode() != 0 {
- ginkgo.Fail("failed to start top container")
- }
- return start.OutputToString()
-}
diff --git a/test/endpoint/version_test.go b/test/endpoint/version_test.go
deleted file mode 100644
index b1c8ad867..000000000
--- a/test/endpoint/version_test.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// +build varlink
-
-package endpoint
-
-import (
- "os"
-
- . "github.com/containers/podman/v2/test/utils"
- "github.com/containers/podman/v2/version"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Podman version", func() {
- var (
- tempdir string
- err error
- endpointTest *EndpointTestIntegration
- )
-
- BeforeEach(func() {
- tempdir, err = CreateTempDirInTempDir()
- if err != nil {
- os.Exit(1)
- }
- endpointTest = Setup(tempdir)
- endpointTest.StartVarlink()
- })
-
- AfterEach(func() {
- endpointTest.Cleanup()
- //f := CurrentGinkgoTestDescription()
- //processTestResult(f)
-
- })
-
- It("podman version", func() {
- session := endpointTest.Varlink("GetVersion", "", false)
- result := session.OutputToStringMap()
- Expect(result["version"]).To(Equal(version.Version))
- Expect(session.ExitCode()).To(Equal(0))
- })
-})
diff --git a/test/system/010-images.bats b/test/system/010-images.bats
index 98bb0cc57..ee6da30ec 100644
--- a/test/system/010-images.bats
+++ b/test/system/010-images.bats
@@ -59,7 +59,8 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
@test "podman images - history output" {
# podman history is persistent: it permanently alters our base image.
# Create a dummy image here so we leave our setup as we found it.
- run_podman run --name my-container $IMAGE true
+ # Multiple --name options confirm command-line override (last one wins)
+ run_podman run --name ignore-me --name my-container $IMAGE true
run_podman commit my-container my-test-image
run_podman images my-test-image --format '{{ .History }}'
@@ -87,7 +88,8 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
}
@test "podman images - filter" {
- run_podman inspect --format '{{.ID}}' $IMAGE
+ # Multiple --format options confirm command-line override (last one wins)
+ run_podman inspect --format '{{.XYZ}}' --format '{{.ID}}' $IMAGE
iid=$output
run_podman images --noheading --filter=after=$iid
diff --git a/test/system/030-run.bats b/test/system/030-run.bats
index 12df966e2..37695f205 100644
--- a/test/system/030-run.bats
+++ b/test/system/030-run.bats
@@ -449,7 +449,9 @@ json-file | f
msg=$(random_string 20)
pidfile="${PODMAN_TMPDIR}/$(random_string 20)"
- run_podman run --name myctr --log-driver journald --conmon-pidfile $pidfile $IMAGE echo $msg
+ # Multiple --log-driver options to confirm that last one wins
+ run_podman run --name myctr --log-driver=none --log-driver journald \
+ --conmon-pidfile $pidfile $IMAGE echo $msg
journalctl --output cat _PID=$(cat $pidfile)
is "$output" "$msg" "check that journalctl output equals the container output"
@@ -464,7 +466,9 @@ json-file | f
run_podman run --rm $IMAGE date -r $testfile
is "$output" "Sun Sep 13 12:26:40 UTC 2020" "podman run with no TZ"
- run_podman run --rm --tz=MST7MDT $IMAGE date -r $testfile
+ # Multiple --tz options; confirm that the last one wins
+ run_podman run --rm --tz=US/Eastern --tz=Iceland --tz=MST7MDT \
+ $IMAGE date -r $testfile
is "$output" "Sun Sep 13 06:26:40 MDT 2020" "podman run with --tz=MST7MDT"
# --tz=local pays attention to /etc/localtime, not $TZ. We set TZ anyway,
@@ -532,4 +536,16 @@ json-file | f
run_podman untag $IMAGE $newtag $newtag2
}
+@test "podman run with --net=host and --port prints warning" {
+ rand=$(random_string 10)
+
+ # Please keep the duplicate "--net" options; this tests against #8507,
+ # a regression in which subsequent --net options did not override earlier.
+ run_podman run --rm -p 8080 --net=none --net=host $IMAGE echo $rand
+ is "${lines[0]}" \
+ "Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use" \
+ "Warning is emitted before container output"
+ is "${lines[1]}" "$rand" "Container runs successfully despite warning"
+}
+
# vim: filetype=sh
diff --git a/test/system/040-ps.bats b/test/system/040-ps.bats
index dec2df4d5..1ed2779b2 100644
--- a/test/system/040-ps.bats
+++ b/test/system/040-ps.bats
@@ -35,4 +35,51 @@ load helpers
run_podman rm $cid
}
+@test "podman ps --filter" {
+ run_podman run -d --name runner $IMAGE top
+ cid_runner=$output
+
+ run_podman run -d --name stopped $IMAGE true
+ cid_stopped=$output
+ run_podman wait stopped
+
+ run_podman run -d --name failed $IMAGE false
+ cid_failed=$output
+ run_podman wait failed
+
+ run_podman create --name created $IMAGE echo hi
+ cid_created=$output
+
+ run_podman ps --filter name=runner --format '{{.ID}}'
+ is "$output" "${cid_runner:0:12}" "filter: name=runner"
+
+ # Stopped container should not appear (because we're not using -a)
+ run_podman ps --filter name=stopped --format '{{.ID}}'
+ is "$output" "" "filter: name=stopped (without -a)"
+
+ # Again, but with -a
+ run_podman ps -a --filter name=stopped --format '{{.ID}}'
+ is "$output" "${cid_stopped:0:12}" "filter: name=stopped (with -a)"
+
+ run_podman ps --filter status=stopped --format '{{.Names}}' --sort names
+ is "${lines[0]}" "failed" "status=stopped: 1 of 2"
+ is "${lines[1]}" "stopped" "status=stopped: 2 of 2"
+
+ run_podman ps --filter status=exited --filter exited=0 --format '{{.Names}}'
+ is "$output" "stopped" "exited=0"
+
+ run_podman ps --filter status=exited --filter exited=1 --format '{{.Names}}'
+ is "$output" "failed" "exited=1"
+
+ # Multiple statuses allowed; and test sort=created
+ run_podman ps -a --filter status=exited --filter status=running \
+ --format '{{.Names}}' --sort created
+ is "${lines[0]}" "runner" "status=stopped: 1 of 3"
+ is "${lines[1]}" "stopped" "status=stopped: 2 of 3"
+ is "${lines[2]}" "failed" "status=stopped: 3 of 3"
+
+ run_podman stop -t 1 runner
+ run_podman rm -a
+}
+
# vim: filetype=sh
diff --git a/test/system/070-build.bats b/test/system/070-build.bats
index 83bcd13eb..59da503a6 100644
--- a/test/system/070-build.bats
+++ b/test/system/070-build.bats
@@ -135,10 +135,13 @@ echo "\$1"
printenv | grep MYENV | sort | sed -e 's/^MYENV.=//'
EOF
- # For overriding with --env-file
- cat >$PODMAN_TMPDIR/env-file <<EOF
+ # For overriding with --env-file; using multiple files confirms that
+ # the --env-file option is cumulative, not last-one-wins.
+ cat >$PODMAN_TMPDIR/env-file1 <<EOF
MYENV3=$s_env3
http_proxy=http-proxy-in-env-file
+EOF
+ cat >$PODMAN_TMPDIR/env-file2 <<EOF
https_proxy=https-proxy-in-env-file
EOF
@@ -185,7 +188,8 @@ EOF
export MYENV2="$s_env2"
export MYENV3="env-file-should-override-env-host!"
run_podman run --rm \
- --env-file=$PODMAN_TMPDIR/env-file \
+ --env-file=$PODMAN_TMPDIR/env-file1 \
+ --env-file=$PODMAN_TMPDIR/env-file2 \
${ENVHOST} \
-e MYENV4="$s_env4" \
build_test
@@ -205,7 +209,9 @@ EOF
# Proxies - environment should override container, but not env-file
http_proxy=http-proxy-from-env ftp_proxy=ftp-proxy-from-env \
- run_podman run --rm --env-file=$PODMAN_TMPDIR/env-file \
+ run_podman run --rm \
+ --env-file=$PODMAN_TMPDIR/env-file1 \
+ --env-file=$PODMAN_TMPDIR/env-file2 \
build_test \
printenv http_proxy https_proxy ftp_proxy
is "${lines[0]}" "http-proxy-in-env-file" "env-file overrides env"
@@ -222,7 +228,8 @@ EOF
is "$output" "$workdir" "pwd command in container"
# Determine buildah version, so we can confirm it gets into Labels
- run_podman info --format '{{ .Host.BuildahVersion }}'
+ # Multiple --format options confirm command-line override (last one wins)
+ run_podman info --format '{{.Ignore}}' --format '{{ .Host.BuildahVersion }}'
is "$output" "[1-9][0-9.-]\+" ".Host.BuildahVersion is reasonable"
buildah_version=$output
diff --git a/test/system/075-exec.bats b/test/system/075-exec.bats
index edd7dedc4..c028e16c9 100644
--- a/test/system/075-exec.bats
+++ b/test/system/075-exec.bats
@@ -91,7 +91,8 @@ load helpers
# #6829 : add username to /etc/passwd inside container if --userns=keep-id
@test "podman exec - with keep-id" {
- run_podman run -d --userns=keep-id $IMAGE sh -c \
+ # Multiple --userns options confirm command-line override (last one wins)
+ run_podman run -d --userns=private --userns=keep-id $IMAGE sh -c \
"echo READY;while [ ! -f /tmp/stop ]; do sleep 1; done"
cid="$output"
wait_for_ready $cid
diff --git a/test/system/200-pod.bats b/test/system/200-pod.bats
index b0f645c53..51835e4a3 100644
--- a/test/system/200-pod.bats
+++ b/test/system/200-pod.bats
@@ -286,6 +286,10 @@ EOF
is "$output" "nc: bind: Address in use" \
"two containers cannot bind to same port"
+ # make sure we can ping; failure here might mean that capabilities are wrong
+ run_podman run --rm --pod mypod $IMAGE ping -c1 127.0.0.1
+ run_podman run --rm --pod mypod $IMAGE ping -c1 $hostname
+
# While the container is still running, run 'podman ps' (no --format)
# and confirm that the output includes the published port
run_podman ps --filter id=$cid