Пример #1
0
def nfs_disconnected(params):
    """
    Drop nfs connection by iptables
    """
    service_mgr = avocado_service.ServiceManager()
    service_mgr.start('iptables')
    Iptables.setup_or_cleanup_iptables_rules([params.get("iptable_rule")])
Пример #2
0
def nfs_disconnected(params):
    """
    Drop nfs connection by iptables
    """
    service_mgr = avocado_service.ServiceManager()
    service_mgr.start('iptables')
    Iptables.setup_or_cleanup_iptables_rules([params.get("iptable_rule")])
Пример #3
0
 def recover(self, params=None):
     """
     Recover env
     """
     Iptables.setup_or_cleanup_iptables_rules([self.iptable_rule], cleanup=True)
     if self.vm.is_alive():
         self.vm.destroy()
     self.vmxml_backup.sync()
     utils_test.libvirt.setup_or_cleanup_nfs(
         is_setup=False,
         is_mount=False,
         restore_selinux=self.nfs_res["selinux_status_bak"])
     process.run("dmesg -c")
Пример #4
0
 def recover(self, params=None):
     """
     Recover env
     """
     Iptables.setup_or_cleanup_iptables_rules([self.iptable_rule], cleanup=True)
     if self.vm.is_alive():
         self.vm.destroy()
     self.vmxml_backup.sync()
     utils_test.libvirt.setup_or_cleanup_nfs(
         is_setup=False,
         is_mount=False,
         restore_selinux=self.nfs_res["selinux_status_bak"])
     process.run("dmesg -c")
Пример #5
0
    def result_confirm(self, params):
        """
        Confirm the sign of nfs not response in dmesg, thread finished before
        timeout
        """
        self.td.join()

        def check_nfs_response():
            """
            Check if there is 'nfs not responding' in dmesg.
            """
            response = self.nfs_no_response_sign in process.run('dmesg').stdout_text
            if response:
                logging.debug(self.nfs_no_response_sign)
            return response

        Iptables.setup_or_cleanup_iptables_rules([self.iptable_rule], cleanup=True)
        if self.operation == "save":
            if not check_nfs_response():
                self.test.fail("No nfs not response sign in dmesg")
Пример #6
0
    def result_confirm(self, params):
        """
        Confirm the sign of nfs not response in dmesg, thread finished before
        timeout
        """
        self.td.join()

        def check_nfs_response():
            """
            Check if there is 'nfs not responding' in dmesg.
            """
            response = self.nfs_no_response_sign in process.run('dmesg').stdout
            if response:
                logging.debug(self.nfs_no_response_sign)
            return response

        Iptables.setup_or_cleanup_iptables_rules([self.iptable_rule], cleanup=True)
        if self.operation == "save":
            if not check_nfs_response():
                self.test.fail("No nfs not response sign in dmesg")
Пример #7
0
 def firewall_to_permit_nfs(self):
     """
     Method to configure firewall to permit NFS to be mounted
     from remote host
     """
     # Check firewall in host permit nfs service to mount from remote server
     try:
         firewalld = service.Factory.create_service("firewalld")
         if not firewalld.status():
             firewalld.start()
         firewall_cmd = "firewall-cmd --list-all | grep services:"
         try:
             ret = process.run(firewall_cmd, shell=True)
             if not ret.exit_status:
                 firewall_services = ret.stdout_text.split(
                     ':')[1].strip().split(' ')
                 if 'nfs' not in firewall_services:
                     service_cmd = "firewall-cmd --permanent --zone=public "
                     service_cmd += "--add-service=nfs"
                     ret = process.run(service_cmd, shell=True)
                     if ret.exit_status:
                         logging.error(
                             "nfs service not added in firewall: "
                             "%s", ret.stdout_text)
                     else:
                         logging.debug("nfs service added to firewall "
                                       "sucessfully")
                         firewalld.restart()
                 else:
                     logging.debug(
                         "nfs service already permitted by firewall")
         except process.CmdError:
             # For RHEL 6 based system firewall-cmd is not available
             logging.debug("Using iptables to permit NFS service")
             nfs_ports = []
             rule_list = []
             nfsd = service.Factory.create_service("nfs")
             rpcd = service.Factory.create_service("rpcbind")
             iptables = service.Factory.create_service("iptables")
             nfs_sysconfig = self.params.get("nfs_sysconfig_path",
                                             "/etc/sysconfig/nfs")
             tcp_port = self.params.get("nfs_tcp_port", "32803")
             udp_port = self.params.get("nfs_udp_port", "32769")
             mountd_port = self.params.get("nfs_mountd_port", "892")
             subnet_mask = self.params.get("priv_subnet", "192.168.2.0/24")
             nfs_ports.append("LOCKD_TCPPORT=%s" % tcp_port)
             nfs_ports.append("LOCKD_UDPPORT=%s" % udp_port)
             nfs_ports.append("MOUNTD_PORT=%s" % mountd_port)
             cmd_output = process.run("cat %s" % nfs_sysconfig,
                                      shell=True).stdout_text
             exist_ports = cmd_output.strip().split('\n')
             # check if the ports are already configured, if not then add it
             for each_port in nfs_ports:
                 if each_port not in exist_ports:
                     process.run("echo '%s' >> %s" %
                                 (each_port, nfs_sysconfig),
                                 shell=True)
             rpcd.restart()
             nfsd.restart()
             rule_temp = "INPUT -m state --state NEW -p %s -m multiport "
             rule_temp += "--dport 111,892,2049,%s -s %s -j ACCEPT"
             rule = rule_temp % ("tcp", tcp_port, subnet_mask)
             rule_list.append(rule)
             rule = rule_temp % ("udp", udp_port, subnet_mask)
             rule_list.append(rule)
             Iptables.setup_or_cleanup_iptables_rules(rule_list)
             iptables.restart()
     except Exception as info:
         logging.error("Firewall setting to add nfs service "
                       "failed: %s", info)
Пример #8
0
 def firewall_to_permit_nfs(self):
     """
     Method to configure firewall to permit NFS to be mounted
     from remote host
     """
     # Check firewall in host permit nfs service to mount from remote server
     try:
         firewalld = service.Factory.create_service("firewalld")
         if not firewalld.status():
             firewalld.start()
         firewall_cmd = "firewall-cmd --list-all | grep services:"
         try:
             ret = process.run(firewall_cmd, shell=True)
             if not ret.exit_status:
                 firewall_services = results_stdout_52lts(ret).split(':')[1].strip().split(' ')
                 if 'nfs' not in firewall_services:
                     service_cmd = "firewall-cmd --permanent --zone=public "
                     service_cmd += "--add-service=nfs"
                     ret = process.run(service_cmd, shell=True)
                     if ret.exit_status:
                         logging.error("nfs service not added in firewall: "
                                       "%s", results_stdout_52lts(ret))
                     else:
                         logging.debug("nfs service added to firewall "
                                       "sucessfully")
                         firewalld.restart()
                 else:
                     logging.debug("nfs service already permitted by firewall")
         except process.CmdError:
             # For RHEL 6 based system firewall-cmd is not available
             logging.debug("Using iptables to permit NFS service")
             nfs_ports = []
             rule_list = []
             nfsd = service.Factory.create_service("nfs")
             rpcd = service.Factory.create_service("rpcbind")
             iptables = service.Factory.create_service("iptables")
             nfs_sysconfig = self.params.get("nfs_sysconfig_path",
                                             "/etc/sysconfig/nfs")
             tcp_port = self.params.get("nfs_tcp_port", "32803")
             udp_port = self.params.get("nfs_udp_port", "32769")
             mountd_port = self.params.get("nfs_mountd_port", "892")
             subnet_mask = self.params.get("priv_subnet", "192.168.2.0/24")
             nfs_ports.append("LOCKD_TCPPORT=%s" % tcp_port)
             nfs_ports.append("LOCKD_UDPPORT=%s" % udp_port)
             nfs_ports.append("MOUNTD_PORT=%s" % mountd_port)
             cmd_output = decode_to_text(process.system_output(
                 "cat %s" % nfs_sysconfig, shell=True))
             exist_ports = cmd_output.strip().split('\n')
             # check if the ports are already configured, if not then add it
             for each_port in nfs_ports:
                 if each_port not in exist_ports:
                     process.run("echo '%s' >> %s" %
                                 (each_port, nfs_sysconfig), shell=True)
             rpcd.restart()
             nfsd.restart()
             rule_temp = "INPUT -m state --state NEW -p %s -m multiport "
             rule_temp += "--dport 111,892,2049,%s -s %s -j ACCEPT"
             rule = rule_temp % ("tcp", tcp_port, subnet_mask)
             rule_list.append(rule)
             rule = rule_temp % ("udp", udp_port, subnet_mask)
             rule_list.append(rule)
             Iptables.setup_or_cleanup_iptables_rules(rule_list)
             iptables.restart()
     except Exception as info:
         logging.error("Firewall setting to add nfs service "
                       "failed: %s", info)
Пример #9
0
def run(test, params, env):
    """
    :param test:   kvm test object
    :param params: Dictionary with the test parameters
    :param env:    Dictionary with test environment.
    The test will
    1. Create 'n' uperf server-client pairs,
    2. Configure iptables in guest and install uperf
    3. Kick start uperf run, wait for duration [customized given in uperf profile]
    4. After run, test will check for errors and make sure all guests are reachable.
    5. Cleanup temp files and iptable rules added before
    """

    stress_duration = int(params.get("stress_duration", "20"))
    ip_rule = params.get("ip_rule", "")
    stress_type = params.get("stress_type", "")
    need_profile = int(params.get("need_profile", 0))
    server_cmd = params.get("%s_server_cmd" % stress_type)
    client_cmd = params.get("%s_client_cmd" % stress_type)
    client_vms = []
    server_vms = []
    error = 0
    vms = env.get_all_vms()

    if (need_profile):
        profile = params.get("client_profile_%s" % stress_type)
        profile = os.path.join(data_dir.get_root_dir(), profile)
        profile_pattren = params.get("profile_pattren", "").split()

    for index, vm in enumerate(vms):
        if index % 2 != 0:
            # Process for client
            client_vms.append(vm)
        else:
            # Process for server
            server_vms.append(vm)
    pair_vms = zip(server_vms, client_vms)

    if len(server_vms) != len(client_vms):
        test.cancel("This test requires server and client vms in 1:1 ratio")

    if stress_type == "uperf":
        protocol = params.get("%s_protocol" % stress_type, "tcp")
        nthreads = params.get("nthreads", "32")
        client_cmd = client_cmd % os.path.basename(profile)
        if not profile.endswith(".xml"):
            logging.debug("Error: profile should be an xml: %s", profile)
            test.cancel("%s profile not valid", stress_type)
        profile_values = [nthreads, str(stress_duration), protocol]
        if len(profile_pattren) != len(profile_values):
            test.cancel("Profile pattrens not matching values passed: fix the cfg file with right pattren")
        profile_pattren.append('serverip')
        pat_repl = dict(zip(profile_pattren, profile_values))
    elif stress_type == "netperf":
        ports = params.get("ports", "16604")
        test_protocol = params.get("test_protocols", "TCP_STREAM")
        server_cmd = server_cmd.format(ports)
        client_cmd = client_cmd.format("{0}", ports, stress_duration, test_protocol)
    else:
        raise NotImplementedError

    for server_vm, client_vm in pair_vms:
        try:
            params['stress_cmds_%s' % stress_type] = server_cmd
            stress_server = utils_test.VMStress(server_vm, stress_type, params)
            params['server_pwd'] = params.get("password")
            # wait so that guests get ip address, else get_address will fail
            client_vm.wait_for_login().close()
            if ip_rule:
                for vm_ip in [server_vm.get_address(), client_vm.get_address()]:
                    params['server_ip'] = vm_ip
                    Iptables.setup_or_cleanup_iptables_rules(
                        [ip_rule], params=params, cleanup=False)
            stress_server.load_stress_tool()
            if need_profile:
                profile_backup = profile + '.backup'
                shutil.copy(profile, profile_backup)
                pat_repl.update({"serverip": str(server_vm.get_address())})
                utils_test.prepare_profile(test, profile, pat_repl)
                client_vm.copy_files_to(profile, "/home", timeout=60)
                shutil.copy(profile_backup, profile)
                os.remove(profile_backup)
            else:
                client_cmd = client_cmd.format(str(server_vm.get_address()))
            params['stress_cmds_%s' % stress_type] = client_cmd
            stress_client = utils_test.VMStress(client_vm, stress_type, params)
            stress_client.load_stress_tool()
        except exceptions.TestError as err_msg:
            error = 1
            logging.error(err_msg)

    if stress_duration and not error:
        time.sleep(stress_duration)

    for vm in vms:
        try:
            s_ping, o_ping = utils_test.ping(vm.get_address(), count=10, timeout=20)
            logging.info(o_ping)
            if s_ping != 0:
                error = 1
                logging.error("%s seem to have gone out of network", vm.name)
            else:
                stress = utils_test.VMStress(vm, stress_type, params)
                stress.unload_stress()
                if ip_rule:
                    params['server_ip'] = vm.get_address()
                    Iptables.setup_or_cleanup_iptables_rules([ip_rule], params=params, cleanup=True)
                stress.clean()
                vm.verify_dmesg()
        except exceptions.TestError as err_msg:
            error = 1
            logging.error(err_msg)
        finally:
            if vm.exists() and vm.is_persistent():
                vm.undefine()
    if error:
        test.fail("%s run failed: see error messages above" % stress_type)
Пример #10
0
def run(test, params, env):
    """
    :param test:   kvm test object
    :param params: Dictionary with the test parameters
    :param env:    Dictionary with test environment.
    The test will
    1. Create 'n' uperf server-client pairs,
    2. Configure iptables in guest and install uperf
    3. Kick start uperf run, wait for duration [customized given in uperf profile]
    4. After run, test will check for errors and make sure all guests are reachable.
    5. Cleanup temp files and iptable rules added before
    """

    stress_duration = int(params.get("stress_duration", "20"))
    ip_rule = params.get("ip_rule", "")
    stress_type = params.get("stress_type", "")
    need_profile = int(params.get("need_profile", 0))
    server_cmd = params.get("%s_server_cmd" % stress_type)
    client_cmd = params.get("%s_client_cmd" % stress_type)
    client_vms = []
    server_vms = []
    error = 0
    vms = env.get_all_vms()

    if (need_profile):
        profile = params.get("client_profile_%s" % stress_type)
        profile = os.path.join(data_dir.get_root_dir(), profile)
        profile_pattren = params.get("profile_pattren", "").split()

    for index, vm in enumerate(vms):
        if index % 2 != 0:
            # Process for client
            client_vms.append(vm)
        else:
            # Process for server
            server_vms.append(vm)
    pair_vms = zip(server_vms, client_vms)

    if len(server_vms) != len(client_vms):
        test.cancel("This test requires server and client vms in 1:1 ratio")

    if stress_type == "uperf":
        protocol = params.get("%s_protocol" % stress_type, "tcp")
        nthreads = params.get("nthreads", "32")
        client_cmd = client_cmd % os.path.basename(profile)
        if not profile.endswith(".xml"):
            logging.debug("Error: profile should be an xml: %s", profile)
            test.cancel("%s profile not valid", stress_type)
        profile_values = [nthreads, str(stress_duration), protocol]
        if len(profile_pattren) != len(profile_values):
            test.cancel(
                "Profile pattrens not matching values passed: fix the cfg file with right pattren"
            )
        profile_pattren.append('serverip')
        pat_repl = dict(zip(profile_pattren, profile_values))
    elif stress_type == "netperf":
        ports = params.get("ports", "16604")
        test_protocol = params.get("test_protocols", "TCP_STREAM")
        server_cmd = server_cmd.format(ports)
        client_cmd = client_cmd.format("{0}", ports, stress_duration,
                                       test_protocol)
    else:
        raise NotImplementedError

    for server_vm, client_vm in pair_vms:
        try:
            params['stress_cmds_%s' % stress_type] = server_cmd
            stress_server = utils_test.VMStress(server_vm, stress_type, params)
            params['server_pwd'] = params.get("password")
            # wait so that guests get ip address, else get_address will fail
            client_vm.wait_for_login().close()
            if ip_rule:
                for vm_ip in [
                        server_vm.get_address(),
                        client_vm.get_address()
                ]:
                    params['server_ip'] = vm_ip
                    Iptables.setup_or_cleanup_iptables_rules([ip_rule],
                                                             params=params,
                                                             cleanup=False)
            stress_server.load_stress_tool()
            if need_profile:
                profile_backup = profile + '.backup'
                shutil.copy(profile, profile_backup)
                pat_repl.update({"serverip": str(server_vm.get_address())})
                utils_test.prepare_profile(test, profile, pat_repl)
                client_vm.copy_files_to(profile, "/home", timeout=60)
                shutil.copy(profile_backup, profile)
                os.remove(profile_backup)
            else:
                client_cmd = client_cmd.format(str(server_vm.get_address()))
            params['stress_cmds_%s' % stress_type] = client_cmd
            stress_client = utils_test.VMStress(client_vm, stress_type, params)
            stress_client.load_stress_tool()
        except exceptions.TestError as err_msg:
            error = 1
            logging.error(err_msg)

    if stress_duration and not error:
        time.sleep(stress_duration)

    for vm in vms:
        try:
            s_ping, o_ping = utils_test.ping(vm.get_address(),
                                             count=10,
                                             timeout=20)
            logging.info(o_ping)
            if s_ping != 0:
                error = 1
                logging.error("%s seem to have gone out of network", vm.name)
            else:
                stress = utils_test.VMStress(vm, stress_type, params)
                stress.unload_stress()
                if ip_rule:
                    params['server_ip'] = vm.get_address()
                    Iptables.setup_or_cleanup_iptables_rules([ip_rule],
                                                             params=params,
                                                             cleanup=True)
                stress.clean()
                vm.verify_dmesg()
        except exceptions.TestError as err_msg:
            error = 1
            logging.error(err_msg)
        finally:
            if vm.exists() and vm.is_persistent():
                vm.undefine()
    if error:
        test.fail("%s run failed: see error messages above" % stress_type)