Skip to content

Commit

Permalink
Add openstack charm func test runner
Browse files Browse the repository at this point in the history
Also includes tool to identify func test targets from the charm.
  • Loading branch information
dosaboy committed Aug 30, 2024
1 parent 1df9406 commit 081c7e1
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
77 changes: 77 additions & 0 deletions openstack/tools/charmed_openstack_functest_runner.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/bin/bash -eux
SKIP_BUILD=false

while (($# > 0))
do
case "$1" in
--skip-build)
SKIP_BUILD=true
;;
*)
echo "ERROR: invalid input '$1'"
exit 1
;;
esac
shift
done


source ~/novarc
CIDR=`openstack subnet show subnet_${OS_USERNAME}-psd-extra -c cidr -f value`
FIP_MAX=$(ipcalc $CIDR| awk '$1=="HostMax:" {print $2}')
FIP_MIN=$(ipcalc $CIDR| awk '$1=="HostMin:" {print $2}')
FIP_MIN_ABC=${FIP_MIN%.*}
FIP_MIN_D=${FIP_MIN##*.}
FIP_MIN=${FIP_MIN_ABC}.$(($FIP_MIN_D + 64))

# More information on config https://github.com/openstack-charmers/zaza/blob/master/doc/source/runningcharmtests.rst
export NET_ID=$(openstack network show net_${OS_USERNAME}-psd-extra -f value -c id)
export FIP_RANGE=FIP_MIN:FIP_MAX
export CIDR_EXT=CIDR
export GATEWAY=$(openstack subnet show subnet_${OS_USERNAME}-psd-extra -c gateway_ip -f value)
export NAME_SERVER=91.189.91.131
export CIDR_PRIV=192.168.21.0/24
export SWIFT_IP=10.140.56.22
export TEST_MODEL_SETTINGS="image-stream=released;default-series=jammy;test-mode=true;transmit-vendor-metrics=false"
# We need to set TEST_JUJU3 as well as the constraints file
# Ref: https://github.com/openstack-charmers/zaza/blob/e96ab098f00951079fccb34bc38d4ae6ebb38606/setup.py#L47
export TEST_JUJU3=1

# NOTE: this should not be necessary for > juju 2.x but since we still have a need for it we add it in
export TEST_ZAZA_BUG_LP1987332=1

# Some charms point to an upstream constraints file that installs python-libjuju 2.x so we need to do this to ensure we get 3.x
export TEST_CONSTRAINTS_FILE=https://raw.githubusercontent.com/openstack-charmers/zaza/master/constraints-juju34.txt

## Build Charm
# Note: If you have a reactive charm, some paths may be prefixed by src/, like
# src/.tox or src/tests
#
# 1. Check charmcraft channel required in zosci.yaml and refresh it to the
# matching version. The version will differ based on stable branch version,
# e.g. yoga is often 1.5, zed is often 2.0, master 2.x.. some noble-caracal
# ones may be on 3.x

sudo snap refresh charmcraft --channel $(grep charmcraft_channel osci.yaml| sed -r 's/.+:\s+(\S+)/\1/')

# Ensure lxc initialised
lxd init --auto || true

# 2. Build. This should always do the right thing, regardless of how the
# charm is built.
if ! $SKIP_BUILD; then
tox -re build
fi

# 3. Run tests

for target in $(python3 $(realpath $(dirname $0))/identify_charm_func_tests.py); do
[[ -d src ]] && pushd src || true
tox -re func-target $target

read -p "Destroy model and run next test? [ENTER]"
# cleanup before next run
model=`juju list-models| egrep -o "^zaza-\S+"|tr -d '*'`
juju destroy-model --no-prompt $model --force --no-wait --destroy-storage
done

20 changes: 20 additions & 0 deletions openstack/tools/identify_charm_func_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Get names of test targets that OSCI would run for the given charm. Should be
# run from within the charm root.
#
# Outputs space seperated list of target names.
#
import os
import yaml

CLASSIC_TESTS_YAML = 'tests/tests.yaml'
REACTIVE_TESTS_YAML = os.path.join('src', CLASSIC_TESTS_YAML)

if os.path.exists(REACTIVE_TESTS_YAML):
bundles = yaml.safe_load(open(REACTIVE_TESTS_YAML))
else:
bundles = yaml.safe_load(open(CLASSIC_TESTS_YAML))

targets = set(bundles['smoke_bundles'] + bundles['gate_bundles'] +
bundles['dev_bundles'])

print(' '.join(sorted(targets)))

0 comments on commit 081c7e1

Please sign in to comment.