github.com/anjalikarhana/fabric@v2.1.1+incompatible/core/chaincode/transaction_context_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package chaincode_test 8 9 import ( 10 "fmt" 11 12 "github.com/hyperledger/fabric/core/chaincode" 13 "github.com/hyperledger/fabric/core/chaincode/mock" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 ) 17 18 var _ = Describe("TransactionContext", func() { 19 var ( 20 resultsIterator *mock.QueryResultsIterator 21 transactionContext *chaincode.TransactionContext 22 ) 23 24 BeforeEach(func() { 25 resultsIterator = &mock.QueryResultsIterator{} 26 transactionContext = &chaincode.TransactionContext{} 27 }) 28 29 Describe("InitializeQueryContext", func() { 30 var iter1, iter2 *mock.QueryResultsIterator 31 32 BeforeEach(func() { 33 iter1 = &mock.QueryResultsIterator{} 34 iter2 = &mock.QueryResultsIterator{} 35 }) 36 37 It("stores a references to the results iterator", func() { 38 transactionContext.InitializeQueryContext("query-id-1", iter1) 39 transactionContext.InitializeQueryContext("query-id-2", iter2) 40 41 iter := transactionContext.GetQueryIterator("query-id-1") 42 Expect(iter).To(Equal(iter1)) 43 iter = transactionContext.GetQueryIterator("query-id-2") 44 Expect(iter).To(Equal(iter2)) 45 }) 46 47 It("populates a pending query result", func() { 48 transactionContext.InitializeQueryContext("query-id", iter1) 49 pqr := transactionContext.GetPendingQueryResult("query-id") 50 51 Expect(pqr).To(Equal(&chaincode.PendingQueryResult{})) 52 }) 53 54 It("populates a total return count", func() { 55 transactionContext.InitializeQueryContext("query-id", iter1) 56 count := transactionContext.GetTotalReturnCount("query-id") 57 58 Expect(*count).To(Equal(int32(0))) 59 }) 60 }) 61 62 Describe("GetQueryIterator", func() { 63 It("returns the results iteraterator provided to initialize query context", func() { 64 transactionContext.InitializeQueryContext("query-id", resultsIterator) 65 iter := transactionContext.GetQueryIterator("query-id") 66 Expect(iter).To(Equal(resultsIterator)) 67 68 transactionContext.InitializeQueryContext("query-with-nil", nil) 69 iter = transactionContext.GetQueryIterator("query-with-nil") 70 Expect(iter).To(BeNil()) 71 }) 72 73 Context("when an unknown query id is used", func() { 74 It("returns a nil query iterator", func() { 75 iter := transactionContext.GetQueryIterator("unknown-id") 76 Expect(iter).To(BeNil()) 77 }) 78 }) 79 }) 80 81 Describe("GetPendingQueryResult", func() { 82 Context("when a query context has been initialized", func() { 83 BeforeEach(func() { 84 transactionContext.InitializeQueryContext("query-id", nil) 85 }) 86 87 It("returns a non-nil pending query result", func() { 88 pqr := transactionContext.GetPendingQueryResult("query-id") 89 Expect(pqr).To(Equal(&chaincode.PendingQueryResult{})) 90 }) 91 }) 92 93 Context("when a query context has not been initialized", func() { 94 It("returns a nil pending query result", func() { 95 pqr := transactionContext.GetPendingQueryResult("query-id") 96 Expect(pqr).To(BeNil()) 97 }) 98 }) 99 }) 100 101 Describe("GetPendingTotalRecordCount", func() { 102 Context("when a query context has been initialized", func() { 103 BeforeEach(func() { 104 transactionContext.InitializeQueryContext("query-id", nil) 105 }) 106 107 It("returns a non-nil total record count", func() { 108 retCount := transactionContext.GetTotalReturnCount("query-id") 109 Expect(*retCount).To(Equal(int32(0))) 110 }) 111 }) 112 113 Context("when a query context has not been initialized", func() { 114 It("returns a nil total return count", func() { 115 retCount := transactionContext.GetTotalReturnCount("query-id") 116 Expect(retCount).To(BeNil()) 117 }) 118 }) 119 }) 120 121 Describe("CleanupQueryContext", func() { 122 It("removes references to the the iterator and results", func() { 123 transactionContext.InitializeQueryContext("query-id", resultsIterator) 124 transactionContext.CleanupQueryContext("query-id") 125 126 iter := transactionContext.GetQueryIterator("query-id") 127 Expect(iter).To(BeNil()) 128 pqr := transactionContext.GetPendingQueryResult("query-id") 129 Expect(pqr).To(BeNil()) 130 retCount := transactionContext.GetTotalReturnCount("query-id") 131 Expect(retCount).To(BeNil()) 132 }) 133 134 It("closes the query iterator", func() { 135 transactionContext.InitializeQueryContext("query-id", resultsIterator) 136 transactionContext.CleanupQueryContext("query-id") 137 138 Expect(resultsIterator.CloseCallCount()).To(Equal(1)) 139 }) 140 141 Context("when the query iterator is nil", func() { 142 It("keeps calm and carries on", func() { 143 transactionContext.InitializeQueryContext("query-id", nil) 144 transactionContext.CleanupQueryContext("query-id") 145 146 pqr := transactionContext.GetPendingQueryResult("query-id") 147 Expect(pqr).To(BeNil()) 148 }) 149 }) 150 }) 151 152 Describe("CloseQueryIterators", func() { 153 var resultsIterators []*mock.QueryResultsIterator 154 155 BeforeEach(func() { 156 for i := 0; i < 5; i++ { 157 resultsIterators = append(resultsIterators, &mock.QueryResultsIterator{}) 158 transactionContext.InitializeQueryContext(fmt.Sprintf("query-id-%d", i+1), resultsIterators[i]) 159 } 160 }) 161 162 It("closes all initialized results iterators", func() { 163 transactionContext.CloseQueryIterators() 164 for _, iter := range resultsIterators { 165 Expect(iter.CloseCallCount()).To(Equal(1)) 166 } 167 }) 168 }) 169 })