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 }