Comment 0 for bug 1516458

Revision history for this message
Catherine Diep (cdiep) wrote :

refstack-client test fails when testing with the test-list option. To fix this issue, refstack-client needs to initialize the environment variables "TEMPEST_CONFIG_DIR" and "TEMPEST_CONFIG" with the configuration file path value passed in by the caller.

(.venv)cdiep@cdiep-VirtualBox:~/refstack-client-20151115-list-tests/refstack-client$ ./refstack-client test -c ~/tempest.conf.142.short -v --test-list ~/2015.07.required.txt
2015-11-15 14:47:35,467 refstack_client:126 DEBUG The .testrepository/next-stream file was not found. Assuming subunit results will be stored in file 0.
2015-11-15 14:47:35,589 refstack_client:313 INFO Starting Tempest test...
2015-11-15 14:47:35,589 refstack_client:323 INFO Normalizing test list...
2015-11-15 14:47:36.149 24769 INFO tempest [-] Using tempest config file /etc/tempest/tempest.conf
Non-zero exit code (2) from test listing.
2015-11-15 14:47:37,018 refstack_client.list_parser:53 ERROR None
Traceback (most recent call last):
  File "./refstack-client", line 31, in <module>
    getattr(test, args.func)()
  File "/home/cdiep/refstack-client-20151115-list-tests/refstack-client/refstack_client/refstack_client.py", line 326, in test
    list_file = parser.get_normalized_test_list(self.args.test_list)
  File "/home/cdiep/refstack-client-20151115-list-tests/refstack-client/refstack_client/list_parser.py", line 199, in get_normalized_test_list
    tempest_test_ids = self._get_tempest_test_ids()
  File "/home/cdiep/refstack-client-20151115-list-tests/refstack-client/refstack_client/list_parser.py", line 55, in _get_tempest_test_ids
    ' '.join(cmd))
subprocess.CalledProcessError: Command '/home/cdiep/refstack-client-20151115-list-tests/refstack-client/.tempest/tools/with_venv.sh testr list-tests' returned non-zero exit status 3

With test-list option, refstack-client will first normalize the user input test lists to the test list of the current installed Tempest. There seems to be some updates in the recent release that "testr list-tests" would require a valid tempest.conf for test listing. The path of the tempest.conf file is determined by the .tempest/tempest/config.py file. If a tempest.conf file is not found, then the failsafe file is used (/etc/tempest/tempest.conf".

    def __init__(self, parse_conf=True, config_path=None):
        """Initialize a configuration from a conf directory and conf file."""
        super(TempestConfigPrivate, self).__init__()
        config_files = []
        failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE

        if config_path:
            path = config_path
        else:
            # Environment variables override defaults...
            conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
                                      self.DEFAULT_CONFIG_DIR)
            conf_file = os.environ.get('TEMPEST_CONFIG',
                                       self.DEFAULT_CONFIG_FILE)

            path = os.path.join(conf_dir, conf_file)

        if not os.path.isfile(path):
            path = failsafe_path

        # only parse the config file if we expect one to exist. This is needed
        # to remove an issue with the config file up to date checker.
        if parse_conf:
            config_files.append(path)
        logging.register_options(_CONF)
        if os.path.isfile(path):
            _CONF([], project='tempest', default_config_files=config_files)
        else:
            _CONF([], project='tempest')
        logging.setup(_CONF, 'tempest')
        LOG = logging.getLogger('tempest')
        LOG.info("Using tempest config file %s" % path)
        register_opts()
        self._set_attrs()
        if parse_conf:
            _CONF.log_opt_values(LOG, std_logging.DEBUG)