github.com/kaituanwang/hyperledger@v2.0.1+incompatible/discovery/cmd/config_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package discovery_test 8 9 import ( 10 "bytes" 11 "fmt" 12 "testing" 13 14 . "github.com/hyperledger/fabric-protos-go/discovery" 15 "github.com/hyperledger/fabric-protos-go/msp" 16 "github.com/hyperledger/fabric/cmd/common" 17 discovery "github.com/hyperledger/fabric/discovery/cmd" 18 "github.com/hyperledger/fabric/discovery/cmd/mocks" 19 "github.com/pkg/errors" 20 "github.com/stretchr/testify/assert" 21 "github.com/stretchr/testify/mock" 22 ) 23 24 func TestConfigCmd(t *testing.T) { 25 server := "peer0" 26 channel := "mychannel" 27 stub := &mocks.Stub{} 28 parser := &mocks.ResponseParser{} 29 cmd := discovery.NewConfigCmd(stub, parser) 30 31 t.Run("no server supplied", func(t *testing.T) { 32 cmd.SetChannel(&channel) 33 cmd.SetServer(nil) 34 35 err := cmd.Execute(common.Config{}) 36 assert.Equal(t, err.Error(), "no server specified") 37 }) 38 39 t.Run("no channel supplied", func(t *testing.T) { 40 cmd.SetChannel(nil) 41 cmd.SetServer(&server) 42 43 err := cmd.Execute(common.Config{}) 44 assert.Equal(t, err.Error(), "no channel specified") 45 }) 46 47 t.Run("Server return error", func(t *testing.T) { 48 cmd.SetChannel(&channel) 49 cmd.SetServer(&server) 50 51 stub.On("Send", server, mock.Anything, mock.Anything).Return(nil, errors.New("deadline exceeded")).Once() 52 err := cmd.Execute(common.Config{}) 53 assert.Contains(t, err.Error(), "deadline exceeded") 54 }) 55 56 t.Run("Config query", func(t *testing.T) { 57 cmd.SetServer(&server) 58 cmd.SetChannel(&channel) 59 stub.On("Send", server, mock.Anything, mock.Anything).Return(nil, nil).Once() 60 cmd.SetServer(&server) 61 parser.On("ParseResponse", channel, mock.Anything).Return(nil) 62 63 err := cmd.Execute(common.Config{}) 64 assert.NoError(t, err) 65 }) 66 } 67 68 func TestParseConfigResponse(t *testing.T) { 69 buff := &bytes.Buffer{} 70 parser := &discovery.ConfigResponseParser{Writer: buff} 71 res := &mocks.ServiceResponse{} 72 chanRes := &mocks.ChannelResponse{} 73 74 t.Run("Failure", func(t *testing.T) { 75 76 chanRes.On("Config").Return(nil, errors.New("not found")).Once() 77 res.On("ForChannel", "mychannel").Return(chanRes) 78 err := parser.ParseResponse("mychannel", res) 79 assert.Contains(t, err.Error(), "not found") 80 }) 81 82 t.Run("Success", func(t *testing.T) { 83 chanRes.On("Config").Return(&ConfigResult{ 84 Msps: map[string]*msp.FabricMSPConfig{ 85 "Org1MSP": nil, 86 "Org2MSP": nil, 87 }, 88 Orderers: map[string]*Endpoints{ 89 "OrdererMSP": {Endpoint: []*Endpoint{ 90 {Host: "orderer1", Port: 7050}, 91 }}, 92 }, 93 }, nil).Once() 94 res.On("ForChannel", "mychannel").Return(chanRes) 95 96 err := parser.ParseResponse("mychannel", res) 97 assert.NoError(t, err) 98 expected := "{\n\t\"msps\": {\n\t\t\"Org1MSP\": null,\n\t\t\"Org2MSP\": null\n\t},\n\t\"orderers\": {\n\t\t\"OrdererMSP\": {\n\t\t\t\"endpoint\": [\n\t\t\t\t{\n\t\t\t\t\t\"host\": \"orderer1\",\n\t\t\t\t\t\"port\": 7050\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}" 99 assert.Equal(t, fmt.Sprintf("%s\n", expected), buff.String()) 100 }) 101 }