Skip to content

Commit 7d96ec8

Browse files
committed
test(consensus): comprehensive coverage improvements for platform-consensus
1 parent fe39408 commit 7d96ec8

5 files changed

Lines changed: 1315 additions & 0 deletions

File tree

crates/consensus/src/governance_integration.rs

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,4 +955,181 @@ mod tests {
955955
assert_eq!(sync.governance().block_height(), 1_000_000);
956956
assert_eq!(sync.governance().total_stake().0, 300_000_000_000);
957957
}
958+
959+
#[tokio::test]
960+
async fn test_governance_pbft_new() {
961+
let keypair = Keypair::generate();
962+
let state = Arc::new(RwLock::new(ChainState::new(
963+
keypair.hotkey(),
964+
platform_core::NetworkConfig::default(),
965+
)));
966+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
967+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
968+
969+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
970+
971+
// Verify initialization - governance status
972+
let status = gov_pbft.governance_status();
973+
assert!(status.is_bootstrap_period);
974+
}
975+
976+
#[tokio::test]
977+
async fn test_set_block_height() {
978+
let keypair = Keypair::generate();
979+
let state = Arc::new(RwLock::new(ChainState::new(
980+
keypair.hotkey(),
981+
platform_core::NetworkConfig::default(),
982+
)));
983+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
984+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
985+
986+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
987+
988+
gov_pbft.set_block_height(5000);
989+
assert_eq!(gov_pbft.governance.stake_governance().block_height(), 5000);
990+
}
991+
992+
#[tokio::test]
993+
async fn test_update_stakes_from_metagraph() {
994+
let keypair = Keypair::generate();
995+
let state = Arc::new(RwLock::new(ChainState::new(
996+
keypair.hotkey(),
997+
platform_core::NetworkConfig::default(),
998+
)));
999+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1000+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1001+
1002+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1003+
1004+
let validators = vec![
1005+
ValidatorInfo::new(Hotkey([1u8; 32]), Stake(100_000_000_000)),
1006+
ValidatorInfo::new(Hotkey([2u8; 32]), Stake(200_000_000_000)),
1007+
];
1008+
1009+
gov_pbft.update_stakes_from_metagraph(&validators);
1010+
1011+
assert_eq!(
1012+
gov_pbft.governance.stake_governance().total_stake().0,
1013+
300_000_000_000
1014+
);
1015+
}
1016+
1017+
#[tokio::test]
1018+
async fn test_execute_sudo_action_bootstrap_non_owner() {
1019+
let keypair = Keypair::generate();
1020+
let state = Arc::new(RwLock::new(ChainState::new(
1021+
keypair.hotkey(),
1022+
platform_core::NetworkConfig::default(),
1023+
)));
1024+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1025+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1026+
1027+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1028+
1029+
gov_pbft.set_block_height(1000); // In bootstrap period
1030+
1031+
let action = SudoAction::UpdateConfig {
1032+
config: platform_core::NetworkConfig::default(),
1033+
};
1034+
1035+
let result = gov_pbft.execute_sudo_action(action).await;
1036+
assert!(result.is_err());
1037+
}
1038+
1039+
#[tokio::test]
1040+
async fn test_governance_status() {
1041+
let keypair = Keypair::generate();
1042+
let state = Arc::new(RwLock::new(ChainState::new(
1043+
keypair.hotkey(),
1044+
platform_core::NetworkConfig::default(),
1045+
)));
1046+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1047+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1048+
1049+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1050+
1051+
let status = gov_pbft.governance_status();
1052+
assert_eq!(status.current_block, 0);
1053+
assert!(status.is_bootstrap_period);
1054+
}
1055+
1056+
#[tokio::test]
1057+
async fn test_active_proposals() {
1058+
let keypair = Keypair::generate();
1059+
let state = Arc::new(RwLock::new(ChainState::new(
1060+
keypair.hotkey(),
1061+
platform_core::NetworkConfig::default(),
1062+
)));
1063+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1064+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1065+
1066+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1067+
1068+
let proposals = gov_pbft.active_proposals();
1069+
assert_eq!(proposals.len(), 0);
1070+
}
1071+
1072+
#[tokio::test]
1073+
async fn test_stake_for_consensus() {
1074+
let keypair = Keypair::generate();
1075+
let state = Arc::new(RwLock::new(ChainState::new(
1076+
keypair.hotkey(),
1077+
platform_core::NetworkConfig::default(),
1078+
)));
1079+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1080+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1081+
1082+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1083+
1084+
let (required, threshold) = gov_pbft.stake_for_consensus();
1085+
assert_eq!(threshold, crate::stake_governance::STAKE_THRESHOLD_PERCENT);
1086+
}
1087+
1088+
#[tokio::test]
1089+
async fn test_execute_sudo_action_post_bootstrap() {
1090+
let keypair = Keypair::generate();
1091+
let state = Arc::new(RwLock::new(ChainState::new(
1092+
keypair.hotkey(),
1093+
platform_core::NetworkConfig::default(),
1094+
)));
1095+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1096+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1097+
1098+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1099+
gov_pbft.set_block_height(crate::stake_governance::BOOTSTRAP_END_BLOCK + 1);
1100+
1101+
// Add stake for the validator
1102+
let validators = vec![ValidatorInfo::new(
1103+
gov_pbft.keypair.hotkey(),
1104+
Stake(100_000_000_000),
1105+
)];
1106+
gov_pbft.update_stakes_from_metagraph(&validators);
1107+
1108+
let action = SudoAction::UpdateConfig {
1109+
config: platform_core::NetworkConfig::default(),
1110+
};
1111+
1112+
let result = gov_pbft.execute_sudo_action(action).await;
1113+
assert!(result.is_ok());
1114+
assert!(matches!(
1115+
result.unwrap(),
1116+
SudoExecutionResult::ProposalCreated { .. }
1117+
));
1118+
}
1119+
1120+
#[tokio::test]
1121+
async fn test_can_use_bootstrap_false() {
1122+
let keypair = Keypair::generate();
1123+
let state = Arc::new(RwLock::new(ChainState::new(
1124+
keypair.hotkey(),
1125+
platform_core::NetworkConfig::default(),
1126+
)));
1127+
let (tx, _rx) = tokio::sync::mpsc::channel(100);
1128+
let pbft = Arc::new(PBFTEngine::new(keypair.clone(), state.clone(), tx));
1129+
1130+
let gov_pbft = GovernancePBFT::new(pbft, state, keypair);
1131+
gov_pbft.set_block_height(1000);
1132+
1133+
assert!(!gov_pbft.can_use_bootstrap());
1134+
}
9581135
}

0 commit comments

Comments
 (0)