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 }