github.com/kchristidis/fabric@v1.0.4-0.20171028114726-837acd08cde1/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",
    71  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
    72  	cmd.SetArgs(args)
    73  
    74  	if err := cmd.Execute(); err != nil {
    75  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
    76  	}
    77  }
    78  
    79  func TestUpgradeCmdEndorseFail(t *testing.T) {
    80  	InitMSP()
    81  
    82  	signer, err := common.GetDefaultSigner()
    83  	if err != nil {
    84  		t.Fatalf("Get default signer error: %v", err)
    85  	}
    86  
    87  	errCode := int32(500)
    88  	errMsg := "upgrade error"
    89  	mockResponse := &pb.ProposalResponse{Response: &pb.Response{Status: errCode, Message: errMsg}}
    90  
    91  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    92  
    93  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    94  
    95  	mockCF := &ChaincodeCmdFactory{
    96  		EndorserClient:  mockEndorerClient,
    97  		Signer:          signer,
    98  		BroadcastClient: mockBroadcastClient,
    99  	}
   100  
   101  	cmd := upgradeCmd(mockCF)
   102  	addFlags(cmd)
   103  
   104  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02",
   105  		"-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   106  	cmd.SetArgs(args)
   107  
   108  	expectErrMsg := fmt.Sprintf("Could not assemble transaction, err Proposal response was not successful, error code %d, msg %s", errCode, errMsg)
   109  	if err := cmd.Execute(); err == nil {
   110  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   111  	} else {
   112  		if err.Error() != expectErrMsg {
   113  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   114  		}
   115  	}
   116  }
   117  
   118  func TestUpgradeCmdSendTXFail(t *testing.T) {
   119  	InitMSP()
   120  
   121  	signer, err := common.GetDefaultSigner()
   122  	if err != nil {
   123  		t.Fatalf("Get default signer error: %v", err)
   124  	}
   125  
   126  	mockResponse := &pb.ProposalResponse{
   127  		Response:    &pb.Response{Status: 200},
   128  		Endorsement: &pb.Endorsement{},
   129  	}
   130  
   131  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
   132  
   133  	sendErr := errors.New("send tx failed")
   134  	mockBroadcastClient := common.GetMockBroadcastClient(sendErr)
   135  
   136  	mockCF := &ChaincodeCmdFactory{
   137  		EndorserClient:  mockEndorerClient,
   138  		Signer:          signer,
   139  		BroadcastClient: mockBroadcastClient,
   140  	}
   141  
   142  	cmd := upgradeCmd(mockCF)
   143  	addFlags(cmd)
   144  
   145  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   146  	cmd.SetArgs(args)
   147  
   148  	expectErrMsg := sendErr.Error()
   149  	if err := cmd.Execute(); err == nil {
   150  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   151  	} else {
   152  		if err.Error() != expectErrMsg {
   153  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   154  		}
   155  	}
   156  }