diff --git a/api/apiconfig/config.go b/api/apiconfig/config.go index 0b17a9624b..15dbbfca02 100644 --- a/api/apiconfig/config.go +++ b/api/apiconfig/config.go @@ -23,6 +23,7 @@ type Config interface { RandomOrdererConfig() (*OrdererConfig, error) OrdererConfig(name string) (*OrdererConfig, error) PeersConfig(org string) ([]PeerConfig, error) + PeerConfig(org string, name string) (*PeerConfig, error) NetworkConfig() (*NetworkConfig, error) IsTLSEnabled() bool SetTLSCACertPool(*x509.CertPool) diff --git a/api/apiconfig/mocks/mockconfig.gen.go b/api/apiconfig/mocks/mockconfig.gen.go index 3816ab9aa2..9df38c6a99 100644 --- a/api/apiconfig/mocks/mockconfig.gen.go +++ b/api/apiconfig/mocks/mockconfig.gen.go @@ -209,6 +209,19 @@ func (_mr *MockConfigMockRecorder) OrderersConfig() *gomock.Call { return _mr.mock.ctrl.RecordCall(_mr.mock, "OrderersConfig") } +// PeerConfig mocks base method +func (_m *MockConfig) PeerConfig(_param0 string, _param1 string) (*apiconfig.PeerConfig, error) { + ret := _m.ctrl.Call(_m, "PeerConfig", _param0, _param1) + ret0, _ := ret[0].(*apiconfig.PeerConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerConfig indicates an expected call of PeerConfig +func (_mr *MockConfigMockRecorder) PeerConfig(arg0, arg1 interface{}) *gomock.Call { + return _mr.mock.ctrl.RecordCall(_mr.mock, "PeerConfig", arg0, arg1) +} + // PeersConfig mocks base method func (_m *MockConfig) PeersConfig(_param0 string) ([]apiconfig.PeerConfig, error) { ret := _m.ctrl.Call(_m, "PeersConfig", _param0) diff --git a/pkg/config/config.go b/pkg/config/config.go index 64f21b9321..35186c569e 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -246,6 +246,21 @@ func (c *Config) PeersConfig(org string) ([]apiconfig.PeerConfig, error) { return peers, nil } +// PeerConfig Retrieves a specific peer from the configuration by org and name +func (c *Config) PeerConfig(org string, name string) (*apiconfig.PeerConfig, error) { + config, err := c.NetworkConfig() + if err != nil { + return nil, err + } + + peersConfig := config.Organizations[org].Peers + peerConfig := peersConfig[name] + peerConfig.TLS.Certificate = strings.Replace(peerConfig.TLS.Certificate, "$GOPATH", + os.Getenv("GOPATH"), -1) + + return &peerConfig, nil +} + // NetworkConfig returns the network configuration defined in the config file func (c *Config) NetworkConfig() (*apiconfig.NetworkConfig, error) { if c.networkConfigCached { diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 75c9aafd5a..0a2eb9154c 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -172,11 +172,17 @@ func TestCAConfigFailsByNetworkConfig(t *testing.T) { } //Testing PeersConfig failure scenario - pConfig, err := sampleConfig.PeersConfig("peerorg1") - if pConfig != nil || err == nil { + pConfigs, err := sampleConfig.PeersConfig("peerorg1") + if pConfigs != nil || err == nil { t.Fatal("Testing PeersConfig supposed to fail") } + //Testing PeersConfig failure scenario + pConfig, err := sampleConfig.PeerConfig("peerorg1", "peer1") + if pConfig != nil || err == nil { + t.Fatal("Testing PeerConfig supposed to fail") + } + //Set it back to valid one, otherwise other tests may fail myViper.Set("client.network", clientNetworks) } @@ -273,6 +279,21 @@ func TestPeersConfig(t *testing.T) { } +func TestPeerConfig(t *testing.T) { + pc, err := configImpl.PeerConfig(org1, "peer0") + if err != nil { + t.Fatalf(err.Error()) + } + + if pc.Host == "" { + t.Fatalf("Host value is empty") + } + + if !filepath.IsAbs(pc.TLS.Certificate) { + t.Fatalf("Expected cert path to be absolute") + } +} + func TestInitConfig(t *testing.T) { //Test init config //...Positive case diff --git a/pkg/fabric-ca-client/mocks/mockconfig.go b/pkg/fabric-ca-client/mocks/mockconfig.go index 7adb4e375a..211ccc0638 100644 --- a/pkg/fabric-ca-client/mocks/mockconfig.go +++ b/pkg/fabric-ca-client/mocks/mockconfig.go @@ -56,6 +56,11 @@ func (c *MockConfig) PeersConfig(org string) ([]apiconfig.PeerConfig, error) { return nil, nil } +// PeerConfig Retrieves a specific peer from the configuration by org and name +func (c *MockConfig) PeerConfig(org string, name string) (*apiconfig.PeerConfig, error) { + return nil, nil +} + // IsTLSEnabled ... func (c *MockConfig) IsTLSEnabled() bool { return false diff --git a/pkg/fabric-client/channel/channel.go b/pkg/fabric-client/channel/channel.go index 0af21267b6..8a28528010 100644 --- a/pkg/fabric-client/channel/channel.go +++ b/pkg/fabric-client/channel/channel.go @@ -137,7 +137,7 @@ func (c *Channel) PrimaryPeer() fab.Peer { // When no primary peer has been set default to the first peer // from map range - order is not guaranteed for _, peer := range c.peers { - logger.Infof("Primary peer was not set, using %s", peer.URL()) + logger.Debugf("Primary peer was not set, using %s", peer.URL()) return peer } diff --git a/pkg/fabric-client/client.go b/pkg/fabric-client/client.go index be55937dca..f1a4f26ed7 100644 --- a/pkg/fabric-client/client.go +++ b/pkg/fabric-client/client.go @@ -571,8 +571,11 @@ func (c *Client) queryBySystemChaincodeByTarget(chaincodeID string, fcn string, } responses, err := channel.QueryBySystemChaincode(request, c) + if err != nil { + return nil, fmt.Errorf("Error from QueryBySystemChaincode: %s", err) + } // we are only querying one peer hence one result - if err != nil || len(responses) != 1 { + if len(responses) != 1 { return nil, fmt.Errorf("QueryBySystemChaincode should have one result only - result number: %d", len(responses)) } diff --git a/pkg/fabric-client/mocks/mockconfig.go b/pkg/fabric-client/mocks/mockconfig.go index 838af88553..5b0f9da4e8 100644 --- a/pkg/fabric-client/mocks/mockconfig.go +++ b/pkg/fabric-client/mocks/mockconfig.go @@ -64,6 +64,11 @@ func (c *MockConfig) PeersConfig(org string) ([]config.PeerConfig, error) { return nil, nil } +// PeerConfig Retrieves a specific peer from the configuration by org and name +func (c *MockConfig) PeerConfig(org string, name string) (*config.PeerConfig, error) { + return nil, nil +} + // IsTLSEnabled ... func (c *MockConfig) IsTLSEnabled() bool { return c.tlsEnabled