diff --git a/src/ctf/forensics.py b/src/ctf/forensics.py index 2b58d5d..f73412b 100644 --- a/src/ctf/forensics.py +++ b/src/ctf/forensics.py @@ -69,12 +69,12 @@ def inspect(path): except Exception: magic = "" - # Task 1: POSIX Permissions + # POSIX Permissions mode = stat_info.st_mode permissions_octal = oct(stat.S_IMODE(mode)) permissions_symbolic = stat.filemode(mode) - # Task 2: Ownership Identity + # Ownership Identity owner_uid = stat_info.st_uid owner_gid = stat_info.st_gid owner_username = str(owner_uid) @@ -91,13 +91,13 @@ def inspect(path): except KeyError: pass - # Task 3: Allocation Metrics + # Allocation Metrics if hasattr(stat_info, "st_blocks"): allocated_size = stat_info.st_blocks * 512 else: allocated_size = size - # Task 4: Hard Links + # Hard Links hard_links = stat_info.st_nlink # Task 5: Inode & Device Identifiers diff --git a/tests/env/alloc_test.bin b/tests/env/alloc_test.bin new file mode 100644 index 0000000..67d1df1 --- /dev/null +++ b/tests/env/alloc_test.bin @@ -0,0 +1 @@ +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/tests/env/inode_test.bin b/tests/env/inode_test.bin new file mode 100644 index 0000000..6320cd2 --- /dev/null +++ b/tests/env/inode_test.bin @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/tests/env/link_test.bin b/tests/env/link_test.bin new file mode 100644 index 0000000..c150ede --- /dev/null +++ b/tests/env/link_test.bin @@ -0,0 +1 @@ +link \ No newline at end of file diff --git a/tests/env/owner_test.bin b/tests/env/owner_test.bin new file mode 100644 index 0000000..6320cd2 --- /dev/null +++ b/tests/env/owner_test.bin @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/tests/env/perm_test.bin b/tests/env/perm_test.bin new file mode 100644 index 0000000..6320cd2 --- /dev/null +++ b/tests/env/perm_test.bin @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/tests/env/xattr_test.bin b/tests/env/xattr_test.bin new file mode 100644 index 0000000..6320cd2 --- /dev/null +++ b/tests/env/xattr_test.bin @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/tests/test_utils.py b/tests/test_forensics.py similarity index 95% rename from tests/test_utils.py rename to tests/test_forensics.py index 2ef3a2e..bf2499c 100644 --- a/tests/test_utils.py +++ b/tests/test_forensics.py @@ -253,3 +253,15 @@ def test_forensics_inspect_cli_missing_file(): result = runner.invoke(forensics_group, ["inspect", "non_existent_file.png"]) assert result.exit_code != 0 assert "does not exist" in result.output + +def test_forensics_signatures_cli(): + """ + Verifies that 'forensics signatures' runs successfully and displays + the list of supported file signatures. + """ + runner = CliRunner() + result = runner.invoke(forensics_group, ["signatures"]) + assert result.exit_code == 0 + assert "Supported Magic Signatures" in result.output + assert "PNG Image" in result.output + assert "89504E47" in result.output