@@ -24,8 +24,12 @@ import (
24
24
util2 "github.com/hyperledger/fabric/common/util"
25
25
"github.com/hyperledger/fabric/core/ledger/ledgermgmt"
26
26
"github.com/hyperledger/fabric/core/ledger/util"
27
+ ledgerUtil "github.com/hyperledger/fabric/core/ledger/util"
27
28
mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator"
28
29
"github.com/hyperledger/fabric/core/mocks/validator"
30
+ "github.com/hyperledger/fabric/msp"
31
+ mspmgmt "github.com/hyperledger/fabric/msp/mgmt"
32
+ msptesttools "github.com/hyperledger/fabric/msp/mgmt/testtools"
29
33
"github.com/hyperledger/fabric/protos/common"
30
34
"github.com/hyperledger/fabric/protos/peer"
31
35
"github.com/hyperledger/fabric/protos/utils"
@@ -70,7 +74,7 @@ func TestNewTxValidator_DuplicateTransactions(t *testing.T) {
70
74
71
75
tValidator := & txValidator {& mocktxvalidator.Support {LedgerVal : ledger }, & validator.MockVsccValidator {}}
72
76
73
- // Create simeple endorsement transaction
77
+ // Create simple endorsement transaction
74
78
payload := & common.Payload {
75
79
Header : & common.Header {
76
80
ChannelHeader : utils .MarshalOrPanic (& common.ChannelHeader {
@@ -121,3 +125,120 @@ func TestNewTxValidator_DuplicateTransactions(t *testing.T) {
121
125
txsfltr := util .TxValidationFlags (block .Metadata .Metadata [common .BlockMetadataIndex_TRANSACTIONS_FILTER ])
122
126
assert .True (t , txsfltr .IsInvalid (0 ))
123
127
}
128
+
129
+ func createCCUpgradeEnvelope (chainID , chaincodeName , chaincodeVersion string , signer msp.SigningIdentity ) (* common.Envelope , error ) {
130
+ creator , err := signer .Serialize ()
131
+ if err != nil {
132
+ return nil , err
133
+ }
134
+
135
+ spec := & peer.ChaincodeSpec {
136
+ Type : peer .ChaincodeSpec_Type (peer .ChaincodeSpec_Type_value ["GOLANG" ]),
137
+ ChaincodeId : & peer.ChaincodeID {
138
+ Path : "github.com/codePath" ,
139
+ Name : chaincodeName ,
140
+ Version : chaincodeVersion ,
141
+ },
142
+ }
143
+
144
+ cds := & peer.ChaincodeDeploymentSpec {ChaincodeSpec : spec , CodePackage : []byte {}}
145
+ prop , _ , err := utils .CreateUpgradeProposalFromCDS (chainID , cds , creator , []byte {}, []byte {}, []byte {})
146
+ if err != nil {
147
+ return nil , err
148
+ }
149
+
150
+ proposalResponse := & peer.ProposalResponse {
151
+ Response : & peer.Response {
152
+ Status : 200 , // endorsed successfully
153
+ },
154
+ Endorsement : & peer.Endorsement {},
155
+ }
156
+
157
+ return utils .CreateSignedTx (prop , signer , proposalResponse )
158
+ }
159
+
160
+ func TestGetTxCCInstance (t * testing.T ) {
161
+ // setup the MSP manager so that we can sign/verify
162
+ mspMgrConfigDir := "../../../msp/sampleconfig/"
163
+ err := msptesttools .LoadMSPSetupForTesting (mspMgrConfigDir )
164
+ if err != nil {
165
+ t .Fatalf ("Could not initialize msp, err: %s" , err )
166
+ }
167
+ signer , err := mspmgmt .GetLocalMSP ().GetDefaultSigningIdentity ()
168
+ if err != nil {
169
+ t .Fatalf ("Could not initialize signer, err: %s" , err )
170
+ }
171
+
172
+ chainID := util2 .GetTestChainID ()
173
+ upgradeCCName := "mycc"
174
+ upgradeCCVersion := "v1"
175
+
176
+ env , err := createCCUpgradeEnvelope (chainID , upgradeCCName , upgradeCCVersion , signer )
177
+ assert .NoError (t , err )
178
+
179
+ // get the payload from the envelope
180
+ payload , err := utils .GetPayload (env )
181
+ assert .NoError (t , err )
182
+
183
+ expectInvokeCCIns := & ChaincodeInstance {
184
+ ChainID : chainID ,
185
+ ChaincodeName : "lscc" ,
186
+ ChaincodeVersion : "" ,
187
+ }
188
+ expectUpgradeCCIns := & ChaincodeInstance {
189
+ ChainID : chainID ,
190
+ ChaincodeName : upgradeCCName ,
191
+ ChaincodeVersion : upgradeCCVersion ,
192
+ }
193
+
194
+ tValidator := & txValidator {}
195
+ invokeCCIns , upgradeCCIns , err := tValidator .getTxCCInstance (payload )
196
+ if err != nil {
197
+ t .Fatalf ("Get chaincode from tx error: %s" , err )
198
+ }
199
+ assert .EqualValues (t , expectInvokeCCIns , invokeCCIns )
200
+ assert .EqualValues (t , expectUpgradeCCIns , upgradeCCIns )
201
+ }
202
+
203
+ func TestInvalidTXsForUpgradeCC (t * testing.T ) {
204
+ txsChaincodeNames := map [int ]* ChaincodeInstance {
205
+ 0 : & ChaincodeInstance {"chain0" , "cc0" , "v0" }, // invoke cc0/chain0:v0, should not be affected by upgrade tx in other chain
206
+ 1 : & ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
207
+ 2 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v1, should be invalided by latter cc0/chain1 upgtade tx
208
+ 3 : & ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
209
+ 4 : & ChaincodeInstance {"chain1" , "cc0" , "v1" }, // invoke cc0/chain1:v1, should be invalided by cc1/chain1 upgrade tx
210
+ 5 : & ChaincodeInstance {"chain1" , "cc1" , "v0" }, // invoke cc1/chain1:v0, should not be affected by other chaincode upgrade tx
211
+ 6 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v2, should be invalided by latter cc0/chain1 upgtade tx
212
+ 7 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v3
213
+ }
214
+ upgradedChaincodes := map [int ]* ChaincodeInstance {
215
+ 2 : & ChaincodeInstance {"chain1" , "cc0" , "v1" },
216
+ 6 : & ChaincodeInstance {"chain1" , "cc0" , "v2" },
217
+ 7 : & ChaincodeInstance {"chain1" , "cc0" , "v3" },
218
+ }
219
+
220
+ txsfltr := ledgerUtil .NewTxValidationFlags (8 )
221
+ txsfltr .SetFlag (0 , peer .TxValidationCode_VALID )
222
+ txsfltr .SetFlag (1 , peer .TxValidationCode_VALID )
223
+ txsfltr .SetFlag (2 , peer .TxValidationCode_VALID )
224
+ txsfltr .SetFlag (3 , peer .TxValidationCode_VALID )
225
+ txsfltr .SetFlag (4 , peer .TxValidationCode_VALID )
226
+ txsfltr .SetFlag (5 , peer .TxValidationCode_VALID )
227
+ txsfltr .SetFlag (6 , peer .TxValidationCode_VALID )
228
+ txsfltr .SetFlag (7 , peer .TxValidationCode_VALID )
229
+
230
+ expectTxsFltr := ledgerUtil .NewTxValidationFlags (8 )
231
+ expectTxsFltr .SetFlag (0 , peer .TxValidationCode_VALID )
232
+ expectTxsFltr .SetFlag (1 , peer .TxValidationCode_EXPIRED_CHAINCODE )
233
+ expectTxsFltr .SetFlag (2 , peer .TxValidationCode_EXPIRED_CHAINCODE )
234
+ expectTxsFltr .SetFlag (3 , peer .TxValidationCode_EXPIRED_CHAINCODE )
235
+ expectTxsFltr .SetFlag (4 , peer .TxValidationCode_EXPIRED_CHAINCODE )
236
+ expectTxsFltr .SetFlag (5 , peer .TxValidationCode_VALID )
237
+ expectTxsFltr .SetFlag (6 , peer .TxValidationCode_EXPIRED_CHAINCODE )
238
+ expectTxsFltr .SetFlag (7 , peer .TxValidationCode_VALID )
239
+
240
+ tValidator := & txValidator {}
241
+ finalfltr := tValidator .invalidTXsForUpgradeCC (txsChaincodeNames , upgradedChaincodes , txsfltr )
242
+
243
+ assert .EqualValues (t , expectTxsFltr , finalfltr )
244
+ }
0 commit comments