github.com/myafeier/fabric@v1.0.1-0.20170722181825-3a4b1f2bce86/core/deliverservice/mocks/blocksprovider_test.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package mocks 18 19 import ( 20 "math" 21 "sync/atomic" 22 "testing" 23 "time" 24 25 pb "github.com/golang/protobuf/proto" 26 "github.com/hyperledger/fabric/core/deliverservice/blocksprovider" 27 "github.com/hyperledger/fabric/protos/common" 28 proto "github.com/hyperledger/fabric/protos/gossip" 29 "github.com/hyperledger/fabric/protos/orderer" 30 "github.com/stretchr/testify/assert" 31 "golang.org/x/net/context" 32 ) 33 34 func TestMockBlocksDeliverer(t *testing.T) { 35 // Make sure it implements BlocksDeliverer 36 var bd blocksprovider.BlocksDeliverer 37 bd = &MockBlocksDeliverer{} 38 _ = bd 39 40 assert.Panics(t, func() { 41 bd.Recv() 42 }) 43 bd.(*MockBlocksDeliverer).MockRecv = func(mock *MockBlocksDeliverer) (*orderer.DeliverResponse, error) { 44 return &orderer.DeliverResponse{ 45 Type: &orderer.DeliverResponse_Status{ 46 Status: common.Status_FORBIDDEN, 47 }, 48 }, nil 49 } 50 status, err := bd.Recv() 51 assert.Nil(t, err) 52 assert.Equal(t, common.Status_FORBIDDEN, status.GetStatus()) 53 bd.(*MockBlocksDeliverer).MockRecv = MockRecv 54 block, err := bd.Recv() 55 assert.Nil(t, err) 56 assert.Equal(t, uint64(0), block.GetBlock().Header.Number) 57 58 bd.(*MockBlocksDeliverer).Close() 59 60 seekInfo := &orderer.SeekInfo{ 61 Start: &orderer.SeekPosition{Type: &orderer.SeekPosition_Oldest{Oldest: &orderer.SeekOldest{}}}, 62 Stop: &orderer.SeekPosition{Type: &orderer.SeekPosition_Specified{Specified: &orderer.SeekSpecified{Number: math.MaxUint64}}}, 63 Behavior: orderer.SeekInfo_BLOCK_UNTIL_READY, 64 } 65 si, err := pb.Marshal(seekInfo) 66 assert.NoError(t, err) 67 68 payload := &common.Payload{} 69 70 payload.Data = si 71 b, err := pb.Marshal(payload) 72 assert.NoError(t, err) 73 assert.Nil(t, bd.Send(&common.Envelope{Payload: b})) 74 } 75 76 func TestMockGossipServiceAdapter(t *testing.T) { 77 // Make sure it implements GossipServiceAdapter 78 var gsa blocksprovider.GossipServiceAdapter 79 seqNums := make(chan uint64, 1) 80 gsa = &MockGossipServiceAdapter{GossipBlockDisseminations: seqNums} 81 _ = gsa 82 83 // Test gossip 84 msg := &proto.GossipMessage{ 85 Content: &proto.GossipMessage_DataMsg{ 86 DataMsg: &proto.DataMessage{ 87 Payload: &proto.Payload{ 88 SeqNum: uint64(100), 89 }, 90 }, 91 }, 92 } 93 gsa.Gossip(msg) 94 select { 95 case seq := <-seqNums: 96 assert.Equal(t, uint64(100), seq) 97 case <-time.After(time.Second): 98 assert.Fail(t, "Didn't gossip within a timely manner") 99 } 100 101 // Test AddPayload 102 gsa.AddPayload("TEST", msg.GetDataMsg().Payload) 103 assert.Equal(t, int32(1), atomic.LoadInt32(&(gsa.(*MockGossipServiceAdapter).AddPayloadsCnt))) 104 105 // Test PeersOfChannel 106 assert.Len(t, gsa.PeersOfChannel(nil), 0) 107 } 108 109 func TestMockAtomicBroadcastClient(t *testing.T) { 110 // Make sure it implements MockAtomicBroadcastClient 111 var abc orderer.AtomicBroadcastClient 112 abc = &MockAtomicBroadcastClient{BD: &MockBlocksDeliverer{}} 113 114 assert.Panics(t, func() { 115 abc.Broadcast(context.Background()) 116 }) 117 c, err := abc.Deliver(context.Background()) 118 assert.Nil(t, err) 119 assert.NotNil(t, c) 120 } 121 122 func TestMockLedgerInfo(t *testing.T) { 123 var li blocksprovider.LedgerInfo 124 li = &MockLedgerInfo{uint64(8)} 125 _ = li 126 127 height, err := li.LedgerHeight() 128 assert.Equal(t, uint64(8), height) 129 assert.NoError(t, err) 130 }