From 0da6652287cd9d37f89f3f2b8b86def22139bf30 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Mon, 13 Jun 2016 08:42:30 -0700 Subject: [PATCH] add NFS tests (and DHCP/DNS in the support server) Summary: Set up the support server to provide DHCP/DNS functionality and an NFS server, providing a kickstart. Add a kickstart test just like the other root-user-crypted-net kickstart tests except it gets the kickstart from the support server via NFS. Also add NFS repository tests and a second support server for Server-dvd-iso flavor: this test must run on that flavor to ensure that packages are actually available. The support server just mounts the attached 'DVD' and exports it via NFS. Note we don't need to do anything clever to avoid IP conflicts between the two support servers, because os-autoinst-openvswitch ensures each worker group is on its own VLAN. As part of adding the NFS repo tests, I did a bit of cleanup, moving little things we were repeating a lot into anacondatest, and sharing the 'check if the repo was used' logic between all the tests (by making it into a test step that's loaded for all of them). I also simplified the 'was repo used' checks a bit, it seems silly to run a 'grep' command inside the VM then have os-autoinst do a grep on the output (which is effectively what we were doing before), instead we'll just use a single grep within the VM, and clean up the messy quoting/escaping a bit. Test Plan: Run all tests - at least all repository tests - and check they work (make sure the tests are actually still sane, not just that they pass). I've done runs of all the repo tests and they look good to me, but please double-check. I'm currently re-running the whole 24-20160609.n.0 test on staging with these changes. Reviewers: jskladan, garretraziel Reviewed By: garretraziel Subscribers: tflink Differential Revision: https://phab.qadevel.cloud.fedoraproject.org/D888 --- lib/anacondatest.pm | 15 ++++ main.pm | 5 +- .../http_selected-cantarell17.json | 2 +- .../http_selected-cantarell20.json | 2 +- .../http_selected-freetype262.json | 2 +- .../install_source/http_selected.json | 2 +- .../install_source/https_selected.json | 2 +- .../anaconda/install_source/nfs_selected.json | 22 +++++ .../anaconda/install_source/nfs_selected.png | Bin 0 -> 76278 bytes templates | 79 +++++++++++++++++- tests/_boot_to_anaconda.pm | 5 +- tests/_check_install_source.pm | 43 ++++++++++ tests/_support_server_postinstall.pm | 36 +++++++- tests/install_source_graphical.pm | 30 ++++--- tests/install_source_variation.pm | 35 -------- 15 files changed, 215 insertions(+), 65 deletions(-) create mode 100644 needles/anaconda/install_source/nfs_selected.json create mode 100644 needles/anaconda/install_source/nfs_selected.png create mode 100644 tests/_check_install_source.pm delete mode 100644 tests/install_source_variation.pm diff --git a/lib/anacondatest.pm b/lib/anacondatest.pm index a6b0d6cc..01802716 100644 --- a/lib/anacondatest.pm +++ b/lib/anacondatest.pm @@ -192,6 +192,21 @@ sub switch_layout { assert_screen "anaconda_layout_$layout", 3; } +sub get_full_repo { + my ($self, $repourl) = @_; + # trivial thing we kept repeating: fill out an HTTP or HTTPS + # repo URL with flavor and arch, leave NFS ones alone (as for + # NFS tests we just use a mounted ISO and the URL is complete) + if ($repourl !~ m/^nfs/) { + $repourl .= "/".lc(get_var("VERSION"))."/Everything/".get_var("ARCH")."/os"; + } + return $repourl; +} + +sub get_mirrorlist_url { + return "mirrors.fedoraproject.org/mirrorlist?repo=fedora-" . lc(get_var("VERSION")) . "&arch=" . get_var('ARCH') +} + 1; # vim: set sw=4 et: diff --git a/main.pm b/main.pm index 0dc98883..dc60d639 100644 --- a/main.pm +++ b/main.pm @@ -125,11 +125,12 @@ sub load_install_tests() { } ## Installation source - if (get_var('MIRRORLIST_GRAPHICAL') || get_var("REPOSITORY_GRAPHICAL")){ + if (get_var('MIRRORLIST_GRAPHICAL') || get_var("REPOSITORY_GRAPHICAL")) { autotest::loadtest "tests/install_source_graphical.pm"; + autotest::loadtest "tests/_check_install_source.pm"; } if (get_var("REPOSITORY_VARIATION")){ - autotest::loadtest "tests/install_source_variation.pm"; + autotest::loadtest "tests/_check_install_source.pm"; } if (get_var('LIVE')) { diff --git a/needles/anaconda/install_source/http_selected-cantarell17.json b/needles/anaconda/install_source/http_selected-cantarell17.json index 1e978167..af8dbfad 100644 --- a/needles/anaconda/install_source/http_selected-cantarell17.json +++ b/needles/anaconda/install_source/http_selected-cantarell17.json @@ -1,6 +1,6 @@ { "tags": [ - "anaconda_install_source_http_selected", + "anaconda_install_source_selected", "ENV-DISTRI-fedora", "ENV-FLAVOR-server" ], diff --git a/needles/anaconda/install_source/http_selected-cantarell20.json b/needles/anaconda/install_source/http_selected-cantarell20.json index 9ad9bd46..1651c2d9 100644 --- a/needles/anaconda/install_source/http_selected-cantarell20.json +++ b/needles/anaconda/install_source/http_selected-cantarell20.json @@ -17,7 +17,7 @@ } ], "tags": [ - "anaconda_install_source_http_selected", + "anaconda_install_source_selected", "ENV-DISTRI-fedora", "ENV-FLAVOR-server" ] diff --git a/needles/anaconda/install_source/http_selected-freetype262.json b/needles/anaconda/install_source/http_selected-freetype262.json index 0ce79d1e..9a242760 100644 --- a/needles/anaconda/install_source/http_selected-freetype262.json +++ b/needles/anaconda/install_source/http_selected-freetype262.json @@ -16,7 +16,7 @@ } ], "tags": [ - "anaconda_install_source_http_selected", + "anaconda_install_source_selected", "ENV-DISTRI-fedora", "ENV-FLAVOR-server" ], diff --git a/needles/anaconda/install_source/http_selected.json b/needles/anaconda/install_source/http_selected.json index 4348fff6..050fa7fa 100644 --- a/needles/anaconda/install_source/http_selected.json +++ b/needles/anaconda/install_source/http_selected.json @@ -1,7 +1,7 @@ { "properties": [], "tags": [ - "anaconda_install_source_http_selected", + "anaconda_install_source_selected", "ENV-DISTRI-fedora", "ENV-FLAVOR-server" ], diff --git a/needles/anaconda/install_source/https_selected.json b/needles/anaconda/install_source/https_selected.json index 716cce41..f4a8fb71 100644 --- a/needles/anaconda/install_source/https_selected.json +++ b/needles/anaconda/install_source/https_selected.json @@ -1,7 +1,7 @@ { "properties": [], "tags": [ - "anaconda_install_source_http_selected", + "anaconda_install_source_selected", "ENV-DISTRI-fedora", "ENV-FLAVOR-server" ], diff --git a/needles/anaconda/install_source/nfs_selected.json b/needles/anaconda/install_source/nfs_selected.json new file mode 100644 index 00000000..f91fe686 --- /dev/null +++ b/needles/anaconda/install_source/nfs_selected.json @@ -0,0 +1,22 @@ +{ + "properties": [], + "tags": [ + "anaconda_install_source_selected" + ], + "area": [ + { + "xpos": 57, + "ypos": 224, + "width": 23, + "height": 14, + "type": "match" + }, + { + "xpos": 148, + "ypos": 227, + "width": 14, + "height": 10, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/anaconda/install_source/nfs_selected.png b/needles/anaconda/install_source/nfs_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..7a25f77e7358273fe6479d6ee8366bce738abcf1 GIT binary patch literal 76278 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
yxAj{CY5qTys=k9P{yEhRuGkC) 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 { name => "install_package_set_minimal" }, }, + { + machine => { name => "64bit" }, + prio => 10, + product => { + arch => "x86_64", + distri => "fedora", + flavor => "Server-dvd-iso", + version => "*", + }, + test_suite => { name => "support_server" }, + }, + { + machine => { name => "64bit" }, + prio => 30, + product => { + arch => "x86_64", + distri => "fedora", + flavor => "Server-dvd-iso", + version => "*", + }, + test_suite => { name => "install_repository_nfs_variation" }, + }, + { + machine => { name => "64bit" }, + prio => 30, + product => { + arch => "x86_64", + distri => "fedora", + flavor => "Server-dvd-iso", + version => "*", + }, + test_suite => { name => "install_repository_nfs_graphical" }, + }, { machine => { name => "64bit" }, prio => 40, @@ -886,6 +919,17 @@ }, test_suite => { name => "install_kickstart_firewall_configured" }, }, + { + machine => { name => "64bit" }, + prio => 40, + product => { + arch => "x86_64", + distri => "fedora", + flavor => "universal", + version => "*", + }, + test_suite => { name => "install_kickstart_nfs" }, + }, { machine => { name => "64bit" }, prio => 40, @@ -1285,7 +1329,7 @@ name => "support_server", settings => [ { key => "NUMDISKS", value => "2" }, - { key => "HDD_1", value => "disk_f%CURRREL%_support_x86_64.img" }, + { key => "HDD_1", value => "disk_f%CURRREL%_support_2_x86_64.img" }, { key => "POSTINSTALL", value => "_support_server" }, { key => "USER_LOGIN", value => "false" }, { key => "ROOT_PASSWORD", value => "weakpassword" }, @@ -1373,12 +1417,32 @@ { key => "REPOSITORY_GRAPHICAL", value => "http://dl.fedoraproject.org/pub/fedora/linux/development" }, ], }, + { + name => "install_repository_nfs_graphical", + settings => [ + { key => "REPOSITORY_GRAPHICAL", value => "nfs:10.0.2.110:/repo" }, + { key => "PARALLEL_WITH", value => "support_server" }, + { key => "INSTALL_UNLOCK", value => "support_ready" }, + { key => "NICTYPE", value => "tap" }, + { key => "WORKER_CLASS", value => "tap" }, + ], + }, { name => "install_repository_http_variation", settings => [ { key => "REPOSITORY_VARIATION", value => "http://dl.fedoraproject.org/pub/fedora/linux/development" }, ], }, + { + name => "install_repository_nfs_variation", + settings => [ + { key => "REPOSITORY_VARIATION", value => "nfs:10.0.2.110:/repo" }, + { key => "PARALLEL_WITH", value => "support_server" }, + { key => "INSTALL_UNLOCK", value => "support_ready" }, + { key => "NICTYPE", value => "tap" }, + { key => "WORKER_CLASS", value => "tap" }, + ], + }, { name => "install_delete_partial", settings => [ @@ -1785,5 +1849,18 @@ { key => "HDD_1", value => "disk_%FLAVOR%_%MACHINE%.qcow2" }, ], }, + { + name => "install_kickstart_nfs", + settings => [ + { key => "KICKSTART", value => "1" }, + { key => "GRUB", value => "inst.ks=nfs:10.0.2.110:/export/root-user-crypted-net.ks" }, + { key => "USER_LOGIN", value => "false" }, + { key => "ROOT_PASSWORD", value => "111111" }, + { key => "PARALLEL_WITH", value => "support_server" }, + { key => "INSTALL_UNLOCK", value => "support_ready" }, + { key => "NICTYPE", value => "tap" }, + { key => "WORKER_CLASS", value => "tap" }, + ], + }, ], } diff --git a/tests/_boot_to_anaconda.pm b/tests/_boot_to_anaconda.pm index 53c0442a..afd2c3c8 100644 --- a/tests/_boot_to_anaconda.pm +++ b/tests/_boot_to_anaconda.pm @@ -14,10 +14,7 @@ sub run { # Construct inst.repo arg for REPOSITORY_VARIATION my $repourl = get_var("REPOSITORY_VARIATION"); if ($repourl) { - my $version = lc(get_var("VERSION", "")); - my $arch = get_var("ARCH", ""); - $repourl .= "/$version/Everything/$arch/os"; - $params .= "inst.repo=$repourl"; + $params .= "inst.repo=" . $self->get_full_repo($repourl); } # ternary: set $params to "" if it contains only spaces $params = $params =~ /^\s+$/ ? "" : $params; diff --git a/tests/_check_install_source.pm b/tests/_check_install_source.pm new file mode 100644 index 00000000..c90e0a25 --- /dev/null +++ b/tests/_check_install_source.pm @@ -0,0 +1,43 @@ +use base "anacondatest"; +use strict; +use testapi; + +sub run { + my $self = shift; + my $repourl; + if (get_var("MIRRORLIST_GRAPHICAL")) { + $repourl = $self->get_mirrorlist_url(); + } + else { + $repourl = get_var("REPOSITORY_VARIATION", get_var("REPOSITORY_GRAPHICAL")); + $repourl = $self->get_full_repo($repourl); + } + + # check that the repo was used + $self->root_console; + if ($repourl =~ s/^nfs://) { + # the above both checks if we're dealing with an NFS URL, and + # strips the 'nfs:' from it if so + assert_script_run "grep 'mounting ${repourl}' /tmp/packaging.log"; + } + else { + assert_script_run "grep \"added repo: 'anaconda'.*${repourl}\" /tmp/packaging.log"; + } + send_key "ctrl-alt-f6"; + + # Anaconda hub + assert_screen "anaconda_main_hub", 30; # + +} + +sub test_flags { + # without anything - rollback to 'lastgood' snapshot if failed + # 'fatal' - whole test suite is in danger if this fails + # 'milestone' - after this test succeeds, update 'lastgood' + # 'important' - if this fails, set the overall state to 'fail' + return { fatal => 1 }; +} + +1; + +# vim: set sw=4 et: diff --git a/tests/_support_server_postinstall.pm b/tests/_support_server_postinstall.pm index d06af0b1..7753bbf5 100644 --- a/tests/_support_server_postinstall.pm +++ b/tests/_support_server_postinstall.pm @@ -13,12 +13,44 @@ sub run { # set up networking $self->setup_tap_static("10.0.2.110", "support.domain.local"); $self->clone_host_file("/etc/resolv.conf"); + + ## DNS / DHCP (dnsmasq) + # create config + assert_script_run "printf 'domain=domain.local\ndhcp-range=10.0.2.112,10.0.2.199\ndhcp-option=option:router,10.0.2.2' > /etc/dnsmasq.conf"; + # open firewall ports + assert_script_run "firewall-cmd --add-service=dhcp"; + assert_script_run "firewall-cmd --add-service=dns"; + # start server + assert_script_run "systemctl restart dnsmasq.service"; + assert_script_run "systemctl is-active dnsmasq.service"; + + ## ISCSI + # start up iscsi target assert_script_run "printf '\n backing-store /dev/vdb\n' > /etc/tgt/conf.d/openqa.conf"; # open firewall port assert_script_run "firewall-cmd --add-service=iscsi-target"; - assert_script_run "systemctl start tgtd.service"; - assert_script_run 'systemctl is-active tgtd.service'; + assert_script_run "systemctl restart tgtd.service"; + assert_script_run "systemctl is-active tgtd.service"; + + ## NFS + + # create the file share + assert_script_run "mkdir -p /export"; + # get the kickstart + assert_script_run "curl -o /export/root-user-crypted-net.ks https://jskladan.fedorapeople.org/kickstarts/root-user-crypted-net.ks"; + # create the repo share + assert_script_run "mkdir -p /repo"; + # mount the ISO there + assert_script_run "mount /dev/cdrom /repo"; + # set up the exports + assert_script_run "printf '/export 10.0.2.0/24(ro)\n/repo 10.0.2.0/24(ro)' > /etc/exports"; + # open firewall port + assert_script_run "firewall-cmd --add-service=nfs"; + # start the server + assert_script_run "systemctl restart nfs-server.service"; + assert_script_run "systemctl is-active nfs-server.service"; + # report ready, wait for children mutex_create('support_ready'); wait_for_children; diff --git a/tests/install_source_graphical.pm b/tests/install_source_graphical.pm index 7b41309a..a9bb8c52 100644 --- a/tests/install_source_graphical.pm +++ b/tests/install_source_graphical.pm @@ -10,13 +10,18 @@ sub run { # Go into the Install Source spoke assert_and_click "anaconda_main_hub_installation_source"; - # select "http" on the network + # select appropriate protocol on the network assert_and_click "anaconda_install_source_on_the_network"; send_key "tab"; - for (my $i=0; $i<4; $i++){ + # if we have an NFS repo select NFS (one 'up'), otherwise HTTP (four 'ups') + my $num; + $num = get_var("REPOSITORY_GRAPHICAL") =~ m/^nfs:/ ? 1 : 4; + for (my $i=0; $i<$num; $i++){ send_key "up"; } - assert_screen "anaconda_install_source_http_selected"; + # let's just accept either NFS or HTTP here, if it's the wrong one the + # test will fail soon anyhow + assert_screen "anaconda_install_source_selected"; # insert the url @@ -25,15 +30,17 @@ sub run { # if either MIRRORLIST_GRAPHICAL or REPOSITORY_GRAPHICAL is set, type this into # the repository url input - if (get_var("MIRRORLIST_GRAPHICAL")){ - $repourl = "mirrors.fedoraproject.org/mirrorlist?repo=fedora-".lc(get_var("VERSION"))."&arch=".get_var('ARCH'); + if (get_var("MIRRORLIST_GRAPHICAL")) { + $repourl = $self->get_mirrorlist_url(); type_string $repourl; # select as mirror list assert_and_click "anaconda_install_source_repo_select_mirrorlist"; } - elsif (get_var("REPOSITORY_GRAPHICAL")){ - $repourl = get_var("REPOSITORY_GRAPHICAL")."/".lc(get_var("VERSION"))."/Everything/".get_var("ARCH")."/os"; + elsif (get_var("REPOSITORY_GRAPHICAL")) { + $repourl = $self->get_full_repo(get_var("REPOSITORY_GRAPHICAL")); + # strip the 'nfs:' for typing here + $repourl =~ s/^nfs://; type_string $repourl; } @@ -41,15 +48,6 @@ sub run { # Anaconda hub assert_screen "anaconda_main_hub", 300; - - # check that the repo was used - $self->root_console; - validate_script_output "grep \"".$repourl."\" /tmp/packaging.log", sub { $_ =~ m/added repo: 'anaconda'/ }; - send_key "ctrl-alt-f6"; - - # Anaconda hub - assert_screen "anaconda_main_hub", 30; # - } sub test_flags { diff --git a/tests/install_source_variation.pm b/tests/install_source_variation.pm deleted file mode 100644 index c90fa22c..00000000 --- a/tests/install_source_variation.pm +++ /dev/null @@ -1,35 +0,0 @@ -use base "anacondatest"; -use strict; -use testapi; - -sub run { - # !!! GRUB parameter is set in _boot_to_anaconda.pm !!! - my $self = shift; - # Anaconda hub - assert_screen "anaconda_main_hub"; - - my $repourl = ""; - - $repourl = get_var("REPOSITORY_VARIATION")."/".lc(get_var("VERSION"))."/Everything/".get_var("ARCH")."/os"; - - # check that the repo was used - $self->root_console; - validate_script_output "grep \"".$repourl."\" /tmp/packaging.log", sub { $_ =~ m/added repo: 'anaconda'/ }; - send_key "ctrl-alt-f6"; - - # Anaconda hub - assert_screen "anaconda_main_hub", 30; # - -} - -sub test_flags { - # without anything - rollback to 'lastgood' snapshot if failed - # 'fatal' - whole test suite is in danger if this fails - # 'milestone' - after this test succeeds, update 'lastgood' - # 'important' - if this fails, set the overall state to 'fail' - return { fatal => 1 }; -} - -1; - -# vim: set sw=4 et: