It is possible to run the Cucumber testsuite for SUSE Manager and Uyuni by using the cucumber_testsuite
module. A libvirt example follows:
provider "libvirt" {
uri = "qemu:///system"
}
module "cucumber_testsuite" {
source = "./modules/cucumber_testsuite"
product_version = "4.3-nightly"
cc_username = ...
cc_password = ...
name_prefix = "moio-"
domain = "tf.local"
git_username = ...
git_password = ...
provider_settings = {
network_name = "default"
}
}
This will create a test server, client and minion instances, plus a coordination node called a controller
which runs the testsuite.
The example will have to be completed with SCC credentials and GitHub credentials to the SUSE Manager or Uyuni repo.
product_version
determines the version under test, see README_ADVANCED.md for the list of options.
By default, the cucumber_testsuite
module will not produce any outputs for the resources (for example the hostname for the instances).
If you want them, add the following to the end of your main.tf
file:
output "configuration" {
value = module.cucumber_testsuite.configuration
}
That will generate the outputs on-screen and will store them in the terraform.tfstate
file.
To start the testsuite, use:
ssh -t head-ctl.tf.local run-testsuite
By default, run-testsuite
runs over a selection of the YAML files in run_sets
, i.e.:
sanity_check.yml
, core.yml
, reposync.yml
, init_clients.yml
, secondary.yml
, secondary_parallelizable.yml
, finishing.yml
.
To enable/disable features, edit these YAML files. Keep in mind that:
- features prefixed with
core_
are essential for others to work, cannot be repeated and must be executed in the order given bytestsuite.yml
- features not prefixed with
core_
are idempotent, so they can be run multiple times without changing test results.
Once all core_
features have been executed you can run a non-core Cucumber feature as follows:
ssh root@head-ctl.tf.local
cd spacewalk/testsuite
cucumber -r features features/secondary/my_feature.feature
or an individual scenario with:
ssh root@head-ctl.tf.local
cd spacewalk/testsuite
cucumber -n "My nice scenario title"
Read HTML results at:
head-ctl.tf.local/output.html
. There is an additional running service, enabled during the highstate
, on the controller
which is exposing the entire /root/spacewalk/testsuite
folder: all testsuite files, including results saved under this folder, are readable through the http
protocol at the port 80
.
Get HTML results with:
scp head-ctl.tf.local://root/spacewalk-testsuite-base/output.html .
To keep the testsuite running after ending the ssh session using screen
tool:
ssh -t head-ctl.tf.local screen run-testsuite
You can detach from the session at anytime using the key sequence ^A d
. To re-attach to the existing session:
ssh -t head-ctl.tf.local screen -r
Currently, our head
and uyuni-master
testing deployments require the Salt Bundle (venv-salt-minion
package) to be installed on each client instance and some other tunings, before the testsuite is started. Also, bear in mind that the head
setup requires a containerized setup - use server_containerized
and proxy_containerized
modules (refer to the main.tf.libvirt-testsuite.example
file to see how to configure this). To be sure that all necessary adjustments are in place for the testsuite to run for HEAD or Uyuni, you need to set some flags on each of your instances (except for the server/ server_containerized instance) in your main.tf
file:
host_settings = {
proxy_containerized = {
additional_packages = [ "venv-salt-minion" ]
install_salt_bundle = true
}
suse-client = {
additional_packages = [ "venv-salt-minion" ]
install_salt_bundle = true
}
suse-minion = {
additional_packages = [ "venv-salt-minion" ]
install_salt_bundle = true
}
Several test hosts are optional and can be activated via a host_settings
block like the following:
host_settings = {
proxy = {
}
suse-client = {
}
suse-minion = {
}
suse-sshminion = {
}
redhat-minion = {
}
debian-minion = {
}
build-host = {
}
pxeboot-minion = {
}
kvm-host = {
}
monitoring-server = {
}
}
The default value for host_settings
block has a SUSE family traditional client and SUSE family minion present:
host_settings = {
suse-client = {
}
suse-minion = {
}
}
Each of the hosts (including server
and controller
which are always present) accepts the following parameters:
provider_settings
: Map of provider-specific settings for the host, see the backend-specific README fileadditional_repos
to add software repositories (see README_ADVANCED.md)additional_packages
to add software packages (see README_ADVANCED.md)additional_grains
to add or overwrite salt grains on salt minions. Map of key valueimage
to use a different base image
A libvirt example follows:
server = {
provider_settings = {
mac = "AA:B2:93:00:00:60"
}
additional_repos = {
Test_repo = "http://download.suse.de/ibs/Devel:/Galaxy:/Manager:/TEST/SLE_15_SP1/"
}
additional_packages = [ "vim" ]
}
The cucumber_testsuite
module also offers the use_avahi
and avahi_reflector
variables, see README_ADVANCED.md for their meaning.
You can configure a mirror
host for the testsuite and that will be beneficial deploy performance, but presently an Internet connection will still be needed to deploy test hosts correctly.
You can also select an alternative fork or branch for the Cucumber testsuite code:
- the
git_repo
variable in thecucumber_testsuite
module overrides the fork URL (by default either the Uyuni or the SUSE Manager repository is used) - the
branch
variable in thecucumber_testsuite
module overrides the branch (by default an automatic selection is made).
As an example:
module "cucumber_testsuite" {
source = "./modules/cucumber_testsuite"
product_version = "4.3-nightly"
...
git_repo = "https://url.to.git/repo/to/clone"
branch = "cool-feature"
...
}
By default, the Docker and Kiwi profiles used by the testsuite (all branches) are picked up from the public Uyuni branch. If you want to experiment with alternative Docker or Kiwi profiles, you can do that with the git_profiles_repo
variable.
Example:
module "cucumber_testsuite" {
...
git_profiles_repo = "https://url.to.git/repo/to/use"
...
}
If you want the test suite to use an unauthenticated container registry server, you can specify it with the no_auth_registry
variable.
Example:
module "cucumber_testsuite" {
...
no_auth_registry = "uri.of.registry:443/used"
...
}
If you want the test suite to use an authenticated Docker Registry, you can specify it with the auth_registry
, auth_registry_username
, and auth_registry_password
variables.
Example:
module "cucumber_testsuite" {
...
auth_registry = "uri.of.auth.registry:5000/used"
auth_registry_username = "username"
auth_registry_password = "password"
...
}
By default, the test suite has the SUSE Manager server do its HTTP requests directly on the internet. However, you may change this by using server_http_proxy
variable, so the requests go through some squid proxy.
For example:
module "cucumber_testsuite" {
...
server_http_proxy = "name.of.proxy:3128"
...
}
By default, packages are downloaded from the SUSE Manager server via HTTP. However, we also test that they can be downloaded from a custom endpoint. You may set this up by using custom_download_endpoint
variable.
For example:
module "cucumber_testsuite" {
...
custom_download_endpoint = "ftp://name.of.endpoint:445"
...
}
You may need to change the KVM image download. To do it, use the additional_grains
property:
host_settings = {
kvm-host = {
additional_grains = {
hvm_disk_image = {
leap = {
hostname = "hostname1"
image = "..."
hash = "..."
}
}
}
}
}