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 }