Testing & CI
Kedua repo (shield-core, laravel-shield) memiliki CI sendiri (GitHub Actions). Semua hijau di matrix
PHP 8.2 / 8.3 / 8.4.
Perintah dasar (di tiap repo)
Section titled “Perintah dasar (di tiap repo)”| Perintah | Fungsi |
|---|---|
composer install |
Install dependensi. |
composer test |
Pest: unit core + integrasi adapter (Testbench). |
composer analyse |
PHPStan level 8 (+ Larastan untuk adapter). |
composer format-test |
Pint. |
composer validate --strict |
Validasi composer.json. |
Coverage
Section titled “Coverage”- Diukur hanya atas
src/per package (configphpunit.coverage-*.xml.dist). - Gate: shield-core ≥ 85%, laravel-shield ≥ 50% (via
tools/check-coverage.php). - Butuh driver coverage (xdebug di CI).
Mutation testing
Section titled “Mutation testing”- Memakai mutation testing bawaan Pest (
pest --mutate,pestphp/pest-plugin-mutate) — bukan Infection (Infection tidak mendukung Pest secara native). - Di-scope ke logika keamanan core (
Decision/Scoring/Reputationvia--class) +--parallelagar selesai dalam beberapa menit. - Report-only (
--min=0) sampai baseline MSI ada; naikkan--min=80setelah baseline terukur. - Butuh xdebug (CI).
E2E (laravel-shield)
Section titled “E2E (laravel-shield)”tools/e2e-smoke.sh menjalankan examples/laravel-demo dengan php -S + curl: normal, blok critical,
SQLi body, verified Googlebot, ban → challenge → verify → kembali ke /home, trusted cookie tidak
menembus critical.
Replay & corpus
Section titled “Replay & corpus”fixtures/waf-corpus.json,bot-corpus.json,scanner-corpus.json,normal-traffic.json,seo-corpus.json— corpus regresi anonim dari log WAF/bot nyata.php tools/replay.php --corpus=fixtures/waf-corpus.json --pack-wordpress→ detection rate + false positive.php tools/scanner-simulator/simulate.php→ regresi traffic normal vs skenario scanner.
Batasan corpus saat ini
Section titled “Batasan corpus saat ini”Corpus belum menguji jalur crawler dan M2M, jadi ada klaim di dokumentasi lain yang belum tercakup regresi:
| Yang tidak ter-cover | Alasan |
|---|---|
Perilaku bots.mode |
Entri corpus hanya punya uri, method, expected — tidak ada user_agent, sehingga BehaviorDetector tidak pernah mengklasifikasi crawler. |
Aturan payload.* |
Body request kosong di replay, dan hanya multipart/* yang di-skip, jadi inspeksi body tidak pernah dieksekusi. |
| Outcome challenge | Replay hanya mengevaluasi shouldBlock(), sehingga verdict challenge tidak dihitung. |
Konsekuensinya, fixtures/seo-corpus.json memverifikasi bahwa path SEO tidak diblok, bukan bahwa Googlebot
terverifikasi tetap lolos. Jalur tersebut diuji terpisah di e2e (tools/e2e-smoke.sh) dan unit test
BehaviorDetector.
Perluasan schema corpus dan ekspektasi challenge direncanakan untuk rilis berikutnya.
Benchmark performa
Section titled “Benchmark performa”php tools/scanner-simulator/benchmark.php — latensi jalur normal, target median < 2 ms (dijalankan di CI
sebagai gate).
Secret scan
Section titled “Secret scan”Job secrets memakai Gitleaks CLI (open-source, gratis) dengan ruleset kustom (.gitleaks.toml)
ber-confidence tinggi — ruleset default memicu banyak false positive pada data uji package keamanan. Advisory
(tidak memblokir pipeline).
Powered by PT Ganadev Multi Solusi