X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fra%2Fpytest%2Ftest_launchpad.py;h=2a275bcee292ac661e6486886c4659df1f85e115;hb=f314b4af9744068a7ed7a6a6314220c3aa857523;hp=a6f5ae78cd10434291430800f1db6b14a74fcb20;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;p=osm%2FSO.git diff --git a/rwlaunchpad/ra/pytest/test_launchpad.py b/rwlaunchpad/ra/pytest/test_launchpad.py index a6f5ae78..2a275bce 100644 --- a/rwlaunchpad/ra/pytest/test_launchpad.py +++ b/rwlaunchpad/ra/pytest/test_launchpad.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -# +# # Copyright 2016 RIFT.IO Inc # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,12 +22,17 @@ @brief System test of basic launchpad functionality """ +import gi import pytest -import gi gi.require_version('RwsdnalYang', '1.0') from gi.repository import RwsdnalYang +from gi.repository import RwSdnYang +from gi.repository import RwRoAccountYang + +gi.require_version('RwKeyspec', '1.0') +from gi.repository.RwKeyspec import quoted_key @pytest.mark.setup('sdn') @pytest.mark.feature('sdn') @@ -40,11 +45,36 @@ class TestSdnSetup: SDN name and accout type. ''' proxy = mgmt_session.proxy(RwsdnalYang) - sdn_account = RwsdnalYang.SDNAccount( + sdn_account = RwsdnalYang.YangData_RwProject_Project_SdnAccounts_SdnAccountList( name=sdn_account_name, account_type=sdn_account_type) - xpath = "/sdn-accounts/sdn-account-list[name='%s']" % sdn_account_name - proxy.create_config(xpath, sdn_account) + xpath = "/rw-project:project[rw-project:name='default']/sdn-accounts/sdn-account-list[name=%s]" % quoted_key(sdn_account_name) + proxy.replace_config(xpath, sdn_account) + sdn_account = proxy.get(xpath) + + def test_create_openstack_sdn_account(self, mgmt_session, openstack_sdn_account_name, cloud_account): + '''Configure sdn account + + Asserts: + SDN name and account type. + ''' + proxy = mgmt_session.proxy(RwSdnYang) + sdn_account = RwSdnYang.YangData_RwProject_Project_Sdn_Account.from_dict({ + 'name': openstack_sdn_account_name, + 'account_type': 'openstack', + 'openstack': { + 'admin': cloud_account.openstack.admin, + 'key': cloud_account.openstack.key, + 'secret': cloud_account.openstack.secret, + 'auth_url': cloud_account.openstack.auth_url, + 'tenant': cloud_account.openstack.tenant, + 'project_domain': cloud_account.openstack.project_domain, + 'user_domain': cloud_account.openstack.user_domain, + 'region': cloud_account.openstack.region, + }}) + + xpath = "/rw-project:project[rw-project:name='default']/sdn/account[name={}]".format(quoted_key(openstack_sdn_account_name)) + proxy.replace_config(xpath, sdn_account) sdn_account = proxy.get(xpath) @pytest.mark.depends('sdn') @@ -58,10 +88,23 @@ class TestSdn: sdn_account.account_type is what was configured ''' proxy = mgmt_session.proxy(RwsdnalYang) - xpath = "/sdn-accounts/sdn-account-list[name='%s']" % sdn_account_name + xpath = "/rw-project:project[rw-project:name='default']/sdn-accounts/sdn-account-list[name=%s]" % quoted_key(sdn_account_name) sdn_account = proxy.get_config(xpath) assert sdn_account.account_type == sdn_account_type + def test_openstack_sdn_account_connection_status(self, mgmt_session, openstack_sdn_account_name): + '''Verify connection status on openstack sdn account + + Asserts: + openstack sdn account is successfully connected + ''' + proxy = mgmt_session.proxy(RwSdnYang) + proxy.wait_for( + '/rw-project:project[rw-project:name="default"]/sdn/account[name={}]/connection-status/status'.format(quoted_key(openstack_sdn_account_name)), + 'success', + timeout=30, + fail_on=['failure']) + @pytest.mark.teardown('sdn') @pytest.mark.feature('sdn') @pytest.mark.incremental @@ -69,15 +112,22 @@ class TestSdnTeardown: def test_delete_odl_sdn_account(self, mgmt_session, sdn_account_name): '''Unconfigure sdn account''' proxy = mgmt_session.proxy(RwsdnalYang) - xpath = "/sdn-accounts/sdn-account-list[name='%s']" % sdn_account_name + xpath = "/rw-project:project[rw-project:name='default']/sdn-accounts/sdn-account-list[name=%s]" % quoted_key(sdn_account_name) + proxy.delete_config(xpath) + + def test_delete_openstack_sdn_account(self, mgmt_session, openstack_sdn_account_name): + '''Unconfigure sdn account''' + proxy = mgmt_session.proxy(RwSdnYang) + xpath = '/rw-project:project[rw-project:name="default"]/sdn/account[name={}]'.format(quoted_key(openstack_sdn_account_name)) proxy.delete_config(xpath) @pytest.mark.setup('launchpad') +@pytest.mark.depends('sdn') @pytest.mark.usefixtures('cloud_account') @pytest.mark.incremental class TestLaunchpadSetup: - def test_create_cloud_accounts(self, mgmt_session, cloud_module, cloud_xpath, cloud_accounts): + def test_create_cloud_accounts(self, mgmt_session, cloud_module, cloud_xpath, cloud_accounts, l2_port_chaining, openstack_sdn_account_name): '''Configure cloud accounts Asserts: @@ -85,16 +135,14 @@ class TestLaunchpadSetup: ''' proxy = mgmt_session.proxy(cloud_module) for cloud_account in cloud_accounts: - xpath = '{}[name="{}"]'.format(cloud_xpath, cloud_account.name) + if l2_port_chaining: + cloud_account.sdn_account = openstack_sdn_account_name + xpath = '{}[name={}]'.format(cloud_xpath, quoted_key(cloud_account.name)) proxy.replace_config(xpath, cloud_account) response = proxy.get(xpath) assert response.name == cloud_account.name assert response.account_type == cloud_account.account_type -@pytest.mark.depends('launchpad') -@pytest.mark.usefixtures('cloud_account') -@pytest.mark.incremental -class TestLaunchpad: def test_account_connection_status(self, mgmt_session, cloud_module, cloud_xpath, cloud_accounts): '''Verify connection status on each cloud account @@ -104,11 +152,26 @@ class TestLaunchpad: proxy = mgmt_session.proxy(cloud_module) for cloud_account in cloud_accounts: proxy.wait_for( - '{}[name="{}"]/connection-status/status'.format(cloud_xpath, cloud_account.name), + '{}[name={}]/connection-status/status'.format(cloud_xpath, quoted_key(cloud_account.name)), 'success', timeout=30, fail_on=['failure']) + @pytest.mark.feature('openmano') + def test_create_ro_accounts(self, mgmt_session, ro_accounts): + for name, ro_account in ro_accounts.items(): + mgmt_session.proxy(RwRoAccountYang).create_config('/rw-project:project[rw-project:name="default"]/ro-account/account', ro_account) + + @pytest.mark.feature('openmano') + def test_ro_account_connection_status(self, mgmt_session, ro_accounts): + for name, ro_account in ro_accounts.items(): + mgmt_session.proxy(RwRoAccountYang).wait_for(( + '/rw-project:project[rw-project:name="default"]' + '/ro-account-state/account[name={account_name}]/connection-status/status' + ).format(account_name=quoted_key(ro_account.name)), + 'success', + timeout=30, + fail_on=['failure']) @pytest.mark.teardown('launchpad') @pytest.mark.usefixtures('cloud_account') @@ -118,5 +181,11 @@ class TestLaunchpadTeardown: '''Unconfigure cloud_account''' proxy = mgmt_session.proxy(cloud_module) for cloud_account in cloud_accounts: - xpath = "{}[name='{}']".format(cloud_xpath, cloud_account.name) + xpath = "{}[name={}]".format(cloud_xpath, quoted_key(cloud_account.name)) proxy.delete_config(xpath) + + @pytest.mark.feature('openmano') + def test_delete_ro_accounts(self, mgmt_session, ro_accounts): + for name, ro_account in ro_accounts.items(): + xpath = "/rw-project:project[rw-project:name='default']/ro-account/account[name={}]" + mgmt_session.proxy(RwRoAccountYang).delete_config(xpath.format(quoted_key(name)))