Skip to content

Commit f4d0a92

Browse files
committed
Implement Stringer interface, skip HashMap on Rust side
1 parent 99cb47c commit f4d0a92

File tree

4 files changed

+42
-17
lines changed

4 files changed

+42
-17
lines changed

internal/api/lib_test.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ func TestGetPinnedMetrics(t *testing.T) {
389389
// GetMetrics 1
390390
metrics, err := GetPinnedMetrics(cache)
391391
require.NoError(t, err)
392-
assert.Equal(t, &types.PinnedMetrics{PerModule: make(map[string]types.PerModuleMetrics, 0)}, metrics)
392+
assert.Equal(t, &types.PinnedMetrics{PerModule: make([]types.PerModuleEntry, 0)}, metrics)
393393

394394
// Store contract 1
395395
wasm, err := os.ReadFile("../../testdata/hackatom.wasm")
@@ -409,17 +409,34 @@ func TestGetPinnedMetrics(t *testing.T) {
409409
err = Pin(cache, cyberpunkChecksum)
410410
require.NoError(t, err)
411411

412-
checksumStr := types.Checksum(checksum).EncodeHex()
413-
cyberpunkChecksumStr := types.Checksum(cyberpunkChecksum).EncodeHex()
412+
checksumStr := types.Checksum(checksum).String()
413+
cyberpunkChecksumStr := types.Checksum(cyberpunkChecksum).String()
414+
415+
findMetrics := func(list []types.PerModuleEntry, checksum string) *types.PerModuleMetrics {
416+
found := (*types.PerModuleMetrics)(nil)
417+
418+
for _, structure := range list {
419+
if structure.Name == checksum {
420+
found = &structure.Metrics
421+
break
422+
}
423+
}
424+
425+
return found
426+
}
414427

415428
// GetMetrics 2
416429
metrics, err = GetPinnedMetrics(cache)
417430
require.NoError(t, err)
418431
assert.Equal(t, 2, len(metrics.PerModule))
419-
assert.Equal(t, uint32(0), metrics.PerModule[checksumStr].Hits)
420-
assert.NotEqual(t, uint32(0), metrics.PerModule[checksumStr].Size)
421-
assert.Equal(t, uint32(0), metrics.PerModule[cyberpunkChecksumStr].Hits)
422-
assert.NotEqual(t, uint32(0), metrics.PerModule[cyberpunkChecksumStr].Size)
432+
433+
hackatomMetrics := findMetrics(metrics.PerModule, checksumStr)
434+
cyberpunkMetrics := findMetrics(metrics.PerModule, cyberpunkChecksumStr)
435+
436+
assert.Equal(t, uint32(0), hackatomMetrics.Hits)
437+
assert.NotEqual(t, uint32(0), hackatomMetrics.Size)
438+
assert.Equal(t, uint32(0), cyberpunkMetrics.Hits)
439+
assert.NotEqual(t, uint32(0), cyberpunkMetrics.Size)
423440

424441
// Instantiate 1
425442
gasMeter := NewMockGasMeter(TESTING_GAS_LIMIT)
@@ -437,10 +454,14 @@ func TestGetPinnedMetrics(t *testing.T) {
437454
metrics, err = GetPinnedMetrics(cache)
438455
require.NoError(t, err)
439456
assert.Equal(t, 2, len(metrics.PerModule))
440-
assert.Equal(t, uint32(1), metrics.PerModule[checksumStr].Hits)
441-
assert.NotEqual(t, uint32(0), metrics.PerModule[checksumStr].Size)
442-
assert.Equal(t, uint32(0), metrics.PerModule[cyberpunkChecksumStr].Hits)
443-
assert.NotEqual(t, uint32(0), metrics.PerModule[cyberpunkChecksumStr].Size)
457+
458+
hackatomMetrics = findMetrics(metrics.PerModule, checksumStr)
459+
cyberpunkMetrics = findMetrics(metrics.PerModule, cyberpunkChecksumStr)
460+
461+
assert.Equal(t, uint32(1), hackatomMetrics.Hits)
462+
assert.NotEqual(t, uint32(0), hackatomMetrics.Size)
463+
assert.Equal(t, uint32(0), cyberpunkMetrics.Hits)
464+
assert.NotEqual(t, uint32(0), cyberpunkMetrics.Size)
444465
}
445466

446467
func TestInstantiate(t *testing.T) {

libwasmvm/src/cache.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::{BTreeSet, HashMap};
1+
use std::collections::BTreeSet;
22
use std::convert::TryInto;
33
use std::panic::{catch_unwind, AssertUnwindSafe};
44
use std::str::from_utf8;
@@ -433,16 +433,15 @@ impl From<cosmwasm_vm::PerModuleMetrics> for PerModuleMetrics {
433433

434434
#[derive(Serialize)]
435435
struct PinnedMetrics {
436-
per_module: HashMap<Checksum, PerModuleMetrics>,
436+
per_module: Vec<(Checksum, PerModuleMetrics)>,
437437
}
438438

439439
impl From<cosmwasm_vm::PinnedMetrics> for PinnedMetrics {
440440
fn from(value: cosmwasm_vm::PinnedMetrics) -> Self {
441441
Self {
442442
per_module: value
443443
.per_module
444-
.iter()
445-
.cloned()
444+
.into_iter()
446445
.map(|(checksum, metrics)| (checksum, metrics.into()))
447446
.collect(),
448447
}

types/checksum.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
// The length of a checksum must always be ChecksumLen.
1111
type Checksum []byte
1212

13-
func (cs Checksum) EncodeHex() string {
13+
func (cs Checksum) String() string {
1414
return hex.EncodeToString(cs)
1515
}
1616

types/types.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,13 @@ type PerModuleMetrics struct {
196196
Size uint64 `msgpack:"size"`
197197
}
198198

199+
type PerModuleEntry struct {
200+
Name string
201+
Metrics PerModuleMetrics
202+
}
203+
199204
type PinnedMetrics struct {
200-
PerModule map[string]PerModuleMetrics `msgpack:"per_module"`
205+
PerModule []PerModuleEntry `msgpack:"per_module,as_array"`
201206
}
202207

203208
func (pm *PinnedMetrics) UnmarshalMessagePack(data []byte) error {

0 commit comments

Comments
 (0)