peer_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/gob"
  5. "io"
  6. "log"
  7. "reflect"
  8. "testing"
  9. "github.com/weaveworks/mesh"
  10. )
  11. func TestPeerOnGossip(t *testing.T) {
  12. for _, testcase := range []struct {
  13. initial map[mesh.PeerName]int
  14. msg map[mesh.PeerName]int
  15. want map[mesh.PeerName]int
  16. }{
  17. {
  18. map[mesh.PeerName]int{},
  19. map[mesh.PeerName]int{123: 1, 456: 2},
  20. map[mesh.PeerName]int{123: 1, 456: 2},
  21. },
  22. {
  23. map[mesh.PeerName]int{123: 1},
  24. map[mesh.PeerName]int{123: 0, 456: 2},
  25. map[mesh.PeerName]int{456: 2},
  26. },
  27. {
  28. map[mesh.PeerName]int{123: 9},
  29. map[mesh.PeerName]int{123: 8},
  30. nil,
  31. },
  32. } {
  33. p := newPeer(mesh.PeerName(999), log.New(io.Discard, "", 0))
  34. p.st.mergeComplete(testcase.initial)
  35. var buf bytes.Buffer
  36. if err := gob.NewEncoder(&buf).Encode(testcase.msg); err != nil {
  37. t.Fatal(err)
  38. }
  39. delta, err := p.OnGossip(buf.Bytes())
  40. if err != nil {
  41. t.Errorf("%v OnGossip %v: %v", testcase.initial, testcase.msg, err)
  42. continue
  43. }
  44. if want := testcase.want; want == nil {
  45. if delta != nil {
  46. t.Errorf("%v OnGossip %v: want nil, have non-nil", testcase.initial, testcase.msg)
  47. }
  48. } else {
  49. if have := delta.(*state).set; !reflect.DeepEqual(want, have) {
  50. t.Errorf("%v OnGossip %v: want %v, have %v", testcase.initial, testcase.msg, want, have)
  51. }
  52. }
  53. }
  54. }
  55. func TestPeerOnGossipBroadcast(t *testing.T) {
  56. for _, testcase := range []struct {
  57. initial map[mesh.PeerName]int
  58. msg map[mesh.PeerName]int
  59. want map[mesh.PeerName]int
  60. }{
  61. {
  62. map[mesh.PeerName]int{},
  63. map[mesh.PeerName]int{123: 1, 456: 2},
  64. map[mesh.PeerName]int{123: 1, 456: 2},
  65. },
  66. {
  67. map[mesh.PeerName]int{123: 1},
  68. map[mesh.PeerName]int{123: 0, 456: 2},
  69. map[mesh.PeerName]int{456: 2},
  70. },
  71. {
  72. map[mesh.PeerName]int{123: 9},
  73. map[mesh.PeerName]int{123: 8},
  74. map[mesh.PeerName]int{}, // OnGossipBroadcast returns received, which should never be nil
  75. },
  76. } {
  77. p := newPeer(999, log.New(io.Discard, "", 0))
  78. p.st.mergeComplete(testcase.initial)
  79. var buf bytes.Buffer
  80. if err := gob.NewEncoder(&buf).Encode(testcase.msg); err != nil {
  81. t.Fatal(err)
  82. }
  83. delta, err := p.OnGossipBroadcast(mesh.UnknownPeerName, buf.Bytes())
  84. if err != nil {
  85. t.Errorf("%v OnGossipBroadcast %v: %v", testcase.initial, testcase.msg, err)
  86. continue
  87. }
  88. if want, have := testcase.want, delta.(*state).set; !reflect.DeepEqual(want, have) {
  89. t.Errorf("%v OnGossipBroadcast %v: want %v, have %v", testcase.initial, testcase.msg, want, have)
  90. }
  91. }
  92. }
  93. func TestPeerOnGossipUnicast(t *testing.T) {
  94. for _, testcase := range []struct {
  95. initial map[mesh.PeerName]int
  96. msg map[mesh.PeerName]int
  97. want map[mesh.PeerName]int
  98. }{
  99. {
  100. map[mesh.PeerName]int{},
  101. map[mesh.PeerName]int{123: 1, 456: 2},
  102. map[mesh.PeerName]int{123: 1, 456: 2},
  103. },
  104. {
  105. map[mesh.PeerName]int{123: 1},
  106. map[mesh.PeerName]int{123: 0, 456: 2},
  107. map[mesh.PeerName]int{123: 1, 456: 2},
  108. },
  109. {
  110. map[mesh.PeerName]int{123: 9},
  111. map[mesh.PeerName]int{123: 8},
  112. map[mesh.PeerName]int{123: 9},
  113. },
  114. } {
  115. p := newPeer(999, log.New(io.Discard, "", 0))
  116. p.st.mergeComplete(testcase.initial)
  117. var buf bytes.Buffer
  118. if err := gob.NewEncoder(&buf).Encode(testcase.msg); err != nil {
  119. t.Fatal(err)
  120. }
  121. if err := p.OnGossipUnicast(mesh.UnknownPeerName, buf.Bytes()); err != nil {
  122. t.Errorf("%v OnGossipBroadcast %v: %v", testcase.initial, testcase.msg, err)
  123. continue
  124. }
  125. if want, have := testcase.want, p.st.set; !reflect.DeepEqual(want, have) {
  126. t.Errorf("%v OnGossipBroadcast %v: want %v, have %v", testcase.initial, testcase.msg, want, have)
  127. }
  128. }
  129. }