Skip to content

Commit ba13237

Browse files
committed
refactor(test): Delete a helper function used only once
`_validate_mmds_snapshot()` is used only once. Signed-off-by: Takahiro Itazuri <[email protected]>
1 parent d839cd8 commit ba13237

File tree

1 file changed

+86
-113
lines changed

1 file changed

+86
-113
lines changed

tests/integration_tests/functional/test_mmds.py

Lines changed: 86 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import pytest
1313

14-
from framework.artifacts import working_version_as_artifact
1514
from framework.utils import (
1615
configure_mmds,
1716
generate_mmds_get_request,
@@ -30,109 +29,6 @@
3029
MMDS_VERSIONS = ["V2", "V1"]
3130

3231

33-
def _validate_mmds_snapshot(
34-
basevm,
35-
microvm_factory,
36-
version,
37-
imds_compat,
38-
fc_binary_path=None,
39-
jailer_binary_path=None,
40-
):
41-
"""Test MMDS behaviour across snap-restore."""
42-
ipv4_address = "169.254.169.250"
43-
44-
# Configure MMDS version with custom IPv4 address.
45-
configure_mmds(
46-
basevm,
47-
version=version,
48-
iface_ids=["eth0"],
49-
ipv4_address=ipv4_address,
50-
imds_compat=imds_compat,
51-
)
52-
53-
expected_mmds_config = {
54-
"version": version,
55-
"ipv4_address": ipv4_address,
56-
"network_interfaces": ["eth0"],
57-
"imds_compat": False if imds_compat is None else imds_compat,
58-
}
59-
response = basevm.api.vm_config.get()
60-
assert response.json()["mmds-config"] == expected_mmds_config
61-
62-
data_store = {"latest": {"meta-data": {"ami-id": "ami-12345678"}}}
63-
populate_data_store(basevm, data_store)
64-
expected_response = "latest/" if imds_compat else data_store
65-
66-
basevm.start()
67-
ssh_connection = basevm.ssh
68-
run_guest_cmd(ssh_connection, f"ip route add {ipv4_address} dev eth0", "")
69-
70-
# Both V1 and V2 support token generation.
71-
token = generate_mmds_session_token(ssh_connection, ipv4_address, token_ttl=60)
72-
73-
# Fetch metadata.
74-
cmd = generate_mmds_get_request(
75-
ipv4_address,
76-
token=token,
77-
)
78-
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
79-
80-
# Create snapshot.
81-
snapshot = basevm.snapshot_full()
82-
83-
# Resume microVM and ensure session token is still valid on the base.
84-
response = basevm.resume()
85-
86-
# Fetch metadata again using the same token.
87-
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
88-
89-
# Kill base microVM.
90-
basevm.kill()
91-
92-
# Load microVM clone from snapshot.
93-
kwargs = {}
94-
if fc_binary_path:
95-
kwargs["fc_binary_path"] = fc_binary_path
96-
if jailer_binary_path:
97-
kwargs["jailer_binary_path"] = jailer_binary_path
98-
microvm = microvm_factory.build(**kwargs)
99-
microvm.spawn()
100-
microvm.restore_from_snapshot(snapshot, resume=True)
101-
102-
ssh_connection = microvm.ssh
103-
104-
# Check the reported MMDS config.
105-
response = microvm.api.vm_config.get()
106-
assert response.json()["mmds-config"] == expected_mmds_config
107-
108-
# Since V1 should accept GET request even with invalid token, don't regenerate a token for V1.
109-
if version == "V2":
110-
# Attempting to reuse the token across a restore must fail in V2.
111-
cmd = generate_mmds_get_request(ipv4_address, token=token)
112-
run_guest_cmd(ssh_connection, cmd, "MMDS token not valid.")
113-
114-
# Re-generate token.
115-
token = generate_mmds_session_token(ssh_connection, ipv4_address, token_ttl=60)
116-
117-
# Data store is empty after a restore.
118-
cmd = generate_mmds_get_request(ipv4_address, token=token)
119-
run_guest_cmd(
120-
ssh_connection,
121-
cmd,
122-
(
123-
"Cannot retrieve value. The value has an unsupported type."
124-
if imds_compat
125-
else "null"
126-
),
127-
)
128-
129-
# Now populate the store.
130-
populate_data_store(microvm, data_store)
131-
132-
# Fetch metadata.
133-
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
134-
135-
13632
@pytest.mark.parametrize("version", MMDS_VERSIONS)
13733
@pytest.mark.parametrize("imds_compat", [True, False])
13834
def test_mmds_token(uvm_plain, version, imds_compat):
@@ -627,18 +523,95 @@ def test_mmds_snapshot(uvm_nano, microvm_factory, version, imds_compat):
627523
Ensures that the version is persisted or initialised with the default if
628524
the firecracker version does not support it.
629525
"""
526+
basevm = uvm_nano
527+
basevm.add_net_iface()
528+
ipv4_address = "169.254.169.250"
630529

631-
current_release = working_version_as_artifact()
632-
uvm_nano.add_net_iface()
633-
_validate_mmds_snapshot(
634-
uvm_nano,
635-
microvm_factory,
636-
version,
637-
imds_compat,
638-
fc_binary_path=current_release.path,
639-
jailer_binary_path=current_release.jailer,
530+
# Configure MMDS version with custom IPv4 address.
531+
configure_mmds(
532+
basevm,
533+
version=version,
534+
iface_ids=["eth0"],
535+
ipv4_address=ipv4_address,
536+
imds_compat=imds_compat,
640537
)
641538

539+
expected_mmds_config = {
540+
"version": version,
541+
"ipv4_address": ipv4_address,
542+
"network_interfaces": ["eth0"],
543+
"imds_compat": False if imds_compat is None else imds_compat,
544+
}
545+
response = basevm.api.vm_config.get()
546+
assert response.json()["mmds-config"] == expected_mmds_config
547+
548+
data_store = {"latest": {"meta-data": {"ami-id": "ami-12345678"}}}
549+
populate_data_store(basevm, data_store)
550+
expected_response = "latest/" if imds_compat else data_store
551+
552+
basevm.start()
553+
ssh_connection = basevm.ssh
554+
run_guest_cmd(ssh_connection, f"ip route add {ipv4_address} dev eth0", "")
555+
556+
# Both V1 and V2 support token generation.
557+
token = generate_mmds_session_token(ssh_connection, ipv4_address, token_ttl=60)
558+
559+
# Fetch metadata.
560+
cmd = generate_mmds_get_request(
561+
ipv4_address,
562+
token=token,
563+
)
564+
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
565+
566+
# Create snapshot.
567+
snapshot = basevm.snapshot_full()
568+
569+
# Resume microVM and ensure session token is still valid on the base.
570+
response = basevm.resume()
571+
572+
# Fetch metadata again using the same token.
573+
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
574+
575+
# Kill base microVM.
576+
basevm.kill()
577+
578+
# Load microVM clone from snapshot.
579+
microvm = microvm_factory.build()
580+
microvm.spawn()
581+
microvm.restore_from_snapshot(snapshot, resume=True)
582+
583+
ssh_connection = microvm.ssh
584+
585+
# Check the reported MMDS config.
586+
response = microvm.api.vm_config.get()
587+
assert response.json()["mmds-config"] == expected_mmds_config
588+
589+
if version == "V2":
590+
# Attempting to reuse the token across a restore must fail in V2.
591+
cmd = generate_mmds_get_request(ipv4_address, token=token)
592+
run_guest_cmd(ssh_connection, cmd, "MMDS token not valid.")
593+
594+
# Re-generate token.
595+
token = generate_mmds_session_token(ssh_connection, ipv4_address, token_ttl=60)
596+
597+
# Data store is empty after a restore.
598+
cmd = generate_mmds_get_request(ipv4_address, token=token)
599+
run_guest_cmd(
600+
ssh_connection,
601+
cmd,
602+
(
603+
"Cannot retrieve value. The value has an unsupported type."
604+
if imds_compat
605+
else "null"
606+
),
607+
)
608+
609+
# Now populate the store.
610+
populate_data_store(microvm, data_store)
611+
612+
# Fetch metadata.
613+
run_guest_cmd(ssh_connection, cmd, expected_response, use_json=not imds_compat)
614+
642615

643616
def test_mmds_v2_negative(uvm_plain):
644617
"""

0 commit comments

Comments
 (0)