github.com/leonlxy/hyperledger@v1.0.0-alpha.0.20170427033203-34922035d248/peer/chaincode/upgrade_test.go (about)

     1  /*
     2   Copyright Digital Asset Holdings, LLC 2016 All Rights Reserved.
     3  
     4   Licensed under the Apache License, Version 2.0 (the "License");
     5   you may not use this file except in compliance with the License.
     6   You may obtain a copy of the License at
     7  
     8        http://www.apache.org/licenses/LICENSE-2.0
     9  
    10   Unless required by applicable law or agreed to in writing, software
    11   distributed under the License is distributed on an "AS IS" BASIS,
    12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   See the License for the specific language governing permissions and
    14   limitations under the License.
    15  */
    16  
    17  package chaincode
    18  
    19  import (
    20  	"errors"
    21  	"fmt"
    22  	"sync"
    23  	"testing"
    24  
    25  	"github.com/hyperledger/fabric/msp/mgmt/testtools"
    26  	"github.com/hyperledger/fabric/peer/common"
    27  	pb "github.com/hyperledger/fabric/protos/peer"
    28  )
    29  
    30  var once sync.Once
    31  
    32  // InitMSP init MSP
    33  func InitMSP() {
    34  	once.Do(initMSP)
    35  }
    36  
    37  func initMSP() {
    38  	err := msptesttools.LoadMSPSetupForTesting()
    39  	if err != nil {
    40  		panic(fmt.Errorf("Fatal error when reading MSP config: %s\n", err))
    41  	}
    42  }
    43  
    44  func TestUpgradeCmd(t *testing.T) {
    45  	InitMSP()
    46  
    47  	signer, err := common.GetDefaultSigner()
    48  	if err != nil {
    49  		t.Fatalf("Get default signer error: %v", err)
    50  	}
    51  
    52  	mockResponse := &pb.ProposalResponse{
    53  		Response:    &pb.Response{Status: 200},
    54  		Endorsement: &pb.Endorsement{},
    55  	}
    56  
    57  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    58  
    59  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    60  
    61  	mockCF := &ChaincodeCmdFactory{
    62  		EndorserClient:  mockEndorerClient,
    63  		Signer:          signer,
    64  		BroadcastClient: mockBroadcastClient,
    65  	}
    66  
    67  	cmd := upgradeCmd(mockCF)
    68  	AddFlags(cmd)
    69  
    70  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
    71  	cmd.SetArgs(args)
    72  
    73  	if err := cmd.Execute(); err != nil {
    74  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
    75  	}
    76  }
    77  
    78  func TestUpgradeCmdEndorseFail(t *testing.T) {
    79  	InitMSP()
    80  
    81  	signer, err := common.GetDefaultSigner()
    82  	if err != nil {
    83  		t.Fatalf("Get default signer error: %v", err)
    84  	}
    85  
    86  	errCode := int32(500)
    87  	errMsg := "upgrade error"
    88  	mockResponse := &pb.ProposalResponse{Response: &pb.Response{Status: errCode, Message: errMsg}}
    89  
    90  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    91  
    92  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    93  
    94  	mockCF := &ChaincodeCmdFactory{
    95  		EndorserClient:  mockEndorerClient,
    96  		Signer:          signer,
    97  		BroadcastClient: mockBroadcastClient,
    98  	}
    99  
   100  	cmd := upgradeCmd(mockCF)
   101  	AddFlags(cmd)
   102  
   103  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   104  	cmd.SetArgs(args)
   105  
   106  	expectErrMsg := fmt.Sprintf("Could not assemble transaction, err Proposal response was not successful, error code %d, msg %s", errCode, errMsg)
   107  	if err := cmd.Execute(); err == nil {
   108  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   109  	} else {
   110  		if err.Error() != expectErrMsg {
   111  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   112  		}
   113  	}
   114  }
   115  
   116  func TestUpgradeCmdSendTXFail(t *testing.T) {
   117  	InitMSP()
   118  
   119  	signer, err := common.GetDefaultSigner()
   120  	if err != nil {
   121  		t.Fatalf("Get default signer error: %v", err)
   122  	}
   123  
   124  	mockResponse := &pb.ProposalResponse{
   125  		Response:    &pb.Response{Status: 200},
   126  		Endorsement: &pb.Endorsement{},
   127  	}
   128  
   129  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
   130  
   131  	sendErr := errors.New("send tx failed")
   132  	mockBroadcastClient := common.GetMockBroadcastClient(sendErr)
   133  
   134  	mockCF := &ChaincodeCmdFactory{
   135  		EndorserClient:  mockEndorerClient,
   136  		Signer:          signer,
   137  		BroadcastClient: mockBroadcastClient,
   138  	}
   139  
   140  	cmd := upgradeCmd(mockCF)
   141  	AddFlags(cmd)
   142  
   143  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   144  	cmd.SetArgs(args)
   145  
   146  	expectErrMsg := sendErr.Error()
   147  	if err := cmd.Execute(); err == nil {
   148  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   149  	} else {
   150  		if err.Error() != expectErrMsg {
   151  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   152  		}
   153  	}
   154  }