Ejemplo n.º 1
0
    def setUp(self):
        """
        Setup checks :
        0. Processor should be ppc64.
        1. Install perf package
        2. Check for hv_24x7/hv_gpci cpumask
        3. Offline the cpumask CPU and check cpumask moved to new CPU or not
        """
        smm = SoftwareManager()
        processor_type = genio.read_file("/proc/cpuinfo")

        detected_distro = distro.detect()
        # Offline cpu list during the test
        self.cpu_off = []

        if 'ppc64' not in detected_distro.arch:
            self.cancel("Processor is not PowerPC")
        for line in processor_type.splitlines():
            if 'revision' in line:
                self.rev = (line.split(':')[1])
                if '0080' not in self.rev:
                    self.cancel("Test is supported only on Power10")

        deps = ['gcc', 'make']
        if 'Ubuntu' in detected_distro.name:
            deps.extend(
                ['linux-tools-common',
                 'linux-tools-%s' % platform.uname()[2]])
        elif detected_distro.name in ['rhel', 'SuSE', 'fedora', 'centos']:
            deps.extend(['perf'])
        else:
            self.cancel("Install the package for perf supported by %s" %
                        detected_distro.name)
        for package in deps:
            if not smm.check_installed(package) and not smm.install(package):
                self.cancel('%s is needed for the test to be run' % package)

        hv24x7_present = False
        hvgpci_present = False
        self.hv24x7_cpumask = False
        self.hvpgci_cpumask = False

        hv24x7_present, self.hv24x7_cpumask = self._check_file("hv_24x7")
        hvgpci_present, self.hvpgci_cpumask = self._check_file("hv_gpci")

        # To proceed with the test we need either of hv_24x7 or hv_gpci
        if not (hv24x7_present and hvgpci_present):
            self.fail("hv_24x7 and hv_gpci both events not found")

        # Collect the cpu list
        self.online_cpus = cpu.online_list()
        self.log.info("Online CPU list: %s" % self.online_cpus)

        # Clear the dmesg to capture the delta at the end of the test.
        dmesg.clear_dmesg()
Ejemplo n.º 2
0
 def tearDown(self):
     """
     Cleanup of disk used to perform this test
     """
     if self.disk is not None:
         if self.fs_create:
             self.delete_fs(self.target)
         if self.lv_create:
             self.delete_lv()
         if self.raid_create:
             self.delete_raid()
     dmesg.clear_dmesg()
     if self.err_mesg:
         self.warn("test failed due to following errors %s" % self.err_mesg)
Ejemplo n.º 3
0
    def execute_test(self):
        self.log.info("============== Enabling livepatching ===============")
        dmesg.clear_dmesg()
        self.is_fail = 0
        self.run_cmd("insmod ./livepatch-sample.ko")
        if self.is_fail >= 1:
            self.fail("insmod livepatch-sample.ko failed")

        if "enabling patch" not in \
                self.run_cmd_out("dmesg |grep -i livepatch_sample"):
            self.fail("livepatch couldn't be enabled, "
                      "check dmesg for more information")

        """
        Execute /proc/cmdline, to check if livepatch works
        """
        if "this has been live patched" not \
                in genio.read_one_line("/proc/cmdline"):
            self.fail("livepatching unsuccessful, "
                      "check dmesg for more information")

        self.log.info("=========== Disabling livepatching ===============")
        genio.write_one_line(
            "/sys/kernel/livepatch/livepatch_sample/enabled", "0")
        if "0" not in genio.read_one_line("/sys/kernel/livepatch/"
                                          "livepatch_sample/enabled"):
            self.fail("Unable to disable livepatch "
                      "for livepatch_sample module")

        if "unpatching transition" not in \
                self.run_cmd_out("dmesg |grep -i livepatch_sample"):
            self.fail(
                "livepatch couldn't be disabled, check dmesg "
                "for more information")

        if "this has been live patched" in \
                genio.read_one_line("/proc/cmdline"):
            self.fail(
                "livepatching disabling unsuccessful, check dmesg "
                "for more information")

        """
        Wait for 3 minutes before trying to remove the livepatching module
        """
        time.sleep(60 * 3)
        self.run_cmd("rmmod livepatch-sample")
        if self.is_fail >= 1:
            self.log.info("rmmod livepatch-sample.ko failed, "
                          "try removing it manual after sometime")
Ejemplo n.º 4
0
 def tearDown(self):
     '''
     Cleanup of disk used to perform this test
     '''
     if os.path.exists(self.fio_file):
         os.remove(self.fio_file)
     if self.fs_create:
         self.delete_fs(self.target)
     if self.lv_create:
         self.delete_lv()
     if self.raid_create:
         self.delete_raid()
     dmesg.clear_dmesg()
     if self.err_mesg:
         self.warn("test failed due to following errors %s" % self.err_mesg)
Ejemplo n.º 5
0
 def test_fsstress_run(self):
     '''
     Downloads LTP, compiles, installs and runs filesystem
     tests on a user specified disk
     '''
     arg = (" -d %s -n %s -p %s -r -l %s"
            % (self.dir, self.n_val, self.p_val, self.fsstress_count))
     self.log.info("Args = %s" % arg)
     dmesg.clear_dmesg()
     cmd = './fsstress %s' % arg
     process.run(cmd, ignore_status=True)
     cmd = "dmesg --level=err"
     if process.system_output(cmd, shell=True,
                              ignore_status=True, sudo=False):
         self.fail("FSSTRESS test failed")
Ejemplo n.º 6
0
 def basic_eeh(self, func, pci_class_name, pci_interface,
               pci_mem_addr, pci_mask, add_cmd):
     """
     Injects Error, and checks for PE recovery
     returns True, if recovery is success, else Flase
     """
     dmesg.clear_dmesg()
     if self.is_baremetal():
         return_code = self.error_inject(func, '', '', self.mem_addr,
                                         self.mask, '', self.addr,
                                         self.err, self.phb)
     else:
         return_code = self.error_inject(func, pci_class_name,
                                         pci_interface, pci_mem_addr,
                                         pci_mask, add_cmd, '', '', '')
     if return_code != EEH_HIT:
         self.log.info("Skipping verification, as command failed")
     if not self.check_eeh_hit():
         self.log.info("PE %s EEH hit failed" % self.pci_device)
         return EEH_MISS
     else:
         self.log.info("PE %s EEH hit success" % self.pci_device)
         return EEH_HIT
Ejemplo n.º 7
0
    def setUp(self):
        """
        Setup checks :
        0. Processor should be ppc64.
        1. Install perf package
        2. Check for metric/metric group
        3. When found metric/metric group run all the events
        """
        smm = SoftwareManager()

        detected_distro = distro.detect()
        if 'ppc64' not in detected_distro.arch:
            self.cancel("Processor is not PowerPC")

        deps = ['gcc', 'make']
        if 'Ubuntu' in detected_distro.name:
            deps.extend(
                ['linux-tools-common',
                 'linux-tools-%s' % platform.uname()[2]])
        elif detected_distro.name in ['rhel', 'SuSE', 'fedora', 'centos']:
            deps.extend(['perf', 'numactl'])
        else:
            self.cancel("Install the package for perf supported by %s" %
                        detected_distro.name)
        for package in deps:
            if not smm.check_installed(package) and not smm.install(package):
                self.cancel('%s is needed for the test to be run' % package)

        # Collect all metric events and metric group events
        self.list_of_metric_events = []
        self._create_all_metric_events('metric')
        self._create_all_metric_events('metricgroup')
        if not self.list_of_metric_events:
            self.cancel("perf tool Metric events not found.")

        # Clear the dmesg to capture the delta at the end of the test.
        dmesg.clear_dmesg()
 def setUp(self):
     '''
     set up required packages and gather necessary test inputs
     '''
     self.install_packages()
     self.hmc_ip = self.get_mcp_component("HMCIPAddr")
     if not self.hmc_ip:
         self.cancel("HMC IP not got")
     self.hmc_pwd = self.params.get("hmc_pwd", '*', default=None)
     self.hmc_username = self.params.get("hmc_username", '*', default=None)
     self.lpar = self.get_partition_name("Partition Name")
     if not self.lpar:
         self.cancel("LPAR Name not got from lparstat command")
     for root, dirct, files in os.walk("/root/.ssh"):
         for file in files:
             if file.startswith("avocado-master-root"):
                 path = os.path.join(root, file)
                 os.remove(path)
     self.session_hmc = Session(self.hmc_ip,
                                user=self.hmc_username,
                                password=self.hmc_pwd)
     if not self.session_hmc.connect():
         self.cancel("failed connecting to HMC")
     cmd = 'lssyscfg -r sys  -F name'
     output = self.session_hmc.cmd(cmd)
     self.server = ''
     for line in output.stdout_text.splitlines():
         if line in self.lpar:
             self.server = line
             break
     if not self.server:
         self.cancel("Managed System not got")
     self.slot_num = self.params.get("slot_num", '*', default=None)
     self.slot_num = self.slot_num.split(' ')
     for slot in self.slot_num:
         if int(slot) < 3 or int(slot) > 2999:
             self.cancel("Slot invalid. Valid range: 3 - 2999")
     self.vios_name = self.params.get("vios_names", '*',
                                      default=None).split(' ')
     self.sriov_port = self.params.get("sriov_ports", '*',
                                       default=None).split(' ')
     self.backing_adapter = self.params.get("sriov_adapters",
                                            '*',
                                            default=None).split(' ')
     if len(self.sriov_port) != len(self.backing_adapter):
         self.cancel('Backing Device counts and port counts differ')
     if len(self.vios_name) != len(self.backing_adapter):
         self.cancel('Backing Device counts and vios name counts differ')
     self.backingdev_count = len(self.backing_adapter)
     self.bandwidth = self.params.get("bandwidth", '*', default=None)
     self.vnic_priority = self.params.get("priority", '*', default=None)
     if not self.vnic_priority:
         self.vnic_priority = [50] * len(self.backing_adapter)
     else:
         self.vnic_priority = self.vnic_priority.split(' ')
     if len(self.vnic_priority) != len(self.backing_adapter):
         self.cancel('Backing Device counts and priority counts differ')
     self.auto_failover = self.params.get("auto_failover",
                                          '*',
                                          default=None)
     if self.auto_failover not in ['0', '1']:
         self.auto_failover = '1'
     self.vios_ip = self.params.get('vios_ip', '*', default=None)
     self.vios_user = self.params.get('vios_username', '*', default=None)
     self.vios_pwd = self.params.get('vios_pwd', '*', default=None)
     self.count = int(self.params.get('vnic_test_count', default="1"))
     self.num_of_dlpar = int(self.params.get("num_of_dlpar", default='1'))
     self.device_ip = self.params.get('device_ip', '*',
                                      default=None).split(' ')
     self.mac_id = self.params.get('mac_id',
                                   default="02:03:03:03:03:01").split(' ')
     self.mac_id = [mac.replace(':', '') for mac in self.mac_id]
     self.netmask = self.params.get('netmasks', '*',
                                    default=None).split(' ')
     self.peer_ip = self.params.get('peer_ip', default=None).split(' ')
     dmesg.clear_dmesg()
     self.session_hmc.cmd("uname -a")
     cmd = 'lssyscfg -m ' + self.server + \
           ' -r lpar --filter lpar_names=' + self.lpar + \
           ' -F lpar_id'
     self.lpar_id = self.session_hmc.cmd(cmd).stdout_text.split()[0]
     self.vios_id = []
     for vios_name in self.vios_name:
         cmd = 'lssyscfg -m ' + self.server + \
               ' -r lpar --filter lpar_names=' + vios_name + \
               ' -F lpar_id'
         self.vios_id.append(
             self.session_hmc.cmd(cmd).stdout_text.split()[0])
     cmd = 'lshwres -m %s -r sriov --rsubtype adapter -F \
           phys_loc:adapter_id' % self.server
     adapter_id_output = self.session_hmc.cmd(cmd).stdout_text
     self.backing_adapter_id = []
     for backing_adapter in self.backing_adapter:
         for line in adapter_id_output.splitlines():
             if str(backing_adapter) in line:
                 self.backing_adapter_id.append(line.split(':')[1])
     if not self.backing_adapter_id:
         self.cancel("SRIOV adapter provided was not found.")
     self.rsct_service_start()
     if len(self.slot_num) > 1:
         if 'backing' in str(self.name.name) or \
            'failover' in str(self.name.name):
             self.cancel("this test is not needed")
     self.local = LocalHost()
     cmd = "echo 'module ibmvnic +p; func send_subcrq -p' > /sys/kernel/debug/dynamic_debug/control"
     result = process.run(cmd, shell=True, ignore_status=True)
     if result.exit_status:
         self.fail("failed to enable debug mode")
Ejemplo n.º 9
0
    def setUp(self):
        '''
        set up required packages and gather necessary test inputs
        '''
        self.install_packages()
        self.rsct_service_start()

        self.hmc_ip = self.get_mcp_component("HMCIPAddr")
        if not self.hmc_ip:
            self.cancel("HMC IP not got from lsrsrc command")
        self.hmc_user = self.params.get("hmc_username", default='hscroot')
        self.hmc_pwd = self.params.get("hmc_pwd", '*', default='********')
        self.options = self.params.get("options", default='')
        self.net_device_type = self.params.get("net_device_type", default='')
        self.lpar = self.get_partition_name("Partition Name")
        if not self.lpar:
            self.cancel("LPAR Name not got from lparstat command")
        self.lpar_ip = self.get_mcp_component("MNName")
        if not self.lpar_ip:
            self.cancel("LPAR IP not got from lsrsrc command")
        self.session = Session(self.hmc_ip,
                               user=self.hmc_user,
                               password=self.hmc_pwd)
        if not self.session.connect():
            self.cancel("failed connecting to HMC")
        cmd = 'lssyscfg -r sys -F name'
        output = self.session.cmd(cmd)
        self.server = ''
        for line in output.stdout_text.splitlines():
            if line in self.lpar:
                self.server = line
                break
        if not self.server:
            self.cancel("Managed System not got")

        self.remote_server = self.params.get("remote_server", default=None)
        if not self.remote_server:
            self.cancel("No Remote Server specified for LPM")

        if 'back' in str(self.name.name):
            current_server = self.remote_server
        else:
            current_server = self.server

        if not self.is_lpar_in_server(current_server, self.lpar):
            self.cancel("%s not in %s" % (self.lpar, current_server))

        if 'vnic' in self.net_device_type:
            self.slot_num = str(self.params.get("slot_num", '*', default=3))
            if int(self.slot_num) < 3 or int(self.slot_num) > 2999:
                self.cancel("Slot invalid. Valid range: 3 - 2999")

            self.bandwidth = str(self.params.get("bandwidth", default=2))

            self.vios_name = self.params.get("vios_names", '*',
                                             default=None).split(' ')
            self.vios_id = []
            for vios_name in self.vios_name:
                self.vios_id.append(self.get_lpar_id(self.server, vios_name))
            self.remote_vios_name = self.params.get("remote_vios_names",
                                                    '*',
                                                    default=None).split(' ')
            self.remote_vios_id = []
            for vios_name in self.remote_vios_name:
                self.remote_vios_id.append(
                    self.get_lpar_id(self.remote_server, vios_name))

            for vios in self.vios_id:
                self.set_msp(self.server, vios)
            for vios in self.remote_vios_id:
                self.set_msp(self.remote_server, vios)

            self.adapters = self.params.get("sriov_adapters",
                                            default='').split(' ')
            self.remote_adapters = self.params.get("remote_sriov_adapters",
                                                   default='').split(' ')
            self.ports = self.params.get("sriov_ports", default='').split(' ')
            self.remote_ports = self.params.get("remote_sriov_ports",
                                                default='').split(' ')

            self.adapter_id = []
            for adapter in self.adapters:
                self.adapter_id.append(
                    self.get_adapter_id(self.server, adapter))
            self.remote_adapter_id = []
            for adapter in self.remote_adapters:
                self.remote_adapter_id.append(
                    self.get_adapter_id(self.remote_server, adapter))
        dmesg.clear_dmesg()
Ejemplo n.º 10
0
    def setUp(self):
        """
        Build tiobench.
        Source:
        https://github.com/mkuoppal/tiobench.git
        """
        self.fstype = self.params.get('fs', default='')
        self.fs_create = False
        lv_needed = self.params.get('lv', default=False)
        self.lv_create = False
        raid_needed = self.params.get('raid', default=False)
        self.raid_create = False
        self.disk = self.params.get('disk', default=None)
        self.dir = self.params.get('dir', default="/mnt")
        self.raid_name = '/dev/md/sraid'
        self.vgname = 'avocado_vg'
        self.lvname = 'avocado_lv'
        self.err_mesg = []
        smm = SoftwareManager()
        packages = ['gcc', 'mdadm']
        if self.fstype == 'btrfs':
            ver = int(distro.detect().version)
            rel = int(distro.detect().release)
            if distro.detect().name == 'rhel':
                if (ver == 7 and rel >= 4) or ver > 7:
                    self.cancel("btrfs is not supported with RHEL 7.4 onwards")
            if distro.detect().name == 'Ubuntu':
                packages.extend(['btrfs-tools'])
        for package in packages:
            if not smm.check_installed(package) and not smm.install(package):
                self.cancel("%s package required for this test." % package)
        locations = ["https://github.com/mkuoppal/tiobench/archive/master.zip"]
        tarball = self.fetch_asset("tiobench.zip", locations=locations)
        archive.extract(tarball, self.teststmpdir)
        os.chdir(os.path.join(self.teststmpdir, "tiobench-master"))
        build.make(".")
        self.target = self.disk
        self.lv_disk = self.disk
        self.part_obj = Partition(self.disk, mountpoint=self.dir)
        self.sw_raid = softwareraid.SoftwareRaid(self.raid_name, '0',
                                                 self.disk.split(), '1.2')
        dmesg.clear_dmesg()
        if self.disk is not None:
            if self.disk:
                self.pre_cleanup()
                if raid_needed:
                    self.create_raid(self.disk, self.raid_name)
                    self.raid_create = True
                    self.target = self.raid_name

                if lv_needed:
                    self.lv_disk = self.target
                    self.target = self.create_lv(self.target)
                    self.lv_create = True

                if self.fstype:
                    self.create_fs(self.target, self.dir, self.fstype)
                    self.fs_create = True
            else:
                self.cancel("Missing disk %s in OS" % self.disk)
        else:
            self.cancel("Please provide a valid disk name")
Ejemplo n.º 11
0
    def setUp(self):
        '''
        To check and install dependencies for the test
        '''
        self.fs_create = False
        lv_needed = self.params.get('lv', default=False)
        self.lv_create = False
        raid_needed = self.params.get('raid', default=False)
        self.raid_create = False
        self.disk = self.params.get('disk', default=None)
        self.dir = self.params.get('dir', default='/mnt')
        self.fstype = self.params.get('fs', default='ext4')
        self.args = self.params.get('args', default='')
        smm = SoftwareManager()
        packages = ['gcc', 'make', 'automake', 'autoconf']
        if raid_needed:
            packages.append('mdadm')
        for package in packages:
            if not smm.check_installed(package) and not smm.install(package):
                self.cancel("%s is needed for the test to be run" % package)

        if self.fstype == 'btrfs':
            ver = int(distro.detect().version)
            rel = int(distro.detect().release)
            if distro.detect().name == 'rhel':
                if (ver == 7 and rel >= 4) or ver > 7:
                    self.cancel("btrfs is not supported with \
                                RHEL 7.4 onwards")

        self.raid_name = '/dev/md/sraid'
        self.vgname = 'avocado_vg'
        self.lvname = 'avocado_lv'
        self.err_mesg = []
        self.target = self.disk
        self.lv_disk = self.disk
        self.part_obj = Partition(self.disk, mountpoint=self.dir)
        self.sw_raid = softwareraid.SoftwareRaid(self.raid_name, '0',
                                                 self.disk.split(), '1.2')
        dmesg.clear_dmesg()

        if self.disk is not None:
            self.pre_cleanup()
            if self.disk in disk.get_disks():
                if raid_needed:
                    self.create_raid(self.disk, self.raid_name)
                    self.raid_create = True
                    self.target = self.raid_name

                if lv_needed:
                    self.lv_disk = self.target
                    self.target = self.create_lv(self.target)
                    self.lv_create = True

                if self.fstype:
                    self.create_fs(self.target, self.dir, self.fstype)
                    self.fs_create = True
            else:
                self.cancel("Missing disk %s in OS" % self.disk)
        else:
            self.cancel("please provide valid disk")

        url = "https://github.com/linux-test-project/ltp/"
        url += "archive/master.zip"
        tarball = self.fetch_asset("ltp-master.zip",
                                   locations=[url],
                                   expire='7d')
        archive.extract(tarball, self.teststmpdir)
        ltp_dir = os.path.join(self.teststmpdir, "ltp-master")
        os.chdir(ltp_dir)
        build.make(ltp_dir, extra_args='autotools')
        self.ltpbin_dir = os.path.join(ltp_dir, 'bin')
        if not os.path.isdir(self.ltpbin_dir):
            os.mkdir(self.ltpbin_dir)
            process.system('./configure --prefix=%s' % self.ltpbin_dir,
                           ignore_status=True)
            build.make(ltp_dir)
            build.make(ltp_dir, extra_args='install')
Ejemplo n.º 12
0
    def setUp(self):
        """
        Build 'ndctl' and setup the binary.
        """
        deps = []
        self.dist = distro.detect()
        self.package = self.params.get('package', default='upstream')
        self.preserve_setup = self.params.get('preserve_change', default=False)
        self.mode_to_use = self.params.get('modes', default='fsdax')

        if self.dist.name not in ['SuSE', 'rhel']:
            self.cancel('Unsupported OS %s' % self.dist.name)

        # DAX wont work with reflink, disabling here
        self.reflink = '-m reflink=0'
        self.smm = SoftwareManager()
        if self.package == 'upstream':
            deps.extend(['gcc', 'make', 'automake', 'autoconf'])
            if self.dist.name == 'SuSE':
                deps.extend(['libtool',
                             'libkmod-devel', 'libudev-devel', 'systemd-devel',
                             'libuuid-devel-static', 'libjson-c-devel',
                             'keyutils-devel', 'kmod-bash-completion',
                             'bash-completion-devel'])
            elif self.dist.name == 'rhel':
                deps.extend(['libtool', 'bash-completion', 'parted',
                             'kmod-devel', 'libuuid-devel', 'json-c-devel',
                             'systemd-devel', 'keyutils-libs-devel', 'jq'])
            for pkg in deps:
                if not self.smm.check_installed(pkg) and not \
                        self.smm.install(pkg):
                    self.cancel('%s is needed for the test to be run' % pkg)

            git_branch = self.params.get('git_branch', default='pending')
            location = "https://github.com/pmem/ndctl/archive/"
            location = location + git_branch + ".zip"
            tarball = self.fetch_asset("ndctl.zip", locations=location,
                                       expire='7d')
            archive.extract(tarball, self.teststmpdir)
            os.chdir("%s/ndctl-%s" % (self.teststmpdir, git_branch))
            process.run('./autogen.sh', sudo=True, shell=True)
            process.run("./configure CFLAGS='-g -O2' --prefix=/usr "
                        "--disable-docs "
                        "--sysconfdir=/etc --libdir="
                        "/usr/lib64", shell=True, sudo=True)
            build.make(".")
            self.ndctl = os.path.abspath('./ndctl/ndctl')
            self.daxctl = os.path.abspath('./daxctl/daxctl')
        else:
            deps.extend(['ndctl'])
            if self.dist.name == 'rhel':
                deps.extend(['daxctl'])
            for pkg in deps:
                if not self.smm.check_installed(pkg) and not \
                        self.smm.install(pkg):
                    self.cancel('%s is needed for the test to be run' % pkg)
            self.ndctl = 'ndctl'
            self.daxctl = 'daxctl'

        self.opt_dict = {'-B': 'provider',
                         '-D': 'dev', '-R': 'dev', '-N': 'dev'}
        self.modes = ['raw', 'sector', 'fsdax', 'devdax']
        self.part = None
        self.disk = None
        self.plib = pmem.PMem(self.ndctl, self.daxctl)
        if not self.plib.check_buses():
            self.cancel("Test needs atleast one region")
        dmesg.clear_dmesg()
Ejemplo n.º 13
0
    def setUp(self):
        """
        Use distro provided  bonnie++ bin
        if not available Build bonnie++ from below
        Source:
        http://www.coker.com.au/bonnie++/experimental/bonnie++-1.03e.tgz
        """
        self.fstype = self.params.get('fs', default='')
        self.fs_create = False
        lv_needed = self.params.get('lv', default=False)
        self.lv_create = False
        raid_needed = self.params.get('raid', default=False)
        self.raid_create = False

        self.disk = self.params.get('disk', default=None)
        self.dir = self.params.get('dir', default='/mnt')
        self.uid_to_use = self.params.get('uid-to-use',
                                          default=getpass.getuser())
        self.number_to_stat = self.params.get('number-to-stat', default=2048)
        self.data_size = self.params.get('data_size_to_pass', default=0)

        smm = SoftwareManager()
        # Install the package from web
        deps = ['gcc', 'make']
        if distro.detect().name == 'Ubuntu':
            deps.extend(['g++'])
        else:
            deps.extend(['gcc-c++'])
        if self.fstype == 'btrfs':
            ver = int(distro.detect().version)
            rel = int(distro.detect().release)
            if distro.detect().name == 'rhel':
                if (ver == 7 and rel >= 4) or ver > 7:
                    self.cancel("btrfs not supported with RHEL 7.4 onwards")
            elif distro.detect().name == 'Ubuntu':
                deps.extend(['btrfs-tools'])
        if raid_needed:
            deps.append('mdadm')

        for package in deps:
            if not smm.check_installed(package) and not smm.install(package):
                self.cancel("%s package required for this test" % package)

        if process.system("which bonnie++", ignore_status=True):
            tarball = self.fetch_asset('http://www.coker.com.au/bonnie++/'
                                       'bonnie++-1.03e.tgz', expire='7d')
            archive.extract(tarball, self.teststmpdir)
            self.source = os.path.join(self.teststmpdir,
                                       os.path.basename(
                                           tarball.split('.tgz')[0]))
            os.chdir(self.source)
            process.run('./configure')
            build.make(self.source)
            build.make(self.source, extra_args='install')

        if not os.path.exists(self.dir):
            os.mkdir(self.dir)
        self.raid_name = '/dev/md/sraid'
        self.vgname = 'avocado_vg'
        self.lvname = 'avocado_lv'
        self.err_mesg = []
        self.target = self.disk
        self.lv_disk = self.disk
        self.part_obj = Partition(self.disk, mountpoint=self.dir)
        self.sw_raid = softwareraid.SoftwareRaid(self.raid_name, '0',
                                                 self.disk.split(), '1.2')
        dmesg.clear_dmesg()

        if self.disk is not None:
            self.pre_cleanup()
            if self.disk in disk.get_disks():
                if raid_needed:
                    self.create_raid(self.disk, self.raid_name)
                    self.raid_create = True
                    self.target = self.raid_name

                if lv_needed:
                    self.lv_disk = self.target
                    self.target = self.create_lv(self.target)
                    self.lv_create = True

                if self.fstype:
                    self.create_fs(self.target, self.dir, self.fstype)
                    self.fs_create = True
            else:
                self.cancel("Missing disk %s in OS" % self.disk)
        else:
            self.cancel("please provide valid disk")
Ejemplo n.º 14
0
    def setUp(self):
        """
        Build 'fio'.
        """
        default_url = "https://brick.kernel.dk/snaps/fio-git-latest.tar.gz"
        url = self.params.get('fio_tool_url', default=default_url)
        self.disk = self.params.get('disk', default=None)
        self.dir = self.params.get('dir', default='/mnt')
        self.disk_type = self.params.get('disk_type', default='')
        fstype = self.params.get('fs', default='')
        fs_args = self.params.get('fs_args', default='')
        mnt_args = self.params.get('mnt_args', default='')
        lv_needed = self.params.get('lv', default=False)
        raid_needed = self.params.get('raid', default=False)
        self.fio_file = 'fiotest-image'

        self.fs_create = False
        self.lv_create = False
        self.raid_create = False
        self.devdax_file = None

        if fstype == 'btrfs':
            ver = int(distro.detect().version)
            rel = int(distro.detect().release)
            if distro.detect().name == 'rhel':
                if (ver == 7 and rel >= 4) or ver > 7:
                    self.cancel("btrfs is not supported with \
                                RHEL 7.4 onwards")

        if distro.detect().name in ['Ubuntu', 'debian']:
            pkg_list = ['libaio-dev']
            if fstype == 'btrfs':
                pkg_list.append('btrfs-progs')
        elif distro.detect().name is 'SuSE':
            pkg_list = ['libaio1', 'libaio-devel']
        else:
            pkg_list = ['libaio', 'libaio-devel']
            if self.disk_type == 'nvdimm':
                pkg_list.extend(['autoconf', 'pkg-config'])
                if distro.detect().name == 'SuSE':
                    pkg_list.extend(
                        ['ndctl', 'libnuma-devel', 'libndctl-devel'])
                else:
                    pkg_list.extend([
                        'ndctl', 'daxctl', 'numactl-devel', 'ndctl-devel',
                        'daxctl-devel'
                    ])
        if raid_needed:
            pkg_list.append('mdadm')

        smm = SoftwareManager()
        for pkg in pkg_list:
            if pkg and not smm.check_installed(pkg) and not smm.install(pkg):
                self.cancel(
                    "Package %s is missing and could not be installed" % pkg)

        tarball = self.fetch_asset(url)
        archive.extract(tarball, self.teststmpdir)
        self.sourcedir = os.path.join(self.teststmpdir, "fio")
        fio_flags = ""
        self.ld_path = ""
        self.raid_name = '/dev/md/sraid'
        self.vgname = 'avocado_vg'
        self.lvname = 'avocado_lv'
        self.err_mesg = []

        if self.disk_type == 'nvdimm':
            self.setup_pmem_disk(mnt_args)
            self.log.info("Building PMDK for NVDIMM fio engines")
            pmdk_url = self.params.get('pmdk_url', default='')
            tar = self.fetch_asset(pmdk_url, expire='7d')
            archive.extract(tar, self.teststmpdir)
            version = os.path.basename(tar.split('.tar.')[0])
            pmdk_src = os.path.join(self.teststmpdir, version)
            build.make(pmdk_src)
            build.make(pmdk_src,
                       extra_args='install prefix=%s' % self.teststmpdir)
            os.chdir(self.sourcedir)
            ext_flags = '`PKG_CONFIG_PATH=%s/lib/pkgconfig pkg-config --cflags\
                    --libs libpmem libpmemblk`' % self.teststmpdir
            self.ld_path = "LD_LIBRARY_PATH=%s/lib" % self.teststmpdir
            out = process.system_output('./configure --extra-cflags='
                                        '"%s"' % ext_flags,
                                        shell=True)
            fio_flags = "LDFLAGS='%s'" % ext_flags
            for eng in ['PMDK libpmem', 'PMDK dev-dax', 'libnuma']:
                for line in out.decode().splitlines():
                    if line.startswith(eng) and 'no' in line:
                        self.cancel("PMEM engines not built with fio")

        if not self.disk:
            self.dir = self.workdir

        self.target = self.disk
        self.lv_disk = self.disk
        self.part_obj = Partition(self.disk, mountpoint=self.dir)
        self.sraid = softwareraid.SoftwareRaid(self.raid_name, '0',
                                               self.disk.split(), '1.2')
        dmesg.clear_dmesg()
        if self.disk in disk.get_disks():
            self.pre_cleanup()
            if raid_needed:
                self.create_raid(self.target, self.raid_name)
                self.raid_create = True
                self.target = self.raid_name

            if lv_needed:
                self.lv_disk = self.target
                self.target = self.create_lv(self.target)
                self.lv_create = True

            if fstype:
                self.create_fs(self.target, self.dir, fstype, fs_args,
                               mnt_args)
                self.fs_create = True
        else:
            self.cancel("Missing disk %s in OS" % self.disk)

        build.make(self.sourcedir, extra_args=fio_flags)