diff --git a/avocado/test.py b/avocado/test.py index 8e2e232dd3756f5f317421cd18eccf6bbe4c3be4..606ab90aedf00167347db68cf8da63a328d7d2f4 100644 --- a/avocado/test.py +++ b/avocado/test.py @@ -144,7 +144,6 @@ class Test(unittest.TestCase): # Apply what comes from the params dict for key in sorted(self.params.keys()): self.log.debug(' %s = %s', key, self.params.get(key)) - setattr(self.params, key, self.params.get(key)) self.log.debug('') # Apply what comes from the default_params dict @@ -157,7 +156,7 @@ class Test(unittest.TestCase): self.log.debug('') # If there's a timeout set, log a timeout reminder - if hasattr(self.params, 'timeout'): + if self.params.timeout: self.log.info('Test timeout set. Will wait %.2f s for ' 'PID %s to end', float(self.params.timeout), os.getpid()) @@ -205,7 +204,6 @@ class Test(unittest.TestCase): self.params[key] except Exception: self.params[key] = default - setattr(self.params, key, default) def get_deps_path(self, basename): """ diff --git a/avocado/utils/params.py b/avocado/utils/params.py index 52cb6b5066a142dabc5f55e97e7d28d1ca92454b..6c748eeba4bb2e662c494a78f000593e54197c5e 100644 --- a/avocado/utils/params.py +++ b/avocado/utils/params.py @@ -25,7 +25,10 @@ class Params(UserDict.IterableUserDict): try: value = UserDict.IterableUserDict.__getitem__(self, key) vtype = UserDict.IterableUserDict.get(self, "%s_type" % key) - return settings.convert_value_type(value, vtype) + if vtype is not None: + return settings.convert_value_type(value, vtype) + else: + return value except KeyError: raise ParamNotFound("Mandatory parameter '%s' is missing. " "Check your cfg files for typos/mistakes" % @@ -35,6 +38,15 @@ class Params(UserDict.IterableUserDict): "convert to %s: %s" % (key, value, vtype, details)) + def __getattr__(self, attr): + try: + return UserDict.IterableUserDict.__getattr__(self, attr) # @UndefinedVariable + except AttributeError: + try: + return self.__getitem__(attr) + except ParamNotFound: + return None + def objects(self, key): """ Return the names of objects defined using a given key. @@ -59,7 +71,7 @@ class Params(UserDict.IterableUserDict): """ suffix = "_" + obj_name self.lock.acquire() - new_dict = self.copy() + new_dict = self.data.copy() self.lock.release() for key in new_dict.keys(): if key.endswith(suffix): diff --git a/docs/source/conf.py b/docs/source/conf.py index 2c2182e4df0abe31012ce68de9ec580da641fd49..ed07780ed9435b0da3d6782125bb7405304af13d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -63,7 +63,7 @@ master_doc = 'index' # General information about the project. project = u'avocado' -copyright = u'2014, Red Hat' +copyright = u'2014, Red Hat' # @ReservedAssignment # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/tests/multiplextest/multiplextest.mplx b/tests/multiplextest/multiplextest.mplx new file mode 100644 index 0000000000000000000000000000000000000000..9b051344e1dbab7f9f1e49aa0e989abd1cdb9a82 --- /dev/null +++ b/tests/multiplextest/multiplextest.mplx @@ -0,0 +1,89 @@ +variants: + -multiplextest: + variants: + - env: + variants: + - production: + malloc_perturb = no + gcc_flags = -O3 + - debug: + malloc_perturb = yes + gcc_flags = -g + + variants: + - host: + variants: + - kernel_config: + variants: + - huge_pages: + huge_pages = yes + - numa_ballance_aggressive: + numa_balancing = 1 + numa_balancing_migrate_deferred = 32 + numa_balancing_scan_size_mb = 512 + - numa_ballance_light: + numa_balancing = 1 + numa_balancing_migrate_deferred = 8 + numa_balancing_scan_size_mb = 32 + + variants: + - guest: + variants: + - os: + variants: + - windows: + os_type = windows + variants: + - xp: + win = xp + - 2k12: + win = 2k12 + - 7: + win = 7 + - linux: + os_type = linux + variants: + - fedora: + distro = fedora + - ubuntu: + distro = ubuntu + + variants: + - hardware: + variants: + - disks: + variants: + - ide: + drive_format = ide + - scsi: + drive_format = scsi + - network: + variants: + - rtl_8139: + nic_model = rtl8139 + - e1000: + nic_model = e1000 + - virtio_net: + nic_model = virtio + enable_msix_vectors = yes + + variants: + - tests: + variants: + - sync_test: + variants: + - standard: + sync_timeout = 30 + sync_tries = 10 + - aggressive: + sync_timeout = 10 + sync_tries = 20 + - ping_test: + variants: + - standard: + ping_tries = 10 + ping_timeout = 20 + - aggressive: + ping_flags = -f + ping_tries = 100 + ping_timeout = 5 diff --git a/tests/multiplextest/multiplextest.py b/tests/multiplextest/multiplextest.py new file mode 100644 index 0000000000000000000000000000000000000000..597c9a2358fda92e9533f12604be98c98ecf13fc --- /dev/null +++ b/tests/multiplextest/multiplextest.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# See LICENSE for more details. +# +# Copyright: Red Hat Inc. 2014 +# Author: Ruda Moura + +from avocado import test +from avocado import job + + +class multiplextest(test.Test): + + """ + Execute the Linux Build test. + """ + + def setup(self): + self.compile_code() + self.set_hugepages() + self.set_numa_balance() + self.assembly_vm() + + if self.params.os_type == 'windows': + self.log.info('Preparing VM with Windows (%s)', self.params.win) + if self.params.os_type == 'linux': + self.log.info('Preparing VM with Linux (%s)', self.params.distro) + + def compile_code(self): + self.log.info('Compile code') + self.log.info('gcc %s %s', self.params.gcc_flags, 'code.c') + + def set_hugepages(self): + if self.params.huge_pages == 'yes': + self.log.info('Setting hugepages') + + def set_numa_balance(self): + if self.params.numa_balance: + self.log.info('Numa balancing: %s', self.params.numa_balance) + if self.params.numa_balancing_migrate_deferred: + self.log.info('Numa balancing migrate deferred: %s', + self.params.numa_balancing_migrate_deferred) + + def assembly_vm(self): + self.log.info('Assembling VM') + if self.params.drive_format: + self.log.info('Drive format: %s', self.params.drive_format) + if self.params.nic_model: + self.log.info('NIC model: %s', self.params.nic_model) + if self.params.enable_msx_vectors == 'yes': + self.log.info('Enabling msx models') + + def action(self): + self.log.info('Executing synctest...') + self.log.info('synctest --timeout %s --tries %s', + self.params.sync_timeout, + self.params.sync_tries) + + self.log.info('Executing ping test...') + cmdline = 'ping --timeout %s --tries %s' % (self.params.ping_timeout, + self.params.ping_tries) + + if self.params.ping_flags: + cmdline += ' %s' % self.params.ping_flags + + self.log.info(cmdline) + + +if __name__ == "__main__": + job.main()