|
| 1 | +/* |
| 2 | +Copyright SecureKey Technologies Inc. All Rights Reserved. |
| 3 | +
|
| 4 | +SPDX-License-Identifier: Apache-2.0 |
| 5 | +*/ |
| 6 | + |
| 7 | +package mocks |
| 8 | + |
| 9 | +import ( |
| 10 | + "fmt" |
| 11 | + "net" |
| 12 | + |
| 13 | + "github.com/golang/protobuf/proto" |
| 14 | + pb "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/peer" |
| 15 | + "google.golang.org/grpc" |
| 16 | +) |
| 17 | + |
| 18 | +// MockEventServer ... |
| 19 | +type MockEventServer struct { |
| 20 | + server pb.Events_ChatServer |
| 21 | + grpcServer *grpc.Server |
| 22 | + channel chan *pb.Event |
| 23 | +} |
| 24 | + |
| 25 | +// StartMockEventServer will start mock event server for unit testing purpose |
| 26 | +func StartMockEventServer(testAddress string) (*MockEventServer, error) { |
| 27 | + grpcServer := grpc.NewServer() |
| 28 | + grpcServer.GetServiceInfo() |
| 29 | + lis, err := net.Listen("tcp", testAddress) |
| 30 | + if err != nil { |
| 31 | + return nil, fmt.Errorf("Error starting test server %s", err) |
| 32 | + } |
| 33 | + eventServer := &MockEventServer{grpcServer: grpcServer} |
| 34 | + pb.RegisterEventsServer(grpcServer, eventServer) |
| 35 | + fmt.Printf("Starting test server\n") |
| 36 | + go grpcServer.Serve(lis) |
| 37 | + |
| 38 | + return eventServer, nil |
| 39 | +} |
| 40 | + |
| 41 | +// Chat for event chatting |
| 42 | +func (m *MockEventServer) Chat(srv pb.Events_ChatServer) error { |
| 43 | + m.server = srv |
| 44 | + m.channel = make(chan *pb.Event) |
| 45 | + in, _ := srv.Recv() |
| 46 | + evt := &pb.Event{} |
| 47 | + err := proto.Unmarshal(in.EventBytes, evt) |
| 48 | + if err != nil { |
| 49 | + return fmt.Errorf("error unmarshaling the event bytes in the SignedEvent: %s", err) |
| 50 | + } |
| 51 | + switch evt.Event.(type) { |
| 52 | + case *pb.Event_Register: |
| 53 | + srv.Send(&pb.Event{Event: &pb.Event_Register{Register: &pb.Register{}}}) |
| 54 | + } |
| 55 | + for { |
| 56 | + event := <-m.channel |
| 57 | + srv.Send(event) |
| 58 | + } |
| 59 | +} |
| 60 | + |
| 61 | +// SendMockEvent used for sending mock events to event server |
| 62 | +func (m *MockEventServer) SendMockEvent(event *pb.Event) { |
| 63 | + m.channel <- event |
| 64 | +} |
| 65 | + |
| 66 | +// Stop mock event |
| 67 | +func (m *MockEventServer) Stop() { |
| 68 | + m.grpcServer.Stop() |
| 69 | +} |
0 commit comments