github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/internal/peer/chaincode/upgrade_test.go (about)

     1  /*
     2  Copyright Digital Asset Holdings, LLC. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package chaincode
     8  
     9  import (
    10  	"errors"
    11  	"fmt"
    12  	"testing"
    13  	"time"
    14  
    15  	"github.com/hechain20/hechain/bccsp/sw"
    16  	"github.com/hechain20/hechain/internal/peer/common"
    17  	pb "github.com/hyperledger/fabric-protos-go/peer"
    18  	"github.com/spf13/viper"
    19  	"github.com/stretchr/testify/require"
    20  )
    21  
    22  func TestUpgradeCmd(t *testing.T) {
    23  	signer, err := common.GetDefaultSigner()
    24  	if err != nil {
    25  		t.Fatalf("Get default signer error: %v", err)
    26  	}
    27  
    28  	mockResponse := &pb.ProposalResponse{
    29  		Response:    &pb.Response{Status: 200},
    30  		Endorsement: &pb.Endorsement{},
    31  	}
    32  	mockEndorserClients := []pb.EndorserClient{common.GetMockEndorserClient(mockResponse, nil)}
    33  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    34  	mockCF := &ChaincodeCmdFactory{
    35  		EndorserClients: mockEndorserClients,
    36  		Signer:          signer,
    37  		BroadcastClient: mockBroadcastClient,
    38  	}
    39  
    40  	// reset channelID, it might have been set by previous test
    41  	channelID = ""
    42  
    43  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
    44  	require.NoError(t, err)
    45  	cmd := upgradeCmd(mockCF, cryptoProvider)
    46  	addFlags(cmd)
    47  
    48  	args := []string{
    49  		"-n", "mychaincode", "-p", "mychaincodepath",
    50  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}",
    51  	}
    52  	cmd.SetArgs(args)
    53  	err = cmd.Execute()
    54  	require.Error(t, err, "'peer chaincode upgrade' command should have failed without -C flag")
    55  
    56  	args = []string{
    57  		"-C", "mychannel", "-n", "mychaincode", "-p", "mychaincodepath",
    58  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}",
    59  	}
    60  	cmd.SetArgs(args)
    61  	err = cmd.Execute()
    62  	require.NoError(t, err, "'peer chaincode upgrade' command failed")
    63  }
    64  
    65  func TestUpgradeCmdEndorseFail(t *testing.T) {
    66  	signer, err := common.GetDefaultSigner()
    67  	if err != nil {
    68  		t.Fatalf("Get default signer error: %v", err)
    69  	}
    70  
    71  	errCode := int32(500)
    72  	errMsg := "upgrade error"
    73  	mockResponse := &pb.ProposalResponse{Response: &pb.Response{Status: errCode, Message: errMsg}}
    74  
    75  	mockEndorserClients := []pb.EndorserClient{common.GetMockEndorserClient(mockResponse, nil)}
    76  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    77  	mockCF := &ChaincodeCmdFactory{
    78  		EndorserClients: mockEndorserClients,
    79  		Signer:          signer,
    80  		BroadcastClient: mockBroadcastClient,
    81  	}
    82  
    83  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
    84  	require.NoError(t, err)
    85  	cmd := upgradeCmd(mockCF, cryptoProvider)
    86  	addFlags(cmd)
    87  
    88  	args := []string{
    89  		"-C", "mychannel", "-n", "mychaincode", "-p", "mychaincodepath",
    90  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}",
    91  	}
    92  	cmd.SetArgs(args)
    93  
    94  	expectErrMsg := fmt.Sprintf("could not assemble transaction, err proposal response was not successful, error code %d, msg %s", errCode, errMsg)
    95  	if err := cmd.Execute(); err == nil {
    96  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
    97  	} else {
    98  		if err.Error() != expectErrMsg {
    99  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   100  		}
   101  	}
   102  }
   103  
   104  func TestUpgradeCmdSendTXFail(t *testing.T) {
   105  	signer, err := common.GetDefaultSigner()
   106  	if err != nil {
   107  		t.Fatalf("Get default signer error: %v", err)
   108  	}
   109  
   110  	mockResponse := &pb.ProposalResponse{
   111  		Response:    &pb.Response{Status: 200},
   112  		Endorsement: &pb.Endorsement{},
   113  	}
   114  	mockEndorserClients := []pb.EndorserClient{common.GetMockEndorserClient(mockResponse, nil)}
   115  	sendErr := errors.New("send tx failed")
   116  	mockBroadcastClient := common.GetMockBroadcastClient(sendErr)
   117  	mockCF := &ChaincodeCmdFactory{
   118  		EndorserClients: mockEndorserClients,
   119  		Signer:          signer,
   120  		BroadcastClient: mockBroadcastClient,
   121  	}
   122  
   123  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
   124  	require.NoError(t, err)
   125  	cmd := upgradeCmd(mockCF, cryptoProvider)
   126  	addFlags(cmd)
   127  
   128  	args := []string{"-C", "mychannel", "-n", "mychaincode", "-p", "mychaincodepath", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   129  	cmd.SetArgs(args)
   130  
   131  	expectErrMsg := sendErr.Error()
   132  	if err := cmd.Execute(); err == nil {
   133  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   134  	} else {
   135  		if err.Error() != expectErrMsg {
   136  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   137  		}
   138  	}
   139  }
   140  
   141  func TestUpgradeCmdWithNilCF(t *testing.T) {
   142  	defer viper.Reset()
   143  	defer resetFlags()
   144  
   145  	// set timeout for failure cases
   146  	viper.Set("peer.client.connTimeout", 10*time.Millisecond)
   147  
   148  	// trap possible SIGSEV panic
   149  	defer func() {
   150  		var err error
   151  		if r := recover(); r != nil {
   152  			err = fmt.Errorf("%v", r)
   153  		}
   154  		require.NoError(t, err, "'peer chaincode upgrade' command should have failed without a panic")
   155  	}()
   156  
   157  	channelID = ""
   158  
   159  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
   160  	require.NoError(t, err)
   161  	cmd := upgradeCmd(nil, cryptoProvider)
   162  	addFlags(cmd)
   163  
   164  	args := []string{
   165  		"-C", "mychannel", "-n", "mychaincode", "-p", "mychaincodepath",
   166  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}",
   167  	}
   168  	cmd.SetArgs(args)
   169  	err = cmd.Execute()
   170  	require.Error(t, err, "'peer chaincode upgrade' command should have failed without a panic")
   171  }