swarm: parametrized sync tests for live and history

This commit is contained in:
Fabio Barone 2018-03-08 17:03:48 -05:00
parent de0ef13f75
commit 94bddd4c58
3 changed files with 46 additions and 39 deletions

View file

@ -44,6 +44,10 @@ import (
) )
var ( var (
deliveries map[discover.NodeID]*Delivery
stores map[discover.NodeID]storage.ChunkStore
toAddr func(discover.NodeID) *network.BzzAddr
peerCount func(discover.NodeID) int
adapter = flag.String("adapter", "socket", "type of simulation: sim|socket|exec|docker") adapter = flag.String("adapter", "socket", "type of simulation: sim|socket|exec|docker")
loglevel = flag.Int("loglevel", 4, "verbosity of logs") loglevel = flag.Int("loglevel", 4, "verbosity of logs")
) )
@ -53,6 +57,7 @@ var (
waitPeerErrC chan error waitPeerErrC chan error
chunkSize = 4096 chunkSize = 4096
registries map[discover.NodeID]*TestRegistry registries map[discover.NodeID]*TestRegistry
createStoreFunc func(id discover.NodeID, addr *network.BzzAddr) (storage.ChunkStore, error)
) )
var services = adapters.Services{ var services = adapters.Services{
@ -76,7 +81,7 @@ func NewStreamerService(ctx *adapters.ServiceContext) (node.Service, error) {
id := ctx.Config.ID id := ctx.Config.ID
addr := toAddr(id) addr := toAddr(id)
kad := network.NewKademlia(addr.Over(), network.NewKadParams()) kad := network.NewKademlia(addr.Over(), network.NewKadParams())
stores[id], err = createTestLocalStorageForId(id, addr) stores[id], err = createStoreFunc(id, addr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -98,23 +103,6 @@ func NewStreamerService(ctx *adapters.ServiceContext) (node.Service, error) {
return testRegistry, nil return testRegistry, nil
} }
//create a local store for the given node
func createTestLocalStorageForId(id discover.NodeID, addr *network.BzzAddr) (storage.ChunkStore, error) {
var datadir string
var err error
datadir, err = ioutil.TempDir("", fmt.Sprintf("syncer-test-%s", id.TerminalString()))
if err != nil {
return nil, err
}
datadirs[id] = datadir
var store storage.ChunkStore
store, err = storage.NewTestLocalStoreForAddr(datadir, addr.Over())
if err != nil {
return nil, err
}
return store, nil
}
func datadirsCleanup() { func datadirsCleanup() {
for _, id := range ids { for _, id := range ids {
os.RemoveAll(datadirs[id]) os.RemoveAll(datadirs[id])

View file

@ -36,13 +36,6 @@ import (
"github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage"
) )
var (
deliveries map[discover.NodeID]*Delivery
stores map[discover.NodeID]storage.ChunkStore
toAddr func(discover.NodeID) *network.BzzAddr
peerCount func(discover.NodeID) int
)
func TestStreamerRetrieveRequest(t *testing.T) { func TestStreamerRetrieveRequest(t *testing.T) {
tester, streamer, _, teardown, err := newStreamerTester(t) tester, streamer, _, teardown, err := newStreamerTester(t)
defer teardown() defer teardown()
@ -314,6 +307,7 @@ func TestDeliveryFromNodes(t *testing.T) {
func testDeliveryFromNodes(t *testing.T, nodes, conns, chunkCount int, skipCheck bool) { func testDeliveryFromNodes(t *testing.T, nodes, conns, chunkCount int, skipCheck bool) {
defaultSkipCheck = skipCheck defaultSkipCheck = skipCheck
toAddr = network.NewAddrFromNodeID toAddr = network.NewAddrFromNodeID
createStoreFunc = createTestLocalStorageFromSim
conf := &streamTesting.RunConfig{ conf := &streamTesting.RunConfig{
Adapter: *adapter, Adapter: *adapter,
NodeCount: nodes, NodeCount: nodes,
@ -329,10 +323,11 @@ func testDeliveryFromNodes(t *testing.T, nodes, conns, chunkCount int, skipCheck
t.Fatal(err.Error()) t.Fatal(err.Error())
} }
stores = make(map[discover.NodeID]storage.ChunkStore) stores = make(map[discover.NodeID]storage.ChunkStore)
deliveries = make(map[discover.NodeID]*Delivery)
for i, id := range sim.IDs { for i, id := range sim.IDs {
stores[id] = sim.Stores[i] stores[id] = sim.Stores[i]
} }
registries = make(map[discover.NodeID]*TestRegistry)
deliveries = make(map[discover.NodeID]*Delivery)
peerCount = func(id discover.NodeID) int { peerCount = func(id discover.NodeID) int {
if sim.IDs[0] == id || sim.IDs[nodes-1] == id { if sim.IDs[0] == id || sim.IDs[nodes-1] == id {
return 1 return 1
@ -674,3 +669,7 @@ Loop:
b.Fatalf("expected no error. got %v", err) b.Fatalf("expected no error. got %v", err)
} }
} }
func createTestLocalStorageFromSim(id discover.NodeID, addr *network.BzzAddr) (storage.ChunkStore, error) {
return stores[id], nil
}

View file

@ -69,7 +69,7 @@ type synctestConfig struct {
func init() { func init() {
rand.Seed(time.Now().Unix()) rand.Seed(time.Now().Unix())
initSyncTest() //initSyncTest()
} }
//common_test needs to initialize the test in a init() func //common_test needs to initialize the test in a init() func
@ -84,6 +84,7 @@ func initSyncTest() {
return addr return addr
} }
createStoreFunc = createTestLocalStorageForId
//local stores //local stores
stores = make(map[discover.NodeID]storage.ChunkStore) stores = make(map[discover.NodeID]storage.ChunkStore)
//data directories for each node and store //data directories for each node and store
@ -134,6 +135,7 @@ func TestSyncing_1024_16(t *testing.T) { testSyncing(t, 1024, 16) }
//The following tests have been disabled because they seem to hit resource limits //The following tests have been disabled because they seem to hit resource limits
//on developer machines and/or are long running //on developer machines and/or are long running
/*
func TestSyncing_256_64(t *testing.T) { testSyncing(t, 256, 64) } func TestSyncing_256_64(t *testing.T) { testSyncing(t, 256, 64) }
func TestSyncing_8_256(t *testing.T) { testSyncing(t, 8, 256) } func TestSyncing_8_256(t *testing.T) { testSyncing(t, 8, 256) }
func TestSyncing_32_256(t *testing.T) { testSyncing(t, 32, 256) } func TestSyncing_32_256(t *testing.T) { testSyncing(t, 32, 256) }
@ -146,8 +148,10 @@ func TestSyncing_1024_32(t *testing.T) { testSyncing(t, 1024, 32) }
func TestSyncing_1024_64(t *testing.T) { testSyncing(t, 1024, 64) } func TestSyncing_1024_64(t *testing.T) { testSyncing(t, 1024, 64) }
func TestSyncing_1024_128(t *testing.T) { testSyncing(t, 1024, 128) } func TestSyncing_1024_128(t *testing.T) { testSyncing(t, 1024, 128) }
func TestSyncing_1024_256(t *testing.T) { testSyncing(t, 1024, 256) } func TestSyncing_1024_256(t *testing.T) { testSyncing(t, 1024, 256) }
*/
func testSyncing(t *testing.T, chunkCount int, nodeCount int) { func testSyncing(t *testing.T, chunkCount int, nodeCount int) {
initSyncTest()
ids = make([]discover.NodeID, nodeCount) ids = make([]discover.NodeID, nodeCount)
//test live and NO history //test live and NO history
@ -173,7 +177,6 @@ func testSyncing(t *testing.T, chunkCount int, nodeCount int) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
} }
/* /*
@ -708,3 +711,20 @@ func watchSubscriptionEvents(ctx context.Context, id discover.NodeID, client *rp
}() }()
return return
} }
//create a local store for the given node
func createTestLocalStorageForId(id discover.NodeID, addr *network.BzzAddr) (storage.ChunkStore, error) {
var datadir string
var err error
datadir, err = ioutil.TempDir("", fmt.Sprintf("syncer-test-%s", id.TerminalString()))
if err != nil {
return nil, err
}
datadirs[id] = datadir
var store storage.ChunkStore
store, err = storage.NewTestLocalStoreForAddr(datadir, addr.Over())
if err != nil {
return nil, err
}
return store, nil
}