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