@@ -48,6 +48,7 @@ t.test("it resets stats", async () => {
4848 ipAddresses : {
4949 breakdown : { } ,
5050 } ,
51+ sqlTokenizationFailures : 0 ,
5152 } ) ;
5253
5354 clock . tick ( 1000 ) ;
@@ -69,6 +70,7 @@ t.test("it resets stats", async () => {
6970 ipAddresses : {
7071 breakdown : { } ,
7172 } ,
73+ sqlTokenizationFailures : 0 ,
7274 } ) ;
7375
7476 clock . uninstall ( ) ;
@@ -101,6 +103,7 @@ t.test("it keeps track of amount of calls", async () => {
101103 ipAddresses : {
102104 breakdown : { } ,
103105 } ,
106+ sqlTokenizationFailures : 0 ,
104107 } ) ;
105108
106109 stats . onInspectedCall ( {
@@ -141,6 +144,7 @@ t.test("it keeps track of amount of calls", async () => {
141144 ipAddresses : {
142145 breakdown : { } ,
143146 } ,
147+ sqlTokenizationFailures : 0 ,
144148 } ) ;
145149
146150 stats . onInspectedCall ( {
@@ -181,6 +185,7 @@ t.test("it keeps track of amount of calls", async () => {
181185 ipAddresses : {
182186 breakdown : { } ,
183187 } ,
188+ sqlTokenizationFailures : 0 ,
184189 } ) ;
185190
186191 stats . interceptorThrewError ( "mongodb.query" , "nosql_op" ) ;
@@ -214,6 +219,7 @@ t.test("it keeps track of amount of calls", async () => {
214219 ipAddresses : {
215220 breakdown : { } ,
216221 } ,
222+ sqlTokenizationFailures : 0 ,
217223 } ) ;
218224
219225 stats . onInspectedCall ( {
@@ -254,6 +260,7 @@ t.test("it keeps track of amount of calls", async () => {
254260 ipAddresses : {
255261 breakdown : { } ,
256262 } ,
263+ sqlTokenizationFailures : 0 ,
257264 } ) ;
258265
259266 stats . onInspectedCall ( {
@@ -294,6 +301,7 @@ t.test("it keeps track of amount of calls", async () => {
294301 ipAddresses : {
295302 breakdown : { } ,
296303 } ,
304+ sqlTokenizationFailures : 0 ,
297305 } ) ;
298306
299307 t . same ( stats . hasCompressedStats ( ) , false ) ;
@@ -353,6 +361,7 @@ t.test("it keeps track of amount of calls", async () => {
353361 ipAddresses : {
354362 breakdown : { } ,
355363 } ,
364+ sqlTokenizationFailures : 0 ,
356365 } ) ;
357366
358367 t . ok (
@@ -409,6 +418,7 @@ t.test("it keeps track of requests", async () => {
409418 ipAddresses : {
410419 breakdown : { } ,
411420 } ,
421+ sqlTokenizationFailures : 0 ,
412422 } ) ;
413423
414424 stats . onRequest ( ) ;
@@ -430,6 +440,7 @@ t.test("it keeps track of requests", async () => {
430440 ipAddresses : {
431441 breakdown : { } ,
432442 } ,
443+ sqlTokenizationFailures : 0 ,
433444 } ) ;
434445
435446 stats . onRequest ( ) ;
@@ -452,6 +463,7 @@ t.test("it keeps track of requests", async () => {
452463 ipAddresses : {
453464 breakdown : { } ,
454465 } ,
466+ sqlTokenizationFailures : 0 ,
455467 } ) ;
456468
457469 stats . onRequest ( ) ;
@@ -474,6 +486,7 @@ t.test("it keeps track of requests", async () => {
474486 ipAddresses : {
475487 breakdown : { } ,
476488 } ,
489+ sqlTokenizationFailures : 0 ,
477490 } ) ;
478491
479492 clock . tick ( 1000 ) ;
@@ -497,6 +510,7 @@ t.test("it keeps track of requests", async () => {
497510 ipAddresses : {
498511 breakdown : { } ,
499512 } ,
513+ sqlTokenizationFailures : 0 ,
500514 } ) ;
501515
502516 clock . uninstall ( ) ;
@@ -527,6 +541,7 @@ t.test("it force compresses stats", async () => {
527541 ipAddresses : {
528542 breakdown : { } ,
529543 } ,
544+ sqlTokenizationFailures : 0 ,
530545 } ) ;
531546
532547 stats . onRequest ( ) ;
@@ -576,6 +591,7 @@ t.test("it keeps track of aborted requests", async () => {
576591 ipAddresses : {
577592 breakdown : { } ,
578593 } ,
594+ sqlTokenizationFailures : 0 ,
579595 } ) ;
580596
581597 clock . uninstall ( ) ;
@@ -614,6 +630,7 @@ t.test("it keeps track of matched IPs and user agents", async () => {
614630 "known_threat_actors/public_scanners" : 1 ,
615631 } ,
616632 } ,
633+ sqlTokenizationFailures : 0 ,
617634 } ) ;
618635
619636 // Test multiple occurrences
@@ -642,6 +659,7 @@ t.test("it keeps track of matched IPs and user agents", async () => {
642659 "known_threat_actors/public_scanners" : 2 ,
643660 } ,
644661 } ,
662+ sqlTokenizationFailures : 0 ,
645663 } ) ;
646664
647665 clock . uninstall ( ) ;
@@ -713,6 +731,7 @@ t.test("it keeps track of multiple operations of the same kind", async () => {
713731 ipAddresses : {
714732 breakdown : { } ,
715733 } ,
734+ sqlTokenizationFailures : 0 ,
716735 } ) ;
717736
718737 // Test that each operation maintains its own stats
@@ -774,6 +793,7 @@ t.test("it keeps track of multiple operations of the same kind", async () => {
774793 ipAddresses : {
775794 breakdown : { } ,
776795 } ,
796+ sqlTokenizationFailures : 0 ,
777797 } ) ;
778798
779799 clock . uninstall ( ) ;
@@ -818,6 +838,40 @@ t.test("it handles empty operation strings", async () => {
818838 ipAddresses : {
819839 breakdown : { } ,
820840 } ,
841+ sqlTokenizationFailures : 0 ,
842+ } ) ;
843+
844+ clock . uninstall ( ) ;
845+ } ) ;
846+
847+ t . test ( "it increments sqlTokenizationFailures" , async ( ) => {
848+ const clock = FakeTimers . install ( ) ;
849+
850+ const stats = new InspectionStatistics ( {
851+ maxPerfSamplesInMemory : 50 ,
852+ maxCompressedStatsInMemory : 5 ,
853+ } ) ;
854+
855+ stats . onSqlTokenizationFailure ( ) ;
856+
857+ t . same ( stats . getStats ( ) , {
858+ operations : { } ,
859+ startedAt : 0 ,
860+ requests : {
861+ total : 0 ,
862+ aborted : 0 ,
863+ attacksDetected : {
864+ total : 0 ,
865+ blocked : 0 ,
866+ } ,
867+ } ,
868+ userAgents : {
869+ breakdown : { } ,
870+ } ,
871+ ipAddresses : {
872+ breakdown : { } ,
873+ } ,
874+ sqlTokenizationFailures : 1 ,
821875 } ) ;
822876
823877 clock . uninstall ( ) ;
0 commit comments