60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package scc
|
|
|
|
import (
|
|
"testing"
|
|
|
|
pb "github.com/hyperledger/fabric-protos-go/peer"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSend(t *testing.T) {
|
|
ch := make(chan *pb.ChaincodeMessage)
|
|
|
|
stream := newInProcStream(ch, ch)
|
|
|
|
// good send (non-blocking send and receive)
|
|
msg := &pb.ChaincodeMessage{}
|
|
go stream.Send(msg)
|
|
msg2, _ := stream.Recv()
|
|
require.Equal(t, msg, msg2, "send != recv")
|
|
|
|
// close the channel
|
|
close(ch)
|
|
|
|
// bad send, should panic, unblock and return error
|
|
err := stream.Send(msg)
|
|
require.NotNil(t, err, "should have errored on panic")
|
|
}
|
|
|
|
func TestRecvChannelClosedError(t *testing.T) {
|
|
ch := make(chan *pb.ChaincodeMessage)
|
|
|
|
stream := newInProcStream(ch, ch)
|
|
|
|
// Close the channel
|
|
close(ch)
|
|
|
|
// Trying to call a closed receive channel should return an error
|
|
_, err := stream.Recv()
|
|
require.Error(t, err, "Should return an error")
|
|
require.Contains(t, err.Error(), "channel is closed")
|
|
}
|
|
|
|
func TestCloseSend(t *testing.T) {
|
|
send := make(chan *pb.ChaincodeMessage)
|
|
recv := make(chan *pb.ChaincodeMessage)
|
|
|
|
stream := newInProcStream(recv, send)
|
|
stream.CloseSend()
|
|
|
|
_, ok := <-send
|
|
require.False(t, ok, "send channel should be closed")
|
|
require.NotPanics(t, func() { stream.CloseSend() }, "CloseSend should be idempotent")
|
|
}
|