diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-06-04 21:48:15 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-06-04 21:48:15 +0200 |
commit | 1868d15914d6cd7cd57b90b7644b008ec16361b9 (patch) | |
tree | dbc788f49f433a5837db3c022facb19be38e4ea1 /src/trie_test.go | |
parent | dbc3ee3e9dc50e01dab9ae789a44f90502542335 (diff) | |
download | wireguard-go-1868d15914d6cd7cd57b90b7644b008ec16361b9.tar.gz wireguard-go-1868d15914d6cd7cd57b90b7644b008ec16361b9.zip |
Beginning work on TUN interface
And outbound routing
I am not entirely convinced the use of net.IP is a good idea,
since the internal representation of net.IP is a byte slice
and all constructor functions in "net" return 16 byte slices
(padded for IPv4), while the use in this project uses 4 byte slices.
Which may be confusing.
Diffstat (limited to 'src/trie_test.go')
-rw-r--r-- | src/trie_test.go | 63 |
1 files changed, 47 insertions, 16 deletions
diff --git a/src/trie_test.go b/src/trie_test.go index 35af0aa..9d53df3 100644 --- a/src/trie_test.go +++ b/src/trie_test.go @@ -1,6 +1,8 @@ package main import ( + "math/rand" + "net" "testing" ) @@ -55,6 +57,49 @@ func TestCommonBits(t *testing.T) { } } +func benchmarkTrie(peerNumber int, addressNumber int, addressLength int, b *testing.B) { + var trie *Trie + var peers []*Peer + + rand.Seed(1) + + const AddressLength = 4 + + for n := 0; n < peerNumber; n += 1 { + peers = append(peers, &Peer{}) + } + + for n := 0; n < addressNumber; n += 1 { + var addr [AddressLength]byte + rand.Read(addr[:]) + cidr := uint(rand.Uint32() % (AddressLength * 8)) + index := rand.Int() % peerNumber + trie = trie.Insert(addr[:], cidr, peers[index]) + } + + for n := 0; n < b.N; n += 1 { + var addr [AddressLength]byte + rand.Read(addr[:]) + trie.Lookup(addr[:]) + } +} + +func BenchmarkTrieIPv4Peers100Addresses1000(b *testing.B) { + benchmarkTrie(100, 1000, net.IPv4len, b) +} + +func BenchmarkTrieIPv4Peers10Addresses10(b *testing.B) { + benchmarkTrie(10, 10, net.IPv4len, b) +} + +func BenchmarkTrieIPv6Peers100Addresses1000(b *testing.B) { + benchmarkTrie(100, 1000, net.IPv6len, b) +} + +func BenchmarkTrieIPv6Peers10Addresses10(b *testing.B) { + benchmarkTrie(10, 10, net.IPv6len, b) +} + /* Test ported from kernel implementation: * selftest/routingtable.h */ @@ -91,10 +136,10 @@ func TestTrieIPv4(t *testing.T) { insert(b, 192, 168, 4, 4, 32) insert(c, 192, 168, 0, 0, 16) insert(d, 192, 95, 5, 64, 27) - insert(c, 192, 95, 5, 65, 27) /* replaces previous entry, and maskself is required */ + insert(c, 192, 95, 5, 65, 27) insert(e, 0, 0, 0, 0, 0) insert(g, 64, 15, 112, 0, 20) - insert(h, 64, 15, 123, 211, 25) /* maskself is required */ + insert(h, 64, 15, 123, 211, 25) insert(a, 10, 0, 0, 0, 25) insert(b, 10, 0, 0, 128, 25) insert(a, 10, 1, 0, 0, 30) @@ -186,20 +231,6 @@ func TestTrieIPv6(t *testing.T) { } } - /* - assertNEQ := func(peer *Peer, a, b, c, d uint32) { - var addr []byte - addr = append(addr, expand(a)...) - addr = append(addr, expand(b)...) - addr = append(addr, expand(c)...) - addr = append(addr, expand(d)...) - p := trie.Lookup(addr) - if p == peer { - t.Error("Assert NEQ failed") - } - } - */ - insert(d, 0x26075300, 0x60006b00, 0, 0xc05f0543, 128) insert(c, 0x26075300, 0x60006b00, 0, 0, 64) insert(e, 0, 0, 0, 0, 0) |