github.com/ewagmig/fabric@v2.1.1+incompatible/core/ledger/kvledger/tests/missing_pvtdata_retrieval_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package tests 8 9 import ( 10 "testing" 11 12 "github.com/hyperledger/fabric/core/ledger" 13 "github.com/hyperledger/fabric/core/ledger/kvledger" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestGetMissingPvtDataAfterRollback(t *testing.T) { 18 env := newEnv(t) 19 defer env.cleanup() 20 env.initLedgerMgmt() 21 h := env.newTestHelperCreateLgr("ledger1", t) 22 23 collConf := []*collConf{{name: "coll1", btl: 5}} 24 25 // deploy cc1 with 'collConf' 26 h.simulateDeployTx("cc1", collConf) 27 h.cutBlockAndCommitLegacy() 28 29 // pvtdata simulation 30 h.simulateDataTx("", func(s *simulator) { 31 s.setPvtdata("cc1", "coll1", "key1", "value1") 32 }) 33 // another pvtdata simulation 34 h.simulateDataTx("", func(s *simulator) { 35 s.setPvtdata("cc1", "coll1", "key2", "value2") 36 }) 37 38 h.causeMissingPvtData(0) 39 blk2 := h.cutBlockAndCommitLegacy() 40 41 h.verifyPvtState("cc1", "coll1", "key2", "value2") // key2 should have been committed 42 h.simulateDataTx("", func(s *simulator) { 43 h.assertError(s.GetPrivateData("cc1", "coll1", "key1")) // key1 would be stale with respect to hashed version 44 }) 45 46 // verify missing pvtdata info 47 h.verifyBlockAndPvtDataSameAs(2, blk2) 48 expectedMissingPvtDataInfo := make(ledger.MissingPvtDataInfo) 49 expectedMissingPvtDataInfo.Add(2, 0, "cc1", "coll1") 50 h.verifyMissingPvtDataSameAs(2, expectedMissingPvtDataInfo) 51 52 // commit block 3 53 h.simulateDataTx("", func(s *simulator) { 54 s.setPvtdata("cc1", "coll1", "key3", "value2") 55 }) 56 blk3 := h.cutBlockAndCommitLegacy() 57 58 // commit block 4 59 h.simulateDataTx("", func(s *simulator) { 60 s.setPvtdata("cc1", "coll1", "key3", "value2") 61 }) 62 blk4 := h.cutBlockAndCommitLegacy() 63 64 // verify missing pvtdata info 65 h.verifyMissingPvtDataSameAs(5, expectedMissingPvtDataInfo) 66 67 // rollback ledger to block 2 68 h.verifyLedgerHeight(5) 69 env.closeLedgerMgmt() 70 err := kvledger.RollbackKVLedger(env.initializer.Config.RootFSPath, "ledger1", 2) 71 assert.NoError(t, err) 72 env.initLedgerMgmt() 73 74 h = env.newTestHelperOpenLgr("ledger1", t) 75 h.verifyLedgerHeight(3) 76 77 // verify block & pvtdata 78 h.verifyBlockAndPvtDataSameAs(2, blk2) 79 // when the pvtdata store is ahead of blockstore, 80 // missing pvtdata info for block 2 would not be returned. 81 h.verifyMissingPvtDataSameAs(5, nil) 82 83 // recommit block 3 84 assert.NoError(t, h.lgr.CommitLegacy(blk3, &ledger.CommitOptions{})) 85 // when the pvtdata store is ahead of blockstore, 86 // missing pvtdata info for block 2 would not be returned. 87 h.verifyMissingPvtDataSameAs(5, nil) 88 89 // recommit block 4 90 assert.NoError(t, h.lgr.CommitLegacy(blk4, &ledger.CommitOptions{})) 91 // once the pvtdata store and blockstore becomes equal, 92 // missing pvtdata info for block 2 would be returned. 93 h.verifyMissingPvtDataSameAs(5, expectedMissingPvtDataInfo) 94 }