Skip to content

Commit 8a48a9d

Browse files
committed
post validator message route tests
1 parent ffd30e8 commit 8a48a9d

File tree

1 file changed

+135
-3
lines changed

1 file changed

+135
-3
lines changed

sentry/src/routes/channel.rs

Lines changed: 135 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -733,9 +733,10 @@ mod test {
733733
use super::*;
734734
use crate::{
735735
db::{
736-
insert_campaign, insert_channel, validator_message::insert_validator_message,
736+
insert_campaign, insert_channel, validator_message::{insert_validator_message, get_validator_messages},
737737
CampaignRemaining,
738738
},
739+
routes::channel::validator_message::create_validator_messages,
739740
test_util::setup_dummy_app,
740741
};
741742
use adapter::{
@@ -746,14 +747,17 @@ mod test {
746747
use primitives::{
747748
balances::UncheckedState,
748749
channel::Nonce,
750+
config::GANACHE_CONFIG,
749751
test_util::{
750752
ADVERTISER, CREATOR, DUMMY_CAMPAIGN, FOLLOWER, GUARDIAN, IDS, LEADER, LEADER_2,
751-
PUBLISHER, PUBLISHER_2,
753+
PUBLISHER, PUBLISHER_2
752754
},
753-
validator::{ApproveState, MessageTypes, NewState},
755+
sentry::validator_messages::ValidatorMessagesCreateRequest,
756+
validator::{ApproveState, MessageTypes, NewState, MessageType, Heartbeat, RejectState},
754757
BigNum, ChainId, Deposit, UnifiedMap, ValidatorId,
755758
};
756759
use std::str::FromStr;
760+
use chrono::Utc;
757761

758762
#[tokio::test]
759763
async fn create_and_fetch_spendable() {
@@ -1570,4 +1574,132 @@ mod test {
15701574
assert_eq!(spender_proof, spender_leaf.merkle_proof);
15711575
assert_eq!(earner_proof, earner_leaf.merkle_proof);
15721576
}
1577+
1578+
#[tokio::test]
1579+
async fn post_validator_messages() {
1580+
let app_guard = setup_dummy_app().await;
1581+
let app = Extension(Arc::new(app_guard.app.clone()));
1582+
let config = GANACHE_CONFIG.clone();
1583+
let all_message_types: [MessageType; 4] = [MessageType::NewState, MessageType::ApproveState, MessageType::RejectState, MessageType::Heartbeat];
1584+
1585+
let channel_context = Extension(
1586+
app.config
1587+
.find_chain_of(DUMMY_CAMPAIGN.channel.token)
1588+
.expect("Dummy channel Token should be present in config!")
1589+
.with(DUMMY_CAMPAIGN.channel),
1590+
);
1591+
1592+
let chain_context = config
1593+
.find_chain_of(DUMMY_CAMPAIGN.channel.token)
1594+
.expect("Campaign's Channel.token should be set in config");
1595+
1596+
insert_channel(&app.pool, &channel_context)
1597+
.await
1598+
.expect("should insert channel");
1599+
// Case when the request is not sent by a channel validator
1600+
{
1601+
let auth = Auth {
1602+
era: 0,
1603+
uid: IDS[&ADVERTISER],
1604+
chain: chain_context.chain.clone(),
1605+
};
1606+
1607+
let req = ValidatorMessagesCreateRequest {
1608+
messages: vec![],
1609+
};
1610+
1611+
let res = create_validator_messages(app.clone(), Extension(auth), channel_context.clone(), Json(req)).await;
1612+
1613+
assert!(matches!(res, Err(ResponseError::Unauthorized)));
1614+
}
1615+
// Cases where we insert validator messages
1616+
// Case with 0 messages
1617+
{
1618+
let auth = Auth {
1619+
era: 0,
1620+
uid: IDS[&LEADER],
1621+
chain: chain_context.chain.clone(),
1622+
};
1623+
1624+
let req = ValidatorMessagesCreateRequest {
1625+
messages: vec![],
1626+
};
1627+
1628+
create_validator_messages(app.clone(), Extension(auth), channel_context.clone(), Json(req)).await.expect("should work");
1629+
1630+
let messages = get_validator_messages(&app.pool, &channel_context.context.id(), &Some(IDS[&LEADER]), &all_message_types, 100).await.expect("should get messages");
1631+
1632+
assert_eq!(messages.len(), 0);
1633+
}
1634+
// Case with 1 message
1635+
{
1636+
let auth = Auth {
1637+
era: 0,
1638+
uid: IDS[&LEADER],
1639+
chain: chain_context.chain.clone(),
1640+
};
1641+
1642+
let message = Heartbeat {
1643+
signature: String::new(),
1644+
state_root: String::new(),
1645+
timestamp: Utc::now(),
1646+
};
1647+
1648+
let req = ValidatorMessagesCreateRequest {
1649+
messages: vec![MessageTypes::Heartbeat(message.clone())],
1650+
};
1651+
1652+
create_validator_messages(app.clone(), Extension(auth), channel_context.clone(), Json(req)).await.expect("Should create messages");
1653+
1654+
let messages = get_validator_messages(&app.pool, &channel_context.context.id(), &Some(IDS[&LEADER]), &all_message_types, 100).await.expect("should get messages");
1655+
let inner_messages: Vec<MessageTypes> = messages.into_iter().map(|m| m.msg.clone()).collect();
1656+
assert_eq!(inner_messages, vec![MessageTypes::Heartbeat(message)]);
1657+
}
1658+
// Case with 4 messages (one of each type, heartbeat is already inserted)
1659+
{
1660+
let auth = Auth {
1661+
era: 0,
1662+
uid: IDS[&LEADER],
1663+
chain: chain_context.chain.clone(),
1664+
};
1665+
1666+
let state_root =
1667+
"b1a4fc6c1a1e1ab908a487e504006edcebea297f61b4b8ce6cad3b29e29454cc".to_string();
1668+
let signature = app
1669+
.adapter
1670+
.clone()
1671+
.unlock()
1672+
.expect("should unlock")
1673+
.sign(&state_root.clone())
1674+
.expect("should sign");
1675+
let new_state: NewState<UncheckedState> = NewState {
1676+
state_root: state_root.clone(),
1677+
signature: signature.clone(),
1678+
balances: Balances::new(),
1679+
};
1680+
1681+
let approve_state = ApproveState {
1682+
state_root: state_root.clone(),
1683+
signature: signature.clone(),
1684+
is_healthy: true,
1685+
};
1686+
1687+
let reject_state = RejectState {
1688+
state_root,
1689+
signature: signature.clone(),
1690+
timestamp: Utc::now(),
1691+
reason: "rejected".to_string(),
1692+
balances: None,
1693+
};
1694+
1695+
let req = ValidatorMessagesCreateRequest {
1696+
messages: vec![MessageTypes::NewState(new_state.clone()), MessageTypes::ApproveState(approve_state.clone()), MessageTypes::RejectState(reject_state.clone())],
1697+
};
1698+
1699+
create_validator_messages(app.clone(), Extension(auth), channel_context.clone(), Json(req)).await.expect("Should create messages");
1700+
1701+
let messages = get_validator_messages(&app.pool, &channel_context.context.id(), &Some(IDS[&LEADER]), &all_message_types, 100).await.expect("should get messages");
1702+
assert_eq!(messages.len(), 4);
1703+
}
1704+
}
15731705
}

0 commit comments

Comments
 (0)