PyTest, test to cover VM creation a ovs nets
[osm/openvim.git] / test / test_openvim_inf.py
1 import pytest
2 import time
3 from fixtures.pre.pre_fixtures_create import *
4 from fixtures.post.post_fixtures_delete import *
5 from lib.ssh import *
6 from lib.test_utils import *
7
8
9 @pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
10 'pre_create_flavor', 'post_delete_net', 'post_delete_host')
11 def test_osm_01_create_vm(request, pre_init_db,
12 pre_create_host,
13 pre_create_tenant,
14 pre_create_net,
15 pre_create_image,
16 pre_create_flavor,
17 post_delete_image,
18 post_delete_flavor,
19 post_delete_vm,
20 post_delete_net,
21 post_delete_host):
22 """
23 Create a vm and check network connection btw qrouter namespace and vm, evaluate using ping againt the ip given by
24 ovs dhcp server. Openvim is launched as a service by pre_launch_openvim_service before regresion start, is stopped
25 by post_stop_openvim_service after test regresion ends.
26
27 :param request: Users argument --config=<test yaml>
28 :param pre_init_db: initialize the openvim db
29 :param pre_create_host: Create hosts
30 :param pre_create_tenant: Create tenant
31 :param pre_create_net: Create a mgmt net
32 :param pre_create_image: Create an image
33 :param pre_create_flavor: Create a flavor
34 :param post_delete_image: Delete the image declare by the test
35 :param post_delete_flavor: Delete the flavor declare by the test
36 :param post_delete_vm: Delete the vm declare by the test
37 :param post_delete_net: Delete the mgmt net declare by the test
38 :param post_delete_host: remove the host attached by the test
39 :return:
40 """
41 config_path = request.config.getoption('config')
42 config = get_config(config_path)
43 if not config['fake_mode']:
44 vm_id = create_vm_per_host(config, 1)
45 assert vm_id
46 # get vlan id
47 vlan_id = os.environ['OPENVIM_TEST_MGMT_NET_VLAN']
48 assert vlan_id
49 # get vm ip
50 ip = get_vm_ip(vm_id)
51 assert ip
52 # check ping against the vm
53 result = ping_ok(vlan_id, ip)
54 assert result
55
56
57 @pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
58 'pre_create_flavor', 'post_delete_net','post_delete_host')
59 def test_osm_02_create_2_vm_ping_btw(request, pre_init_db,
60 pre_create_host,
61 pre_create_tenant,
62 pre_create_net,
63 pre_create_image,
64 pre_create_flavor,
65 post_delete_flavor,
66 post_delete_image,
67 post_delete_vm,
68 post_delete_net,
69 post_delete_host):
70 """
71 Create 2 vms and check network connection btw qrouter namespace and vms, after ssh ready check ping btw both vms
72 to validate the vlxan mesh btw computes is ok. The vms ips are handle by ovs dhcp server. Openvim is launched as a
73 service by pre_launch_openvim_service before regresion start, is stopped by post_stop_openvim_service after
74 test regresion ends.
75
76 :param request: Users argument --config=<test yaml>
77 :param pre_init_db: initialize the openvim db
78 :param pre_create_host: Create hosts
79 :param pre_create_tenant: Create tenant
80 :param pre_create_net: Create a mgmt net
81 :param pre_create_image: Create an image
82 :param pre_create_flavor: Create a flavor
83 :param post_delete_image: Delete the image declare by the test
84 :param post_delete_flavor: Delete the flavor declare by the test
85 :param post_delete_vm: Delete the vm declare by the test
86 :param post_delete_net: Delete the mgmt net declare by the test
87 :param post_delete_host: remove the host attached by the test
88 :return:
89 """
90 config_path = request.config.getoption('config')
91 config = get_config(config_path)
92
93 if not config['fake_mode']:
94 vm_id_1 = create_vm_per_host(config, 0)
95 assert vm_id_1
96
97 vm_id_2 = create_vm_per_host(config, 1)
98 assert vm_id_2
99
100 # get vlan id
101 vlan_id = os.environ['OPENVIM_TEST_MGMT_NET_VLAN']
102 assert vlan_id
103
104 # get vm ip
105 ip_1 = get_vm_ip(vm_id_1)
106 ip_2 = get_vm_ip(vm_id_2)
107 assert ip_2
108
109 # check ping against the vms
110 result = ping_ok(vlan_id, ip_1)
111 assert result
112 result = ping_ok(vlan_id, ip_2)
113 assert result
114
115 # Wait for ssh to be ready
116 print "Wait for ssh to be ready"
117 time.sleep(90)
118 result = ping_ok_btw_2_vms(vlan_id, ip_1, ip_2)
119 assert result
120
121
122 @pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
123 'pre_create_flavor', 'post_delete_net','post_delete_host')
124 def test_osm_03_test_service_openvim(request, pre_init_db,
125 pre_create_host,
126 pre_create_tenant,
127 pre_create_net,
128 pre_create_image,
129 pre_create_flavor,
130 post_delete_flavor,
131 post_delete_image,
132 post_delete_net,
133 post_delete_host):
134 """
135 Create a net, restart openvim service and check net status to avoid issues with preexisting nets during openvim
136 startup. Openvim is launched as a service by pre_launch_openvim_service before regresion start, is stopped by
137 post_stop_openvim_service after test regresion ends.
138
139 :param request: Users argument --config=<test yaml>
140 :param pre_init_db: initialize the openvim db
141 :param pre_create_host: Create hosts
142 :param pre_create_tenant: Create tenant
143 :param pre_create_net: Create a mgmt net
144 :param pre_create_image: Create an image
145 :param pre_create_flavor: Create a flavor
146 :param post_delete_image: Delete the image declare by the test
147 :param post_delete_flavor: Delete the flavor declare by the test
148 :param post_delete_net: Delete the mgmt net declare by the test
149 :param post_delete_host: remove the host attached by the test
150 :return:
151 """
152
153 net_id = os.environ['OPENVIM_TEST_MGMT_NET']
154 status = get_net_status(net_id)
155 if 'ACTIVE' in status:
156 service_path = os.path.join(os.environ['OPENVIM_ROOT_FOLDER'], 'scripts', 'service-openvim')
157 execute_local('{} restart'.format(service_path))
158 else:
159 # force test fail if net status is not ACTIVE
160 assert None
161
162 status = get_net_status(net_id)
163 if 'ACTIVE' not in status:
164 assert None
165
166
167 def create_vm_per_host(config, host_number=0):
168 """
169 Create a vm in an specific compute.
170 :param config: test config
171 :param host_number: compute number to be depolyed.
172 :return:
173 """
174 # get env var for server descriptor
175 tenant_id = os.environ['OPENVIM_TENANT']
176 image_id = os.environ['OPENVIM_TEST_IMAGE']
177 flavor_id = os.environ['OPENVIM_TEST_FLAVOR']
178 net_id = os.environ['OPENVIM_TEST_MGMT_NET']
179
180 values = {'OPENVIM_TENANT': tenant_id,
181 'OPENVIM_TEST_IMAGE': image_id,
182 'OPENVIM_TEST_FLAVOR': flavor_id,
183 'OPENVIM_TEST_MGMT_NET': net_id,
184 'HOST_ID': os.environ['OPENVIM_TEST_HOST_' + str(host_number)]
185 }
186
187 descriptor = template_substitute(config['server'], values)
188 save_tmp_yaml('tmp.yaml', descriptor)
189 # create vm
190 openvim_path = os.path.join(os.environ['OPENVIM_ROOT_FOLDER'], 'openvim')
191 vm_id = execute_local("{} vm-create {}".format(openvim_path, 'tmp.yaml'))
192 vm_id = parse_uuid(vm_id)
193 delete_tmp_yaml('tmp.yaml')
194 return vm_id