MCPcopy
hub / github.com/WireGuard/wireguard-go / TestTrieRandom

Function TestTrieRandom

device/allowedips_rand_test.go:81–141  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

79}
80
81func TestTrieRandom(t *testing.T) {
82 var slow4, slow6 SlowRouter
83 var peers []*Peer
84 var allowedIPs AllowedIPs
85
86 rng := rand.New(rand.NewSource(1))
87
88 for n := 0; n < NumberOfPeers; n++ {
89 peers = append(peers, &Peer{})
90 }
91
92 for n := 0; n < NumberOfAddresses; n++ {
93 var addr4 [4]byte
94 rng.Read(addr4[:])
95 cidr := uint8(rand.Intn(32) + 1)
96 index := rand.Intn(NumberOfPeers)
97 allowedIPs.Insert(netip.PrefixFrom(netip.AddrFrom4(addr4), int(cidr)), peers[index])
98 slow4 = slow4.Insert(addr4[:], cidr, peers[index])
99
100 var addr6 [16]byte
101 rng.Read(addr6[:])
102 cidr = uint8(rand.Intn(128) + 1)
103 index = rand.Intn(NumberOfPeers)
104 allowedIPs.Insert(netip.PrefixFrom(netip.AddrFrom16(addr6), int(cidr)), peers[index])
105 slow6 = slow6.Insert(addr6[:], cidr, peers[index])
106 }
107
108 var p int
109 for p = 0; ; p++ {
110 for n := 0; n < NumberOfTests; n++ {
111 var addr4 [4]byte
112 rng.Read(addr4[:])
113 peer1 := slow4.Lookup(addr4[:])
114 peer2 := allowedIPs.Lookup(addr4[:])
115 if peer1 != peer2 {
116 t.Errorf("Trie did not match naive implementation, for %v: want %p, got %p", net.IP(addr4[:]), peer1, peer2)
117 }
118
119 var addr6 [16]byte
120 rng.Read(addr6[:])
121 peer1 = slow6.Lookup(addr6[:])
122 peer2 = allowedIPs.Lookup(addr6[:])
123 if peer1 != peer2 {
124 t.Errorf("Trie did not match naive implementation, for %v: want %p, got %p", net.IP(addr6[:]), peer1, peer2)
125 }
126 }
127 if p >= len(peers) || p >= NumberOfPeerRemovals {
128 break
129 }
130 allowedIPs.RemoveByPeer(peers[p])
131 slow4 = slow4.RemoveByPeer(peers[p])
132 slow6 = slow6.RemoveByPeer(peers[p])
133 }
134 for ; p < len(peers); p++ {
135 allowedIPs.RemoveByPeer(peers[p])
136 }
137
138 if allowedIPs.IPv4 != nil || allowedIPs.IPv6 != nil {

Callers

nothing calls this directly

Calls 8

InsertMethod · 0.95
InsertMethod · 0.95
LookupMethod · 0.95
LookupMethod · 0.95
RemoveByPeerMethod · 0.95
RemoveByPeerMethod · 0.95
ReadMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected