diff --git a/tests/nova.sh b/tests/nova.sh new file mode 100755 index 0000000..bf660fa --- /dev/null +++ b/tests/nova.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -ex + +source $BASE_DIR/admin-openrc + +openstack user show nova || { + openstack user create --domain default --password nova nova + openstack role add --project service --user nova admin +} + +openstack user show placement || { + openstack user create --domain default --password placement placement + openstack role add --project service --user placement admin +} + +openstack service show compute || { + openstack service create --name nova \ + --description "OpenStack Compute" compute + + for endpoint in public internal admin; do + openstack endpoint create --region RegionOne \ + compute $endpoint http://localhost:8774/v2.1/%\(tenant_id\)s || : + done +} + +openstack service show placement || { + openstack service create --name placement \ + --description "Placement API" placement + + for endpoint in public internal admin; do + openstack endpoint create --region RegionOne \ + placement $endpoint http://localhost:8778 || : + done +} + + +while sudo [ ! -d /var/snap/nova/common/etc/nova/ ]; do sleep 0.1; done; +sudo cp -r $BASE_DIR/etc/snap-nova/* /var/snap/nova/common/etc/ + +# Manually define alias if snap isn't installed from snap store. +# Otherwise, snap store defines this alias automatically. +snap aliases nova | grep nova-manage || sudo snap alias nova.manage nova-manage + +sudo nova-manage api_db sync +sudo nova-manage cell_v2 list_cells | grep cell0 || sudo nova-manage cell_v2 map_cell0 +sudo nova-manage cell_v2 list_cells | grep cell1 || sudo nova-manage cell_v2 create_cell --name=cell1 --verbose +sudo nova-manage db sync + +sudo systemctl restart snap.nova.* + +while ! nc -z localhost 8774; do sleep 0.1; done; + +sleep 5 + +openstack flavor show m1.tiny || openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 m1.tiny +openstack flavor show m1.small || openstack flavor create --id 2 --ram 2048 --disk 20 --vcpus 1 m1.small +openstack flavor show m1.medium || openstack flavor create --id 3 --ram 4096 --disk 20 --vcpus 2 m1.medium +openstack flavor show m1.large || openstack flavor create --id 4 --ram 8192 --disk 20 --vcpus 4 m1.large +openstack flavor show m1.xlarge || openstack flavor create --id 5 --ram 16384 --disk 20 --vcpus 8 m1.xlarge diff --git a/tests/snapstack_test.py b/tests/snapstack_test.py new file mode 100644 index 0000000..b128241 --- /dev/null +++ b/tests/snapstack_test.py @@ -0,0 +1,26 @@ +import unittest + +from snapstack import Plan, Setup, Step + +class SnapstackTest(unittest.TestCase): + + def test_snapstack(self): + ''' + _test_snapstack_ + + Run a basic smoke test, utilizing our snapstack testing harness. + + ''' + # snapstack already installs nova. Override the 'nova' + # step with a locally built snap. neutron, keystone, etc. will still + # be installed as normal from the store. + setup = Setup() + setup.add_steps(('nova', Step( + snap='nova', + script_loc='./tests/', + scripts=['nova.sh'], + snap_store=False))) + + # Execute the snapstack tests + plan = Plan(base_setup=setup.steps()) + plan.run() diff --git a/tox.ini b/tox.ini index 7360ffc..a6fe96f 100644 --- a/tox.ini +++ b/tox.ini @@ -5,14 +5,18 @@ skipsdist = True [testenv] basepython = python3.5 install_command = pip install {opts} {packages} -passenv = HOME TERM +passenv = + HOME + TERM + SNAP_BUILD_PROXY whitelist_externals = sudo snapcraft [testenv:snap] -deps = -r{toxinidir}/requirements.txt +deps = + -r{toxinidir}/requirements.txt + git+https://github.com/openstack-snaps/snapstack + pytest commands = - sudo snap install core - snapcraft clean - snapcraft snap + py.test -s tests/