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  }