X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fra%2Fpytest%2Fns%2Fpingpong%2Ftest_scaling.py;fp=rwlaunchpad%2Fra%2Fpytest%2Fns%2Fpingpong%2Ftest_scaling.py;h=ee9890557a1ca190cb5a04c32295d015f39aac76;hb=4870d0ee29789b859931e4e2c73e13dcb29537d5;hp=0878db74f9887b3c8ac496f9edc846242012cddd;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;p=osm%2FSO.git diff --git a/rwlaunchpad/ra/pytest/ns/pingpong/test_scaling.py b/rwlaunchpad/ra/pytest/ns/pingpong/test_scaling.py index 0878db74..ee989055 100644 --- a/rwlaunchpad/ra/pytest/ns/pingpong/test_scaling.py +++ b/rwlaunchpad/ra/pytest/ns/pingpong/test_scaling.py @@ -22,8 +22,10 @@ @brief Pingpong scaling system test """ +import gi import os import pytest +import re import subprocess import sys import time @@ -35,27 +37,37 @@ import rift.auto.descriptor from gi.repository import ( NsrYang, - NsdYang, + RwProjectNsdYang, VnfrYang, RwNsrYang, - RwNsdYang, RwVnfrYang, ) +gi.require_version('RwKeyspec', '1.0') +from gi.repository.RwKeyspec import quoted_key @pytest.mark.setup('pingpong_nsd') @pytest.mark.depends('launchpad') class TestSetupPingpongNsd(object): def test_onboard(self, mgmt_session, descriptors): for descriptor in descriptors: - rift.auto.descriptor.onboard(mgmt_session.host, descriptor) + rift.auto.descriptor.onboard(mgmt_session, descriptor) def test_install_sar(self, mgmt_session): - install_cmd = 'ssh {mgmt_ip} -q -n -o BatchMode=yes -o StrictHostKeyChecking=no -- sudo yum install sysstat --assumeyes'.format( - mgmt_ip=mgmt_session.host, - ) + get_platform_cmd = 'ssh {host} -q -n -o BatchMode=yes -o StrictHostKeyChecking=no -- python3 -mplatform' + platform_result = subprocess.check_output(get_platform_cmd.format(host=mgmt_session.host), shell=True) + platform_match = re.search('(Ubuntu|fedora)-(\d+)', platform_result.decode('ascii')) + assert platform_match is not None + (dist, ver) = platform_match.groups() + if dist == 'fedora': + install_cmd = 'ssh {host} -q -n -o BatchMode=yes -o StrictHostKeyChecking=no -- sudo yum install sysstat --assumeyes'.format( + host=mgmt_session.host, + ) + elif dist == 'Ubuntu': + install_cmd = 'ssh {host} -q -n -o BatchMode=yes -o StrictHostKeyChecking=no -- sudo apt-get -q -y install sysstat'.format( + host=mgmt_session.host, + ) subprocess.check_call(install_cmd, shell=True) - @pytest.fixture(scope='function', params=[5,10,15,20,25]) def service_count(request): '''Fixture representing the number of services to test''' @@ -67,10 +79,10 @@ class TestScaling(object): def test_scaling(self, mgmt_session, cloud_account_name, service_count): def start_services(mgmt_session, desired_service_count, max_attempts=3): - catalog = mgmt_session.proxy(NsdYang).get_config('/nsd-catalog') + catalog = mgmt_session.proxy(RwProjectNsdYang).get_config('/rw-project:project[rw-project:name="default"]/nsd-catalog') nsd = catalog.nsd[0] - nsr_path = "/ns-instance-config" + nsr_path = "/rw-project:project[rw-project:name='default']/ns-instance-config" nsr = mgmt_session.proxy(RwNsrYang).get_config(nsr_path) service_count = len(nsr.nsr) @@ -78,23 +90,29 @@ class TestScaling(object): while attempts < max_attempts and service_count < desired_service_count: attempts += 1 + old_opdata = mgmt_session.proxy(RwNsrYang).get('/rw-project:project[rw-project:name="default"]/ns-instance-opdata') for count in range(service_count, desired_service_count): nsr = rift.auto.descriptor.create_nsr( cloud_account_name, "pingpong_%s" % str(uuid.uuid4().hex[:10]), - nsd.id) - mgmt_session.proxy(RwNsrYang).create_config('/ns-instance-config/nsr', nsr) + nsd) + mgmt_session.proxy(RwNsrYang).create_config('/rw-project:project[rw-project:name="default"]/ns-instance-config/nsr', nsr) + + time.sleep(10) - ns_instance_opdata = mgmt_session.proxy(RwNsrYang).get('/ns-instance-opdata') - for nsr in ns_instance_opdata.nsr: + new_opdata = mgmt_session.proxy(RwNsrYang).get('/rw-project:project[rw-project:name="default"]/ns-instance-opdata') + new_ns_instance_config_refs = {nsr.ns_instance_config_ref for nsr in new_opdata.nsr} - {nsr.ns_instance_config_ref for nsr in old_opdata.nsr} + for ns_instance_config_ref in new_ns_instance_config_refs: try: - xpath = "/ns-instance-opdata/nsr[ns-instance-config-ref='{}']/operational-status".format(nsr.ns_instance_config_ref) - mgmt_session.proxy(RwNsrYang).wait_for(xpath, "running", fail_on=['failed'], timeout=180) - xpath = "/ns-instance-opdata/nsr[ns-instance-config-ref='{}']/config-status".format(nsr.ns_instance_config_ref) + xpath = "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref={}]/operational-status".format(quoted_key(ns_instance_config_ref)) + mgmt_session.proxy(RwNsrYang).wait_for(xpath, "running", fail_on=['failed'], timeout=400) + xpath = "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref={}]/config-status".format(quoted_key(ns_instance_config_ref)) mgmt_session.proxy(RwNsrYang).wait_for(xpath, "configured", fail_on=['failed'], timeout=450) service_count += 1 + attempts = 0 # Made some progress so reset the number of attempts remaining except rift.auto.session.ProxyWaitForError: - mgmt_session.proxy(RwNsrYang).delete_config("/ns-instance-config/nsr[id='{}']".format(nsr.ns_instance_config_ref)) + mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id={}]".format(quoted_key(ns_instance_config_ref))) + time.sleep(5) def monitor_launchpad_performance(service_count, interval=30, samples=1): sar_cmd = "ssh {mgmt_ip} -q -n -o BatchMode=yes -o StrictHostKeyChecking=no -- sar -A {interval} {samples}".format( @@ -122,12 +140,12 @@ class TestScaling(object): class TestTeardownPingpongNsr(object): def test_teardown_nsr(self, mgmt_session): - ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config('/ns-instance-config') + ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config('/rw-project:project[rw-project:name="default"]/ns-instance-config') for nsr in ns_instance_config.nsr: - mgmt_session.proxy(RwNsrYang).delete_config("/ns-instance-config/nsr[id='{}']".format(nsr.id)) + mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id={}]".format(quoted_key(nsr.id))) time.sleep(60) - vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get('/vnfr-catalog') + vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get('/rw-project:project[rw-project:name="default"]/vnfr-catalog') assert vnfr_catalog is None or len(vnfr_catalog.vnfr) == 0 def test_generate_plots(self):