[GEMINI] Add integration tests for artifacts files
This commit is contained in:
95
tests/test_artifacts.py
Normal file
95
tests/test_artifacts.py
Normal file
@@ -0,0 +1,95 @@
|
||||
# tests/test_artifacts.py
|
||||
from pathlib import Path
|
||||
from ctf.forensics import get_metadata
|
||||
from ctf.analysis import run_analysis
|
||||
|
||||
ARTIFACTS_DIR = Path("tests/artifacts")
|
||||
|
||||
# {{{ test_flag_txt
|
||||
def test_flag_txt():
|
||||
"""Asserts flag.txt holds the direct plaintext flag."""
|
||||
flag_file = ARTIFACTS_DIR / "flag.txt"
|
||||
content = flag_file.read_text().strip()
|
||||
assert content == "picoCTF{h1dd3n_1n_1m4g3_5d4cba73}"
|
||||
# }}}
|
||||
|
||||
# {{{ test_cat_jpg
|
||||
def test_cat_jpg():
|
||||
"""Asserts cat.jpg contains the base64-encoded license flag."""
|
||||
file_path = ARTIFACTS_DIR / "cat.jpg"
|
||||
meta = get_metadata(file_path)
|
||||
# Check that license metadata has the base64 encoded hint
|
||||
assert "EXIF:cc:license" in meta.decoded_hints
|
||||
assert meta.decoded_hints["EXIF:cc:license"].get("base64") == "picoCTF{the_m3tadata_1s_modified}"
|
||||
|
||||
# Run analysis
|
||||
res = run_analysis(file_path)
|
||||
assert res.success
|
||||
assert "picoCTF{the_m3tadata_1s_modified}" in res.routes[0].extracted_flags
|
||||
# }}}
|
||||
|
||||
# {{{ test_easy_cat_jpg
|
||||
def test_easy_cat_jpg():
|
||||
"""Asserts easy-cat.jpg contains comment flag and license flag."""
|
||||
file_path = ARTIFACTS_DIR / "easy-cat.jpg"
|
||||
meta = get_metadata(file_path)
|
||||
assert meta.comment == "picoCTF{easypeasy}"
|
||||
|
||||
# Run analysis
|
||||
res = run_analysis(file_path)
|
||||
assert res.success
|
||||
flags = res.routes[0].extracted_flags
|
||||
assert "picoCTF{easypeasy}" in flags
|
||||
assert "picoCTF{the_m3tadata_1s_modified}" in flags
|
||||
# }}}
|
||||
|
||||
# {{{ test_easy_cat_jpg_original
|
||||
def test_easy_cat_jpg_original():
|
||||
"""Asserts easy-cat.jpg_original contains only the license flag."""
|
||||
file_path = ARTIFACTS_DIR / "easy-cat.jpg_original"
|
||||
meta = get_metadata(file_path)
|
||||
assert not meta.comment
|
||||
|
||||
res = run_analysis(file_path)
|
||||
assert res.success
|
||||
assert "picoCTF{the_m3tadata_1s_modified}" in res.routes[0].extracted_flags
|
||||
# }}}
|
||||
|
||||
# {{{ test_garden_jpg
|
||||
def test_garden_jpg():
|
||||
"""Asserts garden.jpg contains no metadata flags."""
|
||||
file_path = ARTIFACTS_DIR / "garden.jpg"
|
||||
meta = get_metadata(file_path)
|
||||
assert not meta.comment
|
||||
|
||||
res = run_analysis(file_path)
|
||||
assert not res.success
|
||||
assert not res.routes[0].extracted_flags
|
||||
# }}}
|
||||
|
||||
# {{{ test_hips_jpg
|
||||
def test_hips_jpg():
|
||||
"""Asserts hips.jpg contains comment hint but no actual flags."""
|
||||
file_path = ARTIFACTS_DIR / "hips.jpg"
|
||||
meta = get_metadata(file_path)
|
||||
assert "Comment" in meta.decoded_hints
|
||||
# Steghide password hint decodes to pAzzword, not a flag
|
||||
assert meta.decoded_hints["Comment"].get("base64->base64") == "pAzzword"
|
||||
|
||||
res = run_analysis(file_path)
|
||||
assert not res.success
|
||||
assert not res.routes[0].extracted_flags
|
||||
# }}}
|
||||
|
||||
# {{{ test_red_png
|
||||
def test_red_png():
|
||||
"""Asserts red.png contains comment hint but no actual flags."""
|
||||
file_path = ARTIFACTS_DIR / "red.png"
|
||||
meta = get_metadata(file_path)
|
||||
assert "Comment" in meta.decoded_hints
|
||||
assert meta.decoded_hints["Comment"].get("base64->base64") == "pAzzword"
|
||||
|
||||
res = run_analysis(file_path)
|
||||
assert not res.success
|
||||
assert not res.routes[0].extracted_flags
|
||||
# }}}
|
||||
Reference in New Issue
Block a user