diff --git a/whisper/whisperv5/filter_test.go b/whisper/whisperv5/filter_test.go index 41ebb71146..f9ae6673ff 100644 --- a/whisper/whisperv5/filter_test.go +++ b/whisper/whisperv5/filter_test.go @@ -155,11 +155,72 @@ func TestInstallSymKeyGeneratesHash(t *testing.T) { for i, b := range filter.SymKeyHash { if b != initialSymKeyHash[i] { t.Fatalf("The filter's symmetric key hash was not properly generated by Install") - break } } } +func TestInstallIdenticalFilters(t *testing.T) { + InitSingleTest() + + w := New(&Config{}) + filters := NewFilters(w) + filter1, _ := generateFilter(t, true) + + // 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), + }; + + _, err := filters.Install(filter1) + + if err != nil { + t.Fatalf("Error installing the first filter: %v", err); + } + + _, err = filters.Install(filter2) + + if err != nil { + t.Fatalf("Error installing the second filter: %v", err); + } + + params, err := generateMessageParams() + if err != nil { + t.Fatal("Error generating message parameters: %v", err); + } + + params.KeySym = filter1.KeySym + params.Topic = BytesToTopic(filter1.Topics[0]) + + filter1.Src = ¶ms.Src.PublicKey; + filter2.Src = ¶ms.Src.PublicKey; + + sentMessage, err := NewSentMessage(params) + if err != nil { + t.Fatalf("failed to create new message with seed %d: %s.", seed, err) + } + env, err := sentMessage.Wrap(params) + if err != nil { + t.Fatalf("failed Wrap with seed %d: %s.", seed, err) + } + msg := env.Open(filter1) + if msg == nil { + t.Fatalf("failed to Open with filter1") + } + + if ! filter1.MatchEnvelope(env) { + t.Fatalf("failed matching with the first filter") + } + + if ! filter2.MatchMessage(msg) { + t.Fatalf("failed matching with the second filter") + } +} + func TestComparePubKey(t *testing.T) { InitSingleTest()