Skip to content

Commit f20c639

Browse files
acatangiusandreim
authored andcommitted
tests: verify pause vm also pauses emulation
This commit adds a regression test for correct emulation pausing. The test will fail without the 'Pause VM' fix in the following commits. Signed-off-by: Adrian Catangiu <[email protected]>
1 parent fadaa49 commit f20c639

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

tests/integration_tests/build/test_coverage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
# this contains the frequency while on AMD it does not.
2424
# Checkout the cpuid crate. In the future other
2525
# differences may appear.
26-
COVERAGE_DICT = {"Intel": 84.9, "AMD": 84.8}
26+
COVERAGE_DICT = {"Intel": 84.8, "AMD": 84.7}
2727
PROC_MODEL = proc.proc_type()
2828

2929
COVERAGE_MAX_DELTA = 0.05

tests/integration_tests/functional/test_pause_resume.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,34 @@
22
# SPDX-License-Identifier: Apache-2.0
33
"""Basic tests scenarios for snapshot save/restore."""
44

5+
import os
56
import platform
67
import pytest
78
from framework.microvms import C3nano
9+
import host_tools.logging as log_tools
810
import host_tools.network as net_tools # pylint: disable=import-error
911

1012

13+
def verify_net_emulation_paused(metrics):
14+
"""Verify net emulation is paused base on provided metrics."""
15+
net_metrics = metrics['net']
16+
assert net_metrics['rx_queue_event_count'] == 0
17+
assert net_metrics['rx_partial_writes'] == 0
18+
assert net_metrics['rx_tap_event_count'] == 0
19+
assert net_metrics['rx_bytes_count'] == 0
20+
assert net_metrics['rx_packets_count'] == 0
21+
assert net_metrics['rx_fails'] == 0
22+
assert net_metrics['rx_count'] == 0
23+
assert net_metrics['tap_read_fails'] == 0
24+
assert net_metrics['tap_write_fails'] == 0
25+
assert net_metrics['tx_bytes_count'] == 0
26+
assert net_metrics['tx_fails'] == 0
27+
assert net_metrics['tx_count'] == 0
28+
assert net_metrics['tx_packets_count'] == 0
29+
assert net_metrics['tx_queue_event_count'] == 0
30+
print(net_metrics)
31+
32+
1133
@pytest.mark.skipif(
1234
platform.machine() != "x86_64",
1335
reason="Not supported yet."
@@ -25,6 +47,13 @@ def test_pause_resume(bin_cloner_path):
2547
response = microvm.vm.patch(state='Resumed')
2648
assert microvm.api_session.is_status_bad_request(response.status_code)
2749

50+
# Configure metrics system and start microVM.
51+
metrics_fifo_path = os.path.join(microvm.path, 'metrics_fifo')
52+
metrics_fifo = log_tools.Fifo(metrics_fifo_path)
53+
response = microvm.metrics.put(
54+
metrics_path=microvm.create_jailed_resource(metrics_fifo.path)
55+
)
56+
assert microvm.api_session.is_status_no_content(response.status_code)
2857
microvm.start()
2958

3059
ssh_connection = net_tools.SSHConnection(microvm.ssh_config)
@@ -37,6 +66,17 @@ def test_pause_resume(bin_cloner_path):
3766
response = microvm.vm.patch(state='Paused')
3867
assert microvm.api_session.is_status_no_content(response.status_code)
3968

69+
# Flush and reset metrics as they contain pre-pause data.
70+
microvm.flush_metrics(metrics_fifo)
71+
72+
# Verify guest is no longer active.
73+
exit_code, _, _ = ssh_connection.execute_command("ls")
74+
assert exit_code != 0
75+
76+
# Verify emulation was indeed paused and no events from either
77+
# guest or host side were handled.
78+
verify_net_emulation_paused(microvm.flush_metrics(metrics_fifo))
79+
4080
# Verify guest is no longer active.
4181
exit_code, _, _ = ssh_connection.execute_command("ls")
4282
assert exit_code != 0

0 commit comments

Comments
 (0)