X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fopnfv_tests%2Fopenstack%2Fvping%2Fvping_ssh.py;h=1a04ad023eff2743803cdc8ec0e92514f2e5deb4;hb=a691a8c2868d3f8af531e0bff513023c3a704aaf;hp=1f663307cfbc9880a3e3cd555c68c2f40ba08d9c;hpb=b04150dda0678772a6a42da8d7878deb4ddcd551;p=functest.git diff --git a/functest/opnfv_tests/openstack/vping/vping_ssh.py b/functest/opnfv_tests/openstack/vping/vping_ssh.py old mode 100755 new mode 100644 index 1f663307c..1a04ad023 --- a/functest/opnfv_tests/openstack/vping/vping_ssh.py +++ b/functest/opnfv_tests/openstack/vping/vping_ssh.py @@ -7,34 +7,41 @@ # # http://www.apache.org/licenses/LICENSE-2.0 -import argparse -import pkg_resources -from scp import SCPClient -import sys + +"""vPingSSH testcase.""" + +# This 1st import is here simply for pep8 as the 'os' package import appears +# to be required for mock and the unit tests will fail without it +import os # noqa # pylint: disable=unused-import import time +from scp import SCPClient +import pkg_resources + +from functest.core.testcase import TestCase +from functest.energy import energy +from functest.opnfv_tests.openstack.vping import vping_base +from functest.utils.constants import CONST from snaps.openstack.create_instance import FloatingIpSettings, \ VmInstanceSettings + from snaps.openstack.create_keypairs import KeypairSettings from snaps.openstack.create_network import PortSettings -from snaps.openstack.create_router import RouterSettings from snaps.openstack.create_security_group import Direction, Protocol, \ SecurityGroupSettings, SecurityGroupRuleSettings from snaps.openstack.utils import deploy_utils -from functest.core.testcase import TestCase -from functest.opnfv_tests.openstack.snaps import snaps_utils -from functest.utils.constants import CONST -import vping_base - class VPingSSH(vping_base.VPingBase): """ + VPingSSH testcase implementation. + Class to execute the vPing test using a Floating IP to connect to one VM to issue the ping command to the second """ def __init__(self, **kwargs): + """Initialize testcase.""" if "case_name" not in kwargs: kwargs["case_name"] = "vping_ssh" super(VPingSSH, self).__init__(**kwargs) @@ -42,15 +49,14 @@ class VPingSSH(vping_base.VPingBase): self.kp_name = CONST.__getattribute__('vping_keypair_name') + self.guid self.kp_priv_file = CONST.__getattribute__('vping_keypair_priv_file') self.kp_pub_file = CONST.__getattribute__('vping_keypair_pub_file') - self.router_name =\ - CONST.__getattribute__('vping_router_name') + self.guid self.sg_name = CONST.__getattribute__('vping_sg_name') + self.guid self.sg_desc = CONST.__getattribute__('vping_sg_desc') - self.ext_net_name = snaps_utils.get_ext_net_name(self.os_creds) - + @energy.enable_recording def run(self): """ + Excecute VPingSSH testcase. + Sets up the OpenStack keypair, router, security group, and VM instance objects then validates the ping. :return: the exit code from the super.execute() method @@ -58,7 +64,8 @@ class VPingSSH(vping_base.VPingBase): try: super(VPingSSH, self).run() - self.logger.info("Creating keypair with name: '%s'" % self.kp_name) + log = "Creating keypair with name: '%s'" % self.kp_name + self.logger.info(log) kp_creator = deploy_utils.create_keypair( self.os_creds, KeypairSettings(name=self.kp_name, @@ -66,19 +73,6 @@ class VPingSSH(vping_base.VPingBase): public_filepath=self.kp_pub_file)) self.creators.append(kp_creator) - # Creating router to external network - self.logger.info("Creating router with name: '%s'" - % self.router_name) - net_set = self.network_creator.network_settings - sub_set = [net_set.subnet_settings[0].name] - router_creator = deploy_utils.create_router( - self.os_creds, - RouterSettings( - name=self.router_name, - external_gateway=self.ext_net_name, - internal_subnets=sub_set)) - self.creators.append(router_creator) - # Creating Instance 1 port1_settings = PortSettings( name=self.vm1_name + '-vPingPort', @@ -90,9 +84,9 @@ class VPingSSH(vping_base.VPingBase): ssh_connect_timeout=self.vm_ssh_connect_timeout, port_settings=[port1_settings]) - self.logger.info( - "Creating VM 1 instance with name: '%s'" - % instance1_settings.name) + log = ("Creating VM 1 instance with name: '%s'" + % instance1_settings.name) + self.logger.info(log) self.vm1_creator = deploy_utils.create_vm_instance( self.os_creds, instance1_settings, @@ -117,11 +111,11 @@ class VPingSSH(vping_base.VPingBase): floating_ip_settings=[FloatingIpSettings( name=self.vm2_name + '-FIPName', port_name=port2_settings.name, - router_name=router_creator.router_settings.name)]) + router_name=self.router_creator.router_settings.name)]) - self.logger.info( - "Creating VM 2 instance with name: '%s'" - % instance2_settings.name) + log = ("Creating VM 2 instance with name: '%s'" + % instance2_settings.name) + self.logger.info(log) self.vm2_creator = deploy_utils.create_vm_instance( self.os_creds, instance2_settings, @@ -130,26 +124,30 @@ class VPingSSH(vping_base.VPingBase): self.creators.append(self.vm2_creator) return self._execute() - except Exception as e: - self.logger.error('Unexpected error running test - ' + e.message) + except Exception as exc: # pylint: disable=broad-except + self.logger.error('Unexpected error running test - ' + exc.message) return TestCase.EX_RUN_ERROR finally: self._cleanup() def _do_vping(self, vm_creator, test_ip): """ + Execute ping command. + Override from super """ if vm_creator.vm_ssh_active(block=True): ssh = vm_creator.ssh_client() - if not self.__transfer_ping_script(ssh): + if not self._transfer_ping_script(ssh): return TestCase.EX_RUN_ERROR - return self.__do_vping_ssh(ssh, test_ip) + return self._do_vping_ssh(ssh, test_ip) else: - return -1 + return TestCase.EX_RUN_ERROR - def __transfer_ping_script(self, ssh): + def _transfer_ping_script(self, ssh): """ + Transfert vping script to VM. + Uses SCP to copy the ping script via the SSH client :param ssh: the SSH client :return: @@ -157,22 +155,25 @@ class VPingSSH(vping_base.VPingBase): self.logger.info("Trying to transfer ping.sh") scp = SCPClient(ssh.get_transport()) ping_script = pkg_resources.resource_filename( - 'functest', 'opnfv_tests/openstack/vping/ping.sh') + 'functest.opnfv_tests.openstack.vping', 'ping.sh') try: scp.put(ping_script, "~/") - except: - self.logger.error("Cannot SCP the file '%s'" % ping_script) + except Exception: + self.logger.error("Cannot SCP the file '%s'", ping_script) return False cmd = 'chmod 755 ~/ping.sh' + # pylint: disable=unused-variable (stdin, stdout, stderr) = ssh.exec_command(cmd) for line in stdout.readlines(): print line return True - def __do_vping_ssh(self, ssh, test_ip): + def _do_vping_ssh(self, ssh, test_ip): """ + Execute ping command via SSH. + Pings the test_ip via the SSH client :param ssh: the SSH client used to issue the ping command :param test_ip: the IP for the ping command to use @@ -187,7 +188,7 @@ class VPingSSH(vping_base.VPingBase): while True: time.sleep(1) - (stdin, stdout, stderr) = ssh.exec_command(cmd) + (_, stdout, _) = ssh.exec_command(cmd) output = stdout.readlines() for line in output: @@ -203,12 +204,15 @@ class VPingSSH(vping_base.VPingBase): break if flag: break - self.logger.debug("Pinging %s. Waiting for response..." % test_ip) + log = "Pinging %s. Waiting for response..." % test_ip + self.logger.debug(log) sec += 1 return exit_code def __create_security_group(self): """ + Configure OpenStack security groups. + Configures and deploys an OpenStack security group object :return: the creator object """ @@ -228,18 +232,10 @@ class VPingSSH(vping_base.VPingBase): protocol=Protocol.tcp, port_range_min=22, port_range_max=22)) - self.logger.info("Security group with name: '%s'" % self.sg_name) + log = "Security group with name: '%s'" % self.sg_name + self.logger.info(log) return deploy_utils.create_security_group(self.os_creds, SecurityGroupSettings( name=self.sg_name, description=self.sg_desc, rule_settings=sg_rules)) - - -if __name__ == '__main__': - args_parser = argparse.ArgumentParser() - args_parser.add_argument("-r", "--report", - help="Create json result file", - action="store_true") - args = vars(args_parser.parse_args()) - sys.exit(vping_base.VPingMain(VPingSSH).main(**args))