Skip to content
This repository has been archived by the owner on Sep 13, 2022. It is now read-only.

feat(muta): bench excute #145

Merged
merged 1 commit into from
Feb 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 56 additions & 11 deletions framework/src/executor/tests/mod.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
extern crate test;

mod service_call_service;

use std::sync::Arc;

use async_trait::async_trait;
use bytes::{Bytes, BytesMut};
use cita_trie::MemoryDB;
use test::Bencher;

use asset::types::{Asset, GetBalanceResponse};
use asset::AssetService;
Expand Down Expand Up @@ -90,6 +93,56 @@ fn test_exec() {
cycles_limit: std::u64::MAX,
};

let stx = mock_signed_tx();
let txs = vec![stx];
let executor_resp = executor.exec(&params, &txs).unwrap();
let receipt = &executor_resp.receipts[0];

assert_eq!(receipt.response.is_error, false);
let asset: Asset = serde_json::from_str(&receipt.response.ret).unwrap();
assert_eq!(asset.name, "MutaToken2");
assert_eq!(asset.symbol, "MT2");
assert_eq!(asset.supply, 320_000_011);
}

#[bench]
fn bench_execute(b: &mut Bencher) {
let toml_str = include_str!("./genesis_services.toml");
let genesis: Genesis = toml::from_str(toml_str).unwrap();

let db = Arc::new(MemoryDB::new(false));

let root = ServiceExecutor::create_genesis(
genesis.services,
Arc::clone(&db),
Arc::new(MockStorage {}),
Arc::new(MockServiceMapping {}),
)
.unwrap();

let mut executor = ServiceExecutor::with_root(
root.clone(),
Arc::clone(&db),
Arc::new(MockStorage {}),
Arc::new(MockServiceMapping {}),
)
.unwrap();

let txs: Vec<SignedTransaction> = (0..1000).map(|_| mock_signed_tx()).collect();

b.iter(|| {
let params = ExecutorParams {
state_root: root.clone(),
height: 1,
timestamp: 0,
cycles_limit: std::u64::MAX,
};
let txs = txs.clone();
executor.exec(&params, &txs).unwrap();
});
}

fn mock_signed_tx() -> SignedTransaction {
let raw = RawTransaction {
chain_id: Hash::from_empty(),
nonce: Hash::from_empty(),
Expand All @@ -103,24 +156,16 @@ fn test_exec() {
.to_owned(),
},
};
let stx = SignedTransaction {

SignedTransaction {
raw,
tx_hash: Hash::from_empty(),
pubkey: Bytes::from(
hex::decode("031288a6788678c25952eba8693b2f278f66e2187004b64ac09416d07f83f96d5b")
.unwrap(),
),
signature: BytesMut::from("").freeze(),
};
let txs = vec![stx];
let executor_resp = executor.exec(&params, &txs).unwrap();
let receipt = &executor_resp.receipts[0];

assert_eq!(receipt.response.is_error, false);
let asset: Asset = serde_json::from_str(&receipt.response.ret).unwrap();
assert_eq!(asset.name, "MutaToken2");
assert_eq!(asset.symbol, "MT2");
assert_eq!(asset.supply, 320_000_011);
}
}

struct MockServiceMapping;
Expand Down
1 change: 1 addition & 0 deletions framework/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#![feature(vec_remove_item)]
#![feature(test)]

pub mod binding;
pub mod executor;