diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/apiv2/20-containers.at | 21 | ||||
-rw-r--r-- | test/apiv2/40-pods.at | 20 | ||||
-rw-r--r-- | test/e2e/generate_spec_test.go | 80 | ||||
-rw-r--r-- | test/e2e/image_scp_test.go | 5 | ||||
-rw-r--r-- | test/system/900-ssh.bats | 61 | ||||
-rw-r--r-- | test/system/helpers.bash | 15 |
6 files changed, 202 insertions, 0 deletions
diff --git a/test/apiv2/20-containers.at b/test/apiv2/20-containers.at index a8d9baef3..ac3626cf1 100644 --- a/test/apiv2/20-containers.at +++ b/test/apiv2/20-containers.at @@ -527,3 +527,24 @@ t GET containers/status-test/json 200 .State.Status="stopping" sleep 3 t GET containers/status-test/json 200 .State.Status="exited" + +# test podman generate spec as input for the api +podman create --name=specgen alpine_labels + +TMPD=$(mktemp -d podman-apiv2-test.build.XXXXXXXX) + +podman generate spec -f ${TMPD}/input.txt -c specgen + +curl -XPOST -o ${TMPD}/response.txt --dump-header ${TMPD}/headers.txt -H content-type:application/json http://$HOST:$PORT/v4.0.0/libpod/containers/create -d "@${TMPD}/input.txt" + +if ! grep -q '201 Created' "${TMPD}/headers.txt"; then + cat "${TMPD}/headers.txt" + cat "${TMPD}/response.txt" + echo -e "${red}NOK: container create failed" + rm -rf $TMPD + exit 1 +fi + +rm -rf $TMPD + +podman container rm -fa diff --git a/test/apiv2/40-pods.at b/test/apiv2/40-pods.at index 80724a8d9..d21b3d1a9 100644 --- a/test/apiv2/40-pods.at +++ b/test/apiv2/40-pods.at @@ -136,4 +136,24 @@ t DELETE "libpod/pods/foo (pod has already been deleted)" 404 t_timeout 5 GET "libpod/pods/stats?stream=true&delay=1" 200 +podman pod create --name=specgen + +TMPD=$(mktemp -d podman-apiv2-test.build.XXXXXXXX) + +podman generate spec -f ${TMPD}/input.txt -c specgen + +curl -XPOST -o ${TMPD}/response.txt --dump-header ${TMPD}/headers.txt -H content-type:application/json http://$HOST:$PORT/v4.0.0/libpod/pods/create -d "@${TMPD}/input.txt" + +if ! grep -q '201 Created' "${TMPD}/headers.txt"; then + cat "${TMPD}/headers.txt" + cat "${TMPD}/response.txt" + echo -e "${red}NOK: pod create failed" + rm -rf $TMPD + exit 1 +fi + +rm -rf $TMPD + +podman pod rm -fa + # vim: filetype=sh diff --git a/test/e2e/generate_spec_test.go b/test/e2e/generate_spec_test.go new file mode 100644 index 000000000..57cd9546b --- /dev/null +++ b/test/e2e/generate_spec_test.go @@ -0,0 +1,80 @@ +package integration + +import ( + "os" + "path/filepath" + + . "github.com/containers/podman/v4/test/utils" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gexec" +) + +var _ = Describe("Podman generate spec", func() { + var ( + tempdir string + err error + podmanTest *PodmanTestIntegration + ) + + BeforeEach(func() { + SkipIfRemote("podman generate spec is not supported on the remote client") + tempdir, err = CreateTempDirInTempDir() + if err != nil { + os.Exit(1) + } + podmanTest = PodmanTestCreate(tempdir) + podmanTest.Setup() + }) + + AfterEach(func() { + podmanTest.Cleanup() + f := CurrentGinkgoTestDescription() + processTestResult(f) + + }) + + It("podman generate spec bogus should fail", func() { + session := podmanTest.Podman([]string{"generate", "spec", "foobar"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(ExitWithError()) + }) + + It("podman generate spec basic usage", func() { + session := podmanTest.Podman([]string{"create", "--cpus", "5", "--name", "specgen", ALPINE}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"generate", "spec", "--compact", "specgen"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }) + + It("podman generate spec file", func() { + session := podmanTest.Podman([]string{"create", "--cpus", "5", "--name", "specgen", ALPINE}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"generate", "spec", "--filename", filepath.Join(tempdir, "out.json"), "specgen"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + path := filepath.Join(tempdir, "out.json") + + exec := SystemExec("cat", []string{path}) + exec.WaitWithDefaultTimeout() + Expect(exec.OutputToString()).Should(ContainSubstring("specgen-clone")) + Expect(exec.OutputToString()).Should(ContainSubstring("500000")) + + }) + + It("generate spec pod", func() { + session := podmanTest.Podman([]string{"pod", "create", "--cpus", "5", "--name", "podspecgen"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"generate", "spec", "--compact", "podspecgen"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }) +}) diff --git a/test/e2e/image_scp_test.go b/test/e2e/image_scp_test.go index 77fe810bd..2c275d974 100644 --- a/test/e2e/image_scp_test.go +++ b/test/e2e/image_scp_test.go @@ -3,9 +3,11 @@ package integration import ( "io/ioutil" "os" + "path/filepath" "github.com/containers/common/pkg/config" . "github.com/containers/podman/v4/test/utils" + "github.com/containers/storage/pkg/homedir" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/onsi/gomega/gexec" @@ -56,6 +58,9 @@ var _ = Describe("podman image scp", func() { }) It("podman image scp with proper connection", func() { + if _, err := os.Stat(filepath.Join(homedir.Get(), ".ssh", "known_hosts")); err != nil { + Skip("known_hosts does not exist or is not accessible") + } cmd := []string{"system", "connection", "add", "--default", "QA", diff --git a/test/system/900-ssh.bats b/test/system/900-ssh.bats new file mode 100644 index 000000000..0757f5838 --- /dev/null +++ b/test/system/900-ssh.bats @@ -0,0 +1,61 @@ +#!/usr/bin/env bats +# +# Simplest set of podman tests. If any of these fail, we have serious problems. +# + +load helpers + +# Override standard setup! We don't yet trust podman-images or podman-rm +function setup() { + if ! is_remote; then + skip "only applicable on podman-remote" + fi + + basic_setup +} + +function teardown() { + if ! is_remote; then + return + fi + + # In case test function failed to clean up + if [[ -n $_SERVICE_PID ]]; then + run kill $_SERVICE_PID + fi + + # see test/system/272-system-connection.bats for why this is needed + mount \ + | grep $PODMAN_TMPDIR \ + | awk '{print $3}' \ + | xargs -l1 --no-run-if-empty umount + + run_podman system connection rm --all + + basic_teardown +} + +function _run_podman_remote() { + PODMAN=${PODMAN%%--url*} run_podman "$@" +} + +@test "podman --ssh test" { + skip_if_no_ssh "cannot run these tests without an ssh binary" + # Start server + _SERVICE_PORT=$(random_free_port 63000-64999) + + ${PODMAN%%-remote*} --root ${PODMAN_TMPDIR}/root \ + --runroot ${PODMAN_TMPDIR}/runroot \ + system service -t 99 tcp:localhost:$_SERVICE_PORT & + _SERVICE_PID=$! + wait_for_port localhost $_SERVICE_PORT + + notme=${PODMAN_ROOTLESS_USER} + + uid=$(id -u $notme) + + run_podman 125 --ssh=native system connection add testing ssh://$notme@localhost:22/run/user/$uid/podman/podman.sock + is "$output" "Error: exit status 255" + + # need to figure out how to podman remote test with the new ssh +} diff --git a/test/system/helpers.bash b/test/system/helpers.bash index 19bc6547c..b821175bb 100644 --- a/test/system/helpers.bash +++ b/test/system/helpers.bash @@ -347,6 +347,10 @@ function wait_for_port() { # BEGIN miscellaneous tools # Shortcuts for common needs: +function no_ssh() { + [ "$(man ssh)" -ne 0 ] +} + function is_ubuntu() { grep -qiw ubuntu /etc/os-release } @@ -470,6 +474,17 @@ function _add_label_if_missing() { } ###################### +# skip_if_no_ssh # ...with an optional message +###################### +function skip_if_no_ssh() { + if no_ssh; then + local msg=$(_add_label_if_missing "$1" "ssh") + skip "${msg:-not applicable with no ssh binary}" + fi +} + + +###################### # skip_if_rootless # ...with an optional message ###################### function skip_if_rootless() { |