From abc79b542f1732159f166faef2c6fa680cf5c493 Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 20 Mar 2017 20:13:24 +0100 Subject: [PATCH] whisper: tests added --- whisper/whisperv5/api.go | 7 ++++- whisper/whisperv5/api_test.go | 44 ++++++++++++++++++++++++++++++++ whisper/whisperv5/filter_test.go | 37 +++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/whisper/whisperv5/api.go b/whisper/whisperv5/api.go index 349ef9b6ac..6bc065b192 100644 --- a/whisper/whisperv5/api.go +++ b/whisper/whisperv5/api.go @@ -233,7 +233,12 @@ func (api *PublicWhisperAPI) Subscribe(args WhisperFilterArgs) (string, error) { AllowP2P: args.AllowP2P, } - for _, bt := range args.Topics { + for i, bt := range args.Topics { + if len(bt) == 0 || len(bt) > 4 { + info := fmt.Sprintf("Subscribe: topic %d has wrong size: %d", i, len(bt)) + log.Error(info) + return "", errors.New(info) + } filter.Topics = append(filter.Topics, bt) } diff --git a/whisper/whisperv5/api_test.go b/whisper/whisperv5/api_test.go index cc93261636..e1c38f2faf 100644 --- a/whisper/whisperv5/api_test.go +++ b/whisper/whisperv5/api_test.go @@ -635,3 +635,47 @@ func TestKey(t *testing.T) { t.Fatalf("wrong key") } } + +func TestSubscribe(t *testing.T) { + var err error + var s string + + w := New() + api := NewPublicWhisperAPI(w) + if api == nil { + t.Fatalf("failed to create API.") + } + + symKeyID, err := api.GenerateSymmetricKey() + if err != nil { + t.Fatalf("failed to GenerateSymKey: %s.", err) + } + + var f WhisperFilterArgs + f.Symmetric = true + f.Key = symKeyID + f.Topics = make([][]byte, 5) + f.Topics[0] = []byte{0x21} + f.Topics[1] = []byte{0xd2, 0xe3} + f.Topics[2] = []byte{0x64, 0x75, 0x76} + f.Topics[3] = []byte{0xf8, 0xe9, 0xa0, 0xba} + f.Topics[4] = []byte{0xcb, 0x3c, 0xdd, 0xee, 0xff} + + s, err = api.Subscribe(f) + if err == nil { + t.Fatalf("Subscribe: false positive.") + } + + f.Topics[4] = []byte{} + if err == nil { + t.Fatalf("Subscribe: false positive again.") + } + + f.Topics[4] = []byte{0x00} + s, err = api.Subscribe(f) + if err != nil { + t.Fatalf("failed to subscribe: %s.", err) + } else { + api.Unsubscribe(s) + } +} diff --git a/whisper/whisperv5/filter_test.go b/whisper/whisperv5/filter_test.go index 7e5f4c29f3..36cc887e3e 100644 --- a/whisper/whisperv5/filter_test.go +++ b/whisper/whisperv5/filter_test.go @@ -675,3 +675,40 @@ func TestWatchers(t *testing.T) { t.Fatalf("failed with seed %d: total: got %d, want 1.", seed, total) } } + +func TestVariableTopics(t *testing.T) { + InitSingleTest() + + var match bool + params, err := generateMessageParams() + if err != nil { + t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) + } + msg := NewSentMessage(params) + env, err := msg.Wrap(params) + if err != nil { + t.Fatalf("failed Wrap with seed %d: %s.", seed, err) + } + + f, err := generateFilter(t, true) + if err != nil { + t.Fatalf("failed generateFilter with seed %d: %s.", seed, err) + } + + for i := 0; i < 4; i++ { + arr := make([]byte, i+1, 4) + copy(arr, env.Topic[0:i+1]) + + f.Topics[4] = arr + match = f.MatchEnvelope(env) + if !match { + t.Fatalf("failed MatchEnvelope symmetric with seed %d, step %d.", seed, i) + } + + f.Topics[4][i]++ + match = f.MatchEnvelope(env) + if match { + t.Fatalf("MatchEnvelope symmetric with seed %d, step %d: false positive.", seed, i) + } + } +}