github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/whisper/whisperv5/whisper_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:51</date> 10 //</624342689717948416> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package whisperv5 29 30 import ( 31 "bytes" 32 "crypto/ecdsa" 33 mrand "math/rand" 34 "testing" 35 "time" 36 37 "github.com/ethereum/go-ethereum/common" 38 ) 39 40 func TestWhisperBasic(t *testing.T) { 41 w := New(&DefaultConfig) 42 p := w.Protocols() 43 shh := p[0] 44 if shh.Name != ProtocolName { 45 t.Fatalf("failed Protocol Name: %v.", shh.Name) 46 } 47 if uint64(shh.Version) != ProtocolVersion { 48 t.Fatalf("failed Protocol Version: %v.", shh.Version) 49 } 50 if shh.Length != NumberOfMessageCodes { 51 t.Fatalf("failed Protocol Length: %v.", shh.Length) 52 } 53 if shh.Run == nil { 54 t.Fatalf("failed shh.Run.") 55 } 56 if uint64(w.Version()) != ProtocolVersion { 57 t.Fatalf("failed whisper Version: %v.", shh.Version) 58 } 59 if w.GetFilter("non-existent") != nil { 60 t.Fatalf("failed GetFilter.") 61 } 62 63 peerID := make([]byte, 64) 64 mrand.Read(peerID) 65 peer, _ := w.getPeer(peerID) 66 if peer != nil { 67 t.Fatal("found peer for random key.") 68 } 69 if err := w.AllowP2PMessagesFromPeer(peerID); err == nil { 70 t.Fatalf("failed MarkPeerTrusted.") 71 } 72 exist := w.HasSymKey("non-existing") 73 if exist { 74 t.Fatalf("failed HasSymKey.") 75 } 76 key, err := w.GetSymKey("non-existing") 77 if err == nil { 78 t.Fatalf("failed GetSymKey(non-existing): false positive.") 79 } 80 if key != nil { 81 t.Fatalf("failed GetSymKey: false positive.") 82 } 83 mail := w.Envelopes() 84 if len(mail) != 0 { 85 t.Fatalf("failed w.Envelopes().") 86 } 87 m := w.Messages("non-existent") 88 if len(m) != 0 { 89 t.Fatalf("failed w.Messages.") 90 } 91 92 var derived []byte 93 ver := uint64(0xDEADBEEF) 94 if _, err := deriveKeyMaterial(peerID, ver); err != unknownVersionError(ver) { 95 t.Fatalf("failed deriveKeyMaterial with param = %v: %s.", peerID, err) 96 } 97 derived, err = deriveKeyMaterial(peerID, 0) 98 if err != nil { 99 t.Fatalf("failed second deriveKeyMaterial with param = %v: %s.", peerID, err) 100 } 101 if !validateSymmetricKey(derived) { 102 t.Fatalf("failed validateSymmetricKey with param = %v.", derived) 103 } 104 if containsOnlyZeros(derived) { 105 t.Fatalf("failed containsOnlyZeros with param = %v.", derived) 106 } 107 108 buf := []byte{0xFF, 0xE5, 0x80, 0x2, 0} 109 le := bytesToUintLittleEndian(buf) 110 be := BytesToUintBigEndian(buf) 111 if le != uint64(0x280e5ff) { 112 t.Fatalf("failed bytesToIntLittleEndian: %d.", le) 113 } 114 if be != uint64(0xffe5800200) { 115 t.Fatalf("failed BytesToIntBigEndian: %d.", be) 116 } 117 118 id, err := w.NewKeyPair() 119 if err != nil { 120 t.Fatalf("failed to generate new key pair: %s.", err) 121 } 122 pk, err := w.GetPrivateKey(id) 123 if err != nil { 124 t.Fatalf("failed to retrieve new key pair: %s.", err) 125 } 126 if !validatePrivateKey(pk) { 127 t.Fatalf("failed validatePrivateKey: %v.", pk) 128 } 129 if !ValidatePublicKey(&pk.PublicKey) { 130 t.Fatalf("failed ValidatePublicKey: %v.", pk) 131 } 132 } 133 134 func TestWhisperAsymmetricKeyImport(t *testing.T) { 135 var ( 136 w = New(&DefaultConfig) 137 privateKeys []*ecdsa.PrivateKey 138 ) 139 140 for i := 0; i < 50; i++ { 141 id, err := w.NewKeyPair() 142 if err != nil { 143 t.Fatalf("could not generate key: %v", err) 144 } 145 146 pk, err := w.GetPrivateKey(id) 147 if err != nil { 148 t.Fatalf("could not export private key: %v", err) 149 } 150 151 privateKeys = append(privateKeys, pk) 152 153 if !w.DeleteKeyPair(id) { 154 t.Fatalf("could not delete private key") 155 } 156 } 157 158 for _, pk := range privateKeys { 159 if _, err := w.AddKeyPair(pk); err != nil { 160 t.Fatalf("could not import private key: %v", err) 161 } 162 } 163 } 164 165 func TestWhisperIdentityManagement(t *testing.T) { 166 w := New(&DefaultConfig) 167 id1, err := w.NewKeyPair() 168 if err != nil { 169 t.Fatalf("failed to generate new key pair: %s.", err) 170 } 171 id2, err := w.NewKeyPair() 172 if err != nil { 173 t.Fatalf("failed to generate new key pair: %s.", err) 174 } 175 pk1, err := w.GetPrivateKey(id1) 176 if err != nil { 177 t.Fatalf("failed to retrieve the key pair: %s.", err) 178 } 179 pk2, err := w.GetPrivateKey(id2) 180 if err != nil { 181 t.Fatalf("failed to retrieve the key pair: %s.", err) 182 } 183 184 if !w.HasKeyPair(id1) { 185 t.Fatalf("failed HasIdentity(pk1).") 186 } 187 if !w.HasKeyPair(id2) { 188 t.Fatalf("failed HasIdentity(pk2).") 189 } 190 if pk1 == nil { 191 t.Fatalf("failed GetIdentity(pk1).") 192 } 193 if pk2 == nil { 194 t.Fatalf("failed GetIdentity(pk2).") 195 } 196 197 if !validatePrivateKey(pk1) { 198 t.Fatalf("pk1 is invalid.") 199 } 200 if !validatePrivateKey(pk2) { 201 t.Fatalf("pk2 is invalid.") 202 } 203 204 // 205 done := w.DeleteKeyPair(id1) 206 if !done { 207 t.Fatalf("failed to delete id1.") 208 } 209 pk1, err = w.GetPrivateKey(id1) 210 if err == nil { 211 t.Fatalf("retrieve the key pair: false positive.") 212 } 213 pk2, err = w.GetPrivateKey(id2) 214 if err != nil { 215 t.Fatalf("failed to retrieve the key pair: %s.", err) 216 } 217 if w.HasKeyPair(id1) { 218 t.Fatalf("failed DeleteIdentity(pub1): still exist.") 219 } 220 if !w.HasKeyPair(id2) { 221 t.Fatalf("failed DeleteIdentity(pub1): pub2 does not exist.") 222 } 223 if pk1 != nil { 224 t.Fatalf("failed DeleteIdentity(pub1): first key still exist.") 225 } 226 if pk2 == nil { 227 t.Fatalf("failed DeleteIdentity(pub1): second key does not exist.") 228 } 229 230 // 231 done = w.DeleteKeyPair(id1) 232 if done { 233 t.Fatalf("delete id1: false positive.") 234 } 235 pk1, err = w.GetPrivateKey(id1) 236 if err == nil { 237 t.Fatalf("retrieve the key pair: false positive.") 238 } 239 pk2, err = w.GetPrivateKey(id2) 240 if err != nil { 241 t.Fatalf("failed to retrieve the key pair: %s.", err) 242 } 243 if w.HasKeyPair(id1) { 244 t.Fatalf("failed delete non-existing identity: exist.") 245 } 246 if !w.HasKeyPair(id2) { 247 t.Fatalf("failed delete non-existing identity: pub2 does not exist.") 248 } 249 if pk1 != nil { 250 t.Fatalf("failed delete non-existing identity: first key exist.") 251 } 252 if pk2 == nil { 253 t.Fatalf("failed delete non-existing identity: second key does not exist.") 254 } 255 256 // 257 done = w.DeleteKeyPair(id2) 258 if !done { 259 t.Fatalf("failed to delete id2.") 260 } 261 pk1, err = w.GetPrivateKey(id1) 262 if err == nil { 263 t.Fatalf("retrieve the key pair: false positive.") 264 } 265 pk2, err = w.GetPrivateKey(id2) 266 if err == nil { 267 t.Fatalf("retrieve the key pair: false positive.") 268 } 269 if w.HasKeyPair(id1) { 270 t.Fatalf("failed delete second identity: first identity exist.") 271 } 272 if w.HasKeyPair(id2) { 273 t.Fatalf("failed delete second identity: still exist.") 274 } 275 if pk1 != nil { 276 t.Fatalf("failed delete second identity: first key exist.") 277 } 278 if pk2 != nil { 279 t.Fatalf("failed delete second identity: second key exist.") 280 } 281 } 282 283 func TestWhisperSymKeyManagement(t *testing.T) { 284 InitSingleTest() 285 286 var err error 287 var k1, k2 []byte 288 w := New(&DefaultConfig) 289 id1 := string("arbitrary-string-1") 290 id2 := string("arbitrary-string-2") 291 292 id1, err = w.GenerateSymKey() 293 if err != nil { 294 t.Fatalf("failed GenerateSymKey with seed %d: %s.", seed, err) 295 } 296 297 k1, err = w.GetSymKey(id1) 298 if err != nil { 299 t.Fatalf("failed GetSymKey(id1).") 300 } 301 k2, err = w.GetSymKey(id2) 302 if err == nil { 303 t.Fatalf("failed GetSymKey(id2): false positive.") 304 } 305 if !w.HasSymKey(id1) { 306 t.Fatalf("failed HasSymKey(id1).") 307 } 308 if w.HasSymKey(id2) { 309 t.Fatalf("failed HasSymKey(id2): false positive.") 310 } 311 if k1 == nil { 312 t.Fatalf("first key does not exist.") 313 } 314 if k2 != nil { 315 t.Fatalf("second key still exist.") 316 } 317 318 // 319 randomKey := make([]byte, aesKeyLength) 320 mrand.Read(randomKey) 321 id1, err = w.AddSymKeyDirect(randomKey) 322 if err != nil { 323 t.Fatalf("failed AddSymKey with seed %d: %s.", seed, err) 324 } 325 326 k1, err = w.GetSymKey(id1) 327 if err != nil { 328 t.Fatalf("failed w.GetSymKey(id1).") 329 } 330 k2, err = w.GetSymKey(id2) 331 if err == nil { 332 t.Fatalf("failed w.GetSymKey(id2): false positive.") 333 } 334 if !w.HasSymKey(id1) { 335 t.Fatalf("failed w.HasSymKey(id1).") 336 } 337 if w.HasSymKey(id2) { 338 t.Fatalf("failed w.HasSymKey(id2): false positive.") 339 } 340 if k1 == nil { 341 t.Fatalf("first key does not exist.") 342 } 343 if !bytes.Equal(k1, randomKey) { 344 t.Fatalf("k1 != randomKey.") 345 } 346 if k2 != nil { 347 t.Fatalf("second key already exist.") 348 } 349 350 id2, err = w.AddSymKeyDirect(randomKey) 351 if err != nil { 352 t.Fatalf("failed AddSymKey(id2) with seed %d: %s.", seed, err) 353 } 354 k1, err = w.GetSymKey(id1) 355 if err != nil { 356 t.Fatalf("failed w.GetSymKey(id1).") 357 } 358 k2, err = w.GetSymKey(id2) 359 if err != nil { 360 t.Fatalf("failed w.GetSymKey(id2).") 361 } 362 if !w.HasSymKey(id1) { 363 t.Fatalf("HasSymKey(id1) failed.") 364 } 365 if !w.HasSymKey(id2) { 366 t.Fatalf("HasSymKey(id2) failed.") 367 } 368 if k1 == nil { 369 t.Fatalf("k1 does not exist.") 370 } 371 if k2 == nil { 372 t.Fatalf("k2 does not exist.") 373 } 374 if !bytes.Equal(k1, k2) { 375 t.Fatalf("k1 != k2.") 376 } 377 if !bytes.Equal(k1, randomKey) { 378 t.Fatalf("k1 != randomKey.") 379 } 380 if len(k1) != aesKeyLength { 381 t.Fatalf("wrong length of k1.") 382 } 383 if len(k2) != aesKeyLength { 384 t.Fatalf("wrong length of k2.") 385 } 386 387 w.DeleteSymKey(id1) 388 k1, err = w.GetSymKey(id1) 389 if err == nil { 390 t.Fatalf("failed w.GetSymKey(id1): false positive.") 391 } 392 if k1 != nil { 393 t.Fatalf("failed GetSymKey(id1): false positive.") 394 } 395 k2, err = w.GetSymKey(id2) 396 if err != nil { 397 t.Fatalf("failed w.GetSymKey(id2).") 398 } 399 if w.HasSymKey(id1) { 400 t.Fatalf("failed to delete first key: still exist.") 401 } 402 if !w.HasSymKey(id2) { 403 t.Fatalf("failed to delete first key: second key does not exist.") 404 } 405 if k1 != nil { 406 t.Fatalf("failed to delete first key.") 407 } 408 if k2 == nil { 409 t.Fatalf("failed to delete first key: second key is nil.") 410 } 411 412 w.DeleteSymKey(id1) 413 w.DeleteSymKey(id2) 414 k1, err = w.GetSymKey(id1) 415 if err == nil { 416 t.Fatalf("failed w.GetSymKey(id1): false positive.") 417 } 418 k2, err = w.GetSymKey(id2) 419 if err == nil { 420 t.Fatalf("failed w.GetSymKey(id2): false positive.") 421 } 422 if k1 != nil || k2 != nil { 423 t.Fatalf("k1 or k2 is not nil") 424 } 425 if w.HasSymKey(id1) { 426 t.Fatalf("failed to delete second key: first key exist.") 427 } 428 if w.HasSymKey(id2) { 429 t.Fatalf("failed to delete second key: still exist.") 430 } 431 if k1 != nil { 432 t.Fatalf("failed to delete second key: first key is not nil.") 433 } 434 if k2 != nil { 435 t.Fatalf("failed to delete second key: second key is not nil.") 436 } 437 438 randomKey = make([]byte, aesKeyLength+1) 439 mrand.Read(randomKey) 440 _, err = w.AddSymKeyDirect(randomKey) 441 if err == nil { 442 t.Fatalf("added the key with wrong size, seed %d.", seed) 443 } 444 445 const password = "arbitrary data here" 446 id1, err = w.AddSymKeyFromPassword(password) 447 if err != nil { 448 t.Fatalf("failed AddSymKeyFromPassword(id1) with seed %d: %s.", seed, err) 449 } 450 id2, err = w.AddSymKeyFromPassword(password) 451 if err != nil { 452 t.Fatalf("failed AddSymKeyFromPassword(id2) with seed %d: %s.", seed, err) 453 } 454 k1, err = w.GetSymKey(id1) 455 if err != nil { 456 t.Fatalf("failed w.GetSymKey(id1).") 457 } 458 k2, err = w.GetSymKey(id2) 459 if err != nil { 460 t.Fatalf("failed w.GetSymKey(id2).") 461 } 462 if !w.HasSymKey(id1) { 463 t.Fatalf("HasSymKey(id1) failed.") 464 } 465 if !w.HasSymKey(id2) { 466 t.Fatalf("HasSymKey(id2) failed.") 467 } 468 if k1 == nil { 469 t.Fatalf("k1 does not exist.") 470 } 471 if k2 == nil { 472 t.Fatalf("k2 does not exist.") 473 } 474 if !bytes.Equal(k1, k2) { 475 t.Fatalf("k1 != k2.") 476 } 477 if len(k1) != aesKeyLength { 478 t.Fatalf("wrong length of k1.") 479 } 480 if len(k2) != aesKeyLength { 481 t.Fatalf("wrong length of k2.") 482 } 483 if !validateSymmetricKey(k2) { 484 t.Fatalf("key validation failed.") 485 } 486 } 487 488 func TestExpiry(t *testing.T) { 489 InitSingleTest() 490 491 w := New(&DefaultConfig) 492 w.SetMinimumPoW(0.0000001) 493 defer w.SetMinimumPoW(DefaultMinimumPoW) 494 w.Start(nil) 495 defer w.Stop() 496 497 params, err := generateMessageParams() 498 if err != nil { 499 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 500 } 501 502 params.TTL = 1 503 msg, err := NewSentMessage(params) 504 if err != nil { 505 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 506 } 507 env, err := msg.Wrap(params) 508 if err != nil { 509 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 510 } 511 512 err = w.Send(env) 513 if err != nil { 514 t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) 515 } 516 517 // 518 var received, expired bool 519 for j := 0; j < 20; j++ { 520 time.Sleep(100 * time.Millisecond) 521 if len(w.Envelopes()) > 0 { 522 received = true 523 break 524 } 525 } 526 527 if !received { 528 t.Fatalf("did not receive the sent envelope, seed: %d.", seed) 529 } 530 531 // 532 for j := 0; j < 20; j++ { 533 time.Sleep(100 * time.Millisecond) 534 if len(w.Envelopes()) == 0 { 535 expired = true 536 break 537 } 538 } 539 540 if !expired { 541 t.Fatalf("expire failed, seed: %d.", seed) 542 } 543 } 544 545 func TestCustomization(t *testing.T) { 546 InitSingleTest() 547 548 w := New(&DefaultConfig) 549 defer w.SetMinimumPoW(DefaultMinimumPoW) 550 defer w.SetMaxMessageSize(DefaultMaxMessageSize) 551 w.Start(nil) 552 defer w.Stop() 553 554 const smallPoW = 0.00001 555 556 f, err := generateFilter(t, true) 557 if err != nil { 558 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 559 } 560 params, err := generateMessageParams() 561 if err != nil { 562 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 563 } 564 565 params.KeySym = f.KeySym 566 params.Topic = BytesToTopic(f.Topics[2]) 567 params.PoW = smallPoW 568 params.TTL = 3600 * 24 // 569 msg, err := NewSentMessage(params) 570 if err != nil { 571 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 572 } 573 env, err := msg.Wrap(params) 574 if err != nil { 575 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 576 } 577 578 err = w.Send(env) 579 if err == nil { 580 t.Fatalf("successfully sent envelope with PoW %.06f, false positive (seed %d).", env.PoW(), seed) 581 } 582 583 w.SetMinimumPoW(smallPoW / 2) 584 err = w.Send(env) 585 if err != nil { 586 t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) 587 } 588 589 params.TTL++ 590 msg, err = NewSentMessage(params) 591 if err != nil { 592 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 593 } 594 env, err = msg.Wrap(params) 595 if err != nil { 596 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 597 } 598 w.SetMaxMessageSize(uint32(env.size() - 1)) 599 err = w.Send(env) 600 if err == nil { 601 t.Fatalf("successfully sent oversized envelope (seed %d): false positive.", seed) 602 } 603 604 w.SetMaxMessageSize(DefaultMaxMessageSize) 605 err = w.Send(env) 606 if err != nil { 607 t.Fatalf("failed to send second envelope with seed %d: %s.", seed, err) 608 } 609 610 // 611 var received bool 612 for j := 0; j < 20; j++ { 613 time.Sleep(100 * time.Millisecond) 614 if len(w.Envelopes()) > 1 { 615 received = true 616 break 617 } 618 } 619 620 if !received { 621 t.Fatalf("did not receive the sent envelope, seed: %d.", seed) 622 } 623 624 // 625 id, err := w.Subscribe(f) 626 if err != nil { 627 t.Fatalf("failed subscribe with seed %d: %s.", seed, err) 628 } 629 time.Sleep(5 * time.Millisecond) 630 mail := f.Retrieve() 631 if len(mail) > 0 { 632 t.Fatalf("received premature mail") 633 } 634 635 mail = w.Messages(id) 636 if len(mail) != 2 { 637 t.Fatalf("failed to get whisper messages") 638 } 639 } 640 641 func TestSymmetricSendCycle(t *testing.T) { 642 InitSingleTest() 643 644 w := New(&DefaultConfig) 645 defer w.SetMinimumPoW(DefaultMinimumPoW) 646 defer w.SetMaxMessageSize(DefaultMaxMessageSize) 647 w.Start(nil) 648 defer w.Stop() 649 650 filter1, err := generateFilter(t, true) 651 if err != nil { 652 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 653 } 654 filter1.PoW = DefaultMinimumPoW 655 656 // 657 // 658 filter2 := &Filter{ 659 KeySym: filter1.KeySym, 660 Topics: filter1.Topics, 661 PoW: filter1.PoW, 662 AllowP2P: filter1.AllowP2P, 663 Messages: make(map[common.Hash]*ReceivedMessage), 664 } 665 666 params, err := generateMessageParams() 667 if err != nil { 668 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 669 } 670 671 filter1.Src = ¶ms.Src.PublicKey 672 filter2.Src = ¶ms.Src.PublicKey 673 674 params.KeySym = filter1.KeySym 675 params.Topic = BytesToTopic(filter1.Topics[2]) 676 params.PoW = filter1.PoW 677 params.WorkTime = 10 678 params.TTL = 50 679 msg, err := NewSentMessage(params) 680 if err != nil { 681 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 682 } 683 env, err := msg.Wrap(params) 684 if err != nil { 685 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 686 } 687 688 _, err = w.Subscribe(filter1) 689 if err != nil { 690 t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) 691 } 692 693 _, err = w.Subscribe(filter2) 694 if err != nil { 695 t.Fatalf("failed subscribe 2 with seed %d: %s.", seed, err) 696 } 697 698 err = w.Send(env) 699 if err != nil { 700 t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) 701 } 702 703 // 704 var received bool 705 for j := 0; j < 200; j++ { 706 time.Sleep(10 * time.Millisecond) 707 if len(w.Envelopes()) > 0 { 708 received = true 709 break 710 } 711 } 712 713 if !received { 714 t.Fatalf("did not receive the sent envelope, seed: %d.", seed) 715 } 716 717 // 718 time.Sleep(5 * time.Millisecond) 719 mail1 := filter1.Retrieve() 720 mail2 := filter2.Retrieve() 721 if len(mail2) == 0 { 722 t.Fatalf("did not receive any email for filter 2") 723 } 724 if len(mail1) == 0 { 725 t.Fatalf("did not receive any email for filter 1") 726 } 727 728 } 729 730 func TestSymmetricSendWithoutAKey(t *testing.T) { 731 InitSingleTest() 732 733 w := New(&DefaultConfig) 734 defer w.SetMinimumPoW(DefaultMinimumPoW) 735 defer w.SetMaxMessageSize(DefaultMaxMessageSize) 736 w.Start(nil) 737 defer w.Stop() 738 739 filter, err := generateFilter(t, true) 740 if err != nil { 741 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 742 } 743 filter.PoW = DefaultMinimumPoW 744 745 params, err := generateMessageParams() 746 if err != nil { 747 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 748 } 749 750 filter.Src = nil 751 752 params.KeySym = filter.KeySym 753 params.Topic = BytesToTopic(filter.Topics[2]) 754 params.PoW = filter.PoW 755 params.WorkTime = 10 756 params.TTL = 50 757 msg, err := NewSentMessage(params) 758 if err != nil { 759 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 760 } 761 env, err := msg.Wrap(params) 762 if err != nil { 763 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 764 } 765 766 _, err = w.Subscribe(filter) 767 if err != nil { 768 t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) 769 } 770 771 err = w.Send(env) 772 if err != nil { 773 t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) 774 } 775 776 // 777 var received bool 778 for j := 0; j < 200; j++ { 779 time.Sleep(10 * time.Millisecond) 780 if len(w.Envelopes()) > 0 { 781 received = true 782 break 783 } 784 } 785 786 if !received { 787 t.Fatalf("did not receive the sent envelope, seed: %d.", seed) 788 } 789 790 // 791 time.Sleep(5 * time.Millisecond) 792 mail := filter.Retrieve() 793 if len(mail) == 0 { 794 t.Fatalf("did not receive message in spite of not setting a public key") 795 } 796 } 797 798 func TestSymmetricSendKeyMismatch(t *testing.T) { 799 InitSingleTest() 800 801 w := New(&DefaultConfig) 802 defer w.SetMinimumPoW(DefaultMinimumPoW) 803 defer w.SetMaxMessageSize(DefaultMaxMessageSize) 804 w.Start(nil) 805 defer w.Stop() 806 807 filter, err := generateFilter(t, true) 808 if err != nil { 809 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 810 } 811 filter.PoW = DefaultMinimumPoW 812 813 params, err := generateMessageParams() 814 if err != nil { 815 t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 816 } 817 818 params.KeySym = filter.KeySym 819 params.Topic = BytesToTopic(filter.Topics[2]) 820 params.PoW = filter.PoW 821 params.WorkTime = 10 822 params.TTL = 50 823 msg, err := NewSentMessage(params) 824 if err != nil { 825 t.Fatalf("failed to create new message with seed %d: %s.", seed, err) 826 } 827 env, err := msg.Wrap(params) 828 if err != nil { 829 t.Fatalf("failed Wrap with seed %d: %s.", seed, err) 830 } 831 832 _, err = w.Subscribe(filter) 833 if err != nil { 834 t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) 835 } 836 837 err = w.Send(env) 838 if err != nil { 839 t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) 840 } 841 842 // 843 var received bool 844 for j := 0; j < 200; j++ { 845 time.Sleep(10 * time.Millisecond) 846 if len(w.Envelopes()) > 0 { 847 received = true 848 break 849 } 850 } 851 852 if !received { 853 t.Fatalf("did not receive the sent envelope, seed: %d.", seed) 854 } 855 856 // 857 time.Sleep(5 * time.Millisecond) 858 mail := filter.Retrieve() 859 if len(mail) > 0 { 860 t.Fatalf("received a message when keys weren't matching") 861 } 862 } 863