Update codebase to leverage Whisper v6 (#703)
* Update project to use Whisper v6. Part of #638 * Revert "Add patch to downgrade usage of Whisper v6 to v5 in some geth 1.8.1 vendor files. Part of #665" - this reverts commit 6aefb4c8fd02dbcfffac6b69e8bb22b13ef86b6b. * Enable light mode on Whisper v6 for non-mail servers. Part of #638 * Fix race condition in whisperv6/peer.go. Part of #665 (PR already accepted upstream for 1.8.2) * Update bootnode addresses in staticnodes.json. Part of #638 * Add `shh.lightclient` flag and tests for bloom filter setting logic. Part of #638 * Move MakeTestNodeConfig to utils. Part of #638 * Reduce PoW in `whisper_jail_test.go` to fix flaky test. Part of #638
This commit is contained in:
parent
e5743695cc
commit
6cdea4ef97
|
@ -470,6 +470,6 @@
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "6272bfa7822dec71d4c8da4cf7b45de6cefe920e0eeb0c48acce55b9928903e7"
|
inputs-digest = "29b8637c1c6198d24f34a9882acf15d3203d8a9cdd6439464967ecff798efba1"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
diff --git a/cmd/wnode/main.go b/cmd/wnode/main.go
|
|
||||||
index 971b1c0ab..d42409db5 100644
|
|
||||||
--- a/cmd/wnode/main.go
|
|
||||||
+++ b/cmd/wnode/main.go
|
|
||||||
@@ -43,7 +43,7 @@ import (
|
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
|
||||||
"github.com/ethereum/go-ethereum/p2p/nat"
|
|
||||||
"github.com/ethereum/go-ethereum/whisper/mailserver"
|
|
||||||
- whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
|
||||||
+ whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
|
||||||
)
|
|
||||||
|
|
||||||
diff --git a/whisper/mailserver/mailserver.go b/whisper/mailserver/mailserver.go
|
|
||||||
index 6555fd5c0..0ec6ec570 100644
|
|
||||||
--- a/whisper/mailserver/mailserver.go
|
|
||||||
+++ b/whisper/mailserver/mailserver.go
|
|
||||||
@@ -26,7 +26,7 @@ import (
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
|
||||||
"github.com/ethereum/go-ethereum/log"
|
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
|
||||||
- whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
|
||||||
+ whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
|
||||||
"github.com/syndtr/goleveldb/leveldb"
|
|
||||||
"github.com/syndtr/goleveldb/leveldb/util"
|
|
||||||
)
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
diff --git a/whisper/whisperv6/peer.go b/whisper/whisperv6/peer.go
|
||||||
|
index 4ef0f3c4..6a7ab358 100644
|
||||||
|
--- a/whisper/whisperv6/peer.go
|
||||||
|
+++ b/whisper/whisperv6/peer.go
|
||||||
|
@@ -19,6 +19,7 @@ package whisperv6
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
+ "sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
@@ -38,6 +39,7 @@ type Peer struct {
|
||||||
|
powRequirement float64
|
||||||
|
+ bloomMu sync.Mutex
|
||||||
|
bloomFilter []byte
|
||||||
|
fullNode bool
|
||||||
|
|
||||||
|
known *set.Set // Messages already known by the peer to avoid wasting bandwidth
|
||||||
|
|
||||||
|
@@ -225,10 +227,14 @@ func (peer *Peer) notifyAboutBloomFilterChange(bloom []byte) error {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (peer *Peer) bloomMatch(env *Envelope) bool {
|
||||||
|
+ peer.bloomMu.Lock()
|
||||||
|
+ defer peer.bloomMu.Unlock()
|
||||||
|
return peer.fullNode || bloomFilterMatch(peer.bloomFilter, env.Bloom())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (peer *Peer) setBloomFilter(bloom []byte) {
|
||||||
|
+ peer.bloomMu.Lock()
|
||||||
|
+ defer peer.bloomMu.Unlock()
|
||||||
|
peer.bloomFilter = bloom
|
||||||
|
peer.fullNode = isFullNode(bloom)
|
||||||
|
if peer.fullNode && peer.bloomFilter == nil {
|
|
@ -35,8 +35,7 @@ Instructions for creating a patch from the command line:
|
||||||
- [`0010-geth-17-fix-npe-in-filter-system.patch`](./0010-geth-17-fix-npe-in-filter-system.patch) - Temp patch for 1.7.x to fix a NPE in the filter system.
|
- [`0010-geth-17-fix-npe-in-filter-system.patch`](./0010-geth-17-fix-npe-in-filter-system.patch) - Temp patch for 1.7.x to fix a NPE in the filter system.
|
||||||
- [`0014-whisperv6-notifications.patch`](./0014-whisperv6-notifications.patch) — adds Whisper v6 notifications (need to be reviewed and documented)
|
- [`0014-whisperv6-notifications.patch`](./0014-whisperv6-notifications.patch) — adds Whisper v6 notifications (need to be reviewed and documented)
|
||||||
- [`0015-whisperv6-envelopes-tracing.patch`](./0015-whisperv6-envelopes-tracing.patch) — adds Whisper v6 envelope tracing (need to be reviewed and documented)
|
- [`0015-whisperv6-envelopes-tracing.patch`](./0015-whisperv6-envelopes-tracing.patch) — adds Whisper v6 envelope tracing (need to be reviewed and documented)
|
||||||
- [`0017-geth-18-downgrade-to-whisperv5.patch`](./0017-geth-18-downgrade-to-whisperv5.patch) — some files in geth 1.8 import Whisper v6, instead of v5. This patch ensures v5 is used everywhere
|
- [`0018-geth-181-whisperv6-peer-race-cond-fix.patch`](./0018-geth-181-whisperv6-peer-race-cond-fix.patch) — Fixes race condition in Whisper v6. This has been merged upstream and this patch will need to be removed for 1.8.2.
|
||||||
|
|
||||||
|
|
||||||
# Updating
|
# Updating
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ var (
|
||||||
passwordFile = flag.String("shh.passwordfile", "", "Password file (password is used for symmetric encryption)")
|
passwordFile = flag.String("shh.passwordfile", "", "Password file (password is used for symmetric encryption)")
|
||||||
minPow = flag.Float64("shh.pow", params.WhisperMinimumPoW, "PoW for messages to be added to queue, in float format")
|
minPow = flag.Float64("shh.pow", params.WhisperMinimumPoW, "PoW for messages to be added to queue, in float format")
|
||||||
ttl = flag.Int("shh.ttl", params.WhisperTTL, "Time to live for messages, in seconds")
|
ttl = flag.Int("shh.ttl", params.WhisperTTL, "Time to live for messages, in seconds")
|
||||||
|
lightClient = flag.Bool("shh.lightclient", false, "Start with empty bloom filter, and don't forward messages")
|
||||||
|
|
||||||
// MailServer
|
// MailServer
|
||||||
enableMailServer = flag.Bool("shh.mailserver", false, "Delivers expired messages on demand")
|
enableMailServer = flag.Bool("shh.mailserver", false, "Delivers expired messages on demand")
|
||||||
|
|
|
@ -14,6 +14,7 @@ func whisperConfig(nodeConfig *params.NodeConfig) (*params.NodeConfig, error) {
|
||||||
whisperConfig := nodeConfig.WhisperConfig
|
whisperConfig := nodeConfig.WhisperConfig
|
||||||
whisperConfig.Enabled = true
|
whisperConfig.Enabled = true
|
||||||
whisperConfig.EnableMailServer = *enableMailServer
|
whisperConfig.EnableMailServer = *enableMailServer
|
||||||
|
whisperConfig.LightClient = *lightClient
|
||||||
whisperConfig.MinimumPoW = *minPow
|
whisperConfig.MinimumPoW = *minPow
|
||||||
whisperConfig.TTL = *ttl
|
whisperConfig.TTL = *ttl
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/accounts"
|
"github.com/ethereum/go-ethereum/accounts"
|
||||||
"github.com/ethereum/go-ethereum/accounts/keystore"
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
||||||
gethcommon "github.com/ethereum/go-ethereum/common"
|
gethcommon "github.com/ethereum/go-ethereum/common"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/status-im/status-go/geth/common"
|
"github.com/status-im/status-go/geth/common"
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
|
|
|
@ -16,7 +16,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/les"
|
"github.com/ethereum/go-ethereum/les"
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
"github.com/status-im/status-go/geth/rpc"
|
"github.com/status-im/status-go/geth/rpc"
|
||||||
"github.com/status-im/status-go/static"
|
"github.com/status-im/status-go/static"
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
common "github.com/ethereum/go-ethereum/common"
|
common "github.com/ethereum/go-ethereum/common"
|
||||||
les "github.com/ethereum/go-ethereum/les"
|
les "github.com/ethereum/go-ethereum/les"
|
||||||
node "github.com/ethereum/go-ethereum/node"
|
node "github.com/ethereum/go-ethereum/node"
|
||||||
whisperv5 "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisperv6 "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
gomock "github.com/golang/mock/gomock"
|
gomock "github.com/golang/mock/gomock"
|
||||||
params "github.com/status-im/status-go/geth/params"
|
params "github.com/status-im/status-go/geth/params"
|
||||||
rpc "github.com/status-im/status-go/geth/rpc"
|
rpc "github.com/status-im/status-go/geth/rpc"
|
||||||
|
@ -165,9 +165,9 @@ func (mr *MockNodeManagerMockRecorder) LightEthereumService() *gomock.Call {
|
||||||
}
|
}
|
||||||
|
|
||||||
// WhisperService mocks base method
|
// WhisperService mocks base method
|
||||||
func (m *MockNodeManager) WhisperService() (*whisperv5.Whisper, error) {
|
func (m *MockNodeManager) WhisperService() (*whisperv6.Whisper, error) {
|
||||||
ret := m.ctrl.Call(m, "WhisperService")
|
ret := m.ctrl.Call(m, "WhisperService")
|
||||||
ret0, _ := ret[0].(*whisperv5.Whisper)
|
ret0, _ := ret[0].(*whisperv6.Whisper)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ServiceProvider provides node and required services.
|
// ServiceProvider provides node and required services.
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
gomock "github.com/golang/mock/gomock"
|
gomock "github.com/golang/mock/gomock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,7 +6,7 @@ package mailservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
node "github.com/ethereum/go-ethereum/node"
|
node "github.com/ethereum/go-ethereum/node"
|
||||||
whisperv5 "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisperv6 "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
gomock "github.com/golang/mock/gomock"
|
gomock "github.com/golang/mock/gomock"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
)
|
)
|
||||||
|
@ -48,9 +48,9 @@ func (mr *MockServiceProviderMockRecorder) Node() *gomock.Call {
|
||||||
}
|
}
|
||||||
|
|
||||||
// WhisperService mocks base method
|
// WhisperService mocks base method
|
||||||
func (m *MockServiceProvider) WhisperService() (*whisperv5.Whisper, error) {
|
func (m *MockServiceProvider) WhisperService() (*whisperv6.Whisper, error) {
|
||||||
ret := m.ctrl.Call(m, "WhisperService")
|
ret := m.ctrl.Call(m, "WhisperService")
|
||||||
ret0, _ := ret[0].(*whisperv5.Whisper)
|
ret0, _ := ret[0].(*whisperv6.Whisper)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/les"
|
"github.com/ethereum/go-ethereum/les"
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
"github.com/status-im/status-go/geth/mailservice"
|
"github.com/status-im/status-go/geth/mailservice"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/p2p/nat"
|
"github.com/ethereum/go-ethereum/p2p/nat"
|
||||||
"github.com/ethereum/go-ethereum/whisper/mailserver"
|
"github.com/ethereum/go-ethereum/whisper/mailserver"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
shhmetrics "github.com/status-im/status-go/metrics/whisper"
|
shhmetrics "github.com/status-im/status-go/metrics/whisper"
|
||||||
|
@ -185,6 +185,13 @@ func activateShhService(stack *node.Node, config *params.NodeConfig) error {
|
||||||
mailServer.Init(whisperService, whisperConfig.DataDir, whisperConfig.Password, whisperConfig.MinimumPoW)
|
mailServer.Init(whisperService, whisperConfig.DataDir, whisperConfig.Password, whisperConfig.MinimumPoW)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if whisperConfig.LightClient {
|
||||||
|
emptyBloomFilter := make([]byte, 64)
|
||||||
|
if err := whisperService.SetBloomFilter(emptyBloomFilter); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return whisperService, nil
|
return whisperService, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package node
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
|
|
||||||
|
. "github.com/status-im/status-go/t/utils"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWhisperLightModeEnabledSetsEmptyBloomFilter(t *testing.T) {
|
||||||
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
|
require.NoError(t, err)
|
||||||
|
config.WhisperConfig.LightClient = true
|
||||||
|
|
||||||
|
node, nodeErr := MakeNode(config)
|
||||||
|
require.NoError(t, nodeErr)
|
||||||
|
require.NoError(t, node.Start())
|
||||||
|
defer func() {
|
||||||
|
err := node.Stop()
|
||||||
|
require.NoError(t, err)
|
||||||
|
}()
|
||||||
|
|
||||||
|
var whisper *whisper.Whisper
|
||||||
|
err = node.Service(&whisper)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
bloomFilter := whisper.BloomFilter()
|
||||||
|
expectedEmptyBloomFilter := make([]byte, 64)
|
||||||
|
require.NotNil(t, bloomFilter)
|
||||||
|
require.Equal(t, expectedEmptyBloomFilter, bloomFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWhisperLightModeEnabledSetsNilBloomFilter(t *testing.T) {
|
||||||
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
|
require.NoError(t, err)
|
||||||
|
config.WhisperConfig.LightClient = false
|
||||||
|
|
||||||
|
node, nodeErr := MakeNode(config)
|
||||||
|
require.NoError(t, nodeErr)
|
||||||
|
require.NoError(t, node.Start())
|
||||||
|
defer func() {
|
||||||
|
err := node.Stop()
|
||||||
|
require.NoError(t, err)
|
||||||
|
}()
|
||||||
|
|
||||||
|
var whisper *whisper.Whisper
|
||||||
|
err = node.Service(&whisper)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Nil(t, whisper.BloomFilter())
|
||||||
|
}
|
|
@ -91,6 +91,9 @@ type WhisperConfig struct {
|
||||||
// (if no account file selected, then this password is used for symmetric encryption).
|
// (if no account file selected, then this password is used for symmetric encryption).
|
||||||
Password string
|
Password string
|
||||||
|
|
||||||
|
// LightClient should be true if the node should start with an empty bloom filter and not forward messages from other nodes
|
||||||
|
LightClient bool
|
||||||
|
|
||||||
// EnableMailServer is mode when node is capable of delivering expired messages on demand
|
// EnableMailServer is mode when node is capable of delivering expired messages on demand
|
||||||
EnableMailServer bool
|
EnableMailServer bool
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ var loadConfigTestCases = []struct {
|
||||||
require.True(t, nodeConfig.BootClusterConfig.Enabled, "boot cluster is expected to be enabled by default")
|
require.True(t, nodeConfig.BootClusterConfig.Enabled, "boot cluster is expected to be enabled by default")
|
||||||
|
|
||||||
enodes := nodeConfig.BootClusterConfig.BootNodes
|
enodes := nodeConfig.BootClusterConfig.BootNodes
|
||||||
require.True(t, len(enodes) >= 3)
|
require.Len(t, enodes, 2)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -240,7 +240,7 @@ var loadConfigTestCases = []struct {
|
||||||
require.True(t, nodeConfig.BootClusterConfig.Enabled, "boot cluster is expected to be enabled by default")
|
require.True(t, nodeConfig.BootClusterConfig.Enabled, "boot cluster is expected to be enabled by default")
|
||||||
|
|
||||||
enodes := nodeConfig.BootClusterConfig.BootNodes
|
enodes := nodeConfig.BootClusterConfig.BootNodes
|
||||||
require.True(t, len(enodes) >= 3)
|
require.Len(t, enodes, 2)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -340,6 +340,20 @@ var loadConfigTestCases = []struct {
|
||||||
require.True(t, nodeConfig.BootClusterConfig.Enabled)
|
require.True(t, nodeConfig.BootClusterConfig.Enabled)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
`explicit WhisperConfig.LightClient = true`,
|
||||||
|
`{
|
||||||
|
"NetworkId": 3,
|
||||||
|
"DataDir": "$TMPDIR",
|
||||||
|
"WhisperConfig": {
|
||||||
|
"LightClient": true
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
func(t *testing.T, dataDir string, nodeConfig *params.NodeConfig, err error) {
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, nodeConfig.WhisperConfig.LightClient)
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestLoadNodeConfig tests loading JSON configuration and setting default values.
|
// TestLoadNodeConfig tests loading JSON configuration and setting default values.
|
||||||
|
|
|
@ -6,7 +6,7 @@ package whisper
|
||||||
import (
|
import (
|
||||||
"expvar"
|
"expvar"
|
||||||
|
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
package whisper
|
package whisper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ package whisper
|
||||||
import (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,42 +4,14 @@
|
||||||
"genesisHash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
"genesisHash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||||
"prod": {
|
"prod": {
|
||||||
"bootnodes": [
|
"bootnodes": [
|
||||||
"enode://7ab298cedc4185a894d21d8a4615262ec6bdce66c9b6783878258e0d5b31013d30c9038932432f70e5b2b6a5cd323bf820554fcb22fbc7b45367889522e9c449@51.15.63.93:30303",
|
"enode://fa63a6cc730468c5456eab365b2a7a68a166845423c8c9acc363e5f8c4699ff6d954e7ec58f13ae49568600cff9899561b54f6fc2b9923136cd7104911f31cce@163.172.168.202:30303",
|
||||||
"enode://f59e8701f18c79c5cbc7618dc7bb928d44dc2f5405c7d693dad97da2d8585975942ec6fd36d3fe608bfdc7270a34a4dd00f38cfe96b2baa24f7cd0ac28d382a1@51.15.79.88:30303",
|
"enode://90cbf961c87eb837adc1300a0a6722a57134d843f0028a976d35dff387f101a2754842b6b694e50a01093808f304440d4d968bcbc599259e895ff26e5a1a17cf@51.15.194.39:30303"
|
||||||
"enode://e2a3587b7b41acfc49eddea9229281905d252efba0baf565cf6276df17faf04801b7879eead757da8b5be13b05f25e775ab6d857ff264bc53a89c027a657dd10@51.15.45.114:30303",
|
|
||||||
"enode://fe991752c4ceab8b90608fbf16d89a5f7d6d1825647d4981569ebcece1b243b2000420a5db721e214231c7a6da3543fa821185c706cbd9b9be651494ec97f56a@51.15.67.119:30303",
|
|
||||||
"enode://482484b9198530ee2e00db89791823244ca41dcd372242e2e1297dd06f6d8dd357603960c5ad9cc8dc15fcdf0e4edd06b7ad7db590e67a0b54f798c26581ebd7@51.15.75.138:30303",
|
|
||||||
"enode://9e99e183b5c71d51deb16e6b42ac9c26c75cfc95fff9dfae828b871b348354cbecf196dff4dd43567b26c8241b2b979cb4ea9f8dae2d9aacf86649dafe19a39a@51.15.79.176:30303",
|
|
||||||
"enode://12d52c3796700fb5acff2c7d96df7bbb6d7109b67f3442ee3d99ac1c197016cddb4c3568bbeba05d39145c59c990cd64f76bc9b00d4b13f10095c49507dd4cf9@51.15.63.110:30303",
|
|
||||||
"enode://0f7c65277f916ff4379fe520b875082a56e587eb3ce1c1567d9ff94206bdb05ba167c52272f20f634cd1ebdec5d9dfeb393018bfde1595d8e64a717c8b46692f@51.15.54.150:30303",
|
|
||||||
"enode://e006f0b2dc98e757468b67173295519e9b6d5ff4842772acb18fd055c620727ab23766c95b8ee1008dea9e8ef61e83b1515ddb3fb56dbfb9dbf1f463552a7c9f@212.47.237.127:30303",
|
|
||||||
"enode://d40871fc3e11b2649700978e06acd68a24af54e603d4333faecb70926ca7df93baa0b7bf4e927fcad9a7c1c07f9b325b22f6d1730e728314d0e4e6523e5cebc2@51.15.132.235:30303",
|
|
||||||
"enode://ea37c9724762be7f668e15d3dc955562529ab4f01bd7951f0b3c1960b75ecba45e8c3bb3c8ebe6a7504d9a40dd99a562b13629cc8e5e12153451765f9a12a61d@163.172.189.205:30303",
|
|
||||||
"enode://88c2b24429a6f7683fbfd06874ae3f1e7c8b4a5ffb846e77c705ba02e2543789d66fc032b6606a8d8888eb6239a2abe5897ce83f78dcdcfcb027d6ea69aa6fe9@163.172.157.61:30303",
|
|
||||||
"enode://ce6854c2c77a8800fcc12600206c344b8053bb90ee3ba280e6c4f18f3141cdc5ee80bcc3bdb24cbc0e96dffd4b38d7b57546ed528c00af6cd604ab65c4d528f6@163.172.153.124:30303",
|
|
||||||
"enode://00ae60771d9815daba35766d463a82a7b360b3a80e35ab2e0daa25bdc6ca6213ff4c8348025e7e1a908a8f58411a364fe02a0fb3c2aa32008304f063d8aaf1a2@163.172.132.85:30303",
|
|
||||||
"enode://86ebc843aa51669e08e27400e435f957918e39dc540b021a2f3291ab776c88bbda3d97631639219b6e77e375ab7944222c47713bdeb3251b25779ce743a39d70@212.47.254.155:30303",
|
|
||||||
"enode://a1ef9ba5550d5fac27f7cbd4e8d20a643ad75596f307c91cd6e7f85b548b8a6bf215cca436d6ee436d6135f9fe51398f8dd4c0bd6c6a0c332ccb41880f33ec12@51.15.218.125:30303"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dev": {
|
"dev": {
|
||||||
"bootnodes": [
|
"bootnodes": [
|
||||||
"enode://7ab298cedc4185a894d21d8a4615262ec6bdce66c9b6783878258e0d5b31013d30c9038932432f70e5b2b6a5cd323bf820554fcb22fbc7b45367889522e9c449@51.15.63.93:30303",
|
"enode://fa63a6cc730468c5456eab365b2a7a68a166845423c8c9acc363e5f8c4699ff6d954e7ec58f13ae49568600cff9899561b54f6fc2b9923136cd7104911f31cce@163.172.168.202:30303",
|
||||||
"enode://f59e8701f18c79c5cbc7618dc7bb928d44dc2f5405c7d693dad97da2d8585975942ec6fd36d3fe608bfdc7270a34a4dd00f38cfe96b2baa24f7cd0ac28d382a1@51.15.79.88:30303",
|
"enode://90cbf961c87eb837adc1300a0a6722a57134d843f0028a976d35dff387f101a2754842b6b694e50a01093808f304440d4d968bcbc599259e895ff26e5a1a17cf@51.15.194.39:30303"
|
||||||
"enode://e2a3587b7b41acfc49eddea9229281905d252efba0baf565cf6276df17faf04801b7879eead757da8b5be13b05f25e775ab6d857ff264bc53a89c027a657dd10@51.15.45.114:30303",
|
|
||||||
"enode://fe991752c4ceab8b90608fbf16d89a5f7d6d1825647d4981569ebcece1b243b2000420a5db721e214231c7a6da3543fa821185c706cbd9b9be651494ec97f56a@51.15.67.119:30303",
|
|
||||||
"enode://482484b9198530ee2e00db89791823244ca41dcd372242e2e1297dd06f6d8dd357603960c5ad9cc8dc15fcdf0e4edd06b7ad7db590e67a0b54f798c26581ebd7@51.15.75.138:30303",
|
|
||||||
"enode://9e99e183b5c71d51deb16e6b42ac9c26c75cfc95fff9dfae828b871b348354cbecf196dff4dd43567b26c8241b2b979cb4ea9f8dae2d9aacf86649dafe19a39a@51.15.79.176:30303",
|
|
||||||
"enode://12d52c3796700fb5acff2c7d96df7bbb6d7109b67f3442ee3d99ac1c197016cddb4c3568bbeba05d39145c59c990cd64f76bc9b00d4b13f10095c49507dd4cf9@51.15.63.110:30303",
|
|
||||||
"enode://0f7c65277f916ff4379fe520b875082a56e587eb3ce1c1567d9ff94206bdb05ba167c52272f20f634cd1ebdec5d9dfeb393018bfde1595d8e64a717c8b46692f@51.15.54.150:30303",
|
|
||||||
"enode://e006f0b2dc98e757468b67173295519e9b6d5ff4842772acb18fd055c620727ab23766c95b8ee1008dea9e8ef61e83b1515ddb3fb56dbfb9dbf1f463552a7c9f@212.47.237.127:30303",
|
|
||||||
"enode://d40871fc3e11b2649700978e06acd68a24af54e603d4333faecb70926ca7df93baa0b7bf4e927fcad9a7c1c07f9b325b22f6d1730e728314d0e4e6523e5cebc2@51.15.132.235:30303",
|
|
||||||
"enode://ea37c9724762be7f668e15d3dc955562529ab4f01bd7951f0b3c1960b75ecba45e8c3bb3c8ebe6a7504d9a40dd99a562b13629cc8e5e12153451765f9a12a61d@163.172.189.205:30303",
|
|
||||||
"enode://88c2b24429a6f7683fbfd06874ae3f1e7c8b4a5ffb846e77c705ba02e2543789d66fc032b6606a8d8888eb6239a2abe5897ce83f78dcdcfcb027d6ea69aa6fe9@163.172.157.61:30303",
|
|
||||||
"enode://ce6854c2c77a8800fcc12600206c344b8053bb90ee3ba280e6c4f18f3141cdc5ee80bcc3bdb24cbc0e96dffd4b38d7b57546ed528c00af6cd604ab65c4d528f6@163.172.153.124:30303",
|
|
||||||
"enode://00ae60771d9815daba35766d463a82a7b360b3a80e35ab2e0daa25bdc6ca6213ff4c8348025e7e1a908a8f58411a364fe02a0fb3c2aa32008304f063d8aaf1a2@163.172.132.85:30303",
|
|
||||||
"enode://86ebc843aa51669e08e27400e435f957918e39dc540b021a2f3291ab776c88bbda3d97631639219b6e77e375ab7944222c47713bdeb3251b25779ce743a39d70@212.47.254.155:30303",
|
|
||||||
"enode://a1ef9ba5550d5fac27f7cbd4e8d20a643ad75596f307c91cd6e7f85b548b8a6bf215cca436d6ee436d6135f9fe51398f8dd4c0bd6c6a0c332ccb41880f33ec12@51.15.218.125:30303"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
|
|
||||||
"github.com/status-im/status-go/geth/api"
|
"github.com/status-im/status-go/geth/api"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
"github.com/status-im/status-go/t/e2e"
|
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/p2p"
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
|
@ -32,7 +31,7 @@ type PeersTestSuite struct {
|
||||||
|
|
||||||
func (s *PeersTestSuite) SetupTest() {
|
func (s *PeersTestSuite) SetupTest() {
|
||||||
s.backend = api.NewStatusBackend()
|
s.backend = api.NewStatusBackend()
|
||||||
config, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
// we need to enable atleast 1 protocol, otherwise peers won't connect
|
// we need to enable atleast 1 protocol, otherwise peers won't connect
|
||||||
config.LightEthConfig.Enabled = false
|
config.LightEthConfig.Enabled = false
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
|
|
||||||
"github.com/status-im/status-go/geth/api"
|
"github.com/status-im/status-go/geth/api"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
"github.com/status-im/status-go/t/e2e"
|
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ type SyncTestSuite struct {
|
||||||
|
|
||||||
func (s *SyncTestSuite) SetupTest() {
|
func (s *SyncTestSuite) SetupTest() {
|
||||||
s.backend = api.NewStatusBackend()
|
s.backend = api.NewStatusBackend()
|
||||||
config, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
s.tempDir, err = ioutil.TempDir("/tmp", "status-sync-chain")
|
s.tempDir, err = ioutil.TempDir("/tmp", "status-sync-chain")
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
"github.com/status-im/status-go/geth/node"
|
"github.com/status-im/status-go/geth/node"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
"github.com/status-im/status-go/geth/signal"
|
"github.com/status-im/status-go/geth/signal"
|
||||||
e2e "github.com/status-im/status-go/t/e2e"
|
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
)
|
)
|
||||||
|
@ -65,10 +64,10 @@ func (s *APITestSuite) TestRaceConditions() {
|
||||||
progress := make(chan struct{}, cnt)
|
progress := make(chan struct{}, cnt)
|
||||||
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
nodeConfig1, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig1, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
nodeConfig2, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig2, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
||||||
|
@ -138,7 +137,7 @@ func (s *APITestSuite) TestCellsRemovedAfterSwitchAccount() {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
config, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
err = s.api.StartNode(config)
|
err = s.api.StartNode(config)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -175,7 +174,7 @@ func (s *APITestSuite) TestLogoutRemovesCells() {
|
||||||
require = s.Require()
|
require = s.Require()
|
||||||
)
|
)
|
||||||
|
|
||||||
config, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
err = s.api.StartNode(config)
|
err = s.api.StartNode(config)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
@ -205,7 +204,7 @@ func (s *APITestSuite) TestEventsNodeStartStop() {
|
||||||
envelopes <- envelope
|
envelopes <- envelope
|
||||||
})
|
})
|
||||||
|
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NoError(s.api.StartNode(nodeConfig))
|
s.NoError(s.api.StartNode(nodeConfig))
|
||||||
s.NoError(s.api.StopNode())
|
s.NoError(s.api.StopNode())
|
||||||
|
@ -243,7 +242,7 @@ func (s *APITestSuite) TestNodeStartCrash() {
|
||||||
})
|
})
|
||||||
defer signal.ResetDefaultNodeNotificationHandler()
|
defer signal.ResetDefaultNodeNotificationHandler()
|
||||||
|
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
// start node outside the manager (on the same port), so that manager node.Start() method fails
|
// start node outside the manager (on the same port), so that manager node.Start() method fails
|
||||||
|
|
|
@ -36,10 +36,10 @@ func (s *APIBackendTestSuite) TestRaceConditions() {
|
||||||
progress := make(chan struct{}, cnt)
|
progress := make(chan struct{}, cnt)
|
||||||
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
nodeConfig1, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig1, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
nodeConfig2, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig2, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
||||||
|
@ -192,7 +192,7 @@ func (s *APIBackendTestSuite) TestRaceConditions() {
|
||||||
// so this test should only check StatusBackend logic with a mocked version of the underlying NodeManager.
|
// so this test should only check StatusBackend logic with a mocked version of the underlying NodeManager.
|
||||||
func (s *APIBackendTestSuite) TestNetworkSwitching() {
|
func (s *APIBackendTestSuite) TestNetworkSwitching() {
|
||||||
// get Ropsten config
|
// get Ropsten config
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
s.False(s.Backend.IsNodeRunning())
|
s.False(s.Backend.IsNodeRunning())
|
||||||
|
@ -207,7 +207,7 @@ func (s *APIBackendTestSuite) TestNetworkSwitching() {
|
||||||
s.NoError(s.Backend.StopNode())
|
s.NoError(s.Backend.StopNode())
|
||||||
|
|
||||||
// start new node with completely different config
|
// start new node with completely different config
|
||||||
nodeConfig, err = e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err = MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
s.False(s.Backend.IsNodeRunning())
|
s.False(s.Backend.IsNodeRunning())
|
||||||
|
@ -254,7 +254,7 @@ func (s *APIBackendTestSuite) TestRestartNode() {
|
||||||
require.NotNil(s.Backend)
|
require.NotNil(s.Backend)
|
||||||
|
|
||||||
// get config
|
// get config
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
s.False(s.Backend.IsNodeRunning())
|
s.False(s.Backend.IsNodeRunning())
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/les"
|
"github.com/ethereum/go-ethereum/les"
|
||||||
gethnode "github.com/ethereum/go-ethereum/node"
|
gethnode "github.com/ethereum/go-ethereum/node"
|
||||||
"github.com/ethereum/go-ethereum/rpc"
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/node"
|
"github.com/status-im/status-go/geth/node"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ func (s *ManagerTestSuite) TestReferencesWithStartedNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ManagerTestSuite) TestNodeStartStop() {
|
func (s *ManagerTestSuite) TestNodeStartStop() {
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
// try stopping non-started node
|
// try stopping non-started node
|
||||||
|
@ -213,7 +213,7 @@ func (s *ManagerTestSuite) TestNodeStartStop() {
|
||||||
|
|
||||||
func (s *ManagerTestSuite) TestNetworkSwitching() {
|
func (s *ManagerTestSuite) TestNetworkSwitching() {
|
||||||
// get Ropsten config
|
// get Ropsten config
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.False(s.NodeManager.IsNodeRunning())
|
s.False(s.NodeManager.IsNodeRunning())
|
||||||
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
||||||
|
@ -230,7 +230,7 @@ func (s *ManagerTestSuite) TestNetworkSwitching() {
|
||||||
s.False(s.NodeManager.IsNodeRunning())
|
s.False(s.NodeManager.IsNodeRunning())
|
||||||
|
|
||||||
// start new node with completely different config
|
// start new node with completely different config
|
||||||
nodeConfig, err = e2e.MakeTestNodeConfig(params.RinkebyNetworkID)
|
nodeConfig, err = MakeTestNodeConfig(params.RinkebyNetworkID)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
||||||
s.True(s.NodeManager.IsNodeRunning())
|
s.True(s.NodeManager.IsNodeRunning())
|
||||||
|
@ -249,7 +249,7 @@ func (s *ManagerTestSuite) TestStartNodeWithUpstreamEnabled() {
|
||||||
s.T().Skip()
|
s.T().Skip()
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
networkURL, err := GetRemoteURL()
|
networkURL, err := GetRemoteURL()
|
||||||
|
@ -273,10 +273,10 @@ func (s *ManagerTestSuite) TestStartNodeWithUpstreamEnabled() {
|
||||||
// progress := make(chan struct{}, cnt)
|
// progress := make(chan struct{}, cnt)
|
||||||
// rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
// rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
//
|
//
|
||||||
// nodeConfig1, e := e2e.MakeTestNodeConfig(GetNetworkID())
|
// nodeConfig1, e := MakeTestNodeConfig(GetNetworkID())
|
||||||
// s.NoError(e)
|
// s.NoError(e)
|
||||||
//
|
//
|
||||||
// nodeConfig2, e := e2e.MakeTestNodeConfig(GetNetworkID())
|
// nodeConfig2, e := MakeTestNodeConfig(GetNetworkID())
|
||||||
// s.NoError(e)
|
// s.NoError(e)
|
||||||
//
|
//
|
||||||
// nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
// nodeConfigs := []*params.NodeConfig{nodeConfig1, nodeConfig2}
|
||||||
|
|
|
@ -24,7 +24,7 @@ func (s *RPCClientTestSuite) SetupTest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RPCClientTestSuite) TestNewClient() {
|
func (s *RPCClientTestSuite) TestNewClient() {
|
||||||
config, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
config, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
// upstream disabled
|
// upstream disabled
|
||||||
|
|
|
@ -36,7 +36,7 @@ func (s *RPCTestSuite) TestCallRPC() {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, upstreamEnabled := range []bool{false, true} {
|
for _, upstreamEnabled := range []bool{false, true} {
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
nodeConfig.IPCEnabled = false
|
nodeConfig.IPCEnabled = false
|
||||||
|
@ -64,7 +64,7 @@ func (s *RPCTestSuite) TestCallRPC() {
|
||||||
{
|
{
|
||||||
`{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}`,
|
`{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}`,
|
||||||
func(resultJSON string) {
|
func(resultJSON string) {
|
||||||
expected := `{"jsonrpc":"2.0","id":67,"result":"5.0"}`
|
expected := `{"jsonrpc":"2.0","id":67,"result":"6.0"}`
|
||||||
s.Equal(expected, resultJSON)
|
s.Equal(expected, resultJSON)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -126,7 +126,7 @@ func (s *RPCTestSuite) TestCallRPC() {
|
||||||
|
|
||||||
// TestCallRawResult checks if returned response is a valid JSON-RPC response.
|
// TestCallRawResult checks if returned response is a valid JSON-RPC response.
|
||||||
func (s *RPCTestSuite) TestCallRawResult() {
|
func (s *RPCTestSuite) TestCallRawResult() {
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
||||||
|
@ -135,7 +135,7 @@ func (s *RPCTestSuite) TestCallRawResult() {
|
||||||
s.NotNil(client)
|
s.NotNil(client)
|
||||||
|
|
||||||
jsonResult := client.CallRaw(`{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}`)
|
jsonResult := client.CallRaw(`{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}`)
|
||||||
s.Equal(`{"jsonrpc":"2.0","id":67,"result":"5.0"}`, jsonResult)
|
s.Equal(`{"jsonrpc":"2.0","id":67,"result":"6.0"}`, jsonResult)
|
||||||
|
|
||||||
s.NoError(s.NodeManager.StopNode())
|
s.NoError(s.NodeManager.StopNode())
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ func (s *RPCTestSuite) TestCallRawResult() {
|
||||||
// for a not yet mained transaction is "error":{"code":-32000,"message":"unknown transaction"}.
|
// for a not yet mained transaction is "error":{"code":-32000,"message":"unknown transaction"}.
|
||||||
// Issue: https://github.com/status-im/status-go/issues/547
|
// Issue: https://github.com/status-im/status-go/issues/547
|
||||||
func (s *RPCTestSuite) TestCallRawResultGetTransactionReceipt() {
|
func (s *RPCTestSuite) TestCallRawResultGetTransactionReceipt() {
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
s.NoError(s.NodeManager.StartNode(nodeConfig))
|
||||||
|
|
|
@ -2,7 +2,7 @@ package e2e
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/ethereum/go-ethereum/les"
|
"github.com/ethereum/go-ethereum/les"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/api"
|
"github.com/status-im/status-go/geth/api"
|
||||||
"github.com/status-im/status-go/geth/common"
|
"github.com/status-im/status-go/geth/common"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
|
|
|
@ -2,15 +2,10 @@ package e2e
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
|
||||||
"strconv"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
gethcommon "github.com/ethereum/go-ethereum/common"
|
gethcommon "github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/status-im/status-go/geth/common"
|
"github.com/status-im/status-go/geth/common"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
. "github.com/status-im/status-go/t/utils" //nolint: golint
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestNodeOption is a callback passed to StartTestNode which alters its config.
|
// TestNodeOption is a callback passed to StartTestNode which alters its config.
|
||||||
|
@ -31,37 +26,6 @@ func WithDataDir(path string) TestNodeOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeTestNodeConfig defines a function to return a giving params.NodeConfig
|
|
||||||
// where specific network addresses are assigned based on provieded network id.
|
|
||||||
func MakeTestNodeConfig(networkID int) (*params.NodeConfig, error) {
|
|
||||||
testDir := filepath.Join(TestDataDir, TestNetworkNames[networkID])
|
|
||||||
|
|
||||||
if runtime.GOOS == "windows" {
|
|
||||||
testDir = filepath.ToSlash(testDir)
|
|
||||||
}
|
|
||||||
|
|
||||||
// run tests with "INFO" log level only
|
|
||||||
// when `go test` invoked with `-v` flag
|
|
||||||
errorLevel := "ERROR"
|
|
||||||
if testing.Verbose() {
|
|
||||||
errorLevel = "INFO"
|
|
||||||
}
|
|
||||||
|
|
||||||
configJSON := `{
|
|
||||||
"NetworkId": ` + strconv.Itoa(networkID) + `,
|
|
||||||
"DataDir": "` + testDir + `",
|
|
||||||
"HTTPPort": ` + strconv.Itoa(TestConfig.Node.HTTPPort) + `,
|
|
||||||
"WSPort": ` + strconv.Itoa(TestConfig.Node.WSPort) + `,
|
|
||||||
"LogLevel": "` + errorLevel + `"
|
|
||||||
}`
|
|
||||||
|
|
||||||
nodeConfig, err := params.LoadNodeConfig(configJSON)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return nodeConfig, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// FirstBlockHash validates Attach operation for the NodeManager.
|
// FirstBlockHash validates Attach operation for the NodeManager.
|
||||||
func FirstBlockHash(nodeManager common.NodeManager) (string, error) {
|
func FirstBlockHash(nodeManager common.NodeManager) (string, error) {
|
||||||
// obtain RPC client for running node
|
// obtain RPC client for running node
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/jail"
|
"github.com/status-im/status-go/geth/jail"
|
||||||
"github.com/status-im/status-go/static"
|
"github.com/status-im/status-go/static"
|
||||||
e2e "github.com/status-im/status-go/t/e2e"
|
e2e "github.com/status-im/status-go/t/e2e"
|
||||||
|
@ -85,7 +85,7 @@ func (s *WhisperJailTestSuite) TestJailWhisper() {
|
||||||
{
|
{
|
||||||
"test 0: ensure correct version of Whisper is used",
|
"test 0: ensure correct version of Whisper is used",
|
||||||
`
|
`
|
||||||
var expectedVersion = '5.0';
|
var expectedVersion = '6.0';
|
||||||
if (web3.version.whisper != expectedVersion) {
|
if (web3.version.whisper != expectedVersion) {
|
||||||
throw 'unexpected shh version, expected: ' + expectedVersion + ', got: ' + web3.version.whisper;
|
throw 'unexpected shh version, expected: ' + expectedVersion + ', got: ' + web3.version.whisper;
|
||||||
}
|
}
|
||||||
|
@ -118,8 +118,8 @@ func (s *WhisperJailTestSuite) TestJailWhisper() {
|
||||||
// post message
|
// post message
|
||||||
var message = {
|
var message = {
|
||||||
ttl: 10,
|
ttl: 10,
|
||||||
powTarget: 1.0,
|
powTarget: 0.001,
|
||||||
powTime: 20,
|
powTime: 2,
|
||||||
topic: topic,
|
topic: topic,
|
||||||
sig: shh.getPublicKey(identity1),
|
sig: shh.getPublicKey(identity1),
|
||||||
pubKey: shh.getPublicKey(identity2),
|
pubKey: shh.getPublicKey(identity2),
|
||||||
|
@ -196,8 +196,8 @@ func (s *WhisperJailTestSuite) TestJailWhisper() {
|
||||||
// post message
|
// post message
|
||||||
var message = {
|
var message = {
|
||||||
ttl: 10,
|
ttl: 10,
|
||||||
powTarget: 1.0,
|
powTarget: 0.001,
|
||||||
powTime: 20,
|
powTime: 2,
|
||||||
topic: topic,
|
topic: topic,
|
||||||
symKeyID: keyid,
|
symKeyID: keyid,
|
||||||
payload: web3.toHex(payload),
|
payload: web3.toHex(payload),
|
||||||
|
@ -267,8 +267,8 @@ func (s *WhisperJailTestSuite) TestJailWhisper() {
|
||||||
// post message
|
// post message
|
||||||
var message = {
|
var message = {
|
||||||
ttl: 10,
|
ttl: 10,
|
||||||
powTarget: 1.0,
|
powTarget: 0.001,
|
||||||
powTime: 20,
|
powTime: 2,
|
||||||
sig: shh.getPublicKey(identity2),
|
sig: shh.getPublicKey(identity2),
|
||||||
pubKey: shh.getPublicKey(identity1),
|
pubKey: shh.getPublicKey(identity1),
|
||||||
topic: topic,
|
topic: topic,
|
||||||
|
@ -341,7 +341,7 @@ func (s *WhisperJailTestSuite) TestJailWhisper() {
|
||||||
r.True(ok)
|
r.True(ok)
|
||||||
break poll_loop
|
break poll_loop
|
||||||
case <-timedOut:
|
case <-timedOut:
|
||||||
s.FailNow("polling for messages timed out")
|
s.FailNow("polling for messages timed out. Test case: " + tc.name)
|
||||||
case <-time.After(time.Second):
|
case <-time.After(time.Second):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,9 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/api"
|
"github.com/status-im/status-go/geth/api"
|
||||||
"github.com/status-im/status-go/geth/rpc"
|
"github.com/status-im/status-go/geth/rpc"
|
||||||
e2e "github.com/status-im/status-go/t/e2e"
|
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
)
|
)
|
||||||
|
@ -68,7 +67,7 @@ func (s *WhisperMailboxSuite) TestRequestMessageFromMailboxAsync() {
|
||||||
s.Require().NotNil(rpcClient)
|
s.Require().NotNil(rpcClient)
|
||||||
|
|
||||||
//create topic
|
//create topic
|
||||||
topic := whisperv5.BytesToTopic([]byte("topic name"))
|
topic := whisper.BytesToTopic([]byte("topic name"))
|
||||||
|
|
||||||
//Add key pair to whisper
|
//Add key pair to whisper
|
||||||
keyID, err := senderWhisperService.NewKeyPair()
|
keyID, err := senderWhisperService.NewKeyPair()
|
||||||
|
@ -177,7 +176,7 @@ func (s *WhisperMailboxSuite) TestRequestMessagesInGroupChat() {
|
||||||
groupChatKey, err := aliceWhisperService.GetSymKey(groupChatKeyID)
|
groupChatKey, err := aliceWhisperService.GetSymKey(groupChatKeyID)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
//generate group chat topic
|
//generate group chat topic
|
||||||
groupChatTopic := whisperv5.BytesToTopic([]byte("groupChatTopic"))
|
groupChatTopic := whisper.BytesToTopic([]byte("groupChatTopic"))
|
||||||
groupChatPayload := newGroupChatParams(groupChatKey, groupChatTopic)
|
groupChatPayload := newGroupChatParams(groupChatKey, groupChatTopic)
|
||||||
payloadStr, err := groupChatPayload.Encode()
|
payloadStr, err := groupChatPayload.Encode()
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
|
@ -188,14 +187,14 @@ func (s *WhisperMailboxSuite) TestRequestMessagesInGroupChat() {
|
||||||
bobKey, err := bobWhisperService.GetPrivateKey(bobKeyID)
|
bobKey, err := bobWhisperService.GetPrivateKey(bobKeyID)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
bobPubkey := hexutil.Bytes(crypto.FromECDSAPub(&bobKey.PublicKey))
|
bobPubkey := hexutil.Bytes(crypto.FromECDSAPub(&bobKey.PublicKey))
|
||||||
bobAliceKeySendTopic := whisperv5.BytesToTopic([]byte("bobAliceKeySendTopic "))
|
bobAliceKeySendTopic := whisper.BytesToTopic([]byte("bobAliceKeySendTopic "))
|
||||||
|
|
||||||
charlieKeyID, err := charlieWhisperService.NewKeyPair()
|
charlieKeyID, err := charlieWhisperService.NewKeyPair()
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
charlieKey, err := charlieWhisperService.GetPrivateKey(charlieKeyID)
|
charlieKey, err := charlieWhisperService.GetPrivateKey(charlieKeyID)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
charliePubkey := hexutil.Bytes(crypto.FromECDSAPub(&charlieKey.PublicKey))
|
charliePubkey := hexutil.Bytes(crypto.FromECDSAPub(&charlieKey.PublicKey))
|
||||||
charlieAliceKeySendTopic := whisperv5.BytesToTopic([]byte("charlieAliceKeySendTopic "))
|
charlieAliceKeySendTopic := whisper.BytesToTopic([]byte("charlieAliceKeySendTopic "))
|
||||||
|
|
||||||
//bob and charlie create message filter
|
//bob and charlie create message filter
|
||||||
bobMessageFilterID := s.createPrivateChatMessageFilter(bobRPCClient, bobKeyID, bobAliceKeySendTopic.String())
|
bobMessageFilterID := s.createPrivateChatMessageFilter(bobRPCClient, bobKeyID, bobAliceKeySendTopic.String())
|
||||||
|
@ -277,7 +276,7 @@ func (s *WhisperMailboxSuite) TestRequestMessagesInGroupChat() {
|
||||||
s.Require().Equal(helloWorldMessage, messages[0]["payload"].(string))
|
s.Require().Equal(helloWorldMessage, messages[0]["payload"].(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGroupChatParams(symkey []byte, topic whisperv5.TopicType) groupChatParams {
|
func newGroupChatParams(symkey []byte, topic whisper.TopicType) groupChatParams {
|
||||||
groupChatKeyStr := hexutil.Bytes(symkey).String()
|
groupChatKeyStr := hexutil.Bytes(symkey).String()
|
||||||
return groupChatParams{
|
return groupChatParams{
|
||||||
Key: groupChatKeyStr,
|
Key: groupChatKeyStr,
|
||||||
|
@ -310,7 +309,7 @@ func (d *groupChatParams) Encode() (string, error) {
|
||||||
func (s *WhisperMailboxSuite) startBackend(name string) (*api.StatusBackend, func()) {
|
func (s *WhisperMailboxSuite) startBackend(name string) (*api.StatusBackend, func()) {
|
||||||
datadir := filepath.Join(RootDir, ".ethereumtest/mailbox", name)
|
datadir := filepath.Join(RootDir, ".ethereumtest/mailbox", name)
|
||||||
backend := api.NewStatusBackend()
|
backend := api.NewStatusBackend()
|
||||||
nodeConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
nodeConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
nodeConfig.DataDir = datadir
|
nodeConfig.DataDir = datadir
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
s.Require().False(backend.IsNodeRunning())
|
s.Require().False(backend.IsNodeRunning())
|
||||||
|
@ -336,7 +335,7 @@ func (s *WhisperMailboxSuite) startBackend(name string) (*api.StatusBackend, fun
|
||||||
//Start mailbox node
|
//Start mailbox node
|
||||||
func (s *WhisperMailboxSuite) startMailboxBackend() (*api.StatusBackend, func()) {
|
func (s *WhisperMailboxSuite) startMailboxBackend() (*api.StatusBackend, func()) {
|
||||||
mailboxBackend := api.NewStatusBackend()
|
mailboxBackend := api.NewStatusBackend()
|
||||||
mailboxConfig, err := e2e.MakeTestNodeConfig(GetNetworkID())
|
mailboxConfig, err := MakeTestNodeConfig(GetNetworkID())
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
datadir := filepath.Join(RootDir, ".ethereumtest/mailbox/mailserver")
|
datadir := filepath.Join(RootDir, ".ethereumtest/mailbox/mailserver")
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/status-im/status-go/geth/account"
|
"github.com/status-im/status-go/geth/account"
|
||||||
"github.com/status-im/status-go/geth/node"
|
"github.com/status-im/status-go/geth/node"
|
||||||
e2e "github.com/status-im/status-go/t/e2e"
|
e2e "github.com/status-im/status-go/t/e2e"
|
||||||
|
|
|
@ -8,7 +8,10 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/status-im/status-go/geth/common"
|
"github.com/status-im/status-go/geth/common"
|
||||||
|
@ -229,5 +232,35 @@ func WaitClosed(c <-chan struct{}, d time.Duration) error {
|
||||||
case <-timer.C:
|
case <-timer.C:
|
||||||
return ErrTimeout
|
return ErrTimeout
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MakeTestNodeConfig defines a function to return a giving params.NodeConfig
|
||||||
|
// where specific network addresses are assigned based on provided network id.
|
||||||
|
func MakeTestNodeConfig(networkID int) (*params.NodeConfig, error) {
|
||||||
|
testDir := filepath.Join(TestDataDir, TestNetworkNames[networkID])
|
||||||
|
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
testDir = filepath.ToSlash(testDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
// run tests with "INFO" log level only
|
||||||
|
// when `go test` invoked with `-v` flag
|
||||||
|
errorLevel := "ERROR"
|
||||||
|
if testing.Verbose() {
|
||||||
|
errorLevel = "INFO"
|
||||||
|
}
|
||||||
|
|
||||||
|
configJSON := `{
|
||||||
|
"NetworkId": ` + strconv.Itoa(networkID) + `,
|
||||||
|
"DataDir": "` + testDir + `",
|
||||||
|
"HTTPPort": ` + strconv.Itoa(TestConfig.Node.HTTPPort) + `,
|
||||||
|
"WSPort": ` + strconv.Itoa(TestConfig.Node.WSPort) + `,
|
||||||
|
"LogLevel": "` + errorLevel + `"
|
||||||
|
}`
|
||||||
|
|
||||||
|
nodeConfig, err := params.LoadNodeConfig(configJSON)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nodeConfig, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/p2p/nat"
|
"github.com/ethereum/go-ethereum/p2p/nat"
|
||||||
"github.com/ethereum/go-ethereum/whisper/mailserver"
|
"github.com/ethereum/go-ethereum/whisper/mailserver"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
|
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
|
||||||
"github.com/syndtr/goleveldb/leveldb"
|
"github.com/syndtr/goleveldb/leveldb"
|
||||||
"github.com/syndtr/goleveldb/leveldb/util"
|
"github.com/syndtr/goleveldb/leveldb/util"
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,6 +19,7 @@ package whisperv6
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
@ -36,6 +37,7 @@ type Peer struct {
|
||||||
|
|
||||||
trusted bool
|
trusted bool
|
||||||
powRequirement float64
|
powRequirement float64
|
||||||
|
bloomMu sync.Mutex
|
||||||
bloomFilter []byte
|
bloomFilter []byte
|
||||||
fullNode bool
|
fullNode bool
|
||||||
|
|
||||||
|
@ -225,10 +227,14 @@ func (peer *Peer) notifyAboutBloomFilterChange(bloom []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *Peer) bloomMatch(env *Envelope) bool {
|
func (peer *Peer) bloomMatch(env *Envelope) bool {
|
||||||
|
peer.bloomMu.Lock()
|
||||||
|
defer peer.bloomMu.Unlock()
|
||||||
return peer.fullNode || bloomFilterMatch(peer.bloomFilter, env.Bloom())
|
return peer.fullNode || bloomFilterMatch(peer.bloomFilter, env.Bloom())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *Peer) setBloomFilter(bloom []byte) {
|
func (peer *Peer) setBloomFilter(bloom []byte) {
|
||||||
|
peer.bloomMu.Lock()
|
||||||
|
defer peer.bloomMu.Unlock()
|
||||||
peer.bloomFilter = bloom
|
peer.bloomFilter = bloom
|
||||||
peer.fullNode = isFullNode(bloom)
|
peer.fullNode = isFullNode(bloom)
|
||||||
if peer.fullNode && peer.bloomFilter == nil {
|
if peer.fullNode && peer.bloomFilter == nil {
|
||||||
|
|
Loading…
Reference in New Issue