@@ -26,16 +26,19 @@ import (
26
26
"math/rand"
27
27
"os"
28
28
"strings"
29
+ "sync"
29
30
"sync/atomic"
30
31
"time"
31
32
32
33
"github.com/ethereum/go-ethereum/log"
33
34
"github.com/ethereum/go-ethereum/p2p/enode"
35
+ "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
34
36
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
35
37
"github.com/ethereum/go-ethereum/swarm/network"
36
38
"github.com/ethereum/go-ethereum/swarm/network/simulation"
37
39
"github.com/ethereum/go-ethereum/swarm/state"
38
40
"github.com/ethereum/go-ethereum/swarm/storage"
41
+ mockmem "github.com/ethereum/go-ethereum/swarm/storage/mock/mem"
39
42
"github.com/ethereum/go-ethereum/swarm/testutil"
40
43
colorable "github.com/mattn/go-colorable"
41
44
)
@@ -66,6 +69,80 @@ func init() {
66
69
log .Root ().SetHandler (log .LvlFilterHandler (log .Lvl (* loglevel ), log .StreamHandler (colorable .NewColorableStderr (), log .TerminalFormat (true ))))
67
70
}
68
71
72
+ // newNetStoreAndDelivery is a default constructor for BzzAddr, NetStore and Delivery, used in Simulations
73
+ func newNetStoreAndDelivery (ctx * adapters.ServiceContext , bucket * sync.Map ) (* network.BzzAddr , * storage.NetStore , * Delivery , func (), error ) {
74
+ addr := network .NewAddr (ctx .Config .Node ())
75
+
76
+ netStore , delivery , cleanup , err := netStoreAndDeliveryWithAddr (ctx , bucket , addr )
77
+ if err != nil {
78
+ return nil , nil , nil , nil , err
79
+ }
80
+
81
+ netStore .NewNetFetcherFunc = network .NewFetcherFactory (delivery .RequestFromPeers , true ).New
82
+
83
+ return addr , netStore , delivery , cleanup , nil
84
+ }
85
+
86
+ // newNetStoreAndDeliveryWithBzzAddr is a constructor for NetStore and Delivery, used in Simulations, accepting any BzzAddr
87
+ func newNetStoreAndDeliveryWithBzzAddr (ctx * adapters.ServiceContext , bucket * sync.Map , addr * network.BzzAddr ) (* storage.NetStore , * Delivery , func (), error ) {
88
+ netStore , delivery , cleanup , err := netStoreAndDeliveryWithAddr (ctx , bucket , addr )
89
+ if err != nil {
90
+ return nil , nil , nil , err
91
+ }
92
+
93
+ netStore .NewNetFetcherFunc = network .NewFetcherFactory (delivery .RequestFromPeers , true ).New
94
+
95
+ return netStore , delivery , cleanup , nil
96
+ }
97
+
98
+ // newNetStoreAndDeliveryWithRequestFunc is a constructor for NetStore and Delivery, used in Simulations, accepting any NetStore.RequestFunc
99
+ func newNetStoreAndDeliveryWithRequestFunc (ctx * adapters.ServiceContext , bucket * sync.Map , rf network.RequestFunc ) (* network.BzzAddr , * storage.NetStore , * Delivery , func (), error ) {
100
+ addr := network .NewAddr (ctx .Config .Node ())
101
+
102
+ netStore , delivery , cleanup , err := netStoreAndDeliveryWithAddr (ctx , bucket , addr )
103
+ if err != nil {
104
+ return nil , nil , nil , nil , err
105
+ }
106
+
107
+ netStore .NewNetFetcherFunc = network .NewFetcherFactory (rf , true ).New
108
+
109
+ return addr , netStore , delivery , cleanup , nil
110
+ }
111
+
112
+ func netStoreAndDeliveryWithAddr (ctx * adapters.ServiceContext , bucket * sync.Map , addr * network.BzzAddr ) (* storage.NetStore , * Delivery , func (), error ) {
113
+ n := ctx .Config .Node ()
114
+
115
+ store , datadir , err := createTestLocalStorageForID (n .ID (), addr )
116
+ if * useMockStore {
117
+ store , datadir , err = createMockStore (mockmem .NewGlobalStore (), n .ID (), addr )
118
+ }
119
+ if err != nil {
120
+ return nil , nil , nil , err
121
+ }
122
+ localStore := store .(* storage.LocalStore )
123
+ netStore , err := storage .NewNetStore (localStore , nil )
124
+ if err != nil {
125
+ return nil , nil , nil , err
126
+ }
127
+
128
+ fileStore := storage .NewFileStore (netStore , storage .NewFileStoreParams ())
129
+
130
+ kad := network .NewKademlia (addr .Over (), network .NewKadParams ())
131
+ delivery := NewDelivery (kad , netStore )
132
+
133
+ bucket .Store (bucketKeyStore , store )
134
+ bucket .Store (bucketKeyDB , netStore )
135
+ bucket .Store (bucketKeyDelivery , delivery )
136
+ bucket .Store (bucketKeyFileStore , fileStore )
137
+
138
+ cleanup := func () {
139
+ netStore .Close ()
140
+ os .RemoveAll (datadir )
141
+ }
142
+
143
+ return netStore , delivery , cleanup , nil
144
+ }
145
+
69
146
func newStreamerTester (registryOptions * RegistryOptions ) (* p2ptest.ProtocolTester , * Registry , * storage.LocalStore , func (), error ) {
70
147
// setup
71
148
addr := network .RandomAddr () // tested peers peer address
0 commit comments