188 lines
5.9 KiB
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")
|
|
})
|
|
}
|