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  }