[GEMINI] Update forensics tests to metadata command and remove ctf inspect

This commit is contained in:
venus
2026-07-19 00:24:21 -05:00
parent 46c317fca1
commit 41b6612320

View File

@@ -6,7 +6,7 @@ import sys
from click.testing import CliRunner
from ctf.utils import load_config, active_categories
from ctf.forensics import get_metadata
from ctf.cli_forensics import forensics_group, inspect
from ctf.cli_forensics import forensics_group, metadata
# Define the persistent test environment path
TEST_ENV = Path("tests/env")
@@ -230,9 +230,9 @@ def test_inspect_extended_attributes():
# --- CLI Validation Tests ---
def test_forensics_inspect_cli_success():
def test_forensics_metadata_cli_success():
"""
Verifies that 'forensics inspect' successfully runs via the CLI and prints
Verifies that 'forensics metadata' successfully runs via the CLI and prints
the metadata in a formatted table.
"""
runner = CliRunner()
@@ -240,7 +240,7 @@ def test_forensics_inspect_cli_success():
with open(test_file, "wb") as f:
f.write(b"\x89PNG\r\n\x1a\n")
result = runner.invoke(forensics_group, ["inspect", str(test_file)])
result = runner.invoke(forensics_group, ["metadata", str(test_file)])
assert result.exit_code == 0
assert "Metadata: test_file.png" in result.output
assert "Size" in result.output
@@ -248,25 +248,9 @@ def test_forensics_inspect_cli_success():
assert "Detected Type" in result.output
assert "PNG Image" in result.output
def test_root_inspect_cli_success():
def test_nested_metadata_cli_success():
"""
Verifies that 'ctf inspect' successfully runs at the root level and prints
the metadata in a formatted table.
"""
from ctf.main import cli
runner = CliRunner()
test_file = TEST_ENV / "test_file_root.png"
with open(test_file, "wb") as f:
f.write(b"\x89PNG\r\n\x1a\n")
result = runner.invoke(cli, ["inspect", str(test_file)])
assert result.exit_code == 0
assert "Metadata: test_file_root.png" in result.output
assert "PNG Image" in result.output
def test_nested_inspect_cli_success():
"""
Verifies that 'ctf forensics inspect' successfully runs via the root CLI.
Verifies that 'ctf forensics metadata' successfully runs via the root CLI.
"""
from ctf.main import cli
runner = CliRunner()
@@ -274,17 +258,17 @@ def test_nested_inspect_cli_success():
with open(test_file, "wb") as f:
f.write(b"\x89PNG\r\n\x1a\n")
result = runner.invoke(cli, ["forensics", "inspect", str(test_file)])
result = runner.invoke(cli, ["forensics", "metadata", str(test_file)])
assert result.exit_code == 0
assert "Metadata: test_file_nested.png" in result.output
assert "PNG Image" in result.output
def test_forensics_inspect_cli_missing_file():
def test_forensics_metadata_cli_missing_file():
"""
Verifies that the CLI fails gracefully when a non-existent file path is specified.
"""
runner = CliRunner()
result = runner.invoke(forensics_group, ["inspect", "non_existent_file.png"])
result = runner.invoke(forensics_group, ["metadata", "non_existent_file.png"])
assert result.exit_code != 0
assert "does not exist" in result.output
@@ -340,18 +324,18 @@ def test_exif_cli_options():
test_file = TEST_ENV / "mock_exif_image.png"
# Verify mutual exclusion error
result_err = runner.invoke(cli, ["inspect", "-i", "-e", str(test_file)])
result_err = runner.invoke(cli, ["forensics", "metadata", "-i", "-e", str(test_file)])
assert result_err.exit_code != 0
assert "Cannot specify more than one" in result_err.output
# Verify --inode hides EXIF data table
result_inode = runner.invoke(cli, ["inspect", "-i", str(test_file)])
result_inode = runner.invoke(cli, ["forensics", "metadata", "-i", str(test_file)])
assert result_inode.exit_code == 0
assert "Metadata: mock_exif_image.png" in result_inode.output
assert "EXIF Metadata" not in result_inode.output
# Verify --exif hides POSIX table but displays EXIF data table
result_exif = runner.invoke(cli, ["inspect", "-e", str(test_file)])
result_exif = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)])
assert result_exif.exit_code == 0
assert "Metadata: mock_exif_image.png" not in result_exif.output
assert "EXIF Metadata" in result_exif.output
@@ -391,7 +375,7 @@ def test_exif_cli_options_warning():
with open(test_file, "wb") as f:
f.write(b"\x89PNG\r\n\x1a\n")
result = runner.invoke(cli, ["inspect", "-e", str(test_file)])
result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)])
assert result.exit_code == 0
assert "No EXIF or comment metadata found" in result.output
@@ -410,7 +394,7 @@ def test_exif_cli_comment_only():
with open(test_file, "wb") as f:
f.write(mock_jpeg)
result = runner.invoke(cli, ["inspect", "-e", str(test_file)])
result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)])
assert result.exit_code == 0
assert "Comment" in result.output
assert "flag{comment_only}" in result.output
@@ -455,7 +439,7 @@ def test_adobe_xmp_cli():
runner = CliRunner()
test_file = TEST_ENV / "mock_xmp.jpg"
result = runner.invoke(cli, ["inspect", "-e", str(test_file)])
result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)])
assert result.exit_code == 0
assert "EXIF Metadata" in result.output
assert "cc:license" in result.output
@@ -510,19 +494,19 @@ def test_jpeg_iptc_parsing():
def test_cli_physical_option():
"""
Verifies the ctf inspect CLI supports -p/--physical and mutual exclusion rules.
Verifies the ctf forensics metadata CLI supports -p/--physical and mutual exclusion rules.
"""
from ctf.main import cli
runner = CliRunner()
test_file = TEST_ENV / "mock_physical.jpg"
# Mutual exclusion check
result_err = runner.invoke(cli, ["inspect", "-p", "-e", str(test_file)])
result_err = runner.invoke(cli, ["forensics", "metadata", "-p", "-e", str(test_file)])
assert result_err.exit_code != 0
assert "Cannot specify more than one" in result_err.output
# Physical view check
result_phys = runner.invoke(cli, ["inspect", "-p", str(test_file)])
result_phys = runner.invoke(cli, ["forensics", "metadata", "-p", str(test_file)])
assert result_phys.exit_code == 0
assert "Physical Metadata" in result_phys.output
assert "Image Size" in result_phys.output
@@ -610,9 +594,9 @@ def test_adobe_xmp_formatting():
assert meta.exif_data.get("exif:EmptyAttr") == "exif:Value"
assert "rdf:Description" not in meta.exif_data
def test_inspect_decoded_hints_cli():
def test_metadata_decoded_hints_cli():
"""
Verifies that inspect command successfully decodes and prints hex/base64 encoded metadata hints.
Verifies that metadata command successfully decodes and prints hex/base64 encoded metadata hints.
"""
from ctf.main import cli
runner = CliRunner()
@@ -627,7 +611,7 @@ def test_inspect_decoded_hints_cli():
with open(test_file, "wb") as f:
f.write(mock_jpeg)
result = runner.invoke(cli, ["inspect", str(test_file)])
result = runner.invoke(cli, ["forensics", "metadata", str(test_file)])
assert result.exit_code == 0
assert "Decoded Metadata Hints" in result.output
assert "Comment" in result.output