@@ -92,3 +92,131 @@ func TestHappyPath(t *testing.T) {
9292 expectedData := []byte {0xF0 , 0x0B , 0xAA }
9393 assert .Equal (t , expectedData , hres .Data )
9494}
95+
96+ func TestGetMetrics (t * testing.T ) {
97+ vm := withVM (t )
98+
99+ // GetMetrics 1
100+ metrics , err := vm .GetMetrics ()
101+ require .NoError (t , err )
102+ assert .Equal (t , & types.Metrics {}, metrics )
103+
104+ // Create contract
105+ checksum := createTestContract (t , vm , HACKATOM_TEST_CONTRACT )
106+
107+ // GetMetrics 2
108+ metrics , err = vm .GetMetrics ()
109+ require .NoError (t , err )
110+ assert .Equal (t , & types.Metrics {}, metrics )
111+
112+ // Instantiate 1
113+ gasMeter1 := api .NewMockGasMeter (TESTING_GAS_LIMIT )
114+ // instantiate it with this store
115+ store := api .NewLookup (gasMeter1 )
116+ goapi := api .NewMockAPI ()
117+ balance := types.Coins {types .NewCoin (250 , "ATOM" )}
118+ querier := api .DefaultQuerier (api .MOCK_CONTRACT_ADDR , balance )
119+
120+ env := api .MockEnv ()
121+ info := api .MockInfo ("creator" , nil )
122+ msg1 := []byte (`{"verifier": "fred", "beneficiary": "bob"}` )
123+ ires , _ , err := vm .Instantiate (checksum , env , info , msg1 , store , * goapi , querier , gasMeter1 , TESTING_GAS_LIMIT )
124+ require .NoError (t , err )
125+ require .Equal (t , 0 , len (ires .Messages ))
126+
127+ // GetMetrics 3
128+ metrics , err = vm .GetMetrics ()
129+ require .NoError (t , err )
130+ assert .Equal (t , & types.Metrics {
131+ HitsFsCache : 1 ,
132+ ElementsMemoryCache : 1 ,
133+ SizeMemoryCache : 3428923 ,
134+ }, metrics )
135+
136+ // Instantiate 2
137+ msg2 := []byte (`{"verifier": "fred", "beneficiary": "susi"}` )
138+ ires , _ , err = vm .Instantiate (checksum , env , info , msg2 , store , * goapi , querier , gasMeter1 , TESTING_GAS_LIMIT )
139+ require .NoError (t , err )
140+ require .Equal (t , 0 , len (ires .Messages ))
141+
142+ // GetMetrics 4
143+ metrics , err = vm .GetMetrics ()
144+ require .NoError (t , err )
145+ assert .Equal (t , & types.Metrics {
146+ HitsMemoryCache : 1 ,
147+ HitsFsCache : 1 ,
148+ ElementsMemoryCache : 1 ,
149+ SizeMemoryCache : 3428923 ,
150+ }, metrics )
151+
152+ // Pin
153+ err = vm .Pin (checksum )
154+ require .NoError (t , err )
155+
156+ // GetMetrics 5
157+ metrics , err = vm .GetMetrics ()
158+ require .NoError (t , err )
159+ assert .Equal (t , & types.Metrics {
160+ HitsMemoryCache : 2 ,
161+ HitsFsCache : 1 ,
162+ ElementsPinnedMemoryCache : 1 ,
163+ ElementsMemoryCache : 1 ,
164+ SizePinnedMemoryCache : 3428923 ,
165+ SizeMemoryCache : 3428923 ,
166+ }, metrics )
167+
168+ // Instantiate 3
169+ msg3 := []byte (`{"verifier": "fred", "beneficiary": "bert"}` )
170+ ires , _ , err = vm .Instantiate (checksum , env , info , msg3 , store , * goapi , querier , gasMeter1 , TESTING_GAS_LIMIT )
171+ require .NoError (t , err )
172+ require .Equal (t , 0 , len (ires .Messages ))
173+
174+ // GetMetrics 6
175+ metrics , err = vm .GetMetrics ()
176+ require .NoError (t , err )
177+ assert .Equal (t , & types.Metrics {
178+ HitsPinnedMemoryCache : 1 ,
179+ HitsMemoryCache : 2 ,
180+ HitsFsCache : 1 ,
181+ ElementsPinnedMemoryCache : 1 ,
182+ ElementsMemoryCache : 1 ,
183+ SizePinnedMemoryCache : 3428923 ,
184+ SizeMemoryCache : 3428923 ,
185+ }, metrics )
186+
187+ // Unpin
188+ err = vm .Unpin (checksum )
189+ require .NoError (t , err )
190+
191+ // GetMetrics 7
192+ metrics , err = vm .GetMetrics ()
193+ require .NoError (t , err )
194+ assert .Equal (t , & types.Metrics {
195+ HitsPinnedMemoryCache : 1 ,
196+ HitsMemoryCache : 2 ,
197+ HitsFsCache : 1 ,
198+ ElementsPinnedMemoryCache : 0 ,
199+ ElementsMemoryCache : 1 ,
200+ SizePinnedMemoryCache : 0 ,
201+ SizeMemoryCache : 3428923 ,
202+ }, metrics )
203+
204+ // Instantiate 4
205+ msg4 := []byte (`{"verifier": "fred", "beneficiary": "jeff"}` )
206+ ires , _ , err = vm .Instantiate (checksum , env , info , msg4 , store , * goapi , querier , gasMeter1 , TESTING_GAS_LIMIT )
207+ require .NoError (t , err )
208+ require .Equal (t , 0 , len (ires .Messages ))
209+
210+ // GetMetrics 8
211+ metrics , err = vm .GetMetrics ()
212+ require .NoError (t , err )
213+ assert .Equal (t , & types.Metrics {
214+ HitsPinnedMemoryCache : 1 ,
215+ HitsMemoryCache : 3 ,
216+ HitsFsCache : 1 ,
217+ ElementsPinnedMemoryCache : 0 ,
218+ ElementsMemoryCache : 1 ,
219+ SizePinnedMemoryCache : 0 ,
220+ SizeMemoryCache : 3428923 ,
221+ }, metrics )
222+ }
0 commit comments