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