github.com/adnan-c/fabric_e2e_couchdb@v0.6.1-preview.0.20170228180935-21ce6b23cf91/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  	"os"
    23  	"sync"
    24  	"testing"
    25  
    26  	"github.com/hyperledger/fabric/msp/mgmt/testtools"
    27  	"github.com/hyperledger/fabric/peer/common"
    28  	pb "github.com/hyperledger/fabric/protos/peer"
    29  )
    30  
    31  var once sync.Once
    32  
    33  // InitMSP init MSP
    34  func InitMSP() {
    35  	once.Do(initMSP)
    36  }
    37  
    38  func initMSP() {
    39  	// TODO: determine the location of this config file
    40  	var alternativeCfgPath = os.Getenv("PEER_CFG_PATH")
    41  	var mspMgrConfigDir string
    42  	if alternativeCfgPath != "" {
    43  		mspMgrConfigDir = alternativeCfgPath + "/msp/sampleconfig/"
    44  	} else if _, err := os.Stat("./msp/sampleconfig/"); err == nil {
    45  		mspMgrConfigDir = "./msp/sampleconfig/"
    46  	} else {
    47  		mspMgrConfigDir = os.Getenv("GOPATH") + "/src/github.com/hyperledger/fabric/msp/sampleconfig/"
    48  	}
    49  
    50  	err := msptesttools.LoadMSPSetupForTesting(mspMgrConfigDir)
    51  	if err != nil {
    52  		panic(fmt.Errorf("Fatal error when reading MSP config file %s: err %s\n", mspMgrConfigDir, err))
    53  	}
    54  }
    55  
    56  func TestUpgradeCmd(t *testing.T) {
    57  	InitMSP()
    58  
    59  	signer, err := common.GetDefaultSigner()
    60  	if err != nil {
    61  		t.Fatalf("Get default signer error: %v", err)
    62  	}
    63  
    64  	mockResponse := &pb.ProposalResponse{
    65  		Response:    &pb.Response{Status: 200},
    66  		Endorsement: &pb.Endorsement{},
    67  	}
    68  
    69  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    70  
    71  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
    72  
    73  	mockCF := &ChaincodeCmdFactory{
    74  		EndorserClient:  mockEndorerClient,
    75  		Signer:          signer,
    76  		BroadcastClient: mockBroadcastClient,
    77  	}
    78  
    79  	cmd := upgradeCmd(mockCF)
    80  	AddFlags(cmd)
    81  
    82  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
    83  	cmd.SetArgs(args)
    84  
    85  	if err := cmd.Execute(); err != nil {
    86  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
    87  	}
    88  }
    89  
    90  func TestUpgradeCmdEndorseFail(t *testing.T) {
    91  	InitMSP()
    92  
    93  	signer, err := common.GetDefaultSigner()
    94  	if err != nil {
    95  		t.Fatalf("Get default signer error: %v", err)
    96  	}
    97  
    98  	errCode := int32(500)
    99  	errMsg := "upgrade error"
   100  	mockResponse := &pb.ProposalResponse{Response: &pb.Response{Status: errCode, Message: errMsg}}
   101  
   102  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
   103  
   104  	mockBroadcastClient := common.GetMockBroadcastClient(nil)
   105  
   106  	mockCF := &ChaincodeCmdFactory{
   107  		EndorserClient:  mockEndorerClient,
   108  		Signer:          signer,
   109  		BroadcastClient: mockBroadcastClient,
   110  	}
   111  
   112  	cmd := upgradeCmd(mockCF)
   113  	AddFlags(cmd)
   114  
   115  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   116  	cmd.SetArgs(args)
   117  
   118  	expectErrMsg := fmt.Sprintf("Could not assemble transaction, err Proposal response was not successful, error code %d, msg %s", errCode, errMsg)
   119  	if err := cmd.Execute(); err == nil {
   120  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   121  	} else {
   122  		if err.Error() != expectErrMsg {
   123  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   124  		}
   125  	}
   126  }
   127  
   128  func TestUpgradeCmdSendTXFail(t *testing.T) {
   129  	InitMSP()
   130  
   131  	signer, err := common.GetDefaultSigner()
   132  	if err != nil {
   133  		t.Fatalf("Get default signer error: %v", err)
   134  	}
   135  
   136  	mockResponse := &pb.ProposalResponse{
   137  		Response:    &pb.Response{Status: 200},
   138  		Endorsement: &pb.Endorsement{},
   139  	}
   140  
   141  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
   142  
   143  	sendErr := errors.New("send tx failed")
   144  	mockBroadcastClient := common.GetMockBroadcastClient(sendErr)
   145  
   146  	mockCF := &ChaincodeCmdFactory{
   147  		EndorserClient:  mockEndorerClient,
   148  		Signer:          signer,
   149  		BroadcastClient: mockBroadcastClient,
   150  	}
   151  
   152  	cmd := upgradeCmd(mockCF)
   153  	AddFlags(cmd)
   154  
   155  	args := []string{"-n", "example02", "-p", "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02", "-v", "anotherversion", "-c", "{\"Function\":\"init\",\"Args\": [\"param\",\"1\"]}"}
   156  	cmd.SetArgs(args)
   157  
   158  	expectErrMsg := sendErr.Error()
   159  	if err := cmd.Execute(); err == nil {
   160  		t.Errorf("Run chaincode upgrade cmd error:%v", err)
   161  	} else {
   162  		if err.Error() != expectErrMsg {
   163  			t.Errorf("Run chaincode upgrade cmd get unexpected error: %s", err.Error())
   164  		}
   165  	}
   166  }