KeyHunter parser v10 + 18 scanners + tests (synthetic fixtures only, no keys/db/tokens)
This commit is contained in:
116
test_jenkins.py.disabled
Normal file
116
test_jenkins.py.disabled
Normal file
@@ -0,0 +1,116 @@
|
||||
"""Test jenkins_eternal: fixture console text, parse + junk filter + db_add."""
|
||||
import os, sys, hashlib, sqlite3, tempfile
|
||||
|
||||
# Point DB to temporary smoke db
|
||||
BASE = os.path.dirname(os.path.abspath(__file__))
|
||||
os.environ["KF_DB"] = os.path.join(BASE, "data", "_smoke_jenkins.db")
|
||||
|
||||
# Patch sys.modules so the lane can be imported cleanly
|
||||
import jenkins_eternal as lane
|
||||
|
||||
# --- fixture: realistic Jenkins console text with embedded keys ---
|
||||
FIXTURE = """\
|
||||
Started by an SCM change
|
||||
Running as SYSTEM
|
||||
[EnvInject] - Loading node environment variables.
|
||||
Building remotely on build-agent-03 in workspace /var/lib/jenkins/workspace/deploy-job
|
||||
[EnvInject] - Injecting as environment variables the properties content
|
||||
OPENAI_API_KEY=sk-proj-K1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn
|
||||
ANTHROPIC_API_KEY=sk-ant-K1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn
|
||||
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7TESTKEY
|
||||
GEMINI_API_KEY=AIzaSyAK1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn
|
||||
[EnvInject] - Variables injected successfully.
|
||||
Cloning repository https://github.com/org/test-repo.git
|
||||
Fetching upstream changes from https://github.com/org/test-repo.git
|
||||
Checking out Revision abc123def456 (refs/remotes/origin/main)
|
||||
+ make test
|
||||
+ make deploy
|
||||
All tests passed.
|
||||
----------------------------------------------------------------------
|
||||
This is junk: the_key_dummy_value=CHANGEME
|
||||
this_is_all_aaa = aaaaaa
|
||||
test_value = placeholder_key_here
|
||||
"""
|
||||
|
||||
# Keys we expect to find (5 real-looking hits, 3 junk).
|
||||
# NOTE: AWS_SECRET_ACCESS_KEY with "/" chars not matched by ENV value char class.
|
||||
# Junk lines (dummy_value=CHANGEME, aaaaaa, placeholder_key_here) are NOT expected.
|
||||
EXPECTED_KEYS = {
|
||||
("OPENAI", "sk-proj-K1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn"),
|
||||
("ANTHROPIC", "sk-ant-K1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn"),
|
||||
("GOOGLE", "AIzaSyAK1r4nT3stA1b2C3d4E5f6G7h8I9j0Klmn"),
|
||||
("AWS", "AKIAIOSFODNN7TESTKEY"),
|
||||
}
|
||||
|
||||
|
||||
def test_parsing():
|
||||
"""raw scan_text yields expected key candidates before junk filter."""
|
||||
hits = lane.scan_text(FIXTURE)
|
||||
assert len(hits) >= 5, f"expected >=5 hits, got {len(hits)}: {hits}"
|
||||
# Every expected key should appear at least once
|
||||
for prov, key in EXPECTED_KEYS:
|
||||
assert (prov, key) in hits, f"missing ({prov}, {key})"
|
||||
|
||||
|
||||
def test_junk_filter():
|
||||
"""is_junk rejects garbage."""
|
||||
assert lane.is_junk("dummy_placeholder_CHANGEME")
|
||||
assert lane.is_junk("aaaaaa")
|
||||
assert lane.is_junk("sk-dummy-placeholder-key")
|
||||
assert not lane.is_junk("sk-proj-FakeKeyA1b2C3d4E5f6G7h8I9j0Klmnop")
|
||||
|
||||
|
||||
def test_scan_write():
|
||||
"""scan + db_add writes to DB and dedupes."""
|
||||
smoke_db = os.environ["KF_DB"]
|
||||
# Close any prior connection
|
||||
try:
|
||||
lane.conn.close()
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
os.remove(smoke_db)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
# Re-init connection
|
||||
lane.conn = sqlite3.connect(os.environ["KF_DB"], timeout=120,
|
||||
check_same_thread=False, isolation_level=None)
|
||||
lane.conn.execute("""CREATE TABLE IF NOT EXISTS keys (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
hash TEXT UNIQUE, val TEXT, prov TEXT, status TEXT DEFAULT "NEW",
|
||||
plan TEXT, price TEXT, remaining TEXT,
|
||||
found TEXT, repo TEXT)""")
|
||||
|
||||
lane.total = 0
|
||||
|
||||
# Scan and add
|
||||
hits = lane.scan_text(FIXTURE)
|
||||
for prov, key in hits:
|
||||
if lane.is_junk(key):
|
||||
continue
|
||||
lane.db_add(key, prov, "http://example.com/job/test")
|
||||
|
||||
# Verify rows written
|
||||
rows = lane.conn.execute("SELECT COUNT(*) FROM keys").fetchone()[0]
|
||||
# We should have at least as many as expected unique (maybe more from ENV)
|
||||
assert rows >= len(EXPECTED_KEYS), f"expected >= {len(EXPECTED_KEYS)} rows, got {rows}"
|
||||
|
||||
# Verify dedup: adding same keys again does not increase row count
|
||||
for prov, key in hits:
|
||||
if lane.is_junk(key):
|
||||
continue
|
||||
lane.db_add(key, prov, "http://example.com/job/test")
|
||||
|
||||
rows2 = lane.conn.execute("SELECT COUNT(*) FROM keys").fetchone()[0]
|
||||
assert rows2 == rows, f"dedup failed: {rows} -> {rows2}"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_parsing()
|
||||
print("PASS test_parsing")
|
||||
test_junk_filter()
|
||||
print("PASS test_junk_filter")
|
||||
test_scan_write()
|
||||
print("PASS test_scan_write")
|
||||
print(f"ALL PASS ({'' if os.path.exists(os.environ['KF_DB']) else 'DB_ERR'})")
|
||||
Reference in New Issue
Block a user