2
2
# SPDX-License-Identifier: Apache-2.0
3
3
"""Basic tests scenarios for snapshot save/restore."""
4
4
5
+ import os
5
6
import platform
6
7
import pytest
7
8
from framework .microvms import C3nano
9
+ import host_tools .logging as log_tools
8
10
import host_tools .network as net_tools # pylint: disable=import-error
9
11
10
12
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
+
11
33
@pytest .mark .skipif (
12
34
platform .machine () != "x86_64" ,
13
35
reason = "Not supported yet."
@@ -25,6 +47,13 @@ def test_pause_resume(bin_cloner_path):
25
47
response = microvm .vm .patch (state = 'Resumed' )
26
48
assert microvm .api_session .is_status_bad_request (response .status_code )
27
49
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 )
28
57
microvm .start ()
29
58
30
59
ssh_connection = net_tools .SSHConnection (microvm .ssh_config )
@@ -37,6 +66,17 @@ def test_pause_resume(bin_cloner_path):
37
66
response = microvm .vm .patch (state = 'Paused' )
38
67
assert microvm .api_session .is_status_no_content (response .status_code )
39
68
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
+
40
80
# Verify guest is no longer active.
41
81
exit_code , _ , _ = ssh_connection .execute_command ("ls" )
42
82
assert exit_code != 0
0 commit comments