in microsoft/testsuites/core/timesync.py [0:0]
def timesync_check_unbind_clockevent(self, node: Node) -> None:
if node.shell.exists(PurePosixPath(self.current_clockevent)):
# 1. Current clock event name is 'Hyper-V clockevent'.
clockevent_map = {
CpuArchitecture.X64: "Hyper-V clockevent",
CpuArchitecture.ARM64: "arch_sys_timer",
}
lscpu = node.tools[Lscpu]
arch = lscpu.get_architecture()
clock_event_name = clockevent_map.get(CpuArchitecture(arch), None)
if not clock_event_name:
raise UnsupportedCpuArchitectureException(arch)
cat = node.tools[Cat]
clock_event_result = cat.run(self.current_clockevent)
assert_that(clock_event_result.stdout).described_as(
f"Expected clockevent name is {clock_event_name}, "
f"but actual it is {clock_event_result.stdout}."
).is_equal_to(clock_event_name)
# 2. 'Hyper-V clockevent' and 'hrtimer_interrupt' show up times in
# /proc/timer_list should equal to cpu count.
event_handler_name = "hrtimer_interrupt"
timer_list_result = cat.run("/proc/timer_list", sudo=True)
lscpu = node.tools[Lscpu]
core_count = lscpu.get_core_count()
event_handler_times = timer_list_result.stdout.count(
f"{event_handler_name}"
)
assert_that(event_handler_times).described_as(
f"Expected {event_handler_name} shown up {core_count} times in output "
f"of /proc/timer_list, but actual it shows up "
f"{event_handler_times} times."
).is_equal_to(core_count)
clock_event_times = timer_list_result.stdout.count(f"{clock_event_name}")
assert_that(clock_event_times).described_as(
f"Expected {clock_event_name} shown up {core_count} times in output "
f"of /proc/timer_list, but actual it shows up "
f"{clock_event_times} times."
).is_equal_to(core_count)
# 3. when cpu count is 1 and cpu type is Intel type, unbind current time
# clock event, check current time clock event switch to 'lapic'.
if CpuType.Intel == lscpu.get_cpu_type() and 1 == core_count:
cmd_result = node.execute(
f"echo {clock_event_name} > {self.unbind_clockevent}",
sudo=True,
shell=True,
)
cmd_result.assert_exit_code()
clock_event_result_expected = _wait_file_changed(
node, self.current_clockevent, "lapic"
)
assert_that(clock_event_result_expected).described_as(
f"After unbind {clock_event_name}, current clock event should "
f"equal to [lapic]."
).is_true()