Test OpenStack vGPU feature 13/60713/7
authorValentin Boucher <valentin.boucher@kontron.com>
Tue, 7 Aug 2018 16:30:50 +0000 (12:30 -0400)
committerValentin Boucher <valentin.boucher@kontron.com>
Fri, 10 Aug 2018 19:26:34 +0000 (15:26 -0400)
XCI will be able to deploy this feature
on top of pharos lab with GPU so we have test it

This test can be improved in the future with OpenCL tests etc

|        DEPLOY_SCENARIO        |       os-nosdn-vgpu-ha     |

+-------------------+-------------------+------------------+----------------+
|     TEST CASE     |      PROJECT      |     DURATION     |     RESULT     |
+-------------------+-------------------+------------------+----------------+
|        vgpu       |      functest     |      01:00       |      PASS      |
+-------------------+-------------------+------------------+----------------+

Change-Id: I50618f47097a0257b1834b3966054d20458715df
Signed-off-by: Valentin Boucher <valentin.boucher@kontron.com>
docker/features/testcases.yaml
functest/core/singlevm.py
functest/opnfv_tests/openstack/vgpu/__init__.py [new file with mode: 0644]
functest/opnfv_tests/openstack/vgpu/vgpu.py [new file with mode: 0644]

index 23cd4d4..3912b3d 100644 (file)
@@ -82,3 +82,15 @@ tiers:
                     args:
                         suites:
                             - /src/fds/testing/robot
+            -
+                case_name: vgpu
+                project_name: functest
+                criteria: 100
+                blocking: false
+                description: >-
+                    Test suite for the OpenStack vGPU feature
+                dependencies:
+                    - DEPLOY_SCENARIO: 'vgpu'
+                run:
+                    module: 'functest.opnfv_tests.openstack.vgpu.vgpu'
+                    class: 'vGPU'
index 1de355e..f6abb74 100644 (file)
@@ -46,9 +46,11 @@ class VmReady1(tenantnetwork.TenantNetwork1):
     flavor_ram = 512
     flavor_vcpus = 1
     flavor_disk = 1
+    flavor_extra_specs = {}
     flavor_alt_ram = 1024
     flavor_alt_vcpus = 1
     flavor_alt_disk = 1
+    flavor_alt_extra_specs = {}
     create_server_timeout = 180
 
     def __init__(self, **kwargs):
@@ -138,8 +140,11 @@ class VmReady1(tenantnetwork.TenantNetwork1):
             getattr(config.CONF, '{}_flavor_disk'.format(self.case_name),
                     self.flavor_disk))
         self.__logger.debug("flavor: %s", flavor)
-        self.orig_cloud.set_flavor_specs(
-            flavor.id, getattr(config.CONF, 'flavor_extra_specs', {}))
+        flavor_extra_specs_updated = self.flavor_extra_specs.copy()
+        flavor_extra_specs_updated.update(
+            getattr(config.CONF,
+                    '{}_flavor_extra_specs'.format(self.case_name), {}))
+        self.orig_cloud.set_flavor_specs(flavor.id, flavor_extra_specs_updated)
         return flavor
 
     def create_flavor_alt(self, name=None):
@@ -163,8 +168,12 @@ class VmReady1(tenantnetwork.TenantNetwork1):
             getattr(config.CONF, '{}_flavor_alt_disk'.format(self.case_name),
                     self.flavor_alt_disk))
         self.__logger.debug("flavor: %s", flavor)
+        flavor_alt_extra_specs_updated = self.flavor_alt_extra_specs.copy()
+        flavor_alt_extra_specs_updated.update(
+            getattr(config.CONF,
+                    '{}_flavor_alt_extra_specs'.format(self.case_name), {}))
         self.orig_cloud.set_flavor_specs(
-            flavor.id, getattr(config.CONF, 'flavor_extra_specs', {}))
+            flavor.id, flavor_alt_extra_specs_updated)
         return flavor
 
     def boot_vm(self, name=None, **kwargs):
diff --git a/functest/opnfv_tests/openstack/vgpu/__init__.py b/functest/opnfv_tests/openstack/vgpu/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/functest/opnfv_tests/openstack/vgpu/vgpu.py b/functest/opnfv_tests/openstack/vgpu/vgpu.py
new file mode 100644 (file)
index 0000000..a900eb2
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018 Kontron and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+"""vGPU testcase implementation."""
+
+from __future__ import division
+
+import logging
+
+from functest.core import singlevm
+
+
+class vGPU(singlevm.SingleVm2):
+    """OpenStack vGPU Test Case."""
+
+    __logger = logging.getLogger(__name__)
+
+    filename = ('/home/opnfv/functest/images/'
+                'ubuntu-16.04-server-cloudimg-amd64-disk1.img')
+    flavor_ram = 4096
+    flavor_vcpus = 2
+    flavor_disk = 40
+    flavor_extra_specs = {'resources:VGPU': '1'}
+    username = 'ubuntu'
+    ssh_connect_loops = 12
+    create_server_timeout = 300
+
+    def __init__(self, **kwargs):
+        """Initialize vGPU testcase object."""
+        if "case_name" not in kwargs:
+            kwargs["case_name"] = "vgpu"
+        super(vGPU, self).__init__(**kwargs)
+
+    def execute(self):
+        """
+        Test if the vGPU exist.
+        """
+        (_, stdout, stderr) = self.ssh.exec_command('lspci')
+        lspci_output = stdout.read()
+        self.__logger.debug("output:\n%s", stdout.read())
+        self.__logger.debug("error:\n%s", stderr.read())
+        if ('VGA compatible controller: Intel' in lspci_output or
+                'VGA compatible controller: Nvidia' in lspci_output):
+            self.__logger.info("The VM have a vGPU")
+            return 0
+        else:
+            self.__logger.error("The VM haven't any vGPU")
+            return 1