diff --git a/whisper/whisperv6/api.go b/whisper/whisperv6/api.go index f6158b641c..3dddb69539 100644 --- a/whisper/whisperv6/api.go +++ b/whisper/whisperv6/api.go @@ -118,7 +118,7 @@ func (api *PublicWhisperAPI) SetMaxMessageSize(ctx context.Context, size uint32) // SetMinPow sets the minimum PoW for a message before it is accepted. func (api *PublicWhisperAPI) SetMinPoW(ctx context.Context, pow float64) (bool, error) { - return true, api.w.SetMinimumPoW(pow, false) + return true, api.w.SetMinimumPoW(pow) } // MarkTrustedPeer marks a peer trusted. , which will allow it to send historic (expired) messages. diff --git a/whisper/whisperv6/peer_test.go b/whisper/whisperv6/peer_test.go index 2c36fd7cb5..599a479be4 100644 --- a/whisper/whisperv6/peer_test.go +++ b/whisper/whisperv6/peer_test.go @@ -124,7 +124,7 @@ func initialize(t *testing.T) { for i := 0; i < NumNodes; i++ { var node TestNode node.shh = New(&DefaultConfig) - node.shh.SetMinimumPoW(0.00000001, true) + node.shh.SetMinimumPowTest(0.00000001) node.shh.Start(nil) topics := make([]TopicType, 0) topics = append(topics, sharedTopic) @@ -342,7 +342,7 @@ func powReqExchange(t *testing.T) { } const pow float64 = 7777777.0 - nodes[0].shh.SetMinimumPoW(pow, true) + nodes[0].shh.SetMinimumPoW(pow) // wait until all the messages are delivered time.Sleep(64 * time.Millisecond) diff --git a/whisper/whisperv6/whisper.go b/whisper/whisperv6/whisper.go index 57b190368d..497819ef9f 100644 --- a/whisper/whisperv6/whisper.go +++ b/whisper/whisperv6/whisper.go @@ -181,30 +181,40 @@ func (w *Whisper) SetMaxMessageSize(size uint32) error { } // SetMinimumPoW sets the minimal PoW required by this node -func (w *Whisper) SetMinimumPoW(val float64, testMode bool) error { - if val <= 0.0 { +func (w *Whisper) SetMinimumPoW(val float64) error { + if val < 0.0 { return fmt.Errorf("invalid PoW: %f", val) } w.notifyPeersAboutPowRequirementChange(val) - if testMode { + go func() { + // allow some time before all the peers have processed the notification + time.Sleep(time.Duration(w.reactionAllowance) * time.Second) w.settings.Store(minPowIdx, val) - } else { - go func() { - // allow some time before all the peers have processed the notification - time.Sleep(time.Duration(w.reactionAllowance) * time.Second) - w.settings.Store(minPowIdx, val) - }() - } + }() return nil } +// SetMinimumPoW sets the minimal PoW in test environment +func (w *Whisper) SetMinimumPowTest(val float64) { + w.notifyPeersAboutPowRequirementChange(val) + w.settings.Store(minPowIdx, val) +} + func (w *Whisper) notifyPeersAboutPowRequirementChange(pow float64) { + arr := make([]*Peer, len(w.peers)) + i := 0 + w.peerMu.Lock() - defer w.peerMu.Unlock() for p := range w.peers { + arr[i] = p + i++ + } + w.peerMu.Unlock() + + for _, p := range arr { err := p.notifyAboutPowRequirementChange(pow) if err != nil { // allow one retry diff --git a/whisper/whisperv6/whisper_test.go b/whisper/whisperv6/whisper_test.go index 009f50d3cb..b391a1161b 100644 --- a/whisper/whisperv6/whisper_test.go +++ b/whisper/whisperv6/whisper_test.go @@ -472,8 +472,8 @@ func TestExpiry(t *testing.T) { InitSingleTest() w := New(&DefaultConfig) - w.SetMinimumPoW(0.0000001, true) - defer w.SetMinimumPoW(DefaultMinimumPoW, true) + w.SetMinimumPowTest(0.0000001) + defer w.SetMinimumPowTest(DefaultMinimumPoW) w.Start(nil) defer w.Stop() @@ -529,7 +529,7 @@ func TestCustomization(t *testing.T) { InitSingleTest() w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW, true) + defer w.SetMinimumPowTest(DefaultMinimumPoW) defer w.SetMaxMessageSize(DefaultMaxMessageSize) w.Start(nil) defer w.Stop() @@ -563,7 +563,7 @@ func TestCustomization(t *testing.T) { t.Fatalf("successfully sent envelope with PoW %.06f, false positive (seed %d).", env.PoW(), seed) } - w.SetMinimumPoW(smallPoW/2, true) + w.SetMinimumPowTest(smallPoW / 2) err = w.Send(env) if err != nil { t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) @@ -625,7 +625,7 @@ func TestSymmetricSendCycle(t *testing.T) { InitSingleTest() w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW, true) + defer w.SetMinimumPowTest(DefaultMinimumPoW) defer w.SetMaxMessageSize(DefaultMaxMessageSize) w.Start(nil) defer w.Stop() @@ -714,7 +714,7 @@ func TestSymmetricSendWithoutAKey(t *testing.T) { InitSingleTest() w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW, true) + defer w.SetMinimumPowTest(DefaultMinimumPoW) defer w.SetMaxMessageSize(DefaultMaxMessageSize) w.Start(nil) defer w.Stop() @@ -782,7 +782,7 @@ func TestSymmetricSendKeyMismatch(t *testing.T) { InitSingleTest() w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW, true) + defer w.SetMinimumPowTest(DefaultMinimumPoW) defer w.SetMaxMessageSize(DefaultMaxMessageSize) w.Start(nil) defer w.Stop()