Add QA:Testcase_Podman test and run it on IoT (#166)

This adds a pair of tests, one which does almost all the work
from the test case, the other just a client test to check that
we can connect to an HTTP server running in a container on the
host. We also have to bump the _console_wait_login timeout on
this path a bit as we're booting a disk image that was installed
with DHCP working, but we change the network setup so DHCP does
not work any more, and the system spends quite some time trying
to bring the network up on boot before eventually giving up and
proceeding.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
This commit is contained in:
Adam Williamson 2020-05-27 15:48:02 -07:00
parent 5a319ca76c
commit 14b21866f2
4 changed files with 117 additions and 1 deletions

View File

@ -1548,6 +1548,43 @@
"USER_LOGIN": "false"
}
},
"podman": {
"profiles": {
"fedora-IoT-dvd_ostree-iso-aarch64-*-aarch64": 20,
"fedora-IoT-dvd_ostree-iso-x86_64-*-64bit": 40
},
"settings": {
"BOOTFROM": "c",
"GRUB_POSTINSTALL": "net.ifnames=0 biosdevname=0",
"HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2",
"NICTYPE": "tap",
"POSTINSTALL": "podman",
"POST_STATIC": "10.0.2.114 podman001.domain.local",
"ROOT_PASSWORD": "weakpassword",
"START_AFTER_TEST": "install_default_upload",
"USER_LOGIN": "false",
"WORKER_CLASS": "tap"
}
},
"podman_client": {
"profiles": {
"fedora-IoT-dvd_ostree-iso-aarch64-*-aarch64": 20,
"fedora-IoT-dvd_ostree-iso-x86_64-*-64bit": 40
},
"settings": {
"BOOTFROM": "c",
"GRUB_POSTINSTALL": "net.ifnames=0 biosdevname=0",
"HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2",
"NICTYPE": "tap",
"PARALLEL_WITH": "podman",
"POSTINSTALL": "_podman_client",
"POST_STATIC": "10.0.2.115 podclient001.domain.local",
"ROOT_PASSWORD": "weakpassword",
"START_AFTER_TEST": "install_default_upload",
"USER_LOGIN": "false",
"WORKER_CLASS": "tap"
}
},
"realmd_join_cockpit": {
"profiles": {
"fedora-Server-dvd-iso-aarch64-*-aarch64": 30,

View File

@ -12,7 +12,7 @@ sub run {
# handle bootloader, if requested
if (get_var("GRUB_POSTINSTALL")) {
do_bootloader(postinstall=>1, params=>get_var("GRUB_POSTINSTALL"), timeout=>$wait_time);
$wait_time = 180;
$wait_time = 240;
}
# handle initial-setup, if we're expecting it (IoT < F32 install test)

30
tests/_podman_client.pm Normal file
View File

@ -0,0 +1,30 @@
use base "installedtest";
use strict;
use lockapi;
use mmapi;
use tapnet;
use testapi;
use utils;
sub run {
my $self = shift;
bypass_1691487 unless (get_var("DESKTOP"));
$self->root_console(tty=>3);
# wait for server to be set up
mutex_lock "podman_server_ready";
mutex_unlock "podman_server_ready";
# connect to server then tell server we're done
my $ret = script_run "curl http://10.0.2.114";
mutex_create "podman_connect_done";
# die if connection failed
die "connection failed!" if ($ret);
}
sub test_flags {
return { fatal => 1 };
}
1;
# vim: set sw=4 et:

49
tests/podman.pm Normal file
View File

@ -0,0 +1,49 @@
use base "installedtest";
use strict;
use lockapi;
use mmapi;
use tapnet;
use testapi;
use utils;
sub run {
my $self = shift;
bypass_1691487 unless (get_var("DESKTOP"));
$self->root_console(tty=>3);
# check podman is installed
assert_script_run "rpm -q podman";
# check to see if you can pull an image from the registry
assert_script_run "podman pull registry.fedoraproject.org/fedora:latest", 300;
# run hello-world to test
validate_script_output "podman run -it registry.fedoraproject.org/fedora:latest echo Hello-World", sub { m/Hello-World/ };
# create a Dockerfile
assert_script_run 'printf \'FROM registry.fedoraproject.org/fedora:latest\nRUN /usr/bin/dnf install -y httpd\nEXPOSE 80\nCMD ["-D", "FOREGROUND"]\nENTRYPOINT ["/usr/sbin/httpd"]\n\' > Dockerfile';
# Build an image
assert_script_run 'podman build -t fedora-httpd $(pwd)';
# Verify the image
validate_script_output "podman images", sub { m/fedora-httpd/ };
# Run the container
assert_script_run "podman run -d -p 80:80 localhost/fedora-httpd";
# Verify the container is running
validate_script_output "podman container ls", sub { m/fedora-httpd/ };
# Test apache is working
assert_script_run "curl http://localhost";
# Open the firewall
assert_script_run "firewall-cmd --permanent --zone=internal --add-interface=cni-podman0";
assert_script_run "firewall-cmd --permanent --zone=internal --add-port=80/tcp";
# tell client we're ready and wait for it to send the message
mutex_create("podman_server_ready");
my $children = get_children();
my $child_id = (keys %$children)[0];
mutex_lock("podman_connect_done", $child_id);
mutex_unlock("podman_connect_done");
}
sub test_flags {
return { fatal => 1 };
}
1;
# vim: set sw=4 et: