func updateReceiver(t *testing.T, resultch chan byte, errorch chan error, client ab.AtomicBroadcastClient) { logger.Info("{Update Receiver} Creating a ledger update delivery stream.") dstream, err := client.Deliver(context.Background()) if err != nil { errorch <- fmt.Errorf("Failed to get Deliver stream: %s", err) return } dstream.Send(&ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{Start: ab.SeekInfo_NEWEST, WindowSize: 10, ChainID: provisional.TestChainID}}}) logger.Info("{Update Receiver} Listening to ledger updates.") for i := 0; i < 2; i++ { m, inerr := dstream.Recv() if inerr != nil { errorch <- fmt.Errorf("Failed to receive consensus: %s", inerr) return } b := m.Type.(*ab.DeliverResponse_Block) logger.Info("{Update Receiver} Received a ledger update.") for i, tx := range b.Block.Data.Data { pl := &cb.Payload{} e := &cb.Envelope{} merr1 := proto.Unmarshal(tx, e) merr2 := proto.Unmarshal(e.Payload, pl) if merr1 == nil && merr2 == nil { logger.Infof("{Update Receiver} %d - %v", i+1, pl.Data) } } resultch <- UPDATE } logger.Info("{Update Receiver} Exiting...") }
func broadcastSender(resultch chan byte, errorch chan error, client ab.AtomicBroadcastClient) { logger.Info("{Broadcast Sender} Waiting before sending.") <-time.After(5 * time.Second) bstream, err := client.Broadcast(context.Background()) if err != nil { errorch <- fmt.Errorf("Failed to get broadcast stream: %s", err) return } bs := []byte{0, 1, 2, 3} pl := &cb.Payload{ Header: &cb.Header{ ChainHeader: &cb.ChainHeader{ ChainID: provisional.TestChainID, }, }, Data: bs, } mpl, err := proto.Marshal(pl) if err != nil { panic("Failed to marshal payload.") } bstream.Send(&cb.Envelope{Payload: mpl}) logger.Infof("{Broadcast Sender} Broadcast sent: %v", bs) logger.Info("{Broadcast Sender} Exiting...") resultch <- SEND }