lightnode_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. // Copyright 2018 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. package stream
  17. import (
  18. "testing"
  19. p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
  20. )
  21. // This test checks the default behavior of the server, that is
  22. // when it is serving Retrieve requests.
  23. func TestLigthnodeRetrieveRequestWithRetrieve(t *testing.T) {
  24. registryOptions := &RegistryOptions{
  25. Retrieval: RetrievalClientOnly,
  26. Syncing: SyncingDisabled,
  27. }
  28. tester, _, _, teardown, err := newStreamerTester(registryOptions)
  29. defer teardown()
  30. if err != nil {
  31. t.Fatal(err)
  32. }
  33. node := tester.Nodes[0]
  34. stream := NewStream(swarmChunkServerStreamName, "", false)
  35. err = tester.TestExchanges(p2ptest.Exchange{
  36. Label: "SubscribeMsg",
  37. Triggers: []p2ptest.Trigger{
  38. {
  39. Code: 4,
  40. Msg: &SubscribeMsg{
  41. Stream: stream,
  42. },
  43. Peer: node.ID(),
  44. },
  45. },
  46. })
  47. if err != nil {
  48. t.Fatalf("Got %v", err)
  49. }
  50. err = tester.TestDisconnected(&p2ptest.Disconnect{Peer: node.ID()})
  51. if err == nil || err.Error() != "timed out waiting for peers to disconnect" {
  52. t.Fatalf("Expected no disconnect, got %v", err)
  53. }
  54. }
  55. // This test checks the Lightnode behavior of server, when serving Retrieve
  56. // requests are disabled
  57. func TestLigthnodeRetrieveRequestWithoutRetrieve(t *testing.T) {
  58. registryOptions := &RegistryOptions{
  59. Retrieval: RetrievalDisabled,
  60. Syncing: SyncingDisabled,
  61. }
  62. tester, _, _, teardown, err := newStreamerTester(registryOptions)
  63. defer teardown()
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. node := tester.Nodes[0]
  68. stream := NewStream(swarmChunkServerStreamName, "", false)
  69. err = tester.TestExchanges(
  70. p2ptest.Exchange{
  71. Label: "SubscribeMsg",
  72. Triggers: []p2ptest.Trigger{
  73. {
  74. Code: 4,
  75. Msg: &SubscribeMsg{
  76. Stream: stream,
  77. },
  78. Peer: node.ID(),
  79. },
  80. },
  81. Expects: []p2ptest.Expect{
  82. {
  83. Code: 7,
  84. Msg: &SubscribeErrorMsg{
  85. Error: "stream RETRIEVE_REQUEST not registered",
  86. },
  87. Peer: node.ID(),
  88. },
  89. },
  90. })
  91. if err != nil {
  92. t.Fatalf("Got %v", err)
  93. }
  94. }
  95. // This test checks the default behavior of the server, that is
  96. // when syncing is enabled.
  97. func TestLigthnodeRequestSubscriptionWithSync(t *testing.T) {
  98. registryOptions := &RegistryOptions{
  99. Retrieval: RetrievalDisabled,
  100. Syncing: SyncingRegisterOnly,
  101. }
  102. tester, _, _, teardown, err := newStreamerTester(registryOptions)
  103. defer teardown()
  104. if err != nil {
  105. t.Fatal(err)
  106. }
  107. node := tester.Nodes[0]
  108. syncStream := NewStream("SYNC", FormatSyncBinKey(1), false)
  109. err = tester.TestExchanges(
  110. p2ptest.Exchange{
  111. Label: "RequestSubscription",
  112. Triggers: []p2ptest.Trigger{
  113. {
  114. Code: 8,
  115. Msg: &RequestSubscriptionMsg{
  116. Stream: syncStream,
  117. },
  118. Peer: node.ID(),
  119. },
  120. },
  121. Expects: []p2ptest.Expect{
  122. {
  123. Code: 4,
  124. Msg: &SubscribeMsg{
  125. Stream: syncStream,
  126. },
  127. Peer: node.ID(),
  128. },
  129. },
  130. })
  131. if err != nil {
  132. t.Fatalf("Got %v", err)
  133. }
  134. }
  135. // This test checks the Lightnode behavior of the server, that is
  136. // when syncing is disabled.
  137. func TestLigthnodeRequestSubscriptionWithoutSync(t *testing.T) {
  138. registryOptions := &RegistryOptions{
  139. Retrieval: RetrievalDisabled,
  140. Syncing: SyncingDisabled,
  141. }
  142. tester, _, _, teardown, err := newStreamerTester(registryOptions)
  143. defer teardown()
  144. if err != nil {
  145. t.Fatal(err)
  146. }
  147. node := tester.Nodes[0]
  148. syncStream := NewStream("SYNC", FormatSyncBinKey(1), false)
  149. err = tester.TestExchanges(p2ptest.Exchange{
  150. Label: "RequestSubscription",
  151. Triggers: []p2ptest.Trigger{
  152. {
  153. Code: 8,
  154. Msg: &RequestSubscriptionMsg{
  155. Stream: syncStream,
  156. },
  157. Peer: node.ID(),
  158. },
  159. },
  160. Expects: []p2ptest.Expect{
  161. {
  162. Code: 7,
  163. Msg: &SubscribeErrorMsg{
  164. Error: "stream SYNC not registered",
  165. },
  166. Peer: node.ID(),
  167. },
  168. },
  169. }, p2ptest.Exchange{
  170. Label: "RequestSubscription",
  171. Triggers: []p2ptest.Trigger{
  172. {
  173. Code: 4,
  174. Msg: &SubscribeMsg{
  175. Stream: syncStream,
  176. },
  177. Peer: node.ID(),
  178. },
  179. },
  180. Expects: []p2ptest.Expect{
  181. {
  182. Code: 7,
  183. Msg: &SubscribeErrorMsg{
  184. Error: "stream SYNC not registered",
  185. },
  186. Peer: node.ID(),
  187. },
  188. },
  189. })
  190. if err != nil {
  191. t.Fatalf("Got %v", err)
  192. }
  193. }