Functionalize tx serialization; make testing more explicit
This commit is contained in:
parent
75dcd97f5f
commit
f482c9ab61
|
@ -93,11 +93,7 @@ where
|
||||||
leader_id: &Pubkey,
|
leader_id: &Pubkey,
|
||||||
entry: &Entry,
|
entry: &Entry,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let transactions: Vec<Vec<u8>> = entry
|
let transactions: Vec<Vec<u8>> = serialize_transactions(entry);
|
||||||
.transactions
|
|
||||||
.iter()
|
|
||||||
.map(|tx| serialize(&tx).unwrap())
|
|
||||||
.collect();
|
|
||||||
let stream_entry = json!({
|
let stream_entry = json!({
|
||||||
"num_hashes": entry.num_hashes,
|
"num_hashes": entry.num_hashes,
|
||||||
"hash": entry.hash,
|
"hash": entry.hash,
|
||||||
|
@ -160,6 +156,14 @@ impl MockBlockstream {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn serialize_transactions(entry: &Entry) -> Vec<Vec<u8>> {
|
||||||
|
entry
|
||||||
|
.transactions
|
||||||
|
.iter()
|
||||||
|
.map(|tx| serialize(&tx).unwrap())
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -168,8 +172,28 @@ mod test {
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use solana_sdk::hash::Hash;
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
|
use solana_sdk::system_transaction::SystemTransaction;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_serialize_transactions() {
|
||||||
|
let entry = Entry::new(&Hash::default(), 1, vec![]);
|
||||||
|
let empty_vec: Vec<Vec<u8>> = vec![];
|
||||||
|
assert_eq!(serialize_transactions(&entry), empty_vec);
|
||||||
|
|
||||||
|
let keypair0 = Keypair::new();
|
||||||
|
let keypair1 = Keypair::new();
|
||||||
|
let tx0 = SystemTransaction::new_move(&keypair0, &keypair1.pubkey(), 1, Hash::default(), 0);
|
||||||
|
let tx1 = SystemTransaction::new_move(&keypair1, &keypair0.pubkey(), 2, Hash::default(), 0);
|
||||||
|
let serialized_tx0 = serialize(&tx0).unwrap();
|
||||||
|
let serialized_tx1 = serialize(&tx1).unwrap();
|
||||||
|
let entry = Entry::new(&Hash::default(), 1, vec![tx0, tx1]);
|
||||||
|
assert_eq!(
|
||||||
|
serialize_transactions(&entry),
|
||||||
|
vec![serialized_tx0, serialized_tx1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_blockstream() -> () {
|
fn test_blockstream() -> () {
|
||||||
let blockstream = MockBlockstream::new("test_stream".to_string());
|
let blockstream = MockBlockstream::new("test_stream".to_string());
|
||||||
|
|
|
@ -109,7 +109,7 @@ mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::blocktree::create_new_tmp_ledger;
|
use crate::blocktree::create_new_tmp_ledger;
|
||||||
use crate::entry::{create_ticks, Entry};
|
use crate::entry::{create_ticks, Entry};
|
||||||
use bincode::deserialize;
|
use bincode::{deserialize, serialize};
|
||||||
use chrono::{DateTime, FixedOffset};
|
use chrono::{DateTime, FixedOffset};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
|
@ -197,8 +197,14 @@ mod test {
|
||||||
.as_array()
|
.as_array()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|tx| {
|
.enumerate()
|
||||||
|
.map(|(j, tx)| {
|
||||||
let tx_vec: Vec<u8> = serde_json::from_value(tx.clone()).unwrap();
|
let tx_vec: Vec<u8> = serde_json::from_value(tx.clone()).unwrap();
|
||||||
|
// Check explicitly that transaction matches bincode-serialized format
|
||||||
|
assert_eq!(
|
||||||
|
tx_vec,
|
||||||
|
serialize(&expected_entries[i].transactions[j]).unwrap()
|
||||||
|
);
|
||||||
deserialize(&tx_vec).unwrap()
|
deserialize(&tx_vec).unwrap()
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
|
Loading…
Reference in New Issue