diff --git a/nixos/tests/ec2-image.nix b/nixos/tests/ec2-image.nix index f3aa68b9b1e1..dcacbf75136f 100644 --- a/nixos/tests/ec2-image.nix +++ b/nixos/tests/ec2-image.nix @@ -182,7 +182,18 @@ in + " $QEMU_OPTS" ) - return create_machine(start_command) + return create_machine(start_command), metadata_dir + + def test_userdata_decompression(machine, user_data_path, compressed_data, format_name): + """Test that compressed user-data is decompressed by fetch-ec2-metadata""" + test_marker = f"{format_name}-decompression-test" + with open(user_data_path, "wb") as f: + f.write(compressed_data) + machine.succeed("systemctl restart fetch-ec2-metadata") + result = machine.succeed("cat /etc/ec2-metadata/user-data") + assert test_marker in result, f"Expected '{test_marker}' in decompressed {format_name} content, got: {result}" + journal = machine.succeed("journalctl -u fetch-ec2-metadata --no-pager -b") + assert "decompressing:" in journal, f"Expected decompression log in journal for {format_name}" # Create temporary directory for metadata (scoped for cleanup) temp_dir = tempfile.TemporaryDirectory() @@ -194,7 +205,8 @@ in client_pubkey, client_private_key = generate_client_ssh_key() # Set up machine with client's public key in metadata service - machine = setup_machine(temp_dir, client_pubkey) + machine, metadata_dir = setup_machine(temp_dir, client_pubkey) + user_data_path = os.path.join(metadata_dir, "1.0", "user-data") try: machine.start() @@ -256,6 +268,11 @@ in with subtest("Basic EC2 functionality"): machine.succeed("findmnt / -o SIZE -n | grep -E '[0-9]+G'") + with subtest("Decompression of gzip-compressed user-data"): + import gzip as gzip_mod + test_data = b"#!/bin/bash\necho gzip-decompression-test\n" + test_userdata_decompression(machine, user_data_path, gzip_mod.compress(test_data), "gzip") + finally: machine.shutdown() temp_dir.cleanup()