Skip to content

Commit 2aa6d52

Browse files
authored
Create gsoc25_refactor_analyzer_tests.md
1 parent e121e2a commit 2aa6d52

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Migrating IntelOwl Analyzer Tests: From Monkeypatching to a Structured Unit Testing Framework
2+
3+
For IntelOwl, which integrates dozens of analyzers to process a wide range of observables, maintaining robust and reliable tests is crucial. This summer, during my GSoC project, I worked on **migrating IntelOwl’s analyzer tests** from a **monkeypatch-heavy approach** to a **structured, maintainable unit testing framework** using Python’s built-in `unittest` module.
4+
5+
The goal was to improve reliability, reduce code duplication, and provide contributors with a simpler way to write and extend tests.
6+
7+
---
8+
9+
## 🌱 Pre-GSoC Contributions
10+
11+
Before being selected for GSoC, I was already actively contributing to IntelOwl and its ecosystem. These contributions not only helped me understand the codebase deeply but also demonstrated my commitment to the project.
12+
13+
Here are some of my notable pre-GSoC deliverables:
14+
15+
- **IntelOwl analyzers**:
16+
- [UltraDNS Analyzer (#2620)](https://github.com/intelowlproject/IntelOwl/pull/2620)
17+
- [Nuclei Analyzer (#2697)](https://github.com/intelowlproject/IntelOwl/pull/2697)
18+
- [Alter DNS Malicious Detector (#2753)](https://github.com/intelowlproject/IntelOwl/pull/2753)
19+
- [Spamhaus IPv6 and ASN Support (#2761)](https://github.com/intelowlproject/IntelOwl/pull/2761)
20+
- [ShellCheck Analyzer (#2775)](https://github.com/intelowlproject/IntelOwl/pull/2775)
21+
- [Malshare Ingestor (#2804)](https://github.com/intelowlproject/IntelOwl/pull/2804)
22+
23+
- **IntelOwl Integrations & SDKs**:
24+
- [GreedyBear Ingestor (#2709)](https://github.com/intelowlproject/IntelOwl/pull/2709)
25+
- [Playbook Support (#70)](https://github.com/intelowlproject/go-intelowl/pull/70)
26+
- [Pre-commit hooks for SDK (#71)](https://github.com/intelowlproject/go-intelowl/pull/71)
27+
- [Job List Error Fix (#263)](https://github.com/intelowlproject/pyintelowl/pull/263)
28+
- [Pages Flag for Listing Jobs (#265)](https://github.com/intelowlproject/pyintelowl/pull/265)
29+
- [HealthCheck URL Correction (#266)](https://github.com/intelowlproject/pyintelowl/pull/266)
30+
31+
These early contributions gave me strong familiarity with IntelOwl’s analyzers, ingestors, SDKs, and testing setup. Naturally, this became the foundation for my GSoC work on **refactoring analyzer tests**.
32+
33+
---
34+
35+
## 🔎 The Problem
36+
37+
Previously, IntelOwl relied heavily on **monkeypatching** for testing analyzers. While it worked, it came with drawbacks:
38+
39+
- Limited flexibility for adding **custom tests** for complex analyzers.
40+
- Harder for new contributors to extend or debug.
41+
42+
We needed a **systematic, scalable approach**—one that could:
43+
1. Cover all analyzers with all supported observable types.
44+
2. Reduce duplication by leveraging reusable test classes.
45+
3. Support both automated and custom tests.
46+
4. Make future contributions easier.
47+
48+
---
49+
50+
## 🛠 My GSoC Work
51+
52+
I approached the migration in clear phases:
53+
54+
- **Framework Design:** Built a reusable superclass for analyzer tests, eliminating duplication and replacing monkeypatch-heavy logic.
55+
- **Expanding Coverage:** Extended the framework to cover all analyzers, ensuring they worked with all supported observable types.
56+
- **Documentation:** Wrote contributor-friendly guidelines to help future maintainers and contributors easily extend tests.
57+
- **Polishing:** Final refinements, debugging, and optimization to make the framework stable and efficient.
58+
59+
By the end of GSoC, IntelOwl’s analyzers are now backed by a **clean, extensible, and fully documented unit testing framework**.
60+
61+
👉 Related PRs from my GSoC work:
62+
- [IntelOwl: Refactor Analyzer Tests (#2886)](https://github.com/intelowlproject/IntelOwl/pull/2886)
63+
- [Docs: Updated Testing Documentation (#38)](https://github.com/intelowlproject/docs/pull/38)
64+
---
65+
66+
## 🚀 The Outcome
67+
68+
Key achievements:
69+
-**100% analyzer coverage** with unit tests.
70+
-**Monkeypatching eliminated** (where unnecessary).
71+
-**Custom analyzer tests** applicable for complex cases.
72+
-**Contributor-friendly documentation** for future maintainers.
73+
74+
---
75+
76+
## 💭 Reflections
77+
78+
Being part of GSoC with IntelOwl has been a truly rewarding journey. From my first pre-GSoC contributions to completing a full-scale migration of the testing framework, I’ve grown both technically and personally. It was an incredible learning experience—improving my skills in Python testing, open-source collaboration, and large-scale project design.
79+
80+
More than anything, I feel proud to have contributed to making IntelOwl more reliable and sustainable for the community. This journey has reinforced my passion for open source.
81+
82+
---
83+
84+
## 🙌 Acknowledgements
85+
86+
A huge thanks to the IntelOwl maintainers for guidance and feedback throughout the migration process.
87+
88+
---

0 commit comments

Comments
 (0)