@@ -22,10 +22,8 @@ import (
22
22
"crypto/ecdsa"
23
23
"encoding/binary"
24
24
"encoding/hex"
25
- "encoding/json"
26
25
"flag"
27
26
"fmt"
28
- "io/ioutil"
29
27
"math/rand"
30
28
"os"
31
29
"strconv"
@@ -41,11 +39,12 @@ import (
41
39
"github.com/ethereum/go-ethereum/node"
42
40
"github.com/ethereum/go-ethereum/p2p"
43
41
"github.com/ethereum/go-ethereum/p2p/enode"
44
- "github.com/ethereum/go-ethereum/p2p/simulations"
45
42
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
46
43
"github.com/ethereum/go-ethereum/rpc"
47
44
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
45
+
48
46
"github.com/ethersphere/swarm/network"
47
+ "github.com/ethersphere/swarm/network/simulation"
49
48
"github.com/ethersphere/swarm/p2p/protocols"
50
49
"github.com/ethersphere/swarm/pot"
51
50
"github.com/ethersphere/swarm/state"
68
67
func init () {
69
68
flag .Parse ()
70
69
rand .Seed (time .Now ().Unix ())
71
-
72
- adapters .RegisterServices (newServices (false ))
73
70
initTest ()
74
71
}
75
72
@@ -879,10 +876,11 @@ func TestRawAllow(t *testing.T) {
879
876
880
877
// tests that the API layer can handle edge case values
881
878
func TestApi (t * testing.T ) {
882
- clients , err := setupNetwork (2 , true )
879
+ clients , closeSimFunc , err := setupNetwork (2 , true )
883
880
if err != nil {
884
881
t .Fatal (err )
885
882
}
883
+ defer closeSimFunc ()
886
884
887
885
topic := "0xdeadbeef"
888
886
@@ -920,10 +918,11 @@ func testSendRaw(t *testing.T) {
920
918
addrsize , _ = strconv .ParseInt (paramstring [1 ], 10 , 0 )
921
919
log .Info ("raw send test" , "addrsize" , addrsize )
922
920
923
- clients , err := setupNetwork (2 , true )
921
+ clients , closeSimFunc , err := setupNetwork (2 , true )
924
922
if err != nil {
925
923
t .Fatal (err )
926
924
}
925
+ defer closeSimFunc ()
927
926
928
927
topic := "0xdeadbeef"
929
928
@@ -1002,10 +1001,11 @@ func testSendSym(t *testing.T) {
1002
1001
addrsize , _ = strconv .ParseInt (paramstring [1 ], 10 , 0 )
1003
1002
log .Info ("sym send test" , "addrsize" , addrsize )
1004
1003
1005
- clients , err := setupNetwork (2 , false )
1004
+ clients , closeSimFunc , err := setupNetwork (2 , false )
1006
1005
if err != nil {
1007
1006
t .Fatal (err )
1008
1007
}
1008
+ defer closeSimFunc ()
1009
1009
1010
1010
var topic string
1011
1011
err = clients [0 ].Call (& topic , "pss_stringToTopic" , "foo:42" )
@@ -1117,10 +1117,11 @@ func testSendAsym(t *testing.T) {
1117
1117
addrsize , _ = strconv .ParseInt (paramstring [1 ], 10 , 0 )
1118
1118
log .Info ("asym send test" , "addrsize" , addrsize )
1119
1119
1120
- clients , err := setupNetwork (2 , false )
1120
+ clients , closeSimFunc , err := setupNetwork (2 , false )
1121
1121
if err != nil {
1122
1122
t .Fatal (err )
1123
1123
}
1124
+ defer closeSimFunc ()
1124
1125
1125
1126
var topic string
1126
1127
err = clients [0 ].Call (& topic , "pss_stringToTopic" , "foo:42" )
@@ -1278,37 +1279,20 @@ func testNetwork(t *testing.T) {
1278
1279
1279
1280
trigger := make (chan enode.ID )
1280
1281
1281
- var a adapters. NodeAdapter
1282
+ var sim = & simulation. Simulation {}
1282
1283
if adapter == "exec" {
1283
- dirname , err := ioutil .TempDir ("." , "" )
1284
- if err != nil {
1285
- t .Fatal (err )
1286
- }
1287
- a = adapters .NewExecAdapter (dirname )
1288
- } else if adapter == "tcp" {
1289
- a = adapters .NewTCPAdapter (newServices (false ))
1290
- } else if adapter == "sim" {
1291
- a = adapters .NewSimAdapter (newServices (false ))
1292
- }
1293
- net := simulations .NewNetwork (a , & simulations.NetworkConfig {
1294
- ID : "0" ,
1295
- })
1296
- defer net .Shutdown ()
1297
-
1298
- f , err := os .Open (fmt .Sprintf ("testdata/snapshot_%d.json" , nodecount ))
1299
- if err != nil {
1300
- t .Fatal (err )
1301
- }
1302
- jsonbyte , err := ioutil .ReadAll (f )
1303
- if err != nil {
1304
- t .Fatal (err )
1284
+ sim , _ = simulation .NewExec (newServices (false ))
1285
+ } else if adapter == "tcp" || adapter == "sim" {
1286
+ sim = simulation .NewInProc (newServices (false ))
1305
1287
}
1306
- var snap simulations.Snapshot
1307
- err = json .Unmarshal (jsonbyte , & snap )
1308
- if err != nil {
1309
- t .Fatal (err )
1310
- }
1311
- err = net .Load (& snap )
1288
+ defer sim .Close ()
1289
+
1290
+ net := sim .Net
1291
+
1292
+ ctx , cancel := context .WithTimeout (context .Background (), 120 * time .Second )
1293
+ defer cancel ()
1294
+
1295
+ err := sim .UploadSnapshot (ctx , fmt .Sprintf ("testdata/snapshot_%d.json" , nodecount ))
1312
1296
if err != nil {
1313
1297
//TODO: Fix p2p simulation framework to not crash when loading 32-nodes
1314
1298
//t.Fatal(err)
@@ -1412,8 +1396,6 @@ func testNetwork(t *testing.T) {
1412
1396
}
1413
1397
1414
1398
finalmsgcount := 0
1415
- ctx , cancel := context .WithTimeout (context .Background (), 120 * time .Second )
1416
- defer cancel ()
1417
1399
outer:
1418
1400
for i := 0 ; i < int (msgcount ); i ++ {
1419
1401
select {
@@ -1444,10 +1426,11 @@ outer:
1444
1426
func TestDeduplication (t * testing.T ) {
1445
1427
var err error
1446
1428
1447
- clients , err := setupNetwork (3 , false )
1429
+ clients , closeSimFunc , err := setupNetwork (3 , false )
1448
1430
if err != nil {
1449
1431
t .Fatal (err )
1450
1432
}
1433
+ defer closeSimFunc ()
1451
1434
1452
1435
var addrsize = 32
1453
1436
var loaddrhex string
@@ -1780,52 +1763,37 @@ func benchmarkSymkeyBruteforceSameaddr(b *testing.B) {
1780
1763
// setup simulated network with bzz/discovery and pss services.
1781
1764
// connects nodes in a circle
1782
1765
// if allowRaw is set, omission of builtin pss encryption is enabled (see PssParams)
1783
- func setupNetwork (numnodes int , allowRaw bool ) (clients []* rpc.Client , err error ) {
1784
- nodes := make ([]* simulations.Node , numnodes )
1766
+ func setupNetwork (numnodes int , allowRaw bool ) (clients []* rpc.Client , closeSimFunc func (), err error ) {
1785
1767
clients = make ([]* rpc.Client , numnodes )
1786
1768
if numnodes < 2 {
1787
- return nil , fmt .Errorf ("Minimum two nodes in network" )
1769
+ return nil , nil , fmt .Errorf ("minimum two nodes in network" )
1788
1770
}
1789
- adapter := adapters .NewSimAdapter (newServices (allowRaw ))
1790
- net := simulations .NewNetwork (adapter , & simulations.NetworkConfig {
1791
- ID : "0" ,
1792
- DefaultService : "bzz" ,
1793
- })
1794
- for i := 0 ; i < numnodes ; i ++ {
1795
- nodeconf := adapters .RandomNodeConfig ()
1796
- nodeconf .Services = []string {"bzz" , protocolName }
1797
- nodes [i ], err = net .NewNodeWithConfig (nodeconf )
1798
- if err != nil {
1799
- return nil , fmt .Errorf ("error creating node 1: %v" , err )
1800
- }
1801
- err = net .Start (nodes [i ].ID ())
1802
- if err != nil {
1803
- return nil , fmt .Errorf ("error starting node 1: %v" , err )
1804
- }
1805
- if i > 0 {
1806
- err = net .Connect (nodes [i ].ID (), nodes [i - 1 ].ID ())
1807
- if err != nil {
1808
- return nil , fmt .Errorf ("error connecting nodes: %v" , err )
1809
- }
1810
- }
1811
- clients [i ], err = nodes [i ].Client ()
1812
- if err != nil {
1813
- return nil , fmt .Errorf ("create node 1 rpc client fail: %v" , err )
1814
- }
1771
+ sim := simulation .NewInProc (newServices (allowRaw ))
1772
+ closeSimFunc = sim .Close
1773
+ if numnodes == 2 {
1774
+ _ , err = sim .AddNodesAndConnectChain (numnodes )
1775
+
1776
+ } else {
1777
+ _ , err = sim .AddNodesAndConnectRing (numnodes )
1778
+ }
1779
+ if err != nil {
1780
+ return nil , nil , err
1815
1781
}
1816
- if numnodes > 2 {
1817
- err = net .Connect (nodes [0 ].ID (), nodes [len (nodes )- 1 ].ID ())
1782
+ nodes := sim .Net .GetNodes ()
1783
+ for id , node := range nodes {
1784
+ client , err := node .Client ()
1818
1785
if err != nil {
1819
- return nil , fmt .Errorf ("error connecting first and last nodes" )
1786
+ return nil , nil , fmt .Errorf ("error getting the nodes clients " )
1820
1787
}
1788
+ clients [id ] = client
1821
1789
}
1822
- return clients , nil
1790
+ return clients , closeSimFunc , nil
1823
1791
}
1824
1792
1825
- func newServices (allowRaw bool ) adapters. Services {
1793
+ func newServices (allowRaw bool ) map [ string ]simulation. ServiceFunc {
1826
1794
stateStore := state .NewInmemoryStore ()
1827
1795
kademlias := make (map [enode.ID ]* network.Kademlia )
1828
- kademlia := func (id enode.ID ) * network.Kademlia {
1796
+ kademlia := func (id enode.ID , bzzKey [] byte ) * network.Kademlia {
1829
1797
if k , ok := kademlias [id ]; ok {
1830
1798
return k
1831
1799
}
@@ -1836,11 +1804,30 @@ func newServices(allowRaw bool) adapters.Services {
1836
1804
params .MaxRetries = 1000
1837
1805
params .RetryExponent = 2
1838
1806
params .RetryInterval = 1000000
1839
- kademlias [id ] = network .NewKademlia (id [:] , params )
1807
+ kademlias [id ] = network .NewKademlia (bzzKey , params )
1840
1808
return kademlias [id ]
1841
1809
}
1842
- return adapters.Services {
1843
- protocolName : func (ctx * adapters.ServiceContext ) (node.Service , error ) {
1810
+ return map [string ]simulation.ServiceFunc {
1811
+ "bzz" : func (ctx * adapters.ServiceContext , bucket * sync.Map ) (s node.Service , cleanup func (), err error ) {
1812
+ addr := network .NewAddr (ctx .Config .Node ())
1813
+ bzzPrivateKey , err := simulation .BzzPrivateKeyFromConfig (ctx .Config )
1814
+ if err != nil {
1815
+ return nil , nil , err
1816
+ }
1817
+ addr .OAddr = network .PrivateKeyToBzzKey (bzzPrivateKey )
1818
+ bucket .Store (simulation .BucketKeyBzzPrivateKey , bzzPrivateKey )
1819
+ hp := network .NewHiveParams ()
1820
+ hp .Discovery = false
1821
+ config := & network.BzzConfig {
1822
+ OverlayAddr : addr .Over (),
1823
+ UnderlayAddr : addr .Under (),
1824
+ HiveParams : hp ,
1825
+ }
1826
+ pskad := kademlia (ctx .Config .ID , addr .OAddr )
1827
+ bucket .Store (simulation .BucketKeyKademlia , pskad )
1828
+ return network .NewBzz (config , pskad , stateStore , nil , nil ), nil , nil
1829
+ },
1830
+ protocolName : func (ctx * adapters.ServiceContext , bucket * sync.Map ) (node.Service , func (), error ) {
1844
1831
// execadapter does not exec init()
1845
1832
initTest ()
1846
1833
@@ -1850,25 +1837,30 @@ func newServices(allowRaw bool) adapters.Services {
1850
1837
privkey , err := w .GetPrivateKey (keys )
1851
1838
pssp := NewParams ().WithPrivateKey (privkey )
1852
1839
pssp .AllowRaw = allowRaw
1853
- pskad := kademlia (ctx .Config .ID )
1840
+ bzzPrivateKey , err := simulation .BzzPrivateKeyFromConfig (ctx .Config )
1841
+ if err != nil {
1842
+ return nil , nil , err
1843
+ }
1844
+ bzzKey := network .PrivateKeyToBzzKey (bzzPrivateKey )
1845
+ pskad := kademlia (ctx .Config .ID , bzzKey )
1846
+ bucket .Store (simulation .BucketKeyKademlia , pskad )
1854
1847
ps , err := New (pskad , pssp )
1855
1848
if err != nil {
1856
- return nil , err
1849
+ return nil , nil , err
1857
1850
}
1858
-
1859
1851
ping := & Ping {
1860
1852
OutC : make (chan bool ),
1861
1853
Pong : true ,
1862
1854
}
1863
1855
p2pp := NewPingProtocol (ping )
1864
1856
pp , err := RegisterProtocol (ps , & PingTopic , PingProtocol , p2pp , & ProtocolParams {Asymmetric : true })
1865
1857
if err != nil {
1866
- return nil , err
1858
+ return nil , nil , err
1867
1859
}
1868
1860
if useHandshake {
1869
1861
SetHandshakeController (ps , NewHandshakeParams ())
1870
1862
}
1871
- ps .Register (& PingTopic , & handler {
1863
+ cleanupFunc := ps .Register (& PingTopic , & handler {
1872
1864
f : pp .Handle ,
1873
1865
caps : & handlerCaps {
1874
1866
raw : true ,
@@ -1885,18 +1877,8 @@ func newServices(allowRaw bool) adapters.Services {
1885
1877
protocol : pp ,
1886
1878
run : p2pp .Run ,
1887
1879
}
1888
- return ps , nil
1889
- },
1890
- "bzz" : func (ctx * adapters.ServiceContext ) (node.Service , error ) {
1891
- addr := network .NewAddr (ctx .Config .Node ())
1892
- hp := network .NewHiveParams ()
1893
- hp .Discovery = false
1894
- config := & network.BzzConfig {
1895
- OverlayAddr : addr .Over (),
1896
- UnderlayAddr : addr .Under (),
1897
- HiveParams : hp ,
1898
- }
1899
- return network .NewBzz (config , kademlia (ctx .Config .ID ), stateStore , nil , nil ), nil
1880
+ return ps , cleanupFunc , nil
1881
+
1900
1882
},
1901
1883
}
1902
1884
}
@@ -1919,7 +1901,10 @@ func newTestPss(privkey *ecdsa.PrivateKey, kad *network.Kademlia, ppextra *Param
1919
1901
if err != nil {
1920
1902
return nil
1921
1903
}
1922
- ps .Start (nil )
1904
+ err = ps .Start (nil )
1905
+ if err != nil {
1906
+ return nil
1907
+ }
1923
1908
1924
1909
return ps
1925
1910
}
0 commit comments