@@ -7,6 +7,7 @@ package device
77
88import (
99 "math/rand"
10+ "net"
1011 "sort"
1112 "testing"
1213)
@@ -64,68 +65,71 @@ func (r SlowRouter) Lookup(addr []byte) *Peer {
6465 return nil
6566}
6667
67- func TestTrieRandomIPv4 (t * testing.T ) {
68- var slow SlowRouter
69- var peers []* Peer
70- var allowedIPs AllowedIPs
71-
72- rand .Seed (1 )
73-
74- const AddressLength = 4
75-
76- for n := 0 ; n < NumberOfPeers ; n ++ {
77- peers = append (peers , & Peer {})
78- }
79-
80- for n := 0 ; n < NumberOfAddresses ; n ++ {
81- var addr [AddressLength ]byte
82- rand .Read (addr [:])
83- cidr := uint8 (rand .Uint32 () % (AddressLength * 8 ))
84- index := rand .Int () % NumberOfPeers
85- allowedIPs .Insert (addr [:], cidr , peers [index ])
86- slow = slow .Insert (addr [:], cidr , peers [index ])
87- }
88-
89- for n := 0 ; n < NumberOfTests ; n ++ {
90- var addr [AddressLength ]byte
91- rand .Read (addr [:])
92- peer1 := slow .Lookup (addr [:])
93- peer2 := allowedIPs .LookupIPv4 (addr [:])
94- if peer1 != peer2 {
95- t .Error ("Trie did not match naive implementation, for:" , addr )
68+ func (r SlowRouter ) RemoveByPeer (peer * Peer ) SlowRouter {
69+ n := 0
70+ for _ , x := range r {
71+ if x .peer != peer {
72+ r [n ] = x
73+ n ++
9674 }
9775 }
76+ return r [:n ]
9877}
9978
100- func TestTrieRandomIPv6 (t * testing.T ) {
101- var slow SlowRouter
79+ func TestTrieRandom (t * testing.T ) {
80+ var slow4 , slow6 SlowRouter
10281 var peers []* Peer
10382 var allowedIPs AllowedIPs
10483
10584 rand .Seed (1 )
10685
107- const AddressLength = 16
108-
10986 for n := 0 ; n < NumberOfPeers ; n ++ {
11087 peers = append (peers , & Peer {})
11188 }
11289
11390 for n := 0 ; n < NumberOfAddresses ; n ++ {
114- var addr [AddressLength ]byte
115- rand .Read (addr [:])
116- cidr := uint8 (rand .Uint32 () % (AddressLength * 8 ))
117- index := rand .Int () % NumberOfPeers
118- allowedIPs .Insert (addr [:], cidr , peers [index ])
119- slow = slow .Insert (addr [:], cidr , peers [index ])
91+ var addr4 [4 ]byte
92+ rand .Read (addr4 [:])
93+ cidr := uint8 (rand .Intn (32 ) + 1 )
94+ index := rand .Intn (NumberOfPeers )
95+ allowedIPs .Insert (addr4 [:], cidr , peers [index ])
96+ slow4 = slow4 .Insert (addr4 [:], cidr , peers [index ])
97+
98+ var addr6 [16 ]byte
99+ rand .Read (addr6 [:])
100+ cidr = uint8 (rand .Intn (128 ) + 1 )
101+ index = rand .Intn (NumberOfPeers )
102+ allowedIPs .Insert (addr6 [:], cidr , peers [index ])
103+ slow6 = slow6 .Insert (addr6 [:], cidr , peers [index ])
120104 }
121105
122- for n := 0 ; n < NumberOfTests ; n ++ {
123- var addr [AddressLength ]byte
124- rand .Read (addr [:])
125- peer1 := slow .Lookup (addr [:])
126- peer2 := allowedIPs .LookupIPv6 (addr [:])
127- if peer1 != peer2 {
128- t .Error ("Trie did not match naive implementation, for:" , addr )
106+ for p := 0 ; ; p ++ {
107+ for n := 0 ; n < NumberOfTests ; n ++ {
108+ var addr4 [4 ]byte
109+ rand .Read (addr4 [:])
110+ peer1 := slow4 .Lookup (addr4 [:])
111+ peer2 := allowedIPs .LookupIPv4 (addr4 [:])
112+ if peer1 != peer2 {
113+ t .Errorf ("Trie did not match naive implementation, for %v: want %p, got %p" , net .IP (addr4 [:]), peer1 , peer2 )
114+ }
115+
116+ var addr6 [16 ]byte
117+ rand .Read (addr6 [:])
118+ peer1 = slow6 .Lookup (addr6 [:])
119+ peer2 = allowedIPs .LookupIPv6 (addr6 [:])
120+ if peer1 != peer2 {
121+ t .Errorf ("Trie did not match naive implementation, for %v: want %p, got %p" , net .IP (addr6 [:]), peer1 , peer2 )
122+ }
123+ }
124+ if p >= len (peers ) {
125+ break
129126 }
127+ allowedIPs .RemoveByPeer (peers [p ])
128+ slow4 = slow4 .RemoveByPeer (peers [p ])
129+ slow6 = slow6 .RemoveByPeer (peers [p ])
130+ }
131+
132+ if allowedIPs .IPv4 != nil || allowedIPs .IPv6 != nil {
133+ t .Error ("Failed to remove all nodes from trie by peer" )
130134 }
131135}
0 commit comments