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