|
1 | 1 | package api |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "crypto/sha256" |
5 | 6 | "encoding/hex" |
6 | 7 | "encoding/json" |
@@ -382,6 +383,85 @@ func TestGetMetrics(t *testing.T) { |
382 | 383 | require.InEpsilon(t, 3700000, metrics.SizeMemoryCache, 0.25) |
383 | 384 | } |
384 | 385 |
|
| 386 | +func TestGetPinnedMetrics(t *testing.T) { |
| 387 | + cache, cleanup := withCache(t) |
| 388 | + defer cleanup() |
| 389 | + |
| 390 | + // GetMetrics 1 |
| 391 | + metrics, err := GetPinnedMetrics(cache) |
| 392 | + require.NoError(t, err) |
| 393 | + assert.Equal(t, &types.PinnedMetrics{PerModule: make([]types.PerModuleEntry, 0)}, metrics) |
| 394 | + |
| 395 | + // Store contract 1 |
| 396 | + wasm, err := os.ReadFile("../../testdata/hackatom.wasm") |
| 397 | + require.NoError(t, err) |
| 398 | + checksum, err := StoreCode(cache, wasm) |
| 399 | + require.NoError(t, err) |
| 400 | + |
| 401 | + err = Pin(cache, checksum) |
| 402 | + require.NoError(t, err) |
| 403 | + |
| 404 | + // Store contract 2 |
| 405 | + cyberpunkWasm, err := os.ReadFile("../../testdata/cyberpunk.wasm") |
| 406 | + require.NoError(t, err) |
| 407 | + cyberpunkChecksum, err := StoreCode(cache, cyberpunkWasm) |
| 408 | + require.NoError(t, err) |
| 409 | + |
| 410 | + err = Pin(cache, cyberpunkChecksum) |
| 411 | + require.NoError(t, err) |
| 412 | + |
| 413 | + findMetrics := func(list []types.PerModuleEntry, checksum types.Checksum) *types.PerModuleMetrics { |
| 414 | + found := (*types.PerModuleMetrics)(nil) |
| 415 | + |
| 416 | + for _, structure := range list { |
| 417 | + if bytes.Equal(structure.Checksum, checksum) { |
| 418 | + found = &structure.Metrics |
| 419 | + break |
| 420 | + } |
| 421 | + } |
| 422 | + |
| 423 | + return found |
| 424 | + } |
| 425 | + |
| 426 | + // GetMetrics 2 |
| 427 | + metrics, err = GetPinnedMetrics(cache) |
| 428 | + require.NoError(t, err) |
| 429 | + assert.Equal(t, 2, len(metrics.PerModule)) |
| 430 | + |
| 431 | + hackatomMetrics := findMetrics(metrics.PerModule, checksum) |
| 432 | + cyberpunkMetrics := findMetrics(metrics.PerModule, cyberpunkChecksum) |
| 433 | + |
| 434 | + assert.Equal(t, uint32(0), hackatomMetrics.Hits) |
| 435 | + assert.NotEqual(t, uint32(0), hackatomMetrics.Size) |
| 436 | + assert.Equal(t, uint32(0), cyberpunkMetrics.Hits) |
| 437 | + assert.NotEqual(t, uint32(0), cyberpunkMetrics.Size) |
| 438 | + |
| 439 | + // Instantiate 1 |
| 440 | + gasMeter := NewMockGasMeter(TESTING_GAS_LIMIT) |
| 441 | + igasMeter := types.GasMeter(gasMeter) |
| 442 | + store := NewLookup(gasMeter) |
| 443 | + api := NewMockAPI() |
| 444 | + querier := DefaultQuerier(MOCK_CONTRACT_ADDR, types.Array[types.Coin]{types.NewCoin(100, "ATOM")}) |
| 445 | + env := MockEnvBin(t) |
| 446 | + info := MockInfoBin(t, "creator") |
| 447 | + msg1 := []byte(`{"verifier": "fred", "beneficiary": "bob"}`) |
| 448 | + _, _, err = Instantiate(cache, checksum, env, info, msg1, &igasMeter, store, api, &querier, TESTING_GAS_LIMIT, TESTING_PRINT_DEBUG) |
| 449 | + require.NoError(t, err) |
| 450 | + |
| 451 | + // GetMetrics 3 |
| 452 | + metrics, err = GetPinnedMetrics(cache) |
| 453 | + require.NoError(t, err) |
| 454 | + assert.Equal(t, 2, len(metrics.PerModule)) |
| 455 | + |
| 456 | + hackatomMetrics = findMetrics(metrics.PerModule, checksum) |
| 457 | + cyberpunkMetrics = findMetrics(metrics.PerModule, cyberpunkChecksum) |
| 458 | + |
| 459 | + assert.Equal(t, uint32(1), hackatomMetrics.Hits) |
| 460 | + assert.NotEqual(t, uint32(0), hackatomMetrics.Size) |
| 461 | + assert.Equal(t, uint32(0), cyberpunkMetrics.Hits) |
| 462 | + assert.NotEqual(t, uint32(0), cyberpunkMetrics.Size) |
| 463 | +} |
| 464 | + |
385 | 465 | func TestInstantiate(t *testing.T) { |
386 | 466 | cache, cleanup := withCache(t) |
387 | 467 | defer cleanup() |
|
0 commit comments