summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/e2e/run_networking_test.go76
-rw-r--r--test/e2e/run_userns_test.go7
-rw-r--r--test/system/015-help.bats63
-rw-r--r--test/system/120-load.bats6
4 files changed, 94 insertions, 58 deletions
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index 4fad85f00..afba12ccd 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -71,10 +71,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Equal("80"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
})
It("podman run -p 8080:80", func() {
@@ -84,10 +83,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(8080)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Equal("8080"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
})
It("podman run -p 80/udp", func() {
@@ -97,10 +95,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("udp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/udp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostPort).To(Equal("80"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostIP).To(Equal(""))
})
It("podman run -p 127.0.0.1:8080:80", func() {
@@ -110,10 +107,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(8080)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal("127.0.0.1"))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Equal("8080"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal("127.0.0.1"))
})
It("podman run -p 127.0.0.1:8080:80/udp", func() {
@@ -123,10 +119,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(8080)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("udp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal("127.0.0.1"))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/udp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostPort).To(Equal("8080"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostIP).To(Equal("127.0.0.1"))
})
It("podman run -p [::1]:8080:80/udp", func() {
@@ -136,10 +131,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(8080)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("udp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal("::1"))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/udp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostPort).To(Equal("8080"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostIP).To(Equal("::1"))
})
It("podman run -p [::1]:8080:80/tcp", func() {
@@ -149,10 +143,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(8080)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal("::1"))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Equal("8080"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal("::1"))
})
It("podman run --expose 80 -P", func() {
@@ -162,10 +155,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Not(Equal(int32(0))))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Not(Equal("0")))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
})
It("podman run --expose 80/udp -P", func() {
@@ -175,10 +167,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Not(Equal(int32(0))))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("udp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/udp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostPort).To(Not(Equal("0")))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/udp"][0].HostIP).To(Equal(""))
})
It("podman run --expose 80 -p 80", func() {
@@ -188,10 +179,9 @@ var _ = Describe("Podman run networking", func() {
inspectOut := podmanTest.InspectContainer(name)
Expect(len(inspectOut)).To(Equal(1))
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].ContainerPort).To(Equal(int32(80)))
- Expect(inspectOut[0].NetworkSettings.Ports[0].Protocol).To(Equal("tcp"))
- Expect(inspectOut[0].NetworkSettings.Ports[0].HostIP).To(Equal(""))
+ Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Equal("80"))
+ Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
})
It("podman run network expose host port 80 to container port 8000", func() {
@@ -214,7 +204,7 @@ var _ = Describe("Podman run networking", func() {
results := podmanTest.Podman([]string{"inspect", "-l"})
results.Wait(30)
Expect(results.ExitCode()).To(Equal(0))
- Expect(results.OutputToString()).To(ContainSubstring(": 80,"))
+ Expect(results.OutputToString()).To(ContainSubstring(`"80/tcp":`))
})
It("podman run network expose duplicate host port results in error", func() {
@@ -229,7 +219,9 @@ var _ = Describe("Podman run networking", func() {
Expect(inspect.ExitCode()).To(Equal(0))
containerConfig := inspect.InspectContainerToJSON()
- Expect(containerConfig[0].NetworkSettings.Ports[0].HostPort).ToNot(Equal(80))
+ Expect(containerConfig[0].NetworkSettings.Ports).To(Not(BeNil()))
+ Expect(containerConfig[0].NetworkSettings.Ports["80/tcp"]).To(Not(BeNil()))
+ Expect(containerConfig[0].NetworkSettings.Ports["80/tcp"][0].HostPort).ToNot(Equal(80))
})
It("podman run hostname test", func() {
diff --git a/test/e2e/run_userns_test.go b/test/e2e/run_userns_test.go
index 5b9a99daa..be0981408 100644
--- a/test/e2e/run_userns_test.go
+++ b/test/e2e/run_userns_test.go
@@ -89,6 +89,13 @@ var _ = Describe("Podman UserNS support", func() {
Expect(ok).To(BeTrue())
})
+ It("podman --userns=keep-id root owns /usr", func() {
+ session := podmanTest.Podman([]string{"run", "--userns=keep-id", "alpine", "stat", "-c%u", "/usr"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(Equal("0"))
+ })
+
It("podman --userns=keep-id --user root:root", func() {
session := podmanTest.Podman([]string{"run", "--userns=keep-id", "--user", "root:root", "alpine", "id", "-u"})
session.WaitWithDefaultTimeout()
diff --git a/test/system/015-help.bats b/test/system/015-help.bats
index 42d3bd3ec..14af8e1a4 100644
--- a/test/system/015-help.bats
+++ b/test/system/015-help.bats
@@ -25,7 +25,7 @@ function podman_commands() {
function check_help() {
local count=0
- local subcommands_found=0
+ local -A found
for cmd in $(podman_commands "$@"); do
# Human-readable podman command string, with multiple spaces collapsed
@@ -44,24 +44,37 @@ function check_help() {
# If usage ends in '[command]', recurse into subcommands
if expr "$usage" : '.*\[command\]$' >/dev/null; then
- subcommands_found=$(expr $subcommands_found + 1)
+ found[subcommands]=1
check_help "$@" $cmd
continue
fi
- # If usage ends in '[flag]', command takes no more arguments.
- # Confirm that by running with 'invalid-arg' and expecting failure.
- if expr "$usage" : '.*\[flags\]$' >/dev/null; then
+ # We had someone write upper-case '[FLAGS]' once. Prevent it.
+ if expr "$usage" : '.*\[FLAG' >/dev/null; then
+ die "'flags' string must be lower-case in usage: $usage"
+ fi
+
+ # We had someone do 'podman foo ARG [flags]' one time. Yeah, no.
+ if expr "$usage" : '.*[A-Z].*\[flag' >/dev/null; then
+ die "'flags' must precede arguments in usage: $usage"
+ fi
+
+ # If usage lists no arguments (strings in ALL CAPS), confirm
+ # by running with 'invalid-arg' and expecting failure.
+ if ! expr "$usage" : '.*[A-Z]' >/dev/null; then
if [ "$cmd" != "help" ]; then
dprint "$command_string invalid-arg"
run_podman 125 "$@" $cmd invalid-arg
is "$output" "Error: .* takes no arguments" \
"'$command_string' with extra (invalid) arguments"
fi
+ found[takes_no_args]=1
fi
- # If usage has required arguments, try running without them
- if expr "$usage" : '.*\[flags\] [A-Z]' >/dev/null; then
+ # If usage has required arguments, try running without them.
+ # The expression here is 'first capital letter is not in [BRACKETS]'.
+ # It is intended to handle 'podman foo [flags] ARG' but not ' [ARG]'.
+ if expr "$usage" : '[^A-Z]\+ [A-Z]' >/dev/null; then
# Exceptions: these commands don't work rootless
if is_rootless; then
# "pause is not supported for rootless containers"
@@ -80,6 +93,31 @@ function check_help() {
run_podman 125 "$@" $cmd </dev/null
is "$output" "Error:.* \(require\|specif\|must\|provide\|need\|choose\|accepts\)" \
"'$command_string' without required arg"
+
+ found[required_args]=1
+ fi
+
+ # Commands with fixed number of arguments (i.e. no ellipsis): count
+ # the required args, then invoke with one extra. We should get a
+ # usage error.
+ if ! expr "$usage" : ".*\.\.\."; then
+ # "podman help" can take infinite args, so skip that one
+ if [ "$cmd" != "help" ]; then
+ # Get the args part of the command line; this should be
+ # everything from the first CAPITAL LETTER onward. We
+ # don't actually care about the letter itself, so just
+ # make it 'X'. And we don't care about [OPTIONAL] brackets
+ # either. What we do care about is stuff like 'IMAGE | CTR'
+ # which is actually one argument; convert to 'IMAGE-or-CTR'
+ local rhs=$(sed -e 's/^[^A-Z]\+[A-Z]/X/' -e 's/ | /-or-/g' <<<"$usage")
+ local n_args=$(wc -w <<<"$rhs")
+
+ run_podman 125 "$@" $cmd $(seq --format='x%g' 0 $n_args)
+ is "$output" "Error:.* \(takes no arguments\|requires exactly $n_args arg\|accepts at most\|too many arguments\|accepts $n_args arg(s), received\|accepts between .* and .* arg(s), received \)" \
+ "'$command_string' with >$n_args arguments"
+
+ found[fixed_args]=1
+ fi
fi
count=$(expr $count + 1)
@@ -101,9 +139,14 @@ function check_help() {
[ $count -gt 0 ] || \
die "Internal error: no commands found in 'podman help $@' list"
- # At least the top level must have some subcommands
- if [ -z "$*" -a $subcommands_found -eq 0 ]; then
- die "Internal error: did not find any podman subcommands"
+ # Sanity check: make sure the special loops above triggered at least once.
+ # (We've had situations where a typo makes the conditional never run)
+ if [ -z "$*" ]; then
+ for i in subcommands required_args takes_no_args fixed_args; do
+ if [[ -z ${found[$i]} ]]; then
+ die "Internal error: '$i' subtest did not trigger"
+ fi
+ done
fi
}
diff --git a/test/system/120-load.bats b/test/system/120-load.bats
index f290c1888..afa5ab473 100644
--- a/test/system/120-load.bats
+++ b/test/system/120-load.bats
@@ -107,10 +107,4 @@ verify_iid_and_name() {
"Diagnostic from 'podman load' without redirection or -i"
}
-@test "podman load - at most 1 arg(s)" {
- run_podman 125 load 1 2 3
- is "$output" \
- "Error: accepts at most 1 arg(s), received 3"
-}
-
# vim: filetype=sh