bugfix: Correct VM handling by integration tests 93/22393/3
authorMartin Klozik <martinx.klozik@intel.com>
Thu, 22 Sep 2016 14:03:52 +0000 (15:03 +0100)
committerMartin Klozik <martinx.klozik@intel.com>
Mon, 3 Oct 2016 13:47:46 +0000 (14:47 +0100)
Patch with multi VM support has changed the way
how data are copied into the shared folder. Also
new support of GUEST_ options expansion requires
proper initialization with exact number of VMs
involved in the test.
Code of class specific to integration tests
was updated to initialize both GUEST_ options
and VM shared dir correctly.
Original values of all GUEST_ options are restored
after the testcase execution. So other TCs can
use original values for configuration expansion
to required number of VMs.

JIRA: VSPERF-361

Change-Id: Ic1149fbc73f73a66982bb64173b2217e55597200
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Bill Michalowski <bmichalo@redhat.com>
Reviewed-by: Antonio Fischetti <antonio.fischetti@intel.com>
testcases/integration.py
testcases/testcase.py

index f3f684b..88a6f12 100644 (file)
@@ -114,7 +114,20 @@ class IntegrationTestCase(TestCase):
                                 loader = Loader()
                                 # execute test based on TestSteps definition
                                 if self.test:
+                                    # initialize list with results
                                     step_result = [None] * len(self.test)
+
+                                    # count how many VNFs are involved in the test
+                                    for step in self.test:
+                                        if step[0].startswith('vnf'):
+                                            vnf_list[step[0]] = None
+
+                                    # check/expand GUEST configuration and copy data to shares
+                                    if len(vnf_list):
+                                        S.check_vm_settings(len(vnf_list))
+                                        self._copy_fwd_tools_for_all_guests(len(vnf_list))
+
+                                    # run test step by step...
                                     for i, step in enumerate(self.test):
                                         step_ok = False
                                         if step[0] == 'vswitch':
@@ -132,10 +145,9 @@ class IntegrationTestCase(TestCase):
                                                 tmp_traffic.update(step[2])
                                                 step[2] = tmp_traffic
                                         elif step[0].startswith('vnf'):
-                                            if not step[0] in vnf_list:
-                                                # initialize new VM and copy data to its shared dir
+                                            if not vnf_list[step[0]]:
+                                                # initialize new VM
                                                 vnf_list[step[0]] = loader.get_vnf_class()()
-                                                self._copy_fwd_tools_for_guest(len(vnf_list))
                                             test_object = vnf_list[step[0]]
                                         else:
                                             self._logger.error("Unsupported test object %s", step[0])
index ccd6578..7f22c18 100644 (file)
@@ -61,6 +61,11 @@ class TestCase(object):
         self._settings_paths_modified = False
         self._testcast_run_time = None
 
+        # store all GUEST_ specific settings to keep original values before their expansion
+        for key in S.__dict__:
+            if key.startswith('GUEST_'):
+                self._settings_original[key] = S.getValue(key)
+
         self._update_settings('VSWITCH', cfg.get('vSwitch', S.getValue('VSWITCH')))
         self._update_settings('VNF', cfg.get('VNF', S.getValue('VNF')))
         self._update_settings('TRAFFICGEN', cfg.get('Trafficgen', S.getValue('TRAFFICGEN')))
@@ -190,7 +195,7 @@ class TestCase(object):
         # perform guest related handling
         if self._vnf_ctl.get_vnfs_number():
             # copy sources of l2 forwarding tools into VM shared dir if needed
-            self._copy_fwd_tools_for_all_guests()
+            self._copy_fwd_tools_for_all_guests(self._vnf_ctl.get_vnfs_number())
 
             # in case of multi VM in parallel, set the number of streams to the number of VMs
             if self.deployment.startswith('pvpv'):
@@ -356,11 +361,11 @@ class TestCase(object):
                 item[ResultsConstants.TUNNEL_TYPE] = self._tunnel_type
         return results
 
-    def _copy_fwd_tools_for_all_guests(self):
+    def _copy_fwd_tools_for_all_guests(self, vm_count):
         """Copy dpdk and l2fwd code to GUEST_SHARE_DIR[s] based on selected deployment.
         """
         # consider only VNFs involved in the test
-        for guest_dir in set(S.getValue('GUEST_SHARE_DIR')[:self._vnf_ctl.get_vnfs_number()]):
+        for guest_dir in set(S.getValue('GUEST_SHARE_DIR')[:vm_count]):
             self._copy_fwd_tools_for_guest(guest_dir)
 
     def _copy_fwd_tools_for_guest(self, guest_dir):