提交 eb1b94f5 编写于 作者: Y yama

timedrift_adjust_time: add four timer device cases

Case 1:resume a paused VM with "-rtc base=localtime,clock=vm" (only windows)
Case 2:resume a paused VM with "-rtc base=localtime,clock=host" (only windows)
Case 3:resume a paused VM with "-rtc base=utc,clock=vm" (only linux)
Case 4:resume a paused VM with "-rtc base=utc,clock=host" (only linux)
Signed-off-by: Nyama <yama@redhat.com>
上级 b2f64207
......@@ -14,7 +14,14 @@
host_epoch_time_cmd = 'epoch=$(date +%s); datetime=$(date);'
host_epoch_time_cmd += 'echo "datetime: $datetime epoch: $epoch"'
time_difference = 0
hwclock_time_command = "hwclock -u"
hwclock_time_filter_re = "(\d+-\d+-\d+ \d+:\d+:\d+).*"
hwclock_time_format = "%Y-%m-%d %H:%M:%S"
RHEL.6, RHEL.7:
hwclock_time_filter_re = "(\S+ \S+\s+\d+ \d+:\d+:\d+ \d+).*"
hwclock_time_format = "%a %b %d %H:%M:%S %Y"
variants:
- no_adjust_clock:
- adjust_host_clock:
seconds_to_forward = 1800
set_host_time_cmd = 'date -s "${seconds_to_forward} seconds"; hwclock -w'
......@@ -41,13 +48,16 @@
rtc_base = localtime
variants:
- guest_pause_resume:
only adjust_host_clock
only no_adjust_clock adjust_host_clock
vm_action = pause_resume
sleep_seconds = 1800
time_difference = 3600
time_difference = 1800
time_difference_hwclock = 0
- guest_reboot:
no no_adjust_clock
vm_action = reboot
time_difference = 0
time_difference_hwclock = 0
- guest_s3:
only adjust_host_clock
vm_action = suspend_resume
......@@ -61,10 +71,17 @@
read_clock_source_cmd += "/clocksource0/current_clocksource"
timedrift_adjust_time.guest_reboot.clock_vm.adjust_host_clock:
time_difference = 1800
time_difference_hwclock = 1800
timedrift_adjust_time.guest_s3.clock_vm.adjust_host_clock:
time_difference = 1800
timedrift_adjust_time.guest_s3.clock_host.adjust_host_clock:
time_difference = 1800
timedrift_adjust_time.guest_pause_resume.clock_vm.no_adjust_clock:
time_difference = 1800
time_difference_hwclock = 1800
timedrift_adjust_time.guest_pause_resume.clock_vm.adjust_host_clock:
time_difference = 1800
time_difference_hwclock = 3600
RHEL.6:
timedrift_adjust_time.guest_reboot..adjust_guest_clock:
time_difference = 1800
......@@ -85,6 +102,8 @@
time_difference = 1800
timedrift_adjust_time.guest_s3.clock_vm.adjust_host_clock:
time_difference = 1800
timedrift_adjust_time.guest_pause_resume..no_adjust_clock:
time_difference = 1800
Win7, Win2008:
timedrift_adjust_time.guest_pause_resume.clock_host.adjust_host_clock:
time_difference = 0
......@@ -130,6 +130,28 @@ class TimedriftTest(object):
"Guest Time: %s" % guest_timestr)
return list(map(float, [epoch_host, epoch_guest]))
def get_hwtime(self, session):
"""
Get guest's hardware clock in epoch.
:param session: VM session.
"""
hwclock_time_command = self.params.get("hwclock_time_command",
"hwclock -u")
hwclock_time_filter_re = self.params.get("hwclock_time_filter_re",
r"(\d+-\d+-\d+ \d+:\d+:\d+).*")
hwclock_time_format = self.params.get("hwclock_time_format",
"%Y-%m-%d %H:%M:%S")
output = session.cmd_output_safe(hwclock_time_command)
try:
str_time = re.findall(hwclock_time_filter_re, output)[0]
guest_time = time.mktime(time.strptime(str_time, hwclock_time_format))
except Exception as err:
logging.debug(
"(time_format, output): (%s, %s)", hwclock_time_format, output)
raise err
return guest_time
@error_context.context_aware
def verify_clock_source(self, session):
"""
......@@ -198,14 +220,28 @@ class BackwardtimeTest(TimedriftTest):
while time.time() < start_time + timeout:
host_epoch_time, guest_epoch_time = self.get_epoch_seconds(session)
real_difference = abs(host_epoch_time - guest_epoch_time)
if abs(real_difference - expect_difference) < tolerance:
return
if self.params["os_type"] == 'linux':
expect_difference_hwclock = float(self.params["time_difference_hwclock"])
guest_hwtime = self.get_hwtime(session)
real_difference_hw = abs(host_epoch_time - guest_hwtime)
if abs(real_difference - expect_difference) < tolerance and \
abs(real_difference_hw - expect_difference_hwclock) < tolerance:
return
else:
if abs(real_difference - expect_difference) < tolerance:
return
logging.info("Host epoch time: %s" % host_epoch_time)
logging.info("Guest epoch time: %s" % guest_epoch_time)
err_msg = "Unexcept time difference between host and guest after"
err_msg += " testing.(actual difference: %s)" % real_difference
err_msg += " except difference: %s)" % expect_difference
self.test.fail(err_msg)
if self.params["os_type"] == 'linux':
logging.info("Guest hardware time: %s" % guest_hwtime)
err_msg = "Unexpected sys and hardware time difference (%s %s)\
between host and guest after adjusting time." \
% (real_difference, real_difference_hw)
else:
err_msg = "Unexpected time difference between host and guest after"
err_msg += " testing.(actual difference: %s)" % real_difference
err_msg += " expected difference: %s)" % expect_difference
self.test.fail(err_msg)
@error_context.context_aware
def check_dirft_before_adjust_time(self, session):
......@@ -223,12 +259,24 @@ class BackwardtimeTest(TimedriftTest):
tolerance = float(self.params.get("tolerance", 6))
host_epoch_time, guest_epoch_time = self.get_epoch_seconds(session)
real_difference = abs(host_epoch_time - guest_epoch_time)
if real_difference > tolerance:
logging.info("Host epoch time: %s" % host_epoch_time)
logging.info("Guest epoch time: %s" % guest_epoch_time)
err_msg = "Unexcept time difference (%s) " % real_difference
err_msg += " between host and guest before testing."
self.test.fail(err_msg)
if self.params["os_type"] == 'linux':
guest_hwtime = self.get_hwtime(session)
real_difference_hw = abs(host_epoch_time - guest_hwtime)
if real_difference > tolerance or real_difference_hw > tolerance:
logging.info("Host epoch time: %s" % host_epoch_time)
logging.info("Guest epoch time: %s" % guest_epoch_time)
logging.info("Guest hardware time: %s" % guest_hwtime)
err_msg = "Unexpected sys and hardware time difference (%s %s) \
between host and guest before testing."\
% (real_difference, real_difference_hw)
self.test.fail(err_msg)
else:
if real_difference > tolerance:
logging.info("Host epoch time: %s" % host_epoch_time)
logging.info("Guest epoch time: %s" % guest_epoch_time)
err_msg = "Unexcept time difference (%s) " % real_difference
err_msg += " between host and guest before testing."
self.test.fail(err_msg)
def pre_test(self):
"""
......@@ -243,6 +291,8 @@ class BackwardtimeTest(TimedriftTest):
vm = self.get_vm(create=True)
if self.params["os_type"] == 'windows':
utils_time.sync_timezone_win(vm)
else:
utils_time.sync_timezone_linux(vm)
session = self.get_session(vm)
self.check_dirft_before_adjust_time(session)
if self.params.get("read_clock_source_cmd"):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册