update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b second try
[osm/SO.git] / rwlaunchpad / ra / pytest / ns / pingpong / test_accounts_framework.py
1 #!/usr/bin/env python3
2 """
3 #
4 # Copyright 2017 RIFT.IO Inc
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18
19 @file test_accounts_framework.py
20 @author Paul Laidler (Paul.Laidler@riftio.com)
21 @date 06/21/2017
22 @brief Test logical account usage with vim and ro
23 """
24
25 import gi
26 import logging
27 import os
28 import pytest
29 import random
30 import re
31 import subprocess
32 import sys
33 import time
34 import uuid
35
36 from contextlib import contextmanager
37
38 import rift.auto.mano
39 import rift.auto.session
40 import rift.auto.descriptor
41
42 import rift.mano.examples.ping_pong_nsd
43
44 gi.require_version('RwVnfrYang', '1.0')
45 from gi.repository import (
46 NsrYang,
47 RwProjectNsdYang,
48 VnfrYang,
49 RwNsrYang,
50 RwVnfrYang,
51 RwBaseYang,
52 )
53
54 logging.basicConfig(level=logging.DEBUG)
55 logger = logging.getLogger(__name__)
56
57 @pytest.fixture(scope='session')
58 def descriptors_pingpong():
59 return rift.mano.examples.ping_pong_nsd.generate_ping_pong_descriptors(pingcount=1)
60
61 @pytest.fixture(scope='session')
62 def packages_pingpong(descriptors_pingpong):
63 return rift.auto.descriptor.generate_descriptor_packages(descriptors_pingpong)
64
65 def VerifyAllInstancesRunning(mgmt_session):
66 ''' Verifies all network service instances reach running operational status '''
67 nsr_opdata = mgmt_session.proxy(RwNsrYang).get("/rw-project:project[rw-project:name='default']/ns-instance-opdata")
68 nsrs = nsr_opdata.nsr
69 for nsr in nsrs:
70 xpath = (
71 "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref='{ns_instance_config_ref}']/operational-status"
72 ).format(
73 ns_instance_config_ref=nsr.ns_instance_config_ref
74 )
75 mgmt_session.proxy(RwNsrYang).wait_for(xpath, "running", fail_on=['failed'], timeout=300)
76
77 def VerifyAllInstancesConfigured(mgmt_session):
78 ''' Verifies all network service instances reach configured config status '''
79 nsr_opdata = mgmt_session.proxy(RwNsrYang).get("/rw-project:project[rw-project:name='default']/ns-instance-opdata")
80 nsrs = nsr_opdata.nsr
81 for nsr in nsrs:
82 xpath = (
83 "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref='{}']/config-status"
84 ).format(
85 nsr.ns_instance_config_ref
86 )
87 mgmt_session.proxy(RwNsrYang).wait_for(xpath, "configured", fail_on=['failed'], timeout=300)
88
89 @pytest.mark.depends('launchpad')
90 @pytest.mark.setup('descriptors')
91 @pytest.mark.incremental
92 class TestSetupPingpong(object):
93 def test_onboard(self, mgmt_session, packages_pingpong):
94 for descriptor_package in packages_pingpong:
95 rift.auto.descriptor.onboard(mgmt_session, descriptor_package)
96
97 @pytest.mark.depends('descriptors')
98 @pytest.mark.incremental
99 class TestInstantiateVim:
100 def test_instantiate_vim(self, mgmt_session, cloud_account_name):
101 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
102 nsd = nsd_catalog.nsd[0]
103
104 nsr = rift.auto.descriptor.create_nsr(
105 cloud_account_name,
106 "pp_vim",
107 nsd,
108 )
109 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
110
111 def test_verify_running(self, mgmt_session):
112 VerifyAllInstancesRunning(mgmt_session)
113
114 def test_verify_configured(self, mgmt_session):
115 VerifyAllInstancesConfigured(mgmt_session)
116
117 @pytest.mark.depends('descriptors')
118 @pytest.mark.incremental
119 class TestInstantiateRo:
120 def test_instantiate_ro(self, mgmt_session, cloud_account_name, ro_map):
121 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
122 nsd = nsd_catalog.nsd[0]
123
124 resource_orchestrator, datacenter = ro_map[cloud_account_name]
125 nsr = rift.auto.descriptor.create_nsr(
126 datacenter,
127 "pp_ro",
128 nsd,
129 resource_orchestrator=resource_orchestrator
130 )
131 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
132
133 def test_verify_running(self, mgmt_session):
134 VerifyAllInstancesRunning(mgmt_session)
135
136 def test_verify_configured(self, mgmt_session):
137 VerifyAllInstancesConfigured(mgmt_session)
138