Update scenario img_file in tempest.conf
[functest.git] / functest / core / singlevm.py
index 5ecd482..5907111 100644 (file)
@@ -39,7 +39,7 @@ class VmReady1(tenantnetwork.TenantNetwork1):
     # pylint: disable=too-many-instance-attributes
 
     __logger = logging.getLogger(__name__)
-    filename = '/home/opnfv/functest/images/cirros-0.4.0-x86_64-disk.img'
+    filename = '/home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.img'
     image_format = 'qcow2'
     extra_properties = {}
     filename_alt = filename
@@ -212,12 +212,14 @@ class VmReady1(tenantnetwork.TenantNetwork1):
         vm1 = self.cloud.create_server(
             name if name else '{}-vm_{}'.format(self.case_name, self.guid),
             image=self.image.id, flavor=self.flavor.id,
-            auto_ip=False, network=self.network.id,
+            auto_ip=False,
+            network=self.network.id if self.network else env.get(
+                "EXTERNAL_NETWORK"),
             timeout=self.create_server_timeout, wait=True, **kwargs)
         self.__logger.debug("vm: %s", vm1)
         return vm1
 
-    def check_regex_in_console(self, name, regex=' login: ', loop=1):
+    def check_regex_in_console(self, name, regex=' login: ', loop=6):
         """Wait for specific message in console
 
         Returns: True or False on errors
@@ -367,6 +369,8 @@ class SingleVm1(VmReady1):
     ssh_connect_timeout = 1
     ssh_connect_loops = 6
     create_floating_ip_timeout = 120
+    check_console_loop = 6
+    check_console_regex = ' login: '
 
     def __init__(self, **kwargs):
         if "case_name" not in kwargs:
@@ -414,10 +418,12 @@ class SingleVm1(VmReady1):
         - None on error
         """
         assert vm1
-        fip = self.cloud.create_floating_ip(
-            network=self.ext_net.id, server=vm1, wait=True,
-            timeout=self.create_floating_ip_timeout)
-        self.__logger.debug("floating_ip: %s", fip)
+        fip = None
+        if env.get('NO_TENANT_NETWORK').lower() != 'true':
+            fip = self.cloud.create_floating_ip(
+                network=self.ext_net.id, server=vm1, wait=True,
+                timeout=self.create_floating_ip_timeout)
+            self.__logger.debug("floating_ip: %s", fip)
         ssh = paramiko.SSHClient()
         ssh.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
         for loop in range(self.ssh_connect_loops):
@@ -425,7 +431,7 @@ class SingleVm1(VmReady1):
                 p_console = self.cloud.get_server_console(vm1)
                 self.__logger.debug("vm console: \n%s", p_console)
                 ssh.connect(
-                    fip.floating_ip_address,
+                    fip.floating_ip_address if fip else vm1.public_v4,
                     username=getattr(
                         config.CONF,
                         '{}_image_user'.format(self.case_name), self.username),
@@ -438,7 +444,7 @@ class SingleVm1(VmReady1):
             except Exception as exc:  # pylint: disable=broad-except
                 self.__logger.debug(
                     "try %s: cannot connect to %s: %s", loop + 1,
-                    fip.floating_ip_address, exc)
+                    fip.floating_ip_address if fip else vm1.public_v4, exc)
                 time.sleep(9)
         else:
             self.__logger.error(
@@ -454,8 +460,8 @@ class SingleVm1(VmReady1):
         Returns: echo exit codes
         """
         (_, stdout, stderr) = self.ssh.exec_command('echo Hello World')
-        self.__logger.debug("output:\n%s", stdout.read())
-        self.__logger.debug("error:\n%s", stderr.read())
+        self.__logger.debug("output:\n%s", stdout.read().decode("utf-8"))
+        self.__logger.debug("error:\n%s", stderr.read().decode("utf-8"))
         return stdout.channel.recv_exit_status()
 
     def run(self, **kwargs):
@@ -480,10 +486,13 @@ class SingleVm1(VmReady1):
             self.prepare()
             self.sshvm = self.boot_vm(
                 key_name=self.keypair.id, security_groups=[self.sec.id])
-            (self.fip, self.ssh) = self.connect(self.sshvm)
-            if not self.execute():
-                self.result = 100
-                status = testcase.TestCase.EX_OK
+            if self.check_regex_in_console(
+                    self.sshvm.name, regex=self.check_console_regex,
+                    loop=self.check_console_loop):
+                (self.fip, self.ssh) = self.connect(self.sshvm)
+                if not self.execute():
+                    self.result = 100
+                    status = testcase.TestCase.EX_OK
         except Exception:  # pylint: disable=broad-except
             self.__logger.exception('Cannot run %s', self.case_name)
         finally: