This test is used in the RFC.
(t *testing.T)
| 506 | |
| 507 | // This test is used in the RFC. |
| 508 | func TestLocalRemoteEquivalence(t *testing.T) { |
| 509 | tt := testutils.T{T: t} |
| 510 | |
| 511 | err1 := errors.New("hello") |
| 512 | err2 := errors.New("hello") |
| 513 | err3 := errors.New("world") |
| 514 | |
| 515 | err1dec := network(err1) |
| 516 | err2dec := network(err2) |
| 517 | err3dec := network(err3) |
| 518 | |
| 519 | // Equivalence is preserved across the network. |
| 520 | tt.Check(markers.Is(err1, err1dec) && markers.Is(err1dec, err1)) |
| 521 | tt.Check(markers.Is(err2, err2dec) && markers.Is(err2dec, err2)) |
| 522 | tt.Check(markers.Is(err3, err3dec) && markers.Is(err3dec, err3)) |
| 523 | |
| 524 | // Non-equivalence is preserved across the network. |
| 525 | tt.Check(!markers.Is(err1dec, err3)) |
| 526 | tt.Check(!markers.Is(err2dec, err3)) |
| 527 | |
| 528 | // "m" makes err1w and err3w equivalent. |
| 529 | m := errors.New("mark") |
| 530 | err1w := markers.Mark(err1, m) |
| 531 | err3w := markers.Mark(err3, m) |
| 532 | // "m2" makes err1w and err2w non-equivalent even though err2 and err1 are. |
| 533 | m2 := errors.New("m2") |
| 534 | err2w := markers.Mark(err2, m2) |
| 535 | |
| 536 | err1decw := network(err1w) |
| 537 | err2decw := network(err2w) |
| 538 | err3decw := network(err3w) |
| 539 | |
| 540 | // Equivalence is preserved across the network. |
| 541 | tt.Check(markers.Is(err1decw, err1w) && markers.Is(err1w, err1decw)) |
| 542 | tt.Check(markers.Is(err2decw, err2w) && markers.Is(err2w, err2decw)) |
| 543 | tt.Check(markers.Is(err3decw, err3w) && markers.Is(err3w, err3decw)) |
| 544 | tt.Check(markers.Is(err1decw, err3w) && markers.Is(err3decw, err1w)) |
| 545 | |
| 546 | // Non-equivalence is preserved across the network. |
| 547 | tt.Check(!markers.Is(err1w, err2decw) && !markers.Is(err2w, err1decw)) |
| 548 | } |
| 549 | |
| 550 | // This test is used in the RFC. |
| 551 | func TestRemoteRemoteEquivalence(t *testing.T) { |