@@ -6,41 +6,43 @@ t.test("it works", async () => {
66 t . same ( hostnames . asArray ( ) , [ ] ) ;
77
88 hostnames . add ( "aikido.dev" , 443 ) ;
9- t . same ( hostnames . asArray ( ) , [ { hostname : "aikido.dev" , port : 443 , hits : 1 } ] ) ;
9+ t . same ( hostnames . asArray ( ) , [
10+ { hostname : "aikido.dev" , port : 443 , hits : 1 , blockedHits : 0 } ,
11+ ] ) ;
1012
1113 hostnames . add ( "aikido.dev" , 80 ) ;
1214 t . same ( hostnames . asArray ( ) , [
13- { hostname : "aikido.dev" , port : 443 , hits : 1 } ,
14- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
15+ { hostname : "aikido.dev" , port : 443 , hits : 1 , blockedHits : 0 } ,
16+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
1517 ] ) ;
1618
1719 hostnames . add ( "google.com" , 80 ) ;
1820 t . same ( hostnames . asArray ( ) , [
19- { hostname : "aikido.dev" , port : 443 , hits : 1 } ,
20- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
21- { hostname : "google.com" , port : 80 , hits : 1 } ,
21+ { hostname : "aikido.dev" , port : 443 , hits : 1 , blockedHits : 0 } ,
22+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
23+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
2224 ] ) ;
2325
2426 hostnames . add ( "google.com" , 0 ) ;
2527 hostnames . add ( "google.com" , - 1 ) ;
2628 t . same ( hostnames . asArray ( ) , [
27- { hostname : "aikido.dev" , port : 443 , hits : 1 } ,
28- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
29- { hostname : "google.com" , port : 80 , hits : 1 } ,
29+ { hostname : "aikido.dev" , port : 443 , hits : 1 , blockedHits : 0 } ,
30+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
31+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
3032 ] ) ;
3133
3234 hostnames . add ( "github.com" , 80 ) ;
3335 t . same ( hostnames . asArray ( ) , [
34- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
35- { hostname : "google.com" , port : 80 , hits : 1 } ,
36- { hostname : "github.com" , port : 80 , hits : 1 } ,
36+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
37+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
38+ { hostname : "github.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
3739 ] ) ;
3840
3941 hostnames . add ( "jetbrains.com" , 80 ) ;
4042 t . same ( hostnames . asArray ( ) , [
41- { hostname : "google.com" , port : 80 , hits : 1 } ,
42- { hostname : "github.com" , port : 80 , hits : 1 } ,
43- { hostname : "jetbrains.com" , port : 80 , hits : 1 } ,
43+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
44+ { hostname : "github.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
45+ { hostname : "jetbrains.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
4446 ] ) ;
4547
4648 hostnames . clear ( ) ;
@@ -53,30 +55,30 @@ t.test("it respects max size", async () => {
5355 hostnames . add ( "aikido.dev" , 2 ) ;
5456
5557 t . same ( hostnames . asArray ( ) , [
56- { hostname : "aikido.dev" , port : 1 , hits : 1 } ,
57- { hostname : "aikido.dev" , port : 2 , hits : 1 } ,
58+ { hostname : "aikido.dev" , port : 1 , hits : 1 , blockedHits : 0 } ,
59+ { hostname : "aikido.dev" , port : 2 , hits : 1 , blockedHits : 0 } ,
5860 ] ) ;
5961
6062 hostnames . add ( "aikido.dev" , 3 ) ;
6163 hostnames . add ( "aikido.dev" , 4 ) ;
6264
6365 t . same ( hostnames . asArray ( ) , [
64- { hostname : "aikido.dev" , port : 3 , hits : 1 } ,
65- { hostname : "aikido.dev" , port : 4 , hits : 1 } ,
66+ { hostname : "aikido.dev" , port : 3 , hits : 1 , blockedHits : 0 } ,
67+ { hostname : "aikido.dev" , port : 4 , hits : 1 , blockedHits : 0 } ,
6668 ] ) ;
6769
6870 hostnames . add ( "google.com" , 1 ) ;
6971
7072 t . same ( hostnames . asArray ( ) , [
71- { hostname : "aikido.dev" , port : 4 , hits : 1 } ,
72- { hostname : "google.com" , port : 1 , hits : 1 } ,
73+ { hostname : "aikido.dev" , port : 4 , hits : 1 , blockedHits : 0 } ,
74+ { hostname : "google.com" , port : 1 , hits : 1 , blockedHits : 0 } ,
7375 ] ) ;
7476
7577 hostnames . add ( "google.com" , 2 ) ;
7678
7779 t . same ( hostnames . asArray ( ) , [
78- { hostname : "google.com" , port : 1 , hits : 1 } ,
79- { hostname : "google.com" , port : 2 , hits : 1 } ,
80+ { hostname : "google.com" , port : 1 , hits : 1 , blockedHits : 0 } ,
81+ { hostname : "google.com" , port : 2 , hits : 1 , blockedHits : 0 } ,
8082 ] ) ;
8183} ) ;
8284
@@ -85,25 +87,64 @@ t.test("it tracks hits", async () => {
8587
8688 hostnames . add ( "aikido.dev" , 443 ) ;
8789 hostnames . add ( "aikido.dev" , 443 ) ;
88- t . same ( hostnames . asArray ( ) , [ { hostname : "aikido.dev" , port : 443 , hits : 2 } ] ) ;
90+ t . same ( hostnames . asArray ( ) , [
91+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 0 } ,
92+ ] ) ;
8993
9094 hostnames . add ( "aikido.dev" , 80 ) ;
9195 t . same ( hostnames . asArray ( ) , [
92- { hostname : "aikido.dev" , port : 443 , hits : 2 } ,
93- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
96+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 0 } ,
97+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
9498 ] ) ;
9599
96100 hostnames . add ( "google.com" , 80 ) ;
97101 t . same ( hostnames . asArray ( ) , [
98- { hostname : "aikido.dev" , port : 443 , hits : 2 } ,
99- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
100- { hostname : "google.com" , port : 80 , hits : 1 } ,
102+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 0 } ,
103+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
104+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
101105 ] ) ;
102106
103107 hostnames . add ( "aikido.dev" , 443 ) ;
104108 t . same ( hostnames . asArray ( ) , [
105- { hostname : "aikido.dev" , port : 443 , hits : 3 } ,
106- { hostname : "aikido.dev" , port : 80 , hits : 1 } ,
107- { hostname : "google.com" , port : 80 , hits : 1 } ,
109+ { hostname : "aikido.dev" , port : 443 , hits : 3 , blockedHits : 0 } ,
110+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 0 } ,
111+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 0 } ,
112+ ] ) ;
113+ } ) ;
114+
115+ t . test ( "it tracks blocked hits" , async ( ) => {
116+ const hostnames = new Hostnames ( 3 ) ;
117+
118+ hostnames . add ( "aikido.dev" , 443 , true ) ;
119+ hostnames . add ( "aikido.dev" , 443 , true ) ;
120+ t . same ( hostnames . asArray ( ) , [
121+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 2 } ,
122+ ] ) ;
123+
124+ hostnames . add ( "aikido.dev" , 80 , true ) ;
125+ t . same ( hostnames . asArray ( ) , [
126+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 2 } ,
127+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 1 } ,
128+ ] ) ;
129+
130+ hostnames . add ( "google.com" , 80 , true ) ;
131+ t . same ( hostnames . asArray ( ) , [
132+ { hostname : "aikido.dev" , port : 443 , hits : 2 , blockedHits : 2 } ,
133+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 1 } ,
134+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 1 } ,
135+ ] ) ;
136+
137+ hostnames . add ( "aikido.dev" , 443 , false ) ;
138+ t . same ( hostnames . asArray ( ) , [
139+ { hostname : "aikido.dev" , port : 443 , hits : 3 , blockedHits : 2 } ,
140+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 1 } ,
141+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 1 } ,
142+ ] ) ;
143+
144+ hostnames . add ( "aikido.dev" , 443 , false ) ;
145+ t . same ( hostnames . asArray ( ) , [
146+ { hostname : "aikido.dev" , port : 443 , hits : 4 , blockedHits : 2 } ,
147+ { hostname : "aikido.dev" , port : 80 , hits : 1 , blockedHits : 1 } ,
148+ { hostname : "google.com" , port : 80 , hits : 1 , blockedHits : 1 } ,
108149 ] ) ;
109150} ) ;
0 commit comments