mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-29 11:15:50 +00:00
use testing.T.{Cleanup,TempDir}() in tests
This commit is contained in:
+26
-59
@@ -22,8 +22,7 @@ import (
|
|||||||
// FIXME These tests should not rely on .(*addrBook) assertions
|
// FIXME These tests should not rely on .(*addrBook) assertions
|
||||||
|
|
||||||
func TestAddrBookPickAddress(t *testing.T) {
|
func TestAddrBookPickAddress(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
// 0 addresses
|
// 0 addresses
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
@@ -59,8 +58,7 @@ func TestAddrBookPickAddress(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookSaveLoad(t *testing.T) {
|
func TestAddrBookSaveLoad(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
// 0 addresses
|
// 0 addresses
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
@@ -94,9 +92,7 @@ func TestAddrBookSaveLoad(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookLookup(t *testing.T) {
|
func TestAddrBookLookup(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
randAddrs := randNetAddressPairs(t, 100)
|
randAddrs := randNetAddressPairs(t, 100)
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
@@ -113,9 +109,7 @@ func TestAddrBookLookup(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookPromoteToOld(t *testing.T) {
|
func TestAddrBookPromoteToOld(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
randAddrs := randNetAddressPairs(t, 100)
|
randAddrs := randNetAddressPairs(t, 100)
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
@@ -157,10 +151,9 @@ func TestAddrBookPromoteToOld(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookHandlesDuplicates(t *testing.T) {
|
func TestAddrBookHandlesDuplicates(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
|
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
randAddrs := randNetAddressPairs(t, 100)
|
randAddrs := randNetAddressPairs(t, 100)
|
||||||
@@ -211,9 +204,7 @@ func randIPv4Address(t *testing.T) *p2p.NetAddress {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookRemoveAddress(t *testing.T) {
|
func TestAddrBookRemoveAddress(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
@@ -232,9 +223,7 @@ func TestAddrBookRemoveAddress(t *testing.T) {
|
|||||||
|
|
||||||
func TestAddrBookGetSelectionWithOneMarkedGood(t *testing.T) {
|
func TestAddrBookGetSelectionWithOneMarkedGood(t *testing.T) {
|
||||||
// create a book with 10 addresses, 1 good/old and 9 new
|
// create a book with 10 addresses, 1 good/old and 9 new
|
||||||
book, fname := createAddrBookWithMOldAndNNewAddrs(t, 1, 9)
|
book, _ := createAddrBookWithMOldAndNNewAddrs(t, 1, 9)
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
||||||
assert.NotNil(t, addrs)
|
assert.NotNil(t, addrs)
|
||||||
assertMOldAndNNewAddrsInSelection(t, 1, 9, addrs, book)
|
assertMOldAndNNewAddrsInSelection(t, 1, 9, addrs, book)
|
||||||
@@ -242,26 +231,20 @@ func TestAddrBookGetSelectionWithOneMarkedGood(t *testing.T) {
|
|||||||
|
|
||||||
func TestAddrBookGetSelectionWithOneNotMarkedGood(t *testing.T) {
|
func TestAddrBookGetSelectionWithOneNotMarkedGood(t *testing.T) {
|
||||||
// create a book with 10 addresses, 9 good/old and 1 new
|
// create a book with 10 addresses, 9 good/old and 1 new
|
||||||
book, fname := createAddrBookWithMOldAndNNewAddrs(t, 9, 1)
|
book, _ := createAddrBookWithMOldAndNNewAddrs(t, 9, 1)
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
||||||
assert.NotNil(t, addrs)
|
assert.NotNil(t, addrs)
|
||||||
assertMOldAndNNewAddrsInSelection(t, 9, 1, addrs, book)
|
assertMOldAndNNewAddrsInSelection(t, 9, 1, addrs, book)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookGetSelectionReturnsNilWhenAddrBookIsEmpty(t *testing.T) {
|
func TestAddrBookGetSelectionReturnsNilWhenAddrBookIsEmpty(t *testing.T) {
|
||||||
book, fname := createAddrBookWithMOldAndNNewAddrs(t, 0, 0)
|
book, _ := createAddrBookWithMOldAndNNewAddrs(t, 0, 0)
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
||||||
assert.Nil(t, addrs)
|
assert.Nil(t, addrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookGetSelection(t *testing.T) {
|
func TestAddrBookGetSelection(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
@@ -301,9 +284,7 @@ func TestAddrBookGetSelection(t *testing.T) {
|
|||||||
func TestAddrBookGetSelectionWithBias(t *testing.T) {
|
func TestAddrBookGetSelectionWithBias(t *testing.T) {
|
||||||
const biasTowardsNewAddrs = 30
|
const biasTowardsNewAddrs = 30
|
||||||
|
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
@@ -384,9 +365,7 @@ func TestAddrBookGetSelectionWithBias(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookHasAddress(t *testing.T) {
|
func TestAddrBookHasAddress(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
addr := randIPv4Address(t)
|
addr := randIPv4Address(t)
|
||||||
@@ -414,9 +393,7 @@ func testCreatePrivateAddrs(t *testing.T, numAddrs int) ([]*p2p.NetAddress, []st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBanBadPeers(t *testing.T) {
|
func TestBanBadPeers(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
@@ -441,9 +418,7 @@ func TestBanBadPeers(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookEmpty(t *testing.T) {
|
func TestAddrBookEmpty(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
// Check that empty book is empty
|
// Check that empty book is empty
|
||||||
@@ -463,9 +438,7 @@ func TestAddrBookEmpty(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPrivatePeers(t *testing.T) {
|
func TestPrivatePeers(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
book := NewAddrBook(fname, true)
|
book := NewAddrBook(fname, true)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
@@ -496,8 +469,7 @@ func testAddrBookAddressSelection(t *testing.T, bookSize int) {
|
|||||||
dbgStr := fmt.Sprintf("book of size %d (new %d, old %d)", bookSize, nBookNew, nBookOld)
|
dbgStr := fmt.Sprintf("book of size %d (new %d, old %d)", bookSize, nBookNew, nBookOld)
|
||||||
|
|
||||||
// create book and get selection
|
// create book and get selection
|
||||||
book, fname := createAddrBookWithMOldAndNNewAddrs(t, nBookOld, nBookNew)
|
book, _ := createAddrBookWithMOldAndNNewAddrs(t, nBookOld, nBookNew)
|
||||||
defer deleteTempFile(fname)
|
|
||||||
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
addrs := book.GetSelectionWithBias(biasToSelectNewPeers)
|
||||||
assert.NotNil(t, addrs, "%s - expected a non-nil selection", dbgStr)
|
assert.NotNil(t, addrs, "%s - expected a non-nil selection", dbgStr)
|
||||||
nAddrs := len(addrs)
|
nAddrs := len(addrs)
|
||||||
@@ -590,8 +562,7 @@ func TestMultipleAddrBookAddressSelection(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddrBookAddDoesNotOverwriteOldIP(t *testing.T) {
|
func TestAddrBookAddDoesNotOverwriteOldIP(t *testing.T) {
|
||||||
fname := createTempFileName("addrbook_test")
|
fname := createTempFileName(t, "addrbook_test")
|
||||||
defer deleteTempFile(fname)
|
|
||||||
|
|
||||||
// This test creates adds a peer to the address book and marks it good
|
// This test creates adds a peer to the address book and marks it good
|
||||||
// It then attempts to override the peer's IP, by adding a peer with the same ID
|
// It then attempts to override the peer's IP, by adding a peer with the same ID
|
||||||
@@ -717,28 +688,24 @@ func assertMOldAndNNewAddrsInSelection(t *testing.T, m, n int, addrs []*p2p.NetA
|
|||||||
assert.Equal(t, n, nNew, "new addresses")
|
assert.Equal(t, n, nNew, "new addresses")
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTempFileName(prefix string) string {
|
func createTempFileName(t *testing.T, prefix string) string {
|
||||||
f, err := ioutil.TempFile("", prefix)
|
f, err := ioutil.TempFile("", prefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fname := f.Name()
|
fname := f.Name()
|
||||||
err = f.Close()
|
if err := f.Close(); err != nil {
|
||||||
if err != nil {
|
t.Fatal(err)
|
||||||
panic(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Cleanup(func() { _ = os.Remove(fname) })
|
||||||
|
|
||||||
return fname
|
return fname
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteTempFile(fname string) {
|
|
||||||
err := os.Remove(fname)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAddrBookWithMOldAndNNewAddrs(t *testing.T, nOld, nNew int) (book *addrBook, fname string) {
|
func createAddrBookWithMOldAndNNewAddrs(t *testing.T, nOld, nNew int) (book *addrBook, fname string) {
|
||||||
fname = createTempFileName("addrbook_test")
|
fname = createTempFileName(t, "addrbook_test")
|
||||||
|
|
||||||
book = NewAddrBook(fname, true).(*addrBook)
|
book = NewAddrBook(fname, true).(*addrBook)
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|||||||
+37
-88
@@ -3,8 +3,6 @@ package pex
|
|||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -31,16 +29,14 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorBasic(t *testing.T) {
|
func TestPEXReactorBasic(t *testing.T) {
|
||||||
r, book := createReactor(&ReactorConfig{})
|
r, _ := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
assert.NotNil(t, r)
|
assert.NotNil(t, r)
|
||||||
assert.NotEmpty(t, r.GetChannels())
|
assert.NotEmpty(t, r.GetChannels())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorAddRemovePeer(t *testing.T) {
|
func TestPEXReactorAddRemovePeer(t *testing.T) {
|
||||||
r, book := createReactor(&ReactorConfig{})
|
r, book := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
size := book.Size()
|
size := book.Size()
|
||||||
peer := p2p.CreateRandomPeer(false)
|
peer := p2p.CreateRandomPeer(false)
|
||||||
@@ -73,9 +69,7 @@ func TestPEXReactorRunning(t *testing.T) {
|
|||||||
switches := make([]*p2p.Switch, N)
|
switches := make([]*p2p.Switch, N)
|
||||||
|
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
books := make([]AddrBook, N)
|
books := make([]AddrBook, N)
|
||||||
logger := log.TestingLogger()
|
logger := log.TestingLogger()
|
||||||
@@ -123,9 +117,7 @@ func TestPEXReactorRunning(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorReceive(t *testing.T) {
|
func TestPEXReactorReceive(t *testing.T) {
|
||||||
r, book := createReactor(&ReactorConfig{})
|
r, book := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
peer := p2p.CreateRandomPeer(false)
|
peer := p2p.CreateRandomPeer(false)
|
||||||
|
|
||||||
// we have to send a request to receive responses
|
// we have to send a request to receive responses
|
||||||
@@ -141,9 +133,7 @@ func TestPEXReactorReceive(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorRequestMessageAbuse(t *testing.T) {
|
func TestPEXReactorRequestMessageAbuse(t *testing.T) {
|
||||||
r, book := createReactor(&ReactorConfig{})
|
r, book := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(r)
|
sw := createSwitchAndAddReactors(r)
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
|
|
||||||
@@ -176,9 +166,7 @@ func TestPEXReactorRequestMessageAbuse(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorAddrsMessageAbuse(t *testing.T) {
|
func TestPEXReactorAddrsMessageAbuse(t *testing.T) {
|
||||||
r, book := createReactor(&ReactorConfig{})
|
r, book := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(r)
|
sw := createSwitchAndAddReactors(r)
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
|
|
||||||
@@ -208,9 +196,7 @@ func TestPEXReactorAddrsMessageAbuse(t *testing.T) {
|
|||||||
|
|
||||||
func TestCheckSeeds(t *testing.T) {
|
func TestCheckSeeds(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
// 1. test creating peer with no seeds works
|
// 1. test creating peer with no seeds works
|
||||||
peerSwitch := testCreateDefaultPeer(dir, 0)
|
peerSwitch := testCreateDefaultPeer(dir, 0)
|
||||||
@@ -247,19 +233,17 @@ func TestCheckSeeds(t *testing.T) {
|
|||||||
|
|
||||||
func TestPEXReactorUsesSeedsIfNeeded(t *testing.T) {
|
func TestPEXReactorUsesSeedsIfNeeded(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
// 1. create seed
|
// 1. create seed
|
||||||
seed := testCreateSeed(dir, 0, []*p2p.NetAddress{}, []*p2p.NetAddress{})
|
seed := testCreateSeed(dir, 0, []*p2p.NetAddress{}, []*p2p.NetAddress{})
|
||||||
require.Nil(t, seed.Start())
|
require.Nil(t, seed.Start())
|
||||||
defer seed.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = seed.Stop() })
|
||||||
|
|
||||||
// 2. create usual peer with only seed configured.
|
// 2. create usual peer with only seed configured.
|
||||||
peer := testCreatePeerWithSeed(dir, 1, seed)
|
peer := testCreatePeerWithSeed(dir, 1, seed)
|
||||||
require.Nil(t, peer.Start())
|
require.Nil(t, peer.Start())
|
||||||
defer peer.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = seed.Stop() })
|
||||||
|
|
||||||
// 3. check that the peer connects to seed immediately
|
// 3. check that the peer connects to seed immediately
|
||||||
assertPeersWithTimeout(t, []*p2p.Switch{peer}, 10*time.Millisecond, 3*time.Second, 1)
|
assertPeersWithTimeout(t, []*p2p.Switch{peer}, 10*time.Millisecond, 3*time.Second, 1)
|
||||||
@@ -267,25 +251,23 @@ func TestPEXReactorUsesSeedsIfNeeded(t *testing.T) {
|
|||||||
|
|
||||||
func TestConnectionSpeedForPeerReceivedFromSeed(t *testing.T) {
|
func TestConnectionSpeedForPeerReceivedFromSeed(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
// 1. create peer
|
// 1. create peer
|
||||||
peerSwitch := testCreateDefaultPeer(dir, 1)
|
peerSwitch := testCreateDefaultPeer(dir, 1)
|
||||||
require.Nil(t, peerSwitch.Start())
|
require.Nil(t, peerSwitch.Start())
|
||||||
defer peerSwitch.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = peerSwitch.Stop() })
|
||||||
|
|
||||||
// 2. Create seed which knows about the peer
|
// 2. Create seed which knows about the peer
|
||||||
peerAddr := peerSwitch.NetAddress()
|
peerAddr := peerSwitch.NetAddress()
|
||||||
seed := testCreateSeed(dir, 2, []*p2p.NetAddress{peerAddr}, []*p2p.NetAddress{peerAddr})
|
seed := testCreateSeed(dir, 2, []*p2p.NetAddress{peerAddr}, []*p2p.NetAddress{peerAddr})
|
||||||
require.Nil(t, seed.Start())
|
require.Nil(t, seed.Start())
|
||||||
defer seed.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = seed.Stop() })
|
||||||
|
|
||||||
// 3. create another peer with only seed configured.
|
// 3. create another peer with only seed configured.
|
||||||
secondPeer := testCreatePeerWithSeed(dir, 3, seed)
|
secondPeer := testCreatePeerWithSeed(dir, 3, seed)
|
||||||
require.Nil(t, secondPeer.Start())
|
require.Nil(t, secondPeer.Start())
|
||||||
defer secondPeer.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = secondPeer.Stop() })
|
||||||
|
|
||||||
// 4. check that the second peer connects to seed immediately
|
// 4. check that the second peer connects to seed immediately
|
||||||
assertPeersWithTimeout(t, []*p2p.Switch{secondPeer}, 10*time.Millisecond, 3*time.Second, 1)
|
assertPeersWithTimeout(t, []*p2p.Switch{secondPeer}, 10*time.Millisecond, 3*time.Second, 1)
|
||||||
@@ -296,25 +278,21 @@ func TestConnectionSpeedForPeerReceivedFromSeed(t *testing.T) {
|
|||||||
|
|
||||||
func TestPEXReactorSeedMode(t *testing.T) {
|
func TestPEXReactorSeedMode(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
pexRConfig := &ReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 10 * time.Millisecond}
|
pexRConfig := &ReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 10 * time.Millisecond}
|
||||||
pexR, book := createReactor(pexRConfig)
|
pexR, book := createReactor(t, pexRConfig)
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(pexR)
|
sw := createSwitchAndAddReactors(pexR)
|
||||||
|
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
err = sw.Start()
|
require.NoError(t, sw.Start())
|
||||||
require.NoError(t, err)
|
t.Cleanup(func() { _ = sw.Stop() })
|
||||||
defer sw.Stop() // nolint:errcheck // ignore for tests
|
|
||||||
|
|
||||||
assert.Zero(t, sw.Peers().Size())
|
assert.Zero(t, sw.Peers().Size())
|
||||||
|
|
||||||
peerSwitch := testCreateDefaultPeer(dir, 1)
|
peerSwitch := testCreateDefaultPeer(dir, 1)
|
||||||
require.NoError(t, peerSwitch.Start())
|
require.NoError(t, peerSwitch.Start())
|
||||||
defer peerSwitch.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = peerSwitch.Stop() })
|
||||||
|
|
||||||
// 1. Test crawlPeers dials the peer
|
// 1. Test crawlPeers dials the peer
|
||||||
pexR.crawlPeers([]*p2p.NetAddress{peerSwitch.NetAddress()})
|
pexR.crawlPeers([]*p2p.NetAddress{peerSwitch.NetAddress()})
|
||||||
@@ -335,28 +313,23 @@ func TestPEXReactorSeedMode(t *testing.T) {
|
|||||||
|
|
||||||
func TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode(t *testing.T) {
|
func TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
pexRConfig := &ReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 1 * time.Millisecond}
|
pexRConfig := &ReactorConfig{SeedMode: true, SeedDisconnectWaitPeriod: 1 * time.Millisecond}
|
||||||
pexR, book := createReactor(pexRConfig)
|
pexR, book := createReactor(t, pexRConfig)
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(pexR)
|
sw := createSwitchAndAddReactors(pexR)
|
||||||
|
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
err = sw.Start()
|
require.NoError(t, sw.Start())
|
||||||
require.NoError(t, err)
|
t.Cleanup(func() { _ = sw.Stop() })
|
||||||
defer sw.Stop() // nolint:errcheck // ignore for tests
|
|
||||||
|
|
||||||
assert.Zero(t, sw.Peers().Size())
|
assert.Zero(t, sw.Peers().Size())
|
||||||
|
|
||||||
peerSwitch := testCreateDefaultPeer(dir, 1)
|
peerSwitch := testCreateDefaultPeer(dir, 1)
|
||||||
require.NoError(t, peerSwitch.Start())
|
require.NoError(t, peerSwitch.Start())
|
||||||
defer peerSwitch.Stop() // nolint:errcheck // ignore for tests
|
t.Cleanup(func() { _ = peerSwitch.Stop() })
|
||||||
|
|
||||||
err = sw.AddPersistentPeers([]string{peerSwitch.NetAddress().String()})
|
require.NoError(t, sw.AddPersistentPeers([]string{peerSwitch.NetAddress().String()}))
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// 1. Test crawlPeers dials the peer
|
// 1. Test crawlPeers dials the peer
|
||||||
pexR.crawlPeers([]*p2p.NetAddress{peerSwitch.NetAddress()})
|
pexR.crawlPeers([]*p2p.NetAddress{peerSwitch.NetAddress()})
|
||||||
@@ -373,22 +346,16 @@ func TestPEXReactorDoesNotDisconnectFromPersistentPeerInSeedMode(t *testing.T) {
|
|||||||
|
|
||||||
func TestPEXReactorDialsPeerUpToMaxAttemptsInSeedMode(t *testing.T) {
|
func TestPEXReactorDialsPeerUpToMaxAttemptsInSeedMode(t *testing.T) {
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
pexR, book := createReactor(t, &ReactorConfig{SeedMode: true})
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
pexR, book := createReactor(&ReactorConfig{SeedMode: true})
|
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(pexR)
|
sw := createSwitchAndAddReactors(pexR)
|
||||||
|
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
// No need to start sw since crawlPeers is called manually here.
|
// No need to start sw since crawlPeers is called manually here.
|
||||||
|
|
||||||
peer := mock.NewPeer(nil)
|
peer := mock.NewPeer(nil)
|
||||||
addr := peer.SocketAddr()
|
addr := peer.SocketAddr()
|
||||||
|
|
||||||
err = book.AddAddress(addr, addr)
|
require.NoError(t, book.AddAddress(addr, addr))
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
assert.True(t, book.HasAddress(addr))
|
assert.True(t, book.HasAddress(addr))
|
||||||
|
|
||||||
@@ -409,9 +376,7 @@ func TestPEXReactorSeedModeFlushStop(t *testing.T) {
|
|||||||
switches := make([]*p2p.Switch, N)
|
switches := make([]*p2p.Switch, N)
|
||||||
|
|
||||||
// directory to store address books
|
// directory to store address books
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
dir := t.TempDir()
|
||||||
require.Nil(t, err)
|
|
||||||
defer os.RemoveAll(dir)
|
|
||||||
|
|
||||||
books := make([]AddrBook, N)
|
books := make([]AddrBook, N)
|
||||||
logger := log.TestingLogger()
|
logger := log.TestingLogger()
|
||||||
@@ -447,8 +412,7 @@ func TestPEXReactorSeedModeFlushStop(t *testing.T) {
|
|||||||
reactor := switches[0].Reactors()["pex"].(*Reactor)
|
reactor := switches[0].Reactors()["pex"].(*Reactor)
|
||||||
peerID := switches[1].NodeInfo().ID()
|
peerID := switches[1].NodeInfo().ID()
|
||||||
|
|
||||||
err = switches[1].DialPeerWithAddress(switches[0].NetAddress())
|
assert.NoError(t, switches[1].DialPeerWithAddress(switches[0].NetAddress()))
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
// sleep up to a second while waiting for the peer to send us a message.
|
// sleep up to a second while waiting for the peer to send us a message.
|
||||||
// this isn't perfect since it's possible the peer sends us a msg and we FlushStop
|
// this isn't perfect since it's possible the peer sends us a msg and we FlushStop
|
||||||
@@ -479,9 +443,8 @@ func TestPEXReactorSeedModeFlushStop(t *testing.T) {
|
|||||||
func TestPEXReactorDoesNotAddPrivatePeersToAddrBook(t *testing.T) {
|
func TestPEXReactorDoesNotAddPrivatePeersToAddrBook(t *testing.T) {
|
||||||
peer := p2p.CreateRandomPeer(false)
|
peer := p2p.CreateRandomPeer(false)
|
||||||
|
|
||||||
pexR, book := createReactor(&ReactorConfig{})
|
pexR, book := createReactor(t, &ReactorConfig{})
|
||||||
book.AddPrivateIDs([]string{string(peer.NodeInfo().ID())})
|
book.AddPrivateIDs([]string{string(peer.NodeInfo().ID())})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
// we have to send a request to receive responses
|
// we have to send a request to receive responses
|
||||||
pexR.RequestAddrs(peer)
|
pexR.RequestAddrs(peer)
|
||||||
@@ -496,10 +459,9 @@ func TestPEXReactorDoesNotAddPrivatePeersToAddrBook(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPEXReactorDialPeer(t *testing.T) {
|
func TestPEXReactorDialPeer(t *testing.T) {
|
||||||
pexR, book := createReactor(&ReactorConfig{})
|
pexR, book := createReactor(t, &ReactorConfig{})
|
||||||
defer teardownReactor(book)
|
|
||||||
|
|
||||||
sw := createSwitchAndAddReactors(pexR)
|
sw := createSwitchAndAddReactors(pexR)
|
||||||
|
|
||||||
sw.SetAddrBook(book)
|
sw.SetAddrBook(book)
|
||||||
|
|
||||||
peer := mock.NewPeer(nil)
|
peer := mock.NewPeer(nil)
|
||||||
@@ -644,13 +606,9 @@ func testCreatePeerWithSeed(dir string, id int, seed *p2p.Switch) *p2p.Switch {
|
|||||||
return testCreatePeerWithConfig(dir, id, conf)
|
return testCreatePeerWithConfig(dir, id, conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createReactor(conf *ReactorConfig) (r *Reactor, book AddrBook) {
|
func createReactor(t *testing.T, conf *ReactorConfig) (r *Reactor, book AddrBook) {
|
||||||
// directory to store address book
|
// directory to store address book
|
||||||
dir, err := ioutil.TempDir("", "pex_reactor")
|
book = NewAddrBook(filepath.Join(t.TempDir(), "addrbook.json"), true)
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
book = NewAddrBook(filepath.Join(dir, "addrbook.json"), true)
|
|
||||||
book.SetLogger(log.TestingLogger())
|
book.SetLogger(log.TestingLogger())
|
||||||
|
|
||||||
r = NewReactor(book, conf)
|
r = NewReactor(book, conf)
|
||||||
@@ -658,14 +616,6 @@ func createReactor(conf *ReactorConfig) (r *Reactor, book AddrBook) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func teardownReactor(book AddrBook) {
|
|
||||||
// FIXME Shouldn't rely on .(*addrBook) assertion
|
|
||||||
err := os.RemoveAll(filepath.Dir(book.(*addrBook).FilePath()))
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func createSwitchAndAddReactors(reactors ...p2p.Reactor) *p2p.Switch {
|
func createSwitchAndAddReactors(reactors ...p2p.Reactor) *p2p.Switch {
|
||||||
sw := p2p.MakeSwitch(cfg, 0, "127.0.0.1", "123.123.123", func(i int, sw *p2p.Switch) *p2p.Switch { return sw })
|
sw := p2p.MakeSwitch(cfg, 0, "127.0.0.1", "123.123.123", func(i int, sw *p2p.Switch) *p2p.Switch { return sw })
|
||||||
sw.SetLogger(log.TestingLogger())
|
sw.SetLogger(log.TestingLogger())
|
||||||
@@ -677,7 +627,6 @@ func createSwitchAndAddReactors(reactors ...p2p.Reactor) *p2p.Switch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPexVectors(t *testing.T) {
|
func TestPexVectors(t *testing.T) {
|
||||||
|
|
||||||
addr := tmp2p.NetAddress{
|
addr := tmp2p.NetAddress{
|
||||||
ID: "1",
|
ID: "1",
|
||||||
IP: "127.0.0.1",
|
IP: "127.0.0.1",
|
||||||
|
|||||||
Reference in New Issue
Block a user