Files
REDflare/tests/test_native_modules.py
2026-06-21 17:44:33 +00:00

56 lines
2.8 KiB
Python

import json
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
from redflare.core.models import Target
from redflare.modules.base import ModuleContext
from redflare.modules.browser import NativeBrowserRuntimeModule
from redflare.modules.http import HTTPResponse
from redflare.modules.noauth import NativeNoAuthModule
from redflare.modules.repository import normalize_repository, run_repository_intelligence
class NativeModuleTests(unittest.TestCase):
def test_repository_slug_normalization(self):
self.assertEqual(normalize_repository("owner/repository"), "owner/repository")
with self.assertRaises(ValueError): normalize_repository("repository")
@patch("redflare.modules.browser.NativeBrowserRuntimeModule._capture", side_effect=RuntimeError("fixture"))
@patch("redflare.modules.browser.request")
def test_browser_runtime_has_native_fallback(self, get, _capture):
get.return_value = HTTPResponse("https://example.test", 200, {}, b"fixture")
with tempfile.TemporaryDirectory() as directory:
context = ModuleContext("run", Path(directory))
result = NativeBrowserRuntimeModule().run(Target("https://example.test", "example.test", "https", 443), context)
self.assertEqual(result.status, "completed")
self.assertEqual(result.observations["engine"], "native-http-fallback")
@patch("redflare.modules.noauth.time.sleep")
@patch("redflare.modules.noauth.request")
def test_noauth_module_emits_native_finding(self, get, _sleep):
get.return_value = HTTPResponse("https://example.test/admin", 200, {"content-type": "text/html"}, b"admin console")
with tempfile.TemporaryDirectory() as directory:
context = ModuleContext("run", Path(directory), rate=0)
result = NativeNoAuthModule().run(Target("https://example.test", "example.test", "https", 443), context)
self.assertGreater(len(result.findings), 0)
self.assertEqual(result.observations["engine"], "native-redflare")
@patch("redflare.modules.repository._github")
@patch.dict("os.environ", {"GITHUB_TOKEN": "fixture-token"})
def test_repository_intelligence_masks_findings(self, github):
github.side_effect = [
{"default_branch": "main"},
{"tree": [{"type": "blob", "path": "config.js", "sha": "abc", "size": 100}]},
{"encoding": "base64", "content": "YXBpX2tleSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI="},
]
with tempfile.TemporaryDirectory() as directory:
result = run_repository_intelligence(["owner/repo"], Path(directory))
data = json.loads(Path(result["output"]).read_text())
self.assertEqual(result["engine"], "native-redflare")
self.assertNotIn("abcdefghijklmnopqrstuvwxyz", json.dumps(data))
if __name__ == "__main__": unittest.main()