github.com/codingfuture/orig-energi3@v0.8.4/swarm/network/stream/lightnode_test.go (about) 1 // Copyright 2018 The Energi Core Authors 2 // Copyright 2018 The go-ethereum Authors 3 // This file is part of the Energi Core library. 4 // 5 // The Energi Core library is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Lesser General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // The Energi Core library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Lesser General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public License 16 // along with the Energi Core library. If not, see <http://www.gnu.org/licenses/>. 17 18 package stream 19 20 import ( 21 "testing" 22 23 p2ptest "github.com/ethereum/go-ethereum/p2p/testing" 24 ) 25 26 // This test checks the default behavior of the server, that is 27 // when it is serving Retrieve requests. 28 func TestLigthnodeRetrieveRequestWithRetrieve(t *testing.T) { 29 registryOptions := &RegistryOptions{ 30 Retrieval: RetrievalClientOnly, 31 Syncing: SyncingDisabled, 32 } 33 tester, _, _, teardown, err := newStreamerTester(registryOptions) 34 if err != nil { 35 t.Fatal(err) 36 } 37 defer teardown() 38 39 node := tester.Nodes[0] 40 41 stream := NewStream(swarmChunkServerStreamName, "", false) 42 43 err = tester.TestExchanges(p2ptest.Exchange{ 44 Label: "SubscribeMsg", 45 Triggers: []p2ptest.Trigger{ 46 { 47 Code: 4, 48 Msg: &SubscribeMsg{ 49 Stream: stream, 50 }, 51 Peer: node.ID(), 52 }, 53 }, 54 }) 55 if err != nil { 56 t.Fatalf("Got %v", err) 57 } 58 59 err = tester.TestDisconnected(&p2ptest.Disconnect{Peer: node.ID()}) 60 if err == nil || err.Error() != "timed out waiting for peers to disconnect" { 61 t.Fatalf("Expected no disconnect, got %v", err) 62 } 63 } 64 65 // This test checks the Lightnode behavior of server, when serving Retrieve 66 // requests are disabled 67 func TestLigthnodeRetrieveRequestWithoutRetrieve(t *testing.T) { 68 registryOptions := &RegistryOptions{ 69 Retrieval: RetrievalDisabled, 70 Syncing: SyncingDisabled, 71 } 72 tester, _, _, teardown, err := newStreamerTester(registryOptions) 73 if err != nil { 74 t.Fatal(err) 75 } 76 defer teardown() 77 78 node := tester.Nodes[0] 79 80 stream := NewStream(swarmChunkServerStreamName, "", false) 81 82 err = tester.TestExchanges( 83 p2ptest.Exchange{ 84 Label: "SubscribeMsg", 85 Triggers: []p2ptest.Trigger{ 86 { 87 Code: 4, 88 Msg: &SubscribeMsg{ 89 Stream: stream, 90 }, 91 Peer: node.ID(), 92 }, 93 }, 94 Expects: []p2ptest.Expect{ 95 { 96 Code: 7, 97 Msg: &SubscribeErrorMsg{ 98 Error: "stream RETRIEVE_REQUEST not registered", 99 }, 100 Peer: node.ID(), 101 }, 102 }, 103 }) 104 if err != nil { 105 t.Fatalf("Got %v", err) 106 } 107 } 108 109 // This test checks the default behavior of the server, that is 110 // when syncing is enabled. 111 func TestLigthnodeRequestSubscriptionWithSync(t *testing.T) { 112 registryOptions := &RegistryOptions{ 113 Retrieval: RetrievalDisabled, 114 Syncing: SyncingRegisterOnly, 115 } 116 tester, _, _, teardown, err := newStreamerTester(registryOptions) 117 if err != nil { 118 t.Fatal(err) 119 } 120 defer teardown() 121 122 node := tester.Nodes[0] 123 124 syncStream := NewStream("SYNC", FormatSyncBinKey(1), false) 125 126 err = tester.TestExchanges( 127 p2ptest.Exchange{ 128 Label: "RequestSubscription", 129 Triggers: []p2ptest.Trigger{ 130 { 131 Code: 8, 132 Msg: &RequestSubscriptionMsg{ 133 Stream: syncStream, 134 }, 135 Peer: node.ID(), 136 }, 137 }, 138 Expects: []p2ptest.Expect{ 139 { 140 Code: 4, 141 Msg: &SubscribeMsg{ 142 Stream: syncStream, 143 }, 144 Peer: node.ID(), 145 }, 146 }, 147 }) 148 149 if err != nil { 150 t.Fatalf("Got %v", err) 151 } 152 } 153 154 // This test checks the Lightnode behavior of the server, that is 155 // when syncing is disabled. 156 func TestLigthnodeRequestSubscriptionWithoutSync(t *testing.T) { 157 registryOptions := &RegistryOptions{ 158 Retrieval: RetrievalDisabled, 159 Syncing: SyncingDisabled, 160 } 161 tester, _, _, teardown, err := newStreamerTester(registryOptions) 162 if err != nil { 163 t.Fatal(err) 164 } 165 defer teardown() 166 167 node := tester.Nodes[0] 168 169 syncStream := NewStream("SYNC", FormatSyncBinKey(1), false) 170 171 err = tester.TestExchanges(p2ptest.Exchange{ 172 Label: "RequestSubscription", 173 Triggers: []p2ptest.Trigger{ 174 { 175 Code: 8, 176 Msg: &RequestSubscriptionMsg{ 177 Stream: syncStream, 178 }, 179 Peer: node.ID(), 180 }, 181 }, 182 Expects: []p2ptest.Expect{ 183 { 184 Code: 7, 185 Msg: &SubscribeErrorMsg{ 186 Error: "stream SYNC not registered", 187 }, 188 Peer: node.ID(), 189 }, 190 }, 191 }, p2ptest.Exchange{ 192 Label: "RequestSubscription", 193 Triggers: []p2ptest.Trigger{ 194 { 195 Code: 4, 196 Msg: &SubscribeMsg{ 197 Stream: syncStream, 198 }, 199 Peer: node.ID(), 200 }, 201 }, 202 Expects: []p2ptest.Expect{ 203 { 204 Code: 7, 205 Msg: &SubscribeErrorMsg{ 206 Error: "stream SYNC not registered", 207 }, 208 Peer: node.ID(), 209 }, 210 }, 211 }) 212 213 if err != nil { 214 t.Fatalf("Got %v", err) 215 } 216 }