PyTest, test to cover VM creation a ovs nets
[osm/openvim.git] / test / test_openvim_inf.py
diff --git a/test/test_openvim_inf.py b/test/test_openvim_inf.py
new file mode 100644 (file)
index 0000000..8e9bd3a
--- /dev/null
@@ -0,0 +1,194 @@
+import pytest
+import time
+from fixtures.pre.pre_fixtures_create import *
+from fixtures.post.post_fixtures_delete import *
+from lib.ssh import *
+from lib.test_utils import *
+
+
+@pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
+                         'pre_create_flavor', 'post_delete_net', 'post_delete_host')
+def test_osm_01_create_vm(request, pre_init_db,
+                          pre_create_host,
+                          pre_create_tenant,
+                          pre_create_net,
+                          pre_create_image,
+                          pre_create_flavor,
+                          post_delete_image,
+                          post_delete_flavor,
+                          post_delete_vm,
+                          post_delete_net,
+                          post_delete_host):
+    """
+    Create a vm and check network connection btw qrouter namespace and vm, evaluate using ping againt the ip given by
+    ovs dhcp server. Openvim is launched as a service by pre_launch_openvim_service before regresion start, is stopped
+    by  post_stop_openvim_service after test regresion ends.
+
+    :param request: Users argument --config=<test yaml>
+    :param pre_init_db: initialize the openvim db
+    :param pre_create_host: Create hosts
+    :param pre_create_tenant: Create tenant
+    :param pre_create_net: Create a mgmt net
+    :param pre_create_image: Create an image
+    :param pre_create_flavor: Create a flavor
+    :param post_delete_image: Delete the image declare by the test
+    :param post_delete_flavor: Delete the flavor declare by the test
+    :param post_delete_vm: Delete the vm declare by the test
+    :param post_delete_net: Delete the mgmt net declare by the test
+    :param post_delete_host: remove the host attached by the test
+    :return:
+    """
+    config_path = request.config.getoption('config')
+    config = get_config(config_path)
+    if not config['fake_mode']:
+        vm_id = create_vm_per_host(config, 1)
+        assert vm_id
+        # get vlan id
+        vlan_id = os.environ['OPENVIM_TEST_MGMT_NET_VLAN']
+        assert vlan_id
+        # get vm ip
+        ip = get_vm_ip(vm_id)
+        assert ip
+        # check ping against the vm
+        result = ping_ok(vlan_id, ip)
+        assert result
+
+
+@pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
+                         'pre_create_flavor', 'post_delete_net','post_delete_host')
+def test_osm_02_create_2_vm_ping_btw(request, pre_init_db,
+                                     pre_create_host,
+                                     pre_create_tenant,
+                                     pre_create_net,
+                                     pre_create_image,
+                                     pre_create_flavor,
+                                     post_delete_flavor,
+                                     post_delete_image,
+                                     post_delete_vm,
+                                     post_delete_net,
+                                     post_delete_host):
+    """
+    Create 2 vms and check network connection btw qrouter namespace and vms, after ssh ready check ping btw both vms
+    to validate the vlxan mesh btw computes is ok. The vms ips are handle by ovs dhcp server. Openvim is launched as a
+    service by pre_launch_openvim_service before regresion start, is stopped by  post_stop_openvim_service after
+    test regresion ends.
+
+    :param request: Users argument --config=<test yaml>
+    :param pre_init_db: initialize the openvim db
+    :param pre_create_host: Create hosts
+    :param pre_create_tenant: Create tenant
+    :param pre_create_net: Create a mgmt net
+    :param pre_create_image: Create an image
+    :param pre_create_flavor: Create a flavor
+    :param post_delete_image: Delete the image declare by the test
+    :param post_delete_flavor: Delete the flavor declare by the test
+    :param post_delete_vm: Delete the vm declare by the test
+    :param post_delete_net: Delete the mgmt net declare by the test
+    :param post_delete_host: remove the host attached by the test
+    :return:
+    """
+    config_path = request.config.getoption('config')
+    config = get_config(config_path)
+
+    if not config['fake_mode']:
+        vm_id_1 = create_vm_per_host(config, 0)
+        assert vm_id_1
+
+        vm_id_2 = create_vm_per_host(config, 1)
+        assert vm_id_2
+
+        # get vlan id
+        vlan_id = os.environ['OPENVIM_TEST_MGMT_NET_VLAN']
+        assert vlan_id
+
+        # get vm ip
+        ip_1 = get_vm_ip(vm_id_1)
+        ip_2 = get_vm_ip(vm_id_2)
+        assert ip_2
+
+        # check ping against the vms
+        result = ping_ok(vlan_id, ip_1)
+        assert result
+        result = ping_ok(vlan_id, ip_2)
+        assert result
+
+        # Wait for ssh to be ready
+        print "Wait for ssh to be ready"
+        time.sleep(90)
+        result = ping_ok_btw_2_vms(vlan_id, ip_1, ip_2)
+        assert result
+
+
+@pytest.mark.usefixtures('pre_init_db', 'pre_create_host', 'pre_create_tenant', 'pre_create_net', 'pre_create_image',
+                         'pre_create_flavor', 'post_delete_net','post_delete_host')
+def test_osm_03_test_service_openvim(request, pre_init_db,
+                                     pre_create_host,
+                                     pre_create_tenant,
+                                     pre_create_net,
+                                     pre_create_image,
+                                     pre_create_flavor,
+                                     post_delete_flavor,
+                                     post_delete_image,
+                                     post_delete_net,
+                                     post_delete_host):
+    """
+    Create a net, restart openvim service and check net status to avoid issues with preexisting nets during openvim
+    startup. Openvim is launched as a service by pre_launch_openvim_service before regresion start, is stopped by
+    post_stop_openvim_service after test regresion ends.
+
+    :param request: Users argument --config=<test yaml>
+    :param pre_init_db: initialize the openvim db
+    :param pre_create_host: Create hosts
+    :param pre_create_tenant: Create tenant
+    :param pre_create_net: Create a mgmt net
+    :param pre_create_image: Create an image
+    :param pre_create_flavor: Create a flavor
+    :param post_delete_image: Delete the image declare by the test
+    :param post_delete_flavor: Delete the flavor declare by the test
+    :param post_delete_net: Delete the mgmt net declare by the test
+    :param post_delete_host: remove the host attached by the test
+    :return:
+    """
+
+    net_id = os.environ['OPENVIM_TEST_MGMT_NET']
+    status = get_net_status(net_id)
+    if 'ACTIVE' in status:
+        service_path = os.path.join(os.environ['OPENVIM_ROOT_FOLDER'], 'scripts', 'service-openvim')
+        execute_local('{} restart'.format(service_path))
+    else:
+        # force test fail if net status is not ACTIVE
+        assert None
+
+    status = get_net_status(net_id)
+    if 'ACTIVE' not in status:
+        assert None
+
+
+def create_vm_per_host(config, host_number=0):
+    """
+    Create a vm in an specific compute.
+    :param config: test config
+    :param host_number: compute number to be depolyed. 
+    :return: 
+    """
+    # get env var for server descriptor
+    tenant_id = os.environ['OPENVIM_TENANT']
+    image_id = os.environ['OPENVIM_TEST_IMAGE']
+    flavor_id = os.environ['OPENVIM_TEST_FLAVOR']
+    net_id = os.environ['OPENVIM_TEST_MGMT_NET']
+
+    values = {'OPENVIM_TENANT': tenant_id,
+              'OPENVIM_TEST_IMAGE': image_id,
+              'OPENVIM_TEST_FLAVOR': flavor_id,
+              'OPENVIM_TEST_MGMT_NET': net_id,
+              'HOST_ID': os.environ['OPENVIM_TEST_HOST_' + str(host_number)]
+              }
+
+    descriptor = template_substitute(config['server'], values)
+    save_tmp_yaml('tmp.yaml', descriptor)
+    # create vm
+    openvim_path = os.path.join(os.environ['OPENVIM_ROOT_FOLDER'], 'openvim')
+    vm_id = execute_local("{} vm-create {}".format(openvim_path, 'tmp.yaml'))
+    vm_id = parse_uuid(vm_id)
+    delete_tmp_yaml('tmp.yaml')
+    return vm_id