@@ -23,6 +23,7 @@ import (
23
23
"github.com/hyperledger/fabric/common/configtx/test"
24
24
"github.com/hyperledger/fabric/common/ledger/testutil"
25
25
util2 "github.com/hyperledger/fabric/common/util"
26
+ "github.com/hyperledger/fabric/core/common/sysccprovider"
26
27
"github.com/hyperledger/fabric/core/ledger/ledgermgmt"
27
28
"github.com/hyperledger/fabric/core/ledger/util"
28
29
ledgerUtil "github.com/hyperledger/fabric/core/ledger/util"
@@ -38,7 +39,7 @@ import (
38
39
"github.com/stretchr/testify/assert"
39
40
)
40
41
41
- func TestFirstBlockValidation (t * testing.T ) {
42
+ func TestBlockValidation (t * testing.T ) {
42
43
viper .Set ("peer.fileSystemPath" , "/tmp/fabric/txvalidatortest" )
43
44
ledgermgmt .InitializeTestEnv ()
44
45
defer ledgermgmt .CleanupTestEnv ()
@@ -48,11 +49,11 @@ func TestFirstBlockValidation(t *testing.T) {
48
49
ledger , _ := ledgermgmt .CreateLedger (gb )
49
50
defer ledger .Close ()
50
51
51
- tValidator := & txValidator { & mocktxvalidator. Support { LedgerVal : ledger }, & validator. MockVsccValidator {}}
52
-
53
- bcInfo , _ := ledger . GetBlockchainInfo ()
54
- testutil . AssertEquals ( t , bcInfo , & common. BlockchainInfo {
55
- Height : 1 , CurrentBlockHash : gbHash , PreviousBlockHash : nil })
52
+ chaincodeIns := & sysccprovider. ChaincodeInstance {
53
+ ChaincodeName : "foo" ,
54
+ ChaincodeVersion : "v1" ,
55
+ ChainID : util2 . GetTestChainID (),
56
+ }
56
57
57
58
simulator , _ := ledger .NewTxSimulator ()
58
59
simulator .SetState ("ns1" , "key1" , []byte ("value1" ))
@@ -61,12 +62,50 @@ func TestFirstBlockValidation(t *testing.T) {
61
62
simulator .Done ()
62
63
63
64
simRes , _ := simulator .GetTxSimulationResults ()
65
+
66
+ prespPaylBytes , err := testutil .ConstructBytesProposalResponsePayload ("v1" , simRes )
67
+ if err != nil {
68
+ t .Fatalf ("Could not construct ProposalResponsePayload bytes, err: %s" , err )
69
+ }
70
+
71
+ mockVsccValidator := & validator.MockVsccValidator {
72
+ CIns : chaincodeIns ,
73
+ RespPayl : prespPaylBytes ,
74
+ }
75
+ tValidator := & txValidator {& mocktxvalidator.Support {LedgerVal : ledger }, mockVsccValidator }
76
+
77
+ bcInfo , _ := ledger .GetBlockchainInfo ()
78
+ testutil .AssertEquals (t , bcInfo , & common.BlockchainInfo {
79
+ Height : 1 , CurrentBlockHash : gbHash , PreviousBlockHash : nil })
80
+
64
81
block := testutil .ConstructBlock (t , 1 , gbHash , [][]byte {simRes }, true )
65
82
66
83
tValidator .Validate (block )
67
84
68
85
txsfltr := util .TxValidationFlags (block .Metadata .Metadata [common .BlockMetadataIndex_TRANSACTIONS_FILTER ])
69
86
assert .True (t , txsfltr .IsSetTo (0 , peer .TxValidationCode_VALID ))
87
+
88
+ // upgrade chaincode version
89
+ upgradeChaincodeIns := & sysccprovider.ChaincodeInstance {
90
+ ChaincodeName : "foo" ,
91
+ ChaincodeVersion : "v2" , // new version
92
+ ChainID : util2 .GetTestChainID (),
93
+ }
94
+
95
+ newMockVsccValidator := & validator.MockVsccValidator {
96
+ CIns : upgradeChaincodeIns ,
97
+ RespPayl : prespPaylBytes ,
98
+ }
99
+ newTxValidator := & txValidator {& mocktxvalidator.Support {LedgerVal : ledger }, newMockVsccValidator }
100
+
101
+ // generate new block
102
+ newBlock := testutil .ConstructBlock (t , 2 , block .Header .Hash (), [][]byte {simRes }, true ) // contains one tx with chaincode version v1
103
+
104
+ newTxValidator .Validate (newBlock )
105
+
106
+ // tx should be invalided because of chaincode upgrade
107
+ txsfltr = util .TxValidationFlags (newBlock .Metadata .Metadata [common .BlockMetadataIndex_TRANSACTIONS_FILTER ])
108
+ assert .True (t , txsfltr .IsSetTo (0 , peer .TxValidationCode_EXPIRED_CHAINCODE ))
70
109
}
71
110
72
111
func TestNewTxValidator_DuplicateTransactions (t * testing.T ) {
@@ -186,12 +225,12 @@ func TestGetTxCCInstance(t *testing.T) {
186
225
payload , err := utils .GetPayload (env )
187
226
assert .NoError (t , err )
188
227
189
- expectInvokeCCIns := & ChaincodeInstance {
228
+ expectInvokeCCIns := & sysccprovider. ChaincodeInstance {
190
229
ChainID : chainID ,
191
230
ChaincodeName : "lscc" ,
192
231
ChaincodeVersion : "" ,
193
232
}
194
- expectUpgradeCCIns := & ChaincodeInstance {
233
+ expectUpgradeCCIns := & sysccprovider. ChaincodeInstance {
195
234
ChainID : chainID ,
196
235
ChaincodeName : upgradeCCName ,
197
236
ChaincodeVersion : upgradeCCVersion ,
@@ -207,20 +246,20 @@ func TestGetTxCCInstance(t *testing.T) {
207
246
}
208
247
209
248
func TestInvalidTXsForUpgradeCC (t * testing.T ) {
210
- txsChaincodeNames := map [int ]* ChaincodeInstance {
211
- 0 : & ChaincodeInstance {"chain0" , "cc0" , "v0" }, // invoke cc0/chain0:v0, should not be affected by upgrade tx in other chain
212
- 1 : & ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
213
- 2 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v1, should be invalided by latter cc0/chain1 upgtade tx
214
- 3 : & ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
215
- 4 : & ChaincodeInstance {"chain1" , "cc0" , "v1" }, // invoke cc0/chain1:v1, should be invalided by cc1/chain1 upgrade tx
216
- 5 : & ChaincodeInstance {"chain1" , "cc1" , "v0" }, // invoke cc1/chain1:v0, should not be affected by other chaincode upgrade tx
217
- 6 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v2, should be invalided by latter cc0/chain1 upgtade tx
218
- 7 : & ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v3
219
- }
220
- upgradedChaincodes := map [int ]* ChaincodeInstance {
221
- 2 : & ChaincodeInstance {"chain1" , "cc0" , "v1" },
222
- 6 : & ChaincodeInstance {"chain1" , "cc0" , "v2" },
223
- 7 : & ChaincodeInstance {"chain1" , "cc0" , "v3" },
249
+ txsChaincodeNames := map [int ]* sysccprovider. ChaincodeInstance {
250
+ 0 : & sysccprovider. ChaincodeInstance {"chain0" , "cc0" , "v0" }, // invoke cc0/chain0:v0, should not be affected by upgrade tx in other chain
251
+ 1 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
252
+ 2 : & sysccprovider. ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v1, should be invalided by latter cc0/chain1 upgtade tx
253
+ 3 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v0" }, // invoke cc0/chain1:v0, should be invalided by cc1/chain1 upgrade tx
254
+ 4 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v1" }, // invoke cc0/chain1:v1, should be invalided by cc1/chain1 upgrade tx
255
+ 5 : & sysccprovider. ChaincodeInstance {"chain1" , "cc1" , "v0" }, // invoke cc1/chain1:v0, should not be affected by other chaincode upgrade tx
256
+ 6 : & sysccprovider. ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v2, should be invalided by latter cc0/chain1 upgtade tx
257
+ 7 : & sysccprovider. ChaincodeInstance {"chain1" , "lscc" , "" }, // upgrade cc0/chain1 to v3
258
+ }
259
+ upgradedChaincodes := map [int ]* sysccprovider. ChaincodeInstance {
260
+ 2 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v1" },
261
+ 6 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v2" },
262
+ 7 : & sysccprovider. ChaincodeInstance {"chain1" , "cc0" , "v3" },
224
263
}
225
264
226
265
txsfltr := ledgerUtil .NewTxValidationFlags (8 )
@@ -235,12 +274,12 @@ func TestInvalidTXsForUpgradeCC(t *testing.T) {
235
274
236
275
expectTxsFltr := ledgerUtil .NewTxValidationFlags (8 )
237
276
expectTxsFltr .SetFlag (0 , peer .TxValidationCode_VALID )
238
- expectTxsFltr .SetFlag (1 , peer .TxValidationCode_EXPIRED_CHAINCODE )
239
- expectTxsFltr .SetFlag (2 , peer .TxValidationCode_EXPIRED_CHAINCODE )
240
- expectTxsFltr .SetFlag (3 , peer .TxValidationCode_EXPIRED_CHAINCODE )
241
- expectTxsFltr .SetFlag (4 , peer .TxValidationCode_EXPIRED_CHAINCODE )
277
+ expectTxsFltr .SetFlag (1 , peer .TxValidationCode_CHAINCODE_VERSION_CONFLICT )
278
+ expectTxsFltr .SetFlag (2 , peer .TxValidationCode_CHAINCODE_VERSION_CONFLICT )
279
+ expectTxsFltr .SetFlag (3 , peer .TxValidationCode_CHAINCODE_VERSION_CONFLICT )
280
+ expectTxsFltr .SetFlag (4 , peer .TxValidationCode_CHAINCODE_VERSION_CONFLICT )
242
281
expectTxsFltr .SetFlag (5 , peer .TxValidationCode_VALID )
243
- expectTxsFltr .SetFlag (6 , peer .TxValidationCode_EXPIRED_CHAINCODE )
282
+ expectTxsFltr .SetFlag (6 , peer .TxValidationCode_CHAINCODE_VERSION_CONFLICT )
244
283
expectTxsFltr .SetFlag (7 , peer .TxValidationCode_VALID )
245
284
246
285
tValidator := & txValidator {}
0 commit comments