aboutsummaryrefslogtreecommitdiffstats
path: root/whisper/whisperv5/whisper_test.go
diff options
context:
space:
mode:
authorGuillaume Ballet <gballet@gmail.com>2017-10-06 22:04:21 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-10-06 22:04:21 +0800
commit7a045af05b93c323f63c7af41423ded701ce3890 (patch)
treefcdfe96a65717fd18f3813cd5100d4790a582c1d /whisper/whisperv5/whisper_test.go
parent36243c7ed8c53e9de92d21bbcf0378d7e1c7a07e (diff)
downloaddexon-7a045af05b93c323f63c7af41423ded701ce3890.tar
dexon-7a045af05b93c323f63c7af41423ded701ce3890.tar.gz
dexon-7a045af05b93c323f63c7af41423ded701ce3890.tar.bz2
dexon-7a045af05b93c323f63c7af41423ded701ce3890.tar.lz
dexon-7a045af05b93c323f63c7af41423ded701ce3890.tar.xz
dexon-7a045af05b93c323f63c7af41423ded701ce3890.tar.zst
dexon-7a045af05b93c323f63c7af41423ded701ce3890.zip
whisper/whisperv5: set filter SymKeyHash on creation (#15165)
Diffstat (limited to 'whisper/whisperv5/whisper_test.go')
-rw-r--r--whisper/whisperv5/whisper_test.go225
1 files changed, 225 insertions, 0 deletions
diff --git a/whisper/whisperv5/whisper_test.go b/whisper/whisperv5/whisper_test.go
index 025be5b54..8af085292 100644
--- a/whisper/whisperv5/whisper_test.go
+++ b/whisper/whisperv5/whisper_test.go
@@ -22,6 +22,8 @@ import (
mrand "math/rand"
"testing"
"time"
+
+ "github.com/ethereum/go-ethereum/common"
)
func TestWhisperBasic(t *testing.T) {
@@ -624,3 +626,226 @@ func TestCustomization(t *testing.T) {
t.Fatalf("failed to get whisper messages")
}
}
+
+func TestSymmetricSendCycle(t *testing.T) {
+ InitSingleTest()
+
+ w := New(&DefaultConfig)
+ defer w.SetMinimumPoW(DefaultMinimumPoW)
+ defer w.SetMaxMessageSize(DefaultMaxMessageSize)
+ w.Start(nil)
+ defer w.Stop()
+
+ filter1, err := generateFilter(t, true)
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+ filter1.PoW = DefaultMinimumPoW
+
+ // Copy the first filter since some of its fields
+ // are randomly gnerated.
+ filter2 := &Filter{
+ KeySym: filter1.KeySym,
+ Topics: filter1.Topics,
+ PoW: filter1.PoW,
+ AllowP2P: filter1.AllowP2P,
+ Messages: make(map[common.Hash]*ReceivedMessage),
+ }
+
+ params, err := generateMessageParams()
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+
+ filter1.Src = &params.Src.PublicKey
+ filter2.Src = &params.Src.PublicKey
+
+ params.KeySym = filter1.KeySym
+ params.Topic = BytesToTopic(filter1.Topics[2])
+ params.PoW = filter1.PoW
+ params.WorkTime = 10
+ params.TTL = 50
+ msg, err := NewSentMessage(params)
+ if err != nil {
+ t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
+ }
+ env, err := msg.Wrap(params)
+ if err != nil {
+ t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
+ }
+
+ _, err = w.Subscribe(filter1)
+ if err != nil {
+ t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err)
+ }
+
+ _, err = w.Subscribe(filter2)
+ if err != nil {
+ t.Fatalf("failed subscribe 2 with seed %d: %s.", seed, err)
+ }
+
+ err = w.Send(env)
+ if err != nil {
+ t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err)
+ }
+
+ // wait till received or timeout
+ var received bool
+ for j := 0; j < 200; j++ {
+ time.Sleep(10 * time.Millisecond)
+ if len(w.Envelopes()) > 0 {
+ received = true
+ break
+ }
+ }
+
+ if !received {
+ t.Fatalf("did not receive the sent envelope, seed: %d.", seed)
+ }
+
+ // check w.messages()
+ time.Sleep(5 * time.Millisecond)
+ mail1 := filter1.Retrieve()
+ mail2 := filter2.Retrieve()
+ if len(mail2) == 0 {
+ t.Fatalf("did not receive any email for filter 2")
+ }
+ if len(mail1) == 0 {
+ t.Fatalf("did not receive any email for filter 1")
+ }
+
+}
+
+func TestSymmetricSendWithoutAKey(t *testing.T) {
+ InitSingleTest()
+
+ w := New(&DefaultConfig)
+ defer w.SetMinimumPoW(DefaultMinimumPoW)
+ defer w.SetMaxMessageSize(DefaultMaxMessageSize)
+ w.Start(nil)
+ defer w.Stop()
+
+ filter, err := generateFilter(t, true)
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+ filter.PoW = DefaultMinimumPoW
+
+ params, err := generateMessageParams()
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+
+ filter.Src = nil
+
+ params.KeySym = filter.KeySym
+ params.Topic = BytesToTopic(filter.Topics[2])
+ params.PoW = filter.PoW
+ params.WorkTime = 10
+ params.TTL = 50
+ msg, err := NewSentMessage(params)
+ if err != nil {
+ t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
+ }
+ env, err := msg.Wrap(params)
+ if err != nil {
+ t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
+ }
+
+ _, err = w.Subscribe(filter)
+ if err != nil {
+ t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err)
+ }
+
+ err = w.Send(env)
+ if err != nil {
+ t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err)
+ }
+
+ // wait till received or timeout
+ var received bool
+ for j := 0; j < 200; j++ {
+ time.Sleep(10 * time.Millisecond)
+ if len(w.Envelopes()) > 0 {
+ received = true
+ break
+ }
+ }
+
+ if !received {
+ t.Fatalf("did not receive the sent envelope, seed: %d.", seed)
+ }
+
+ // check w.messages()
+ time.Sleep(5 * time.Millisecond)
+ mail := filter.Retrieve()
+ if len(mail) == 0 {
+ t.Fatalf("did not receive message in spite of not setting a public key")
+ }
+}
+
+func TestSymmetricSendKeyMismatch(t *testing.T) {
+ InitSingleTest()
+
+ w := New(&DefaultConfig)
+ defer w.SetMinimumPoW(DefaultMinimumPoW)
+ defer w.SetMaxMessageSize(DefaultMaxMessageSize)
+ w.Start(nil)
+ defer w.Stop()
+
+ filter, err := generateFilter(t, true)
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+ filter.PoW = DefaultMinimumPoW
+
+ params, err := generateMessageParams()
+ if err != nil {
+ t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
+ }
+
+ params.KeySym = filter.KeySym
+ params.Topic = BytesToTopic(filter.Topics[2])
+ params.PoW = filter.PoW
+ params.WorkTime = 10
+ params.TTL = 50
+ msg, err := NewSentMessage(params)
+ if err != nil {
+ t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
+ }
+ env, err := msg.Wrap(params)
+ if err != nil {
+ t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
+ }
+
+ _, err = w.Subscribe(filter)
+ if err != nil {
+ t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err)
+ }
+
+ err = w.Send(env)
+ if err != nil {
+ t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err)
+ }
+
+ // wait till received or timeout
+ var received bool
+ for j := 0; j < 200; j++ {
+ time.Sleep(10 * time.Millisecond)
+ if len(w.Envelopes()) > 0 {
+ received = true
+ break
+ }
+ }
+
+ if !received {
+ t.Fatalf("did not receive the sent envelope, seed: %d.", seed)
+ }
+
+ // check w.messages()
+ time.Sleep(5 * time.Millisecond)
+ mail := filter.Retrieve()
+ if len(mail) > 0 {
+ t.Fatalf("received a message when keys weren't matching")
+ }
+}