Skip to content
Snippets Groups Projects
Commit b2ef1010 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

feat: more tests (median)

parent 169ac6dd
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
use crate::mock::*; use crate::mock::*;
use crate::DistanceStatus::{Pending, Valid}; use crate::DistanceStatus::{Pending, Valid};
use crate::MedianResult::One;
use crate::{pallet, Error, MedianAcc, MedianResult}; use crate::{pallet, Error, MedianAcc, MedianResult};
use frame_support::traits::Len; use frame_support::traits::Len;
use frame_support::{assert_err, assert_noop, assert_ok}; use frame_support::{assert_err, assert_noop, assert_ok};
...@@ -211,7 +212,130 @@ fn distance_failure() { ...@@ -211,7 +212,130 @@ fn distance_failure() {
System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationFailure { System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationFailure {
0: *IDTY_0, 0: *IDTY_0,
})); }));
// TODO: test: variant Two });
}
#[test]
fn distance_with_odd_median() {
new_test_ext().execute_with(|| {
run_to_block(SESSION_0_START);
assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
assert_eq!(
pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
Some(Pending)
);
// Evaluation #1
run_to_block(SESSION_2_START);
assert_ok!(Distance::update_evaluation(
RuntimeOrigin::none(),
ComputationResult {
distances: vec![Perbill::from_percent(70)]
}
));
// Evaluation #2
run_to_block(SESSION_2_START + 1);
assert_ok!(Distance::update_evaluation(
RuntimeOrigin::none(),
ComputationResult {
distances: vec![Perbill::from_percent(80)]
}
));
// Evaluation #3
run_to_block(SESSION_2_START + 2);
assert_ok!(Distance::update_evaluation(
RuntimeOrigin::none(),
ComputationResult {
distances: vec![Perbill::from_percent(80)]
}
));
// Check the median result
let pool = pallet::EvaluationPool2::<Test>::get();
let (_, median) = pool.0.get(0).unwrap();
assert_eq!(median.get_median(), Some(One(Perbill::from_percent(80))));
// Finally session 4
run_to_block(SESSION_3_START);
// distance failure
assert_eq!(
pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
Some(Valid)
);
System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationSuccess {
0: *IDTY_0,
}));
});
}
#[test]
fn distance_with_even_median() {
new_test_ext().execute_with(|| {
run_to_block(SESSION_0_START);
assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
assert_eq!(
pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
Some(Pending)
);
// Evaluation #1
run_to_block(SESSION_2_START);
assert_ok!(Distance::update_evaluation(
RuntimeOrigin::none(),
ComputationResult {
distances: vec![Perbill::from_percent(70)]
}
));
// Evaluation #2
run_to_block(SESSION_2_START + 1);
assert_ok!(Distance::update_evaluation(
RuntimeOrigin::none(),
ComputationResult {
distances: vec![Perbill::from_percent(90)]
}
));
// Check the median result
let pool = pallet::EvaluationPool2::<Test>::get();
let (_, median) = pool.0.get(0).unwrap();
assert_eq!(
median.get_median(),
Some(MedianResult::Two(
Perbill::from_percent(70),
Perbill::from_percent(90)
))
);
// Finally session 4
run_to_block(SESSION_3_START);
// distance failure
assert_eq!(
pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
Some(Valid)
);
System::assert_has_event(RuntimeEvent::Distance(pallet::Event::EvaluationSuccess {
0: *IDTY_0,
}));
});
}
#[test]
fn distance_not_processed() {
new_test_ext().execute_with(|| {
run_to_block(SESSION_0_START);
assert_ok!(Distance::evaluate_distance(RuntimeOrigin::signed(0)));
assert_eq!(
pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0),
Some(Pending)
);
// Directly to session S+3
run_to_block(SESSION_3_START);
// distance failure
assert_eq!(pallet::IdentitiesDistanceStatus::<Test>::get(IDTY_0), None); // Pending has gone
System::assert_has_event(RuntimeEvent::Distance(
pallet::Event::EvaluationNotProcessed { 0: *IDTY_0 },
));
}); });
} }
...@@ -221,7 +345,7 @@ fn distance_failure() { ...@@ -221,7 +345,7 @@ fn distance_failure() {
// } // }
// TODO: evaluate_distance => Err::NoIdentity // TODO: evaluate_distance => Err::NoIdentity
// TODO: evaluate_distance => Err::AlreadyInEvaluation // TODO: evaluate_distance => Err::AlreadyInEvaluation ==> devrait être correctement levée depuis l'ajout de Pending
// TODO: evaluate_distance => Err::QueueFull (1) // TODO: evaluate_distance => Err::QueueFull (1)
// TODO: evaluate_distance => Err::QueueFull (2) // TODO: evaluate_distance => Err::QueueFull (2)
// TODO: Err::ManyEvaluationsInBlock // TODO: Err::ManyEvaluationsInBlock
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment