return None
+def get_doctor_test_root_dir():
+ current_dir = os.path.split(os.path.realpath(__file__))[0]
+ return os.path.dirname(current_dir)
+
+
class SSHClient(object):
def __init__(self, ip, username, password=None, pkey=None,
key_filename=None, log=None, look_for_keys=False,
import stat
import subprocess
+from doctor_tests.common.utils import get_doctor_test_root_dir
from doctor_tests.common.utils import SSHClient
from doctor_tests.installer.base import BaseInstaller
self.controllers = list()
self.controller_clients = list()
self.servers = list()
+ self.test_dir = get_doctor_test_root_dir()
def setup(self):
self.log.info('Setup Apex installer start......')
self.log.info('Already have SSH keys from Apex installer......')
return self.key_file
- self.client.scp('/home/stack/.ssh/id_rsa', './instack_key', method='get')
+ ssh_key = '{0}/{1}'.format(self.test_dir, 'instack_key')
+ self.client.scp('/home/stack/.ssh/id_rsa', ssh_key, method='get')
user = getpass.getuser()
uid = pwd.getpwnam(user).pw_uid
gid = grp.getgrnam(user).gr_gid
- os.chown('./instack_key', uid, gid)
- os.chmod('./instack_key', stat.S_IREAD)
- current_dir = os.curdir
- self.key_file = '{0}/{1}'.format(current_dir, 'instack_key')
+ os.chown(ssh_key, uid, gid)
+ os.chmod(ssh_key, stat.S_IREAD)
+ self.key_file = ssh_key
return self.key_file
def get_controller_ips(self):
import logging
import os
+from doctor_tests.common.utils import get_doctor_test_root_dir
+
class Logger(object):
def __init__(self, logger_name):
ch.setLevel(logging.INFO)
self.logger.addHandler(ch)
- filename = '%s.log' % logger_name
- file_handler = logging.FileHandler(filename, mode='w')
+ test_dir = get_doctor_test_root_dir()
+ self.filename = '{0}/{1}.log'.format(test_dir, logger_name)
+ file_handler = logging.FileHandler(self.filename, mode='w')
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
- self.filename = file_handler.baseFilename
self.logger.addHandler(file_handler)
def getLogger(self):
return self.logger
+
+ def getLogFilename(self):
+ return self.filename
from doctor_tests.user import User
-LOG = doctor_log.Logger('doctor').getLogger()
+Logger = doctor_log.Logger('doctor')
+LOG = Logger.getLogger()
+LogFile = Logger.getLogFilename()
class DoctorTest(object):
# NOTE (umar) copy remote monitor.log file when monitor=collectd
self.check_host_status(self.down_host.name, 'down')
- notification_time = calculate_notification_time(LOG.filename)
+ notification_time = calculate_notification_time(LogFile)
if notification_time < 1 and notification_time > 0:
LOG.info('doctor test successfully, notification_time=%s' % notification_time)
else:
self.fault.get_disable_network_log()
def run_profiler(self):
- test_dir = os.path.split(os.path.realpath(__file__))[0]
+ net_down_log_file = self.fault.get_disable_network_log()
reg = '(?<=doctor set link down at )\d+.\d+'
- linkdown = float(match_rep_in_file(reg, LOG.filename).group(0))
+ linkdown = float(match_rep_in_file(reg, net_down_log_file).group(0))
reg = '(.* doctor mark vm.* error at )(\d+.\d+)'
- vmdown = float(match_rep_in_file(reg, LOG.filename).group(2))
+ vmdown = float(match_rep_in_file(reg, LogFile).group(2))
reg = '(.* doctor mark host.* down at )(\d+.\d+)'
- hostdown = float(match_rep_in_file(reg, LOG.filename).group(2))
+ hostdown = float(match_rep_in_file(reg, LogFile).group(2))
reg = '(?<=doctor monitor detected at )\d+.\d+'
- detected = float(match_rep_in_file(reg, LOG.filename).group(0))
+ detected = float(match_rep_in_file(reg, LogFile).group(0))
reg = '(?<=doctor consumer notified at )\d+.\d+'
- notified = float(match_rep_in_file(reg, LOG.filename).group(0))
+ notified = float(match_rep_in_file(reg, LogFile).group(0))
# TODO(yujunz) check the actual delay to verify time sync status
# expected ~1s delay from $trigger to $linkdown
##############################################################################
from doctor_tests.identity_auth import get_session
from doctor_tests.os_clients import nova_client
+from doctor_tests.common.utils import get_doctor_test_root_dir
from doctor_tests.common.utils import SSHClient
LINK_DOWN_SCRIPT = """
self.log = log
self.installer = installer
self.nova = nova_client(self.conf.nova_version, get_session())
+ self.test_dir = get_doctor_test_root_dir()
self.host = None
self.GetLog = False
+ self.disable_network_log = None
def start(self, host):
self.log.info('fault inject start......')
def get_disable_network_log(self):
if self.GetLog:
self.log.info('Already get the disable_netork.log from down_host......')
- return
+ return self.disable_network_log
if self.host is not None:
client = SSHClient(self.host.ip,
self.installer.node_user_name,
key_filename=self.installer.get_ssh_key_from_installer(),
look_for_keys=True,
log=self.log)
- client.scp('disable_network.log', './disable_network.log', method='get')
+
+ self.disable_network_log = '{0}/{1}'.format(self.test_dir, 'disable_network.log')
+ client.scp('disable_network.log', self.disable_network_log, method='get')
self.log.info('Get the disable_netork.log from down_host(host_name:%s, host_ip:%s)'
% (self.host.name, self.host.ip))
self.GetLog = True
+ return self.disable_network_log
def _set_link_down(self, compute_ip):
- file_name = './disable_network.sh'
+ file_name = '{0}/{1}'.format(self.test_dir, 'disable_network.sh')
with open(file_name, 'w') as file:
file.write(LINK_DOWN_SCRIPT.format(compute_ip=compute_ip))
client = SSHClient(compute_ip,
key_filename=self.installer.get_ssh_key_from_installer(),
look_for_keys=True,
log=self.log)
- client.scp('./disable_network.sh', 'disable_network.sh')
+ client.scp(file_name, 'disable_network.sh')
command = 'bash disable_network.sh > disable_network.log 2>&1 &'
client.ssh(command)