go_study/fabric-main/internal/peer/lifecycle/chaincode/client_connections_test.go

188 lines
5.9 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode
import (
"testing"
"github.com/hyperledger/fabric/bccsp/sw"
"github.com/stretchr/testify/require"
)
func TestNewClientConnections(t *testing.T) {
require := require.New(t)
cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
require.Nil(err)
t.Run("bad connection profile", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile-bad.yaml",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to validate peer connection parameters: error unmarshalling YAML")
})
t.Run("uneven connection profile", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "commit",
ChannelID: "mychannel",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile-uneven.yaml",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.EqualError(err, "failed to validate peer connection parameters: peer 'peer0.org2.example.com' doesn't have associated peer config")
})
t.Run("good connection profile - two peers", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "approveformyorg",
ChannelID: "mychannel",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile.yaml",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to retrieve endorser client")
})
t.Run("more than one peer not allowed", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
PeerAddresses: []string{"testing123", "testing321"},
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.EqualError(err, "failed to validate peer connection parameters: 'install' command supports one peer. 2 peers provided")
})
t.Run("more TLS root cert files than peer addresses and TLS enabled", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
PeerAddresses: []string{"testing123"},
TLSRootCertFiles: []string{"123testing", "321testing"},
TLSEnabled: true,
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.EqualError(err, "failed to validate peer connection parameters: number of peer addresses (1) does not match the number of TLS root cert files (2)")
})
t.Run("failure connecting to endorser - TLS enabled", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
PeerAddresses: []string{"testing123"},
TLSRootCertFiles: []string{"123testing"},
TLSEnabled: true,
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to retrieve endorser client")
})
t.Run("failure connecting to endorser - TLS disabled", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
PeerAddresses: []string{"testing123"},
TLSRootCertFiles: []string{"123testing"},
TLSEnabled: false,
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to retrieve endorser client")
})
t.Run("no endorser clients - programming bug", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "no endorser clients retrieved")
})
t.Run("install using connection profile", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile.yaml",
TargetPeer: "peer0.org2.example.com",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to retrieve endorser client")
})
t.Run("install using connection profile - no target peer specified", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile.yaml",
TargetPeer: "",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to validate peer connection parameters: --targetPeer must be specified for channel-less operation using connection profile")
})
t.Run("install using connection profile - target peer doesn't exist", func(t *testing.T) {
input := &ClientConnectionsInput{
CommandName: "install",
EndorserRequired: true,
ConnectionProfilePath: "testdata/connectionprofile.yaml",
TargetPeer: "not-a-peer",
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "failed to validate peer connection parameters: peer 'not-a-peer' doesn't have associated peer config")
})
t.Run("failure connecting to orderer", func(t *testing.T) {
input := &ClientConnectionsInput{
OrdererRequired: true,
OrderingEndpoint: "testing",
PeerAddresses: []string{"testing123"},
TLSRootCertFiles: []string{"123testing"},
}
c, err := NewClientConnections(input, cryptoProvider)
require.Nil(c)
require.Error(err)
require.Contains(err.Error(), "cannot obtain orderer endpoint, empty endorser list")
})
}