summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/apiv2/10-images.at14
-rw-r--r--test/apiv2/30-volumes.at7
-rw-r--r--test/e2e/containers_conf_test.go19
-rw-r--r--test/e2e/generate_kube_test.go23
-rw-r--r--test/e2e/generate_systemd_test.go2
-rw-r--r--test/e2e/ps_test.go6
-rw-r--r--test/e2e/run_test.go3
-rw-r--r--test/system/030-run.bats24
-rw-r--r--test/system/500-networking.bats74
9 files changed, 141 insertions, 31 deletions
diff --git a/test/apiv2/10-images.at b/test/apiv2/10-images.at
index f854d38ab..a08393668 100644
--- a/test/apiv2/10-images.at
+++ b/test/apiv2/10-images.at
@@ -126,6 +126,20 @@ t DELETE libpod/images/test:test 200
t GET images/json?filters='{"label":["xyz"]}' 200 length=0
t GET libpod/images/json?filters='{"label":["xyz"]}' 200 length=0
+
+# to be used in prune until filter tests
+podman image build -t test1:latest -<<EOF
+from alpine
+RUN >file3
+EOF
+
+# image should not be deleted
+t GET images/json?filters='{"reference":["test1"]}' 200 length=1
+t POST images/prune?filters='{"until":["500000"]}' 200
+t GET images/json?filters='{"reference":["test1"]}' 200 length=1
+
+t DELETE libpod/images/test1:latest 200
+
# Export more than one image
# FIXME FIXME FIXME, this doesn't work:
# not ok 64 [10-images] GET images/get?names=alpine,busybox : status
diff --git a/test/apiv2/30-volumes.at b/test/apiv2/30-volumes.at
index 623e691e3..ed606134a 100644
--- a/test/apiv2/30-volumes.at
+++ b/test/apiv2/30-volumes.at
@@ -13,6 +13,13 @@ t POST libpod/volumes/create name=foo1 201 \
.CreatedAt~[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}.* \
.Labels={} \
.Options={}
+t POST volumes/create 201 \
+ .Name~[0-9a-f]\\{64\\}
+ .Driver=local \
+ .Mountpoint=$volumepath/~[0-9a-f]\\{64\\}/_data \
+ .CreatedAt~[0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}.* \
+ .Labels={} \
+ .Options={}
t POST libpod/volumes/create 201
t POST libpod/volumes/create \
Name=foo2 \
diff --git a/test/e2e/containers_conf_test.go b/test/e2e/containers_conf_test.go
index 803124de1..a354de3b2 100644
--- a/test/e2e/containers_conf_test.go
+++ b/test/e2e/containers_conf_test.go
@@ -353,4 +353,23 @@ var _ = Describe("Podman run", func() {
Expect(session.ExitCode()).To(Equal(0))
Expect(session.OutputToString()).To(ContainSubstring("test"))
})
+
+ It("podman info seccomp profile path", func() {
+ configPath := filepath.Join(podmanTest.TempDir, "containers.conf")
+ os.Setenv("CONTAINERS_CONF", configPath)
+
+ profile := filepath.Join(podmanTest.TempDir, "seccomp.json")
+ containersConf := []byte(fmt.Sprintf("[containers]\nseccomp_profile=\"%s\"", profile))
+ err = ioutil.WriteFile(configPath, containersConf, os.ModePerm)
+ Expect(err).To(BeNil())
+
+ if IsRemote() {
+ podmanTest.RestartRemoteService()
+ }
+
+ session := podmanTest.Podman([]string{"info", "--format", "{{.Host.Security.SECCOMPProfilePath}}"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(Equal(profile))
+ })
})
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index c3586d9b6..611e8ddac 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -496,6 +496,29 @@ var _ = Describe("Podman generate kube", func() {
Expect(inspect.OutputToString()).To(ContainSubstring(vol1))
})
+ It("podman generate kube when bind-mounting '/' and '/root' at the same time ", func() {
+ // Fixes https://github.com/containers/podman/issues/9764
+
+ ctrName := "mount-root-ctr"
+ session1 := podmanTest.Podman([]string{"run", "-d", "--pod", "new:mount-root-conflict", "--name", ctrName,
+ "-v", "/:/volume1/",
+ "-v", "/root:/volume2/",
+ "alpine", "top"})
+ session1.WaitWithDefaultTimeout()
+ Expect(session1.ExitCode()).To(Equal(0))
+
+ kube := podmanTest.Podman([]string{"generate", "kube", "mount-root-conflict"})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
+ Expect(err).To(BeNil())
+
+ Expect(len(pod.Spec.Volumes)).To(Equal(2))
+
+ })
+
It("podman generate kube with persistent volume claim", func() {
vol := "vol-test-persistent-volume-claim"
diff --git a/test/e2e/generate_systemd_test.go b/test/e2e/generate_systemd_test.go
index 3a1da5d8c..75d778f10 100644
--- a/test/e2e/generate_systemd_test.go
+++ b/test/e2e/generate_systemd_test.go
@@ -242,7 +242,7 @@ var _ = Describe("Podman generate systemd", func() {
n.WaitWithDefaultTimeout()
Expect(n.ExitCode()).To(Equal(0))
- session := podmanTest.Podman([]string{"generate", "systemd", "--timeout", "42", "--name", "--new", "foo"})
+ session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new", "foo"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go
index 37b6516c1..d5269f415 100644
--- a/test/e2e/ps_test.go
+++ b/test/e2e/ps_test.go
@@ -269,6 +269,12 @@ var _ = Describe("Podman ps", func() {
result.WaitWithDefaultTimeout()
Expect(result.ExitCode()).To(Equal(0))
Expect(result.OutputToString()).To(Equal(cid))
+
+ // Query by trunctated image name should not match ( should return empty output )
+ result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpi"})
+ result.WaitWithDefaultTimeout()
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(result.OutputToString()).To(Equal(""))
})
It("podman ps id filter flag", func() {
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index 93505d742..74bdfce2c 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -582,6 +582,9 @@ USER bin`, BB)
if _, err := os.Stat("/sys/fs/cgroup/io.stat"); os.IsNotExist(err) {
Skip("Kernel does not have io.stat")
}
+ if _, err := os.Stat("/sys/fs/cgroup/system.slice/io.bfq.weight"); os.IsNotExist(err) {
+ Skip("Kernel does not support BFQ IO scheduler")
+ }
session := podmanTest.Podman([]string{"run", "--rm", "--blkio-weight=15", ALPINE, "sh", "-c", "cat /sys/fs/cgroup/io.bfq.weight"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/system/030-run.bats b/test/system/030-run.bats
index b2999a9e7..2b83fa56e 100644
--- a/test/system/030-run.bats
+++ b/test/system/030-run.bats
@@ -501,6 +501,7 @@ json-file | f
run_podman inspect --format '{{.OCIRuntime}}' $cid
is "$output" "$new_runtime" "podman inspect shows configured runtime"
run_podman kill $cid
+ run_podman wait $cid
run_podman rm $cid
rm -f $new_runtime
}
@@ -668,4 +669,27 @@ json-file | f
is "$output" ".*HOME=/.*"
}
+@test "podman run --timeout - basic test" {
+ cid=timeouttest
+ t0=$SECONDS
+ run_podman 255 run --name $cid --timeout 10 $IMAGE sleep 60
+ t1=$SECONDS
+ # Confirm that container is stopped. Podman-remote unfortunately
+ # cannot tell the difference between "stopped" and "exited", and
+ # spits them out interchangeably, so we need to recognize either.
+ run_podman inspect --format '{{.State.Status}} {{.State.ExitCode}}' $cid
+ is "$output" "\\(stopped\|exited\\) \-1" \
+ "Status and exit code of stopped container"
+
+ # This operation should take
+ # exactly 10 seconds. Give it some leeway.
+ delta_t=$(( $t1 - $t0 ))
+ [ $delta_t -gt 8 ] ||\
+ die "podman stop: ran too quickly! ($delta_t seconds; expected >= 10)"
+ [ $delta_t -le 14 ] ||\
+ die "podman stop: took too long ($delta_t seconds; expected ~10)"
+
+ run_podman rm $cid
+}
+
# vim: filetype=sh
diff --git a/test/system/500-networking.bats b/test/system/500-networking.bats
index 8da864798..788dc4cd1 100644
--- a/test/system/500-networking.bats
+++ b/test/system/500-networking.bats
@@ -77,35 +77,48 @@ load helpers
# FIXME: randomize port, and create second random host port
myport=54321
- # Container will exit as soon as 'nc' receives input
- # We use '-n -v' to give us log messages showing an incoming connection
- # and its IP address; the purpose of that is guaranteeing that the
- # remote IP is not 127.0.0.1 (podman PR #9052).
- # We could get more parseable output by using $NCAT_REMOTE_ADDR,
- # but busybox nc doesn't support that.
- run_podman run -d --userns=keep-id -p 127.0.0.1:$myport:$myport \
- $IMAGE nc -l -n -v -p $myport
- cid="$output"
-
- # emit random string, and check it
- teststring=$(random_string 30)
- echo "$teststring" | nc 127.0.0.1 $myport
-
- run_podman logs $cid
- # Sigh. We can't check line-by-line, because 'nc' output order is
- # unreliable. We usually get the 'connect to' line before the random
- # string, but sometimes we get it after. So, just do substring checks.
- is "$output" ".*listening on \[::\]:$myport .*" "nc -v shows right port"
-
- # This is the truly important check: make sure the remote IP is
- # in the 10.X range, not 127.X.
- is "$output" \
- ".*connect to \[::ffff:10\..*\]:$myport from \[::ffff:10\..*\]:.*" \
- "nc -v shows remote IP address in 10.X space (not 127.0.0.1)"
- is "$output" ".*${teststring}.*" "test string received on container"
-
- # Clean up
- run_podman rm $cid
+ for cidr in "" "$(random_rfc1918_subnet).0/24"; do
+ myport=$(( myport + 1 ))
+ if [[ -z $cidr ]]; then
+ # regex to match that we are in 10.X subnet
+ match="10\..*"
+ else
+ # Issue #9828 make sure a custom slir4netns cidr also works
+ network_arg="--network slirp4netns:cidr=$cidr"
+ # slirp4netns interface ip is always .100
+ match="${cidr%.*}.100"
+ fi
+
+ # Container will exit as soon as 'nc' receives input
+ # We use '-n -v' to give us log messages showing an incoming connection
+ # and its IP address; the purpose of that is guaranteeing that the
+ # remote IP is not 127.0.0.1 (podman PR #9052).
+ # We could get more parseable output by using $NCAT_REMOTE_ADDR,
+ # but busybox nc doesn't support that.
+ run_podman run -d --userns=keep-id $network_arg -p 127.0.0.1:$myport:$myport \
+ $IMAGE nc -l -n -v -p $myport
+ cid="$output"
+
+ # emit random string, and check it
+ teststring=$(random_string 30)
+ echo "$teststring" | nc 127.0.0.1 $myport
+
+ run_podman logs $cid
+ # Sigh. We can't check line-by-line, because 'nc' output order is
+ # unreliable. We usually get the 'connect to' line before the random
+ # string, but sometimes we get it after. So, just do substring checks.
+ is "$output" ".*listening on \[::\]:$myport .*" "nc -v shows right port"
+
+ # This is the truly important check: make sure the remote IP is not 127.X.
+ is "$output" \
+ ".*connect to \[::ffff:$match*\]:$myport from \[::ffff:$match\]:.*" \
+ "nc -v shows remote IP address is not 127.0.0.1"
+ is "$output" ".*${teststring}.*" "test string received on container"
+
+ # Clean up
+ run_podman wait $cid
+ run_podman rm $cid
+ done
}
# "network create" now works rootless, with the help of a special container
@@ -128,7 +141,7 @@ load helpers
is "$output" ".* inet ${mysubnet}\.2/24 brd ${mysubnet}\.255 " \
"sdfsdf"
- run_podman run --rm -d --network $mynetname -p 127.0.0.1:$myport:$myport \
+ run_podman run -d --network $mynetname -p 127.0.0.1:$myport:$myport \
$IMAGE nc -l -n -v -p $myport
cid="$output"
@@ -154,6 +167,7 @@ load helpers
is "$output" "Error: the network name $mynetname is already used" \
"Trying to create an already-existing network"
+ run_podman rm $cid
run_podman network rm $mynetname
run_podman 1 network rm $mynetname
}