Unverified Commit ea11e1de authored by Philip Taron's avatar Philip Taron
Browse files

nixos/ec2-image: add test for gzip user-data decompression

Verify that fetch-ec2-metadata correctly decompresses gzip-compressed
EC2 user data. Adds a test helper for reuse by subsequent compression
format tests.
parent cb4dcba4
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -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()