33import dev .aikido .agent_api .background .Endpoint ;
44import dev .aikido .agent_api .background .cloud .api .APIResponse ;
55import dev .aikido .agent_api .background .cloud .api .ReportingApi ;
6+ import dev .aikido .agent_api .background .cloud .api .events .DetectedAttackWave ;
67import dev .aikido .agent_api .collectors .WebRequestCollector ;
78import dev .aikido .agent_api .context .Context ;
9+ import dev .aikido .agent_api .context .ContextObject ;
10+ import dev .aikido .agent_api .storage .AttackQueue ;
811import dev .aikido .agent_api .storage .ServiceConfigStore ;
912import dev .aikido .agent_api .storage .statistics .StatisticsStore ;
1013import org .junit .jupiter .api .BeforeEach ;
1114import org .junit .jupiter .api .Test ;
1215import utils .EmptySampleContextObject ;
1316
1417import java .util .List ;
18+ import java .util .Map ;
1519
1620import static dev .aikido .agent_api .helpers .UnixTimeMS .getUnixTimeMS ;
1721import static org .junit .jupiter .api .Assertions .*;
@@ -29,6 +33,7 @@ void setUp() {
2933 StatisticsStore .clear ();
3034 ServiceConfigStore .updateFromAPIResponse (emptyAPIResponse );
3135 ServiceConfigStore .updateFromAPIListsResponse (emptyAPIListsResponse );
36+ AttackQueue .clear ();
3237 }
3338
3439 @ Test
@@ -255,4 +260,40 @@ void testReport_ipNotAllowedUsingLists_Ip_Bypassed() {
255260 assertNull (response );
256261 assertNull (Context .get ());
257262 }
263+
264+ @ Test
265+ void testReport_WithAttackWaveContext () throws InterruptedException {
266+ ContextObject attackWaveCtx = new EmptySampleContextObject ("/wp-config.php" , "BADMETHOD" , Map .of ());
267+
268+ WebRequestCollector .Res response = WebRequestCollector .report (attackWaveCtx );
269+ assertNull (response );
270+ assertEquals (0 , AttackQueue .getSize ());
271+
272+ // 2...14
273+ WebRequestCollector .report (attackWaveCtx );
274+ WebRequestCollector .report (attackWaveCtx );
275+ WebRequestCollector .report (attackWaveCtx );
276+ WebRequestCollector .report (attackWaveCtx );
277+ WebRequestCollector .report (attackWaveCtx );
278+ WebRequestCollector .report (attackWaveCtx );
279+ WebRequestCollector .report (attackWaveCtx );
280+ WebRequestCollector .report (attackWaveCtx );
281+ WebRequestCollector .report (attackWaveCtx );
282+ WebRequestCollector .report (attackWaveCtx );
283+ WebRequestCollector .report (attackWaveCtx );
284+ WebRequestCollector .report (attackWaveCtx );
285+ WebRequestCollector .report (attackWaveCtx );
286+
287+ WebRequestCollector .Res response2 = WebRequestCollector .report (attackWaveCtx );
288+ assertNull (response2 );
289+ assertEquals (1 , AttackQueue .getSize ());
290+ DetectedAttackWave .DetectedAttackWaveEvent event = (DetectedAttackWave .DetectedAttackWaveEvent ) AttackQueue .get ();
291+ assertEquals ("192.168.1.1" , event .request ().ipAddress ());
292+ assertEquals ("web" , event .request ().source ());
293+ assertEquals (null , event .request ().userAgent ());
294+ assertEquals ("detected_attack_wave" , event .type ());
295+ assertEquals (null , event .attack ().user ());
296+ assertEquals (0 , event .attack ().metadata ().size ());
297+
298+ }
258299}
0 commit comments