@@ -70,7 +70,10 @@ class PowerWAFModuleSpecification extends DDSpecification {
7070  Additive  pwafAdditive
7171  PowerwafMetrics  metrics
7272
73+   WafMetricCollector  wafMetricCollector =  Mock (WafMetricCollector )
74+ 
7375  void  setup () {
76+     WafMetricCollector . INSTANCE  =  wafMetricCollector
7477    AgentTracer . forceRegister(tracer)
7578  }
7679
@@ -206,6 +209,8 @@ class PowerWAFModuleSpecification extends DDSpecification {
206209    ctx. closeAdditive()
207210
208211    then :
212+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
213+     1  *  wafMetricCollector. wafUpdates(_, true )
209214    1  *  reconf. reloadSubscriptions()
210215    1  *  flow. setAction({ Flow.Action.RequestBlockingAction  rba  -> 
211216      rba. statusCode ==  501  && 
@@ -241,6 +246,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
241246    ctx. closeAdditive()
242247
243248    then :
249+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
244250    1  *  flow. setAction({ Flow.Action.RequestBlockingAction  rba  -> 
245251      rba. statusCode ==  403  && 
246252        rba. blockingContentType ==  BlockingContentType . AUTO 
@@ -282,6 +288,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
282288    ctx. closeAdditive()
283289
284290    then :
291+     1  *  wafMetricCollector. wafUpdates(_, true )
285292    1  *  reconf. reloadSubscriptions()
286293    1  *  flow. setAction({ Flow.Action.RequestBlockingAction  rba  -> 
287294      rba. statusCode ==  403  && 
@@ -364,6 +371,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
364371    ctx. closeAdditive()
365372
366373    then :
374+     1  *  wafMetricCollector. wafUpdates(_, true )
367375    1  *  reconf. reloadSubscriptions()
368376    1  *  flow. setAction({ Flow.Action.RequestBlockingAction  rba  -> 
369377      rba. statusCode ==  403  && 
@@ -440,7 +448,10 @@ class PowerWAFModuleSpecification extends DDSpecification {
440448    }
441449
442450    then :
451+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
452+     1  *  wafMetricCollector. wafUpdates(_, true )
443453    1  *  reconf. reloadSubscriptions()
454+     0  *  _
444455
445456    when :
446457    dataListener. onDataAvailable(flow, ctx, ATTACK_BUNDLE , gwCtx)
@@ -522,7 +533,10 @@ class PowerWAFModuleSpecification extends DDSpecification {
522533    }
523534
524535    then :
536+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
537+     1  *  wafMetricCollector. wafUpdates(_, true )
525538    1  *  reconf. reloadSubscriptions()
539+     0  *  _
526540
527541    when :
528542    dataListener. onDataAvailable(flow, ctx, ATTACK_BUNDLE , gwCtx)
@@ -597,7 +611,10 @@ class PowerWAFModuleSpecification extends DDSpecification {
597611    }
598612
599613    then :
614+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
615+     2  *  wafMetricCollector. wafUpdates(_, true )
600616    2  *  reconf. reloadSubscriptions()
617+     0  *  _
601618
602619    when :
603620    dataListener. onDataAvailable(flow, ctx, ATTACK_BUNDLE , gwCtx)
@@ -972,9 +989,6 @@ class PowerWAFModuleSpecification extends DDSpecification {
972989    TraceSegment segment = Mock() 
973990    TraceSegmentPostProcessor pp = service.traceSegmentPostProcessors.last() 
974991
975-     def mockWafMetricCollector = Mock(WafMetricCollector) 
976-     WafMetricCollector.INSTANCE = mockWafMetricCollector 
977- 
978992    when: 
979993    dataListener.onDataAvailable(flow, ctx, db, gwCtx) 
980994
@@ -987,7 +1001,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
9871001      pwafAdditive = it[0].openAdditive() } 
9881002    1 * ctx.getWafMetrics() 
9891003    1 * ctx.increaseWafTimeouts() 
990-     1 * mockWafMetricCollector .get().wafRequestTimeout() 
1004+     1 * wafMetricCollector .get().wafRequestTimeout() 
9911005    0 * _ 
9921006
9931007    when: 
@@ -1014,9 +1028,6 @@ class PowerWAFModuleSpecification extends DDSpecification {
10141028    TraceSegment segment = Mock() 
10151029    TraceSegmentPostProcessor pp = service.traceSegmentPostProcessors.last() 
10161030
1017-     def mockWafMetricCollector = Mock(WafMetricCollector) 
1018-     WafMetricCollector.INSTANCE = mockWafMetricCollector 
1019- 
10201031    gwCtx = new GatewayContext(false, RuleType.SQL_INJECTION) 
10211032
10221033    when: 
@@ -1032,8 +1043,8 @@ class PowerWAFModuleSpecification extends DDSpecification {
10321043    1 * ctx.getRaspMetrics() 
10331044    1 * ctx.getRaspMetricsCounter() 
10341045    1 * ctx.increaseRaspTimeouts() 
1035-     1 * mockWafMetricCollector .get().raspTimeout(gwCtx.raspRuleType) 
1036-     1 * mockWafMetricCollector .raspRuleEval(RuleType.SQL_INJECTION) 
1046+     1 * wafMetricCollector .get().raspTimeout(gwCtx.raspRuleType) 
1047+     1 * wafMetricCollector .raspRuleEval(RuleType.SQL_INJECTION) 
10371048    0 * _ 
10381049
10391050    when: 
@@ -1059,6 +1070,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
10591070
10601071    then: 
10611072    thrown AppSecModule.AppSecModuleActivationException 
1073+     0 * _ 
10621074
10631075    when: 
10641076    cfgService.listeners['  waf' ].onNewSubconfig(defaultConfig[' ' ], reconf)
@@ -1070,7 +1082,14 @@ class PowerWAFModuleSpecification extends DDSpecification {
10701082    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
10711083      pwafAdditive = it[0].openAdditive() } 
10721084    1 * ctx.reportEvents(_ as Collection<AppSecEvent>) 
1085+     1 * ctx.isAdditiveClosed() 
1086+     1 * ctx.getWafMetrics() 
1087+     1 * ctx.isThrottled(null) 
1088+     1 * ctx.closeAdditive() 
1089+     2 * tracer.activeSpan() 
1090+     1 * wafMetricCollector.wafInit(Powerwaf.LIB_VERSION, _, true) 
10731091    1 * reconf.reloadSubscriptions() 
1092+     0 * _ 
10741093  } 
10751094
10761095  void '  rule data given through configuration' () {
@@ -1102,6 +1121,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
11021121    ctx.closeAdditive() 
11031122
11041123    then: 
1124+     1 * wafMetricCollector.wafUpdates(_, true) 
11051125    1 * reconf.reloadSubscriptions() 
11061126    1 * ctx.getOrCreateAdditive(_, true, false) >> { pwafAdditive = it[0].openAdditive() } 
11071127    2 * tracer.activeSpan() 
@@ -1159,6 +1179,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
11591179    ctx.closeAdditive() 
11601180
11611181    then: '  no match; rule is disabled' 
1182+     1 * wafMetricCollector.wafUpdates(_, true) 
11621183    1 * reconf.reloadSubscriptions() 
11631184    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
11641185      pwafAdditive = it[0].openAdditive() } 
@@ -1189,6 +1210,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
11891210    1 * ctx.getWafMetrics() 
11901211    1 * ctx.isAdditiveClosed() >> false 
11911212    1 * ctx.closeAdditive() >> {pwafAdditive.close()} 
1213+     1 * wafMetricCollector.wafUpdates(_, true) 
11921214    1 * reconf.reloadSubscriptions() 
11931215    _ * ctx.increaseWafTimeouts() 
11941216    _ * ctx.increaseRaspTimeouts() 
@@ -1206,6 +1228,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
12061228    ctx.closeAdditive() 
12071229
12081230    then: '  now we have match' 
1231+     1 * wafMetricCollector.wafUpdates(_, true) 
12091232    1 * reconf.reloadSubscriptions() 
12101233    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
12111234      pwafAdditive = it[0].openAdditive() } 
@@ -1235,6 +1258,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
12351258    ctx.closeAdditive() 
12361259
12371260    then: '  nothing again; we disabled the rule' 
1261+     1 * wafMetricCollector.wafUpdates(_, true) 
12381262    1 * reconf.reloadSubscriptions() 
12391263    1 * ctx.getOrCreateAdditive(_, true, false) >> { pwafAdditive = it[0].openAdditive() } 
12401264    1 * ctx.getWafMetrics() 
@@ -1265,6 +1289,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
12651289    ctx.closeAdditive() 
12661290
12671291    then: 
1292+     1 * wafMetricCollector.wafUpdates(_, true) 
12681293    1 * reconf.reloadSubscriptions() 
12691294    // no attack 
12701295    1 * ctx.getOrCreateAdditive(_, true, false) >> { pwafAdditive = it[0].openAdditive() } 
@@ -1289,6 +1314,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
12891314    ctx.closeAdditive() 
12901315
12911316    then: 
1317+     1 * wafMetricCollector.wafUpdates(_, true) 
12921318    1 * reconf.reloadSubscriptions() 
12931319    // no attack 
12941320    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
@@ -1314,6 +1340,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
13141340    ctx.closeAdditive() 
13151341
13161342    then: 
1343+     1 * wafMetricCollector.wafUpdates(_, true) 
13171344    1 * reconf.reloadSubscriptions() 
13181345    // attack found 
13191346    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
@@ -1342,6 +1369,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
13421369    ctx.closeAdditive() 
13431370
13441371    then: 
1372+     1 * wafMetricCollector.wafUpdates(_, true) 
13451373    1 * reconf.reloadSubscriptions() 
13461374    // no attack 
13471375    1 * ctx.getOrCreateAdditive(_, true, false) >> { 
@@ -1390,7 +1418,9 @@ class PowerWAFModuleSpecification extends DDSpecification {
13901418    pwafModule.config(cfgService) 
13911419
13921420    then: 
1421+     1 * wafMetricCollector.wafInit(Powerwaf.LIB_VERSION, _, true) 
13931422    !pwafModule.dataSubscriptions.first().subscribedAddresses.contains(doesNotExistAddress) 
1423+     0 * _ 
13941424  } 
13951425
13961426  void '  bad initial configuration is given results in  no subscriptions' () {
@@ -1403,6 +1433,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
14031433    then: 
14041434    thrown AppSecModule.AppSecModuleActivationException 
14051435    pwafModule.dataSubscriptions.empty 
1436+     0 * _ 
14061437  } 
14071438
14081439  void '  rule data not a config' () {
@@ -1414,9 +1445,8 @@ class PowerWAFModuleSpecification extends DDSpecification {
14141445
14151446    then: 
14161447    thrown AppSecModule.AppSecModuleActivationException 
1417- 
1418-     then: 
14191448    pwafModule.ctxAndAddresses.get() == null 
1449+     0 * _ 
14201450  } 
14211451
14221452  void '  bad ResultWithData  -  empty list' () {
@@ -1554,7 +1584,18 @@ class PowerWAFModuleSpecification extends DDSpecification {
15541584    ctx. closeAdditive()
15551585
15561586    then :
1587+     1  *  ctx. isAdditiveClosed()
1588+     1  *  ctx. getOrCreateAdditive(_ as  PowerwafContext , true , false ) >>  {
1589+       pwafAdditive =  it[0 ]. openAdditive()
1590+     }
1591+     1  *  ctx. getWafMetrics()
1592+     1  *  ctx. isThrottled(null )
1593+     1  *  ctx. reportEvents(_ as  Collection<AppSecEvent > )
1594+     1  *  ctx. closeAdditive()
1595+     2  *  tracer. activeSpan()
1596+     1  *  flow. isBlocking()
15571597    0  *  flow. setAction(_)
1598+     0  *  _
15581599
15591600    when :
15601601    final  ipData =  new  AppSecData (exclusion : [
@@ -1576,11 +1617,22 @@ class PowerWAFModuleSpecification extends DDSpecification {
15761617    ctx. closeAdditive()
15771618
15781619    then :
1620+     1  *  wafMetricCollector. wafUpdates(_, true )
15791621    1  *  reconf. reloadSubscriptions()
15801622    1  *  flow. setAction({ Flow.Action.RequestBlockingAction  rba  -> 
15811623      rba. statusCode ==  402  &&  rba. blockingContentType ==  BlockingContentType . AUTO 
15821624    })
1625+     1  *  flow. isBlocking()
15831626    1  *  ctx. isAdditiveClosed() >>  false 
1627+     1  *  ctx. getOrCreateAdditive(_ as  PowerwafContext , true , false ) >>  {
1628+       pwafAdditive =  it[0 ]. openAdditive()
1629+     }
1630+     1  *  ctx. getWafMetrics()
1631+     1  *  ctx. isThrottled(null )
1632+     1  *  ctx. reportEvents(_ as  Collection<AppSecEvent > )
1633+     1  *  ctx. closeAdditive()
1634+     2  *  tracer. activeSpan()
1635+     0  *  _
15841636  }
15851637
15861638  void  ' http endpoint fingerprint support' 
@@ -1668,6 +1720,7 @@ class PowerWAFModuleSpecification extends DDSpecification {
16681720    then :
16691721    1  *  ctx. closeAdditive()
16701722    1  *  ctx. isAdditiveClosed() >>  true 
1723+     1  *  wafMetricCollector. wafInit(Powerwaf . LIB_VERSION , _, true )
16711724    0  *  _
16721725  }
16731726
0 commit comments