github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/network/stream/lightnode_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:44</date>
    10  //</624450115519647744>
    11  
    12  package stream
    13  
    14  import (
    15  	"testing"
    16  
    17  	p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
    18  )
    19  
    20  //此测试检查服务器的默认行为,即
    21  //当它提供检索请求时。
    22  func TestLigthnodeRetrieveRequestWithRetrieve(t *testing.T) {
    23  	registryOptions := &RegistryOptions{
    24  		Retrieval: RetrievalClientOnly,
    25  		Syncing:   SyncingDisabled,
    26  	}
    27  	tester, _, _, teardown, err := newStreamerTester(t, registryOptions)
    28  	defer teardown()
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  
    33  	node := tester.Nodes[0]
    34  
    35  	stream := NewStream(swarmChunkServerStreamName, "", false)
    36  
    37  	err = tester.TestExchanges(p2ptest.Exchange{
    38  		Label: "SubscribeMsg",
    39  		Triggers: []p2ptest.Trigger{
    40  			{
    41  				Code: 4,
    42  				Msg: &SubscribeMsg{
    43  					Stream: stream,
    44  				},
    45  				Peer: node.ID(),
    46  			},
    47  		},
    48  	})
    49  	if err != nil {
    50  		t.Fatalf("Got %v", err)
    51  	}
    52  
    53  	err = tester.TestDisconnected(&p2ptest.Disconnect{Peer: node.ID()})
    54  	if err == nil || err.Error() != "timed out waiting for peers to disconnect" {
    55  		t.Fatalf("Expected no disconnect, got %v", err)
    56  	}
    57  }
    58  
    59  //此测试在服务检索时检查服务器的lightnode行为
    60  //请求被禁用
    61  func TestLigthnodeRetrieveRequestWithoutRetrieve(t *testing.T) {
    62  	registryOptions := &RegistryOptions{
    63  		Retrieval: RetrievalDisabled,
    64  		Syncing:   SyncingDisabled,
    65  	}
    66  	tester, _, _, teardown, err := newStreamerTester(t, registryOptions)
    67  	defer teardown()
    68  	if err != nil {
    69  		t.Fatal(err)
    70  	}
    71  
    72  	node := tester.Nodes[0]
    73  
    74  	stream := NewStream(swarmChunkServerStreamName, "", false)
    75  
    76  	err = tester.TestExchanges(
    77  		p2ptest.Exchange{
    78  			Label: "SubscribeMsg",
    79  			Triggers: []p2ptest.Trigger{
    80  				{
    81  					Code: 4,
    82  					Msg: &SubscribeMsg{
    83  						Stream: stream,
    84  					},
    85  					Peer: node.ID(),
    86  				},
    87  			},
    88  			Expects: []p2ptest.Expect{
    89  				{
    90  					Code: 7,
    91  					Msg: &SubscribeErrorMsg{
    92  						Error: "stream RETRIEVE_REQUEST not registered",
    93  					},
    94  					Peer: node.ID(),
    95  				},
    96  			},
    97  		})
    98  	if err != nil {
    99  		t.Fatalf("Got %v", err)
   100  	}
   101  }
   102  
   103  //此测试检查服务器的默认行为,即
   104  //启用同步时。
   105  func TestLigthnodeRequestSubscriptionWithSync(t *testing.T) {
   106  	registryOptions := &RegistryOptions{
   107  		Retrieval: RetrievalDisabled,
   108  		Syncing:   SyncingRegisterOnly,
   109  	}
   110  	tester, _, _, teardown, err := newStreamerTester(t, registryOptions)
   111  	defer teardown()
   112  	if err != nil {
   113  		t.Fatal(err)
   114  	}
   115  
   116  	node := tester.Nodes[0]
   117  
   118  	syncStream := NewStream("SYNC", FormatSyncBinKey(1), false)
   119  
   120  	err = tester.TestExchanges(
   121  		p2ptest.Exchange{
   122  			Label: "RequestSubscription",
   123  			Triggers: []p2ptest.Trigger{
   124  				{
   125  					Code: 8,
   126  					Msg: &RequestSubscriptionMsg{
   127  						Stream: syncStream,
   128  					},
   129  					Peer: node.ID(),
   130  				},
   131  			},
   132  			Expects: []p2ptest.Expect{
   133  				{
   134  					Code: 4,
   135  					Msg: &SubscribeMsg{
   136  						Stream: syncStream,
   137  					},
   138  					Peer: node.ID(),
   139  				},
   140  			},
   141  		})
   142  
   143  	if err != nil {
   144  		t.Fatalf("Got %v", err)
   145  	}
   146  }
   147  
   148  //此测试检查服务器的lightnode行为,即
   149  //当同步被禁用时。
   150  func TestLigthnodeRequestSubscriptionWithoutSync(t *testing.T) {
   151  	registryOptions := &RegistryOptions{
   152  		Retrieval: RetrievalDisabled,
   153  		Syncing:   SyncingDisabled,
   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  }
   211