Skip to content

Commit 26d8599

Browse files
authored
Merge pull request #65 from intelowlproject/gsoc-2025-refactor-tests
Create gsoc25_refactor_analyzer_tests.md
2 parents e121e2a + 766ed6d commit 26d8599

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
title: Migrating IntelOwl Analyzer Tests
2+
date: 2025-08-25
3+
cover: /images/gsoclogo.png
4+
author: Pranjal Gupta
5+
6+
# Migrating IntelOwl Analyzer Tests: From Monkeypatching to a Structured Unit Testing Framework
7+
8+
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.
9+
10+
The goal was to improve reliability, reduce code duplication, and provide contributors with a simpler way to write and extend tests.
11+
12+
---
13+
14+
## 🌱 Pre-GSoC Contributions
15+
16+
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.
17+
18+
Here are some of my notable pre-GSoC deliverables:
19+
20+
- **IntelOwl analyzers**:
21+
- [UltraDNS Analyzer (#2620)](https://github.com/intelowlproject/IntelOwl/pull/2620)
22+
- [Nuclei Analyzer (#2697)](https://github.com/intelowlproject/IntelOwl/pull/2697)
23+
- [Alter DNS Malicious Detector (#2753)](https://github.com/intelowlproject/IntelOwl/pull/2753)
24+
- [Spamhaus IPv6 and ASN Support (#2761)](https://github.com/intelowlproject/IntelOwl/pull/2761)
25+
- [ShellCheck Analyzer (#2775)](https://github.com/intelowlproject/IntelOwl/pull/2775)
26+
- [Malshare Ingestor (#2804)](https://github.com/intelowlproject/IntelOwl/pull/2804)
27+
28+
- **IntelOwl Integrations & SDKs**:
29+
- [GreedyBear Ingestor (#2709)](https://github.com/intelowlproject/IntelOwl/pull/2709)
30+
- [Playbook Support (#70)](https://github.com/intelowlproject/go-intelowl/pull/70)
31+
- [Pre-commit hooks for SDK (#71)](https://github.com/intelowlproject/go-intelowl/pull/71)
32+
- [Job List Error Fix (#263)](https://github.com/intelowlproject/pyintelowl/pull/263)
33+
- [Pages Flag for Listing Jobs (#265)](https://github.com/intelowlproject/pyintelowl/pull/265)
34+
- [HealthCheck URL Correction (#266)](https://github.com/intelowlproject/pyintelowl/pull/266)
35+
36+
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**.
37+
38+
---
39+
40+
## 🔎 The Problem
41+
42+
Previously, IntelOwl relied heavily on **monkeypatching** for testing analyzers. While it worked, it came with drawbacks:
43+
44+
- Limited flexibility for adding **custom tests** for complex analyzers.
45+
- Harder for new contributors to extend or debug.
46+
47+
We needed a **systematic, scalable approach**—one that could:
48+
1. Cover all analyzers with all supported observable types.
49+
2. Reduce duplication by leveraging reusable test classes.
50+
3. Support both automated and custom tests.
51+
4. Make future contributions easier.
52+
53+
---
54+
55+
## 🛠 My GSoC Work
56+
57+
I approached the migration in clear phases:
58+
59+
- **Framework Design:** Built a reusable superclass for analyzer tests, eliminating duplication and replacing monkeypatch-heavy logic.
60+
- **Expanding Coverage:** Extended the framework to cover all analyzers, ensuring they worked with all supported observable types.
61+
- **Documentation:** Wrote contributor-friendly guidelines to help future maintainers and contributors easily extend tests.
62+
- **Polishing:** Final refinements, debugging, and optimization to make the framework stable and efficient.
63+
64+
By the end of GSoC, IntelOwl’s analyzers are now backed by a **clean, extensible, and fully documented unit testing framework**.
65+
66+
👉 Related PRs from my GSoC work:
67+
- [IntelOwl: Refactor Analyzer Tests (#2886)](https://github.com/intelowlproject/IntelOwl/pull/2886)
68+
- [Docs: Updated Testing Documentation (#38)](https://github.com/intelowlproject/docs/pull/38)
69+
---
70+
71+
## 🚀 The Outcome
72+
73+
Key achievements:
74+
-**100% analyzer coverage** with unit tests.
75+
-**Monkeypatching eliminated** (where unnecessary).
76+
-**Custom analyzer tests** applicable for complex cases.
77+
-**Contributor-friendly documentation** for future maintainers and contributors.
78+
79+
---
80+
81+
## 💭 Reflections
82+
83+
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.
84+
85+
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.
86+
87+
---
88+
89+
## 🙌 Acknowledgements
90+
91+
A huge thanks to the IntelOwl maintainers for guidance and feedback throughout the migration process.
92+
93+
---

0 commit comments

Comments
 (0)