@@ -5,185 +5,14 @@ package client
55
66import (
77 "context"
8- "errors"
9- "io"
108 "testing"
119
1210 "github.com/hyperledger/fabric-protos-go-apiv2/common"
13- "github.com/hyperledger/fabric-protos-go-apiv2/orderer"
1411 "github.com/hyperledger/fabric-protos-go-apiv2/peer"
1512 "github.com/stretchr/testify/require"
16- "google.golang.org/grpc"
17- "google.golang.org/grpc/codes"
18- "google.golang.org/grpc/status"
1913)
2014
2115func TestBlockEvents (t * testing.T ) {
22- t .Run ("Returns connect error" , func (t * testing.T ) {
23- expected := NewStatusError (t , codes .Aborted , "BLOCK_EVENTS_ERROR" )
24-
25- mockConnection := NewMockClientConnInterface (t )
26- ExpectDeliver (mockConnection , WithNewStreamError (expected ))
27-
28- ctx , cancel := context .WithCancel (context .Background ())
29- defer cancel ()
30-
31- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
32- _ , err := network .BlockEvents (ctx )
33-
34- require .Equal (t , status .Code (expected ), status .Code (err ), "status code" )
35- require .ErrorIs (t , err , expected , "error type: %T" , err )
36- require .ErrorContains (t , err , expected .Error (), "message" )
37- })
38-
39- for testName , testCase := range map [string ]struct {
40- options []BlockEventsOption
41- expected * orderer.SeekInfo
42- }{
43- "Sends valid request with default start position" : {
44- options : nil ,
45- expected : & orderer.SeekInfo {
46- Start : & orderer.SeekPosition {
47- Type : & orderer.SeekPosition_NextCommit {
48- NextCommit : & orderer.SeekNextCommit {},
49- },
50- },
51- Stop : seekLargestBlockNumber (),
52- },
53- },
54- "Sends valid request with specified start block number" : {
55- options : []BlockEventsOption {
56- WithStartBlock (418 ),
57- },
58- expected : & orderer.SeekInfo {
59- Start : & orderer.SeekPosition {
60- Type : & orderer.SeekPosition_Specified {
61- Specified : & orderer.SeekSpecified {
62- Number : 418 ,
63- },
64- },
65- },
66- Stop : seekLargestBlockNumber (),
67- },
68- },
69- "Uses specified start block instead of unset checkpoint" : {
70- options : []BlockEventsOption {
71- WithStartBlock (418 ),
72- WithCheckpoint (new (InMemoryCheckpointer )),
73- },
74- expected : & orderer.SeekInfo {
75- Start : & orderer.SeekPosition {
76- Type : & orderer.SeekPosition_Specified {
77- Specified : & orderer.SeekSpecified {
78- Number : 418 ,
79- },
80- },
81- },
82- Stop : seekLargestBlockNumber (),
83- },
84- },
85- "Uses checkpoint block instead of specified start block" : {
86- options : func () []BlockEventsOption {
87- checkpointer := new (InMemoryCheckpointer )
88- checkpointer .CheckpointBlock (500 )
89- return []BlockEventsOption {
90- WithStartBlock (418 ),
91- WithCheckpoint (checkpointer ),
92- }
93- }(),
94- expected : & orderer.SeekInfo {
95- Start : & orderer.SeekPosition {
96- Type : & orderer.SeekPosition_Specified {
97- Specified : & orderer.SeekSpecified {
98- Number : 501 ,
99- },
100- },
101- },
102- Stop : seekLargestBlockNumber (),
103- },
104- },
105- "Uses checkpoint block zero with set transaction ID instead of specified start block" : {
106- options : func () []BlockEventsOption {
107- checkpointer := new (InMemoryCheckpointer )
108- checkpointer .CheckpointTransaction (0 , "transctionId" )
109- return []BlockEventsOption {
110- WithStartBlock (418 ),
111- WithCheckpoint (checkpointer ),
112- }
113- }(),
114- expected : & orderer.SeekInfo {
115- Start : & orderer.SeekPosition {
116- Type : & orderer.SeekPosition_Specified {
117- Specified : & orderer.SeekSpecified {
118- Number : 0 ,
119- },
120- },
121- },
122- Stop : seekLargestBlockNumber (),
123- },
124- },
125- "Uses default start position with unset checkpoint and no start block" : {
126- options : []BlockEventsOption {
127- WithCheckpoint (new (InMemoryCheckpointer )),
128- },
129- expected : & orderer.SeekInfo {
130- Start : & orderer.SeekPosition {
131- Type : & orderer.SeekPosition_NextCommit {
132- NextCommit : & orderer.SeekNextCommit {},
133- },
134- },
135- Stop : seekLargestBlockNumber (),
136- },
137- },
138- } {
139- t .Run (testName , func (t * testing.T ) {
140- mockConnection := NewMockClientConnInterface (t )
141- mockStream := NewMockClientStream (t )
142- ExpectDeliver (mockConnection , WithNewStreamResult (mockStream ))
143-
144- messages := make (chan * common.Envelope , 1 )
145- ExpectSendMsg (mockStream , CaptureSendMsg (messages ))
146- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
147- ExpectRecvMsg (mockStream ).Maybe ().Return (io .EOF )
148-
149- ctx , cancel := context .WithCancel (context .Background ())
150- defer cancel ()
151-
152- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
153- _ , err := network .BlockEvents (ctx , testCase .options ... )
154- require .NoError (t , err )
155-
156- payload := & common.Payload {}
157- AssertUnmarshal (t , (<- messages ).GetPayload (), payload )
158- AssertValidBlockEventRequestHeader (t , payload , network .Name ())
159- actual := & orderer.SeekInfo {}
160- AssertUnmarshal (t , payload .GetData (), actual )
161-
162- AssertProtoEqual (t , testCase .expected , actual )
163- })
164- }
165-
166- t .Run ("Closes event channel on receive error" , func (t * testing.T ) {
167- mockConnection := NewMockClientConnInterface (t )
168- mockStream := NewMockClientStream (t )
169- ExpectDeliver (mockConnection , WithNewStreamResult (mockStream ))
170-
171- ExpectSendMsg (mockStream )
172- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
173- ExpectRecvMsg (mockStream ).Return (errors .New ("fake" ))
174-
175- ctx , cancel := context .WithCancel (context .Background ())
176- defer cancel ()
177-
178- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
179- receive , err := network .BlockEvents (ctx , WithStartBlock (418 ))
180- require .NoError (t , err )
181-
182- actual , ok := <- receive
183-
184- require .False (t , ok , "Expected event listening to be cancelled, got %v" , actual )
185- })
186-
18716 t .Run ("Receives events" , func (t * testing.T ) {
18817 expected := []* common.Block {
18918 {
@@ -208,13 +37,6 @@ func TestBlockEvents(t *testing.T) {
20837 },
20938 }
21039
211- mockConnection := NewMockClientConnInterface (t )
212- mockStream := NewMockClientStream (t )
213- ExpectDeliver (mockConnection , WithNewStreamResult (mockStream ))
214-
215- ExpectSendMsg (mockStream )
216- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
217-
21840 var responses []* peer.DeliverResponse
21941 for _ , block := range expected {
22042 responses = append (responses , & peer.DeliverResponse {
@@ -223,29 +45,23 @@ func TestBlockEvents(t *testing.T) {
22345 },
22446 })
22547 }
226- ExpectRecvMsg (mockStream , WithRecvMsgs (responses ... ))
48+
49+ tester := NewBlockEventsTest (t )
50+ tester .SetResponses (responses ... )
22751
22852 ctx , cancel := context .WithCancel (context .Background ())
22953 defer cancel ()
23054
231- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
232- receive , err := network .BlockEvents (ctx )
55+ err := tester .Events (ctx )
23356 require .NoError (t , err )
23457
23558 for _ , event := range expected {
236- actual := <- receive
59+ actual := <- tester . BlockEvents
23760 AssertProtoEqual (t , event , actual )
23861 }
23962 })
24063
24164 t .Run ("Closes event channel on non-block message" , func (t * testing.T ) {
242- mockConnection := NewMockClientConnInterface (t )
243- mockStream := NewMockClientStream (t )
244- ExpectDeliver (mockConnection , WithNewStreamResult (mockStream ))
245-
246- ExpectSendMsg (mockStream )
247- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
248-
24965 block := & common.Block {
25066 Header : & common.BlockHeader {
25167 Number : 1 ,
@@ -273,13 +89,14 @@ func TestBlockEvents(t *testing.T) {
27389 },
27490 },
27591 }
276- ExpectRecvMsg (mockStream , WithRecvMsgs (responses ... ))
92+
93+ tester := NewBlockEventsTest (t )
94+ tester .SetResponses (responses ... )
27795
27896 ctx , cancel := context .WithCancel (context .Background ())
27997 defer cancel ()
28098
281- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
282- receive , err := network .BlockEvents (ctx )
99+ err := tester .Events (ctx )
283100 require .NoError (t , err )
284101
285102 expected := []* common.Block {
@@ -288,60 +105,8 @@ func TestBlockEvents(t *testing.T) {
288105 nil ,
289106 }
290107 for _ , event := range expected {
291- actual := <- receive
108+ actual := <- tester . BlockEvents
292109 AssertProtoEqual (t , event , actual )
293110 }
294111 })
295-
296- t .Run ("Uses specified gRPC call options" , func (t * testing.T ) {
297- expected := grpc .WaitForReady (true )
298-
299- mockConnection := NewMockClientConnInterface (t )
300- mockStream := NewMockClientStream (t )
301- options := make (chan []grpc.CallOption , 1 )
302- ExpectDeliver (mockConnection , CaptureNewStreamOptions (options ), WithNewStreamResult (mockStream ))
303-
304- ExpectSendMsg (mockStream )
305- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
306- ExpectRecvMsg (mockStream ).Maybe ().Return (io .EOF )
307-
308- ctx , cancel := context .WithCancel (context .Background ())
309- defer cancel ()
310-
311- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ))
312- request , err := network .NewBlockEventsRequest ()
313- require .NoError (t , err , "NewBlockEventsRequest" )
314-
315- _ , err = request .Events (ctx , expected )
316- require .NoError (t , err , "Events" )
317-
318- require .Contains (t , (<- options ), expected , "CallOptions" )
319- })
320-
321- t .Run ("Sends request with TLS client certificate hash" , func (t * testing.T ) {
322- expected := []byte ("TLS_CLIENT_CERTIFICATE_HASH" )
323-
324- mockConnection := NewMockClientConnInterface (t )
325- mockStream := NewMockClientStream (t )
326- ExpectDeliver (mockConnection , WithNewStreamResult (mockStream ))
327-
328- requests := make (chan * common.Envelope , 1 )
329- ExpectSendMsg (mockStream , CaptureSendMsg (requests ))
330- mockStream .EXPECT ().CloseSend ().Maybe ().Return (nil )
331- ExpectRecvMsg (mockStream ).Maybe ().Return (io .EOF )
332-
333- ctx , cancel := context .WithCancel (context .Background ())
334- defer cancel ()
335-
336- network := AssertNewTestNetwork (t , "NETWORK" , WithClientConnection (mockConnection ), WithTLSClientCertificateHash (expected ))
337- _ , err := network .BlockEvents (ctx )
338- require .NoError (t , err )
339-
340- payload := & common.Payload {}
341- AssertUnmarshal (t , (<- requests ).GetPayload (), payload )
342- channelHeader := & common.ChannelHeader {}
343- AssertUnmarshal (t , payload .GetHeader ().GetChannelHeader (), channelHeader )
344-
345- require .Equal (t , expected , channelHeader .GetTlsCertHash ())
346- })
347112}
0 commit comments