extern crate alloc;
use alloc::vec::Vec;
use core::num::NonZeroUsize;
use crate::kairos::Kairos;
use crate::metis::{
Admission, ArrivalRefusal, Cut, Departure, Dot, DotSet, EpochAddress, EpochLedgerDecodeBudget,
EpochLedgerSnapshot, EpochRefusal, Epochs, LineageProofEntry, LineageProofRecord, SealRecord,
Stability, VersionVector, Vouched,
};
#[track_caller]
fn d(station: u32, counter: u64) -> Dot {
Dot::from_parts(station, counter).expect("test literal names the non-dot counter zero")
}
const ROSTER: [u32; 2] = [1, 2];
const JOINER: u32 = 3;
fn horizon() -> NonZeroUsize {
NonZeroUsize::new(4).expect("positive")
}
fn cut(entries: &[(u32, u64)]) -> Cut {
let mut vector = VersionVector::new();
for &(station, counter) in entries {
vector.observe(station, counter);
}
Cut::from_witnessed(vector)
}
fn tracker(roster: &[u32], reported: &Cut) -> Stability {
let mut stability = Stability::new(roster.iter().copied());
for &station in roster {
stability.report_cut(station, reported).expect("on roster");
}
stability
}
fn seal_first(fleet: &mut [Epochs], roster: &[u32]) -> EpochAddress {
let reported = cut(&roster.iter().map(|&s| (s, 4)).collect::<Vec<_>>());
let stability = tracker(roster, &reported);
let declaration = fleet[0]
.declare(
d(1, 5),
Kairos::new(5, 0, 1, 0u16),
&stability,
&Cut::bottom(),
)
.expect("the watermark licenses the declaration");
let winner = declaration.address();
for machine in &mut fleet[1..] {
machine
.deliver(declaration.clone(), &stability, &Cut::bottom())
.expect("the declaration enters the window");
}
let delivered = cut(&roster.iter().map(|&s| (s, 5)).collect::<Vec<_>>());
let risen = tracker(roster, &delivered);
for machine in fleet.iter_mut() {
for &station in roster {
machine
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
}
for (index, machine) in fleet.iter_mut().enumerate() {
let own = roster[index];
let _ = machine
.adopt(own, 5, &risen)
.expect("the confirmation round is complete under the watermark");
for &station in roster {
if station != own {
machine
.adopt_report(winner, &Vouched::trust(station, 5))
.expect("a peer adoption folds");
}
}
assert!(
machine.try_seal(&risen).is_some(),
"the adoption round is complete under the watermark"
);
}
winner
}
fn founded() -> (Vec<Epochs>, EpochAddress, Stability) {
let mut fleet = alloc::vec![
Epochs::new(ROSTER, horizon()),
Epochs::new(ROSTER, horizon()),
];
let base = seal_first(&mut fleet, &ROSTER);
let stability = tracker(&ROSTER, &cut(&[(1, 5), (2, 5)]));
(fleet, base, stability)
}
fn boundary(base: EpochAddress) -> Admission {
Admission::new(base, [JOINER]).expect("one joiner")
}
const COMMIT: [u8; 32] = [7u8; 32];
#[test]
fn an_admission_needs_at_least_one_joiner() {
let (_, base, _) = &founded();
assert_eq!(
Admission::new(*base, []).unwrap_err(),
ArrivalRefusal::EmptyAdmission
);
}
#[test]
fn a_departed_station_cannot_return_under_its_own_identity() {
let (mut fleet, base, mut stability) = founded();
let _ = stability.abandon(2).expect("a survivor remains");
assert_eq!(
fleet[0].open_arrival(
Admission::new(base, [2]).expect("one joiner"),
COMMIT,
1,
&stability
),
Err(ArrivalRefusal::AlreadyPresent { station: 2 })
);
}
#[test]
fn opening_endorses_and_shows_the_pending_incumbent() {
let (mut fleet, base, stability) = founded();
let endorsement = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
assert_eq!(*endorsement.admission(), boundary(base));
let again = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("an identical re-open absorbs");
assert_eq!(endorsement, again);
let round = fleet[0].arrival().expect("the round is held");
assert!(!round.complete(), "station 2 has not endorsed");
assert_eq!(round.pending().collect::<Vec<_>>(), alloc::vec![2]);
fleet[0]
.fold_endorsement(&Vouched::trust(2, endorsement), &stability)
.expect("the peer endorsement folds");
assert!(fleet[0].arrival().expect("held").complete());
}
#[test]
fn a_second_boundary_is_refused_as_discord() {
let (mut fleet, base, stability) = founded();
let endorsement = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
assert_eq!(
fleet[0].open_arrival(
Admission::new(base, [4]).expect("one joiner"),
COMMIT,
1,
&stability
),
Err(ArrivalRefusal::ForeignBoundary { base })
);
let foreign = Admission::new(base, [4]).expect("one joiner");
let rival = fleet[1]
.open_arrival(foreign, COMMIT, 2, &stability)
.expect("the rival round opens at its own machine");
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(2, rival), &stability),
Err(ArrivalRefusal::ForeignBoundary { base })
);
assert!(!fleet[0].arrival().expect("held").complete());
let _ = endorsement;
}
#[test]
fn own_slots_and_foreign_speakers_are_refused() {
let (mut fleet, base, stability) = founded();
let endorsement = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(1, endorsement.clone()), &stability),
Err(ArrivalRefusal::Impersonated { station: 1 })
);
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(JOINER, endorsement.clone()), &stability),
Err(ArrivalRefusal::UnknownStation { station: JOINER })
);
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(9, endorsement), &stability),
Err(ArrivalRefusal::UnknownStation { station: 9 })
);
}
#[test]
fn the_base_is_located_against_this_machines_own_lineage() {
let stability = tracker(&ROSTER, &cut(&[(1, 5), (2, 5)]));
let mut fresh = Epochs::new(ROSTER, horizon());
let somewhere = EpochAddress::try_from_parts(1, (1, 5)).expect("a valid address");
assert_eq!(
fresh.open_arrival(boundary(somewhere), COMMIT, 1, &stability),
Err(ArrivalRefusal::Unfounded)
);
let (mut fleet, base, _) = founded();
let ahead =
EpochAddress::try_from_parts(base.generation() + 1, (1, 9)).expect("a valid address");
assert_eq!(
fleet[0].open_arrival(boundary(ahead), COMMIT, 1, &stability),
Err(ArrivalRefusal::Premature {
base: base.generation() + 1,
newest: base.generation(),
})
);
let discordant =
EpochAddress::try_from_parts(base.generation(), (2, 9)).expect("a valid address");
assert_eq!(
fleet[0].open_arrival(boundary(discordant), COMMIT, 1, &stability),
Err(ArrivalRefusal::DiscordantBase {
held: base,
offered: discordant,
})
);
}
#[test]
fn an_abandoned_member_need_not_endorse() {
let roster = [1u32, 2, 3];
let mut fleet = alloc::vec![Epochs::new(roster, horizon())];
let base = seal_first(&mut fleet, &roster);
let mut stability = tracker(&roster, &cut(&[(1, 5), (2, 5), (3, 5)]));
let _ = stability.abandon(3).expect("survivors remain");
let admission = Admission::new(base, [4]).expect("one joiner");
let endorsement = fleet[0]
.open_arrival(admission, COMMIT, 1, &stability)
.expect("the round opens over the surviving family");
let round = fleet[0].arrival().expect("held");
assert_eq!(round.family().collect::<Vec<_>>(), alloc::vec![1, 2]);
fleet[0]
.fold_endorsement(&Vouched::trust(2, endorsement), &stability)
.expect("the surviving peer completes the round");
assert!(fleet[0].arrival().expect("held").complete());
}
#[test]
fn a_declaration_tags_only_a_complete_round() {
let (mut fleet, base, stability) = founded();
let endorsement = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
let _ = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("the peer opens");
let reported = cut(&[(1, 5), (2, 5)]);
let risen = tracker(&ROSTER, &reported);
let plain = fleet[1]
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &risen, &reported)
.expect("an incomplete round licenses nothing");
assert!(plain.admission().is_none());
fleet[0]
.fold_endorsement(&Vouched::trust(2, endorsement), &stability)
.expect("the peer endorsement folds");
let tagged = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &risen, &reported)
.expect("a complete round tags");
assert_eq!(tagged.admission(), Some(&boundary(base)));
}
#[test]
fn the_winner_carries_the_admission_and_the_roster_widens_at_the_seal() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens at 1");
let b = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("the round opens at 2");
fleet[0]
.fold_endorsement(&Vouched::trust(2, b), &stability)
.expect("2's endorsement folds at 1");
fleet[1]
.fold_endorsement(&Vouched::trust(1, a), &stability)
.expect("1's endorsement folds at 2");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("the complete round tags the declaration");
assert_eq!(declaration.admission(), Some(&boundary(base)));
fleet[1]
.deliver(declaration.clone(), &stability, &reported)
.expect("the tagged candidate validates on agreed inputs");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
let mut records = Vec::new();
for (index, machine) in fleet.iter_mut().enumerate() {
for &station in &ROSTER {
machine
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
let own = ROSTER[index];
let _ = machine
.adopt(own, if own == 1 { 6 } else { 5 }, &risen)
.expect("the assent is this machine's own endorsement");
for &station in &ROSTER {
if station != own {
machine
.adopt_report(
winner,
&Vouched::trust(station, if station == 1 { 6 } else { 5 }),
)
.expect("a peer adoption folds");
}
}
let sealed = machine
.try_seal(&risen)
.expect("the adoption round is complete")
.clone();
assert_eq!(sealed.admission(), Some(&boundary(base)));
records.push(SealRecord::from_sealed(&sealed).to_bytes());
}
assert_eq!(records[0], records[1], "one window, one record, both wide");
for machine in &fleet {
assert!(
machine.roster().any(|station| station == JOINER),
"the joiner is a member from the successor generation"
);
assert!(machine.arrival().is_none(), "the seal consumed the round");
}
let reported = cut(&[(1, 6), (2, 5), (3, 5)]);
let wide = tracker(&[1, 2, 3], &reported);
let next = fleet[0]
.declare(d(1, 7), Kairos::new(7, 0, 1, 0u16), &wide, &reported)
.expect("the next window opens over the widened roster");
let address = next.address();
let delivered = cut(&[(1, 7), (2, 5), (3, 5)]);
let risen = tracker(&[1, 2, 3], &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(address, &Vouched::trust(station, delivered.clone()))
.expect("an incumbent confirmation folds");
}
assert_eq!(
fleet[0].adopt(1, 7, &risen),
Err(EpochRefusal::Unconfirmed),
"the round ranges over the joiner now"
);
fleet[0]
.confirm(address, &Vouched::trust(JOINER, delivered))
.expect("the joiner's confirmation folds");
let _ = fleet[0]
.adopt(1, 7, &risen)
.expect("the joiner's testimony completes the round");
}
#[test]
fn a_plain_seal_supersedes_the_round_and_the_admission_costs_itself() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let plain = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("the plain window opens");
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("a round may open mid-window");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("the round completes mid-window");
assert!(fleet[0].arrival().expect("held").complete());
let winner = plain.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adoption");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("the peer adoption folds");
let sealed = fleet[0]
.try_seal(&risen)
.expect("the plain window seals")
.clone();
assert!(
sealed.admission().is_none(),
"the late-completing round cannot catch the sealed window"
);
assert!(
!fleet[0].roster().any(|station| station == JOINER),
"absence is total: no partial admission"
);
assert!(
fleet[0].arrival().is_none(),
"the plain seal superseded the round"
);
assert_eq!(
fleet[0].open_arrival(boundary(base), COMMIT, 1, &stability),
Err(ArrivalRefusal::Elapsed {
base: base.generation(),
newest: base.generation() + 1,
})
);
let renewed = sealed.declaration();
assert!(
fleet[0]
.open_arrival(boundary(renewed), COMMIT, 1, &stability)
.is_ok(),
"the arrival re-agrees over the base the fleet is at"
);
}
#[test]
fn a_tagged_winner_is_refused_without_this_machines_own_endorsement() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens at 1");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("2's endorsement folds at 1");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("the complete round tags");
fleet[1]
.deliver(declaration.clone(), &stability, &reported)
.expect("agreed inputs validate");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[1]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
assert_eq!(
fleet[1].adopt(2, 5, &risen),
Err(EpochRefusal::UnassentedAdmission { winner }),
"no assent without this machine's own endorsement"
);
let _ = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("endorsing is the cure");
let _ = fleet[1]
.adopt(2, 5, &risen)
.expect("the endorsement is the assent");
}
#[test]
fn a_fabricated_boundary_wedges_the_window_before_any_seal() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let forged = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("the liar's round opens");
fleet[1]
.fold_endorsement(&Vouched::trust(1, forged), &stability)
.expect("the forged endorsement folds at the liar");
let declaration = fleet[1]
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &stability, &reported)
.expect("the liar's machine believes its round");
assert!(declaration.admission().is_some());
fleet[0]
.deliver(declaration.clone(), &stability, &reported)
.expect("agreed inputs cannot expose the forgery");
let winner = declaration.address();
let delivered = cut(&[(1, 5), (2, 6)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
assert_eq!(
fleet[0].adopt(1, 5, &risen),
Err(EpochRefusal::UnassentedAdmission { winner }),
"the honest member never endorsed and refuses"
);
assert!(fleet[0].try_seal(&risen).is_none());
assert!(fleet[0].roster().all(|station| station != JOINER));
}
#[test]
fn deliver_refuses_a_tagged_candidate_on_agreed_inputs() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let mut foreign = alloc::vec![Epochs::new(ROSTER, horizon())];
let other = {
let reported = cut(&[(1, 4), (2, 4)]);
let stability = tracker(&ROSTER, &reported);
let declaration = foreign[0]
.declare(
d(2, 5),
Kairos::new(5, 0, 2, 0u16),
&stability,
&Cut::bottom(),
)
.expect("the foreign fleet declares");
let winner = declaration.address();
let delivered = cut(&[(1, 5), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
foreign[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation");
}
let _ = foreign[0].adopt(2, 5, &risen).expect("adoption");
foreign[0]
.adopt_report(winner, &Vouched::trust(1, 5))
.expect("peer adoption");
foreign[0].try_seal(&risen).expect("seals").declaration()
};
let e = foreign[0]
.open_arrival(boundary(other), COMMIT, 2, &stability)
.expect("the foreign round opens");
foreign[0]
.fold_endorsement(&Vouched::trust(1, e), &stability)
.expect("completes");
let tagged = foreign[0]
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &stability, &reported)
.expect("tags over the foreign base");
assert_eq!(
fleet[0].deliver(tagged, &stability, &reported),
Err(EpochRefusal::AdmissionBaseDiscord {
offered: other,
sealed: Some(base),
}),
"a boundary founded on a record this machine did not seal refuses"
);
let mut wide = {
let record = SealRecord::from_sealed(fleet[0].newest_sealed().expect("retained"));
let proof =
LineageProofRecord::try_new(alloc::vec![LineageProofEntry::new(record, [0u8; 32])])
.expect("one entry");
Epochs::bootstrap([1, 2, JOINER], horizon(), &proof).expect("containment is monotone")
};
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let tagged = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
assert_eq!(
wide.deliver(tagged, &stability, &reported),
Err(EpochRefusal::AdmissionAlreadyPresent { station: JOINER })
);
}
#[test]
fn an_equivocated_tag_buys_the_fork_an_equivocated_declaration_already_buys() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let mut liar_tagged = fleet[0].clone();
let e = liar_tagged
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("opens");
liar_tagged
.fold_endorsement(&Vouched::trust(1, e), &stability)
.expect("completes");
let tagged = liar_tagged
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &stability, &reported)
.expect("tags");
let plain = fleet[1]
.clone()
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &stability, &reported)
.expect("declares plain");
assert_eq!(tagged.address(), plain.address(), "one dot, two contents");
let winner = tagged.address();
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("completes");
fleet[0]
.deliver(tagged, &stability, &reported)
.expect("the tagged spelling validates");
fleet[1]
.deliver(plain, &stability, &reported)
.expect("the plain spelling validates");
let delivered = cut(&[(1, 5), (2, 6)]);
let risen = tracker(&ROSTER, &delivered);
let mut spellings = Vec::new();
for (index, machine) in fleet.iter_mut().enumerate() {
for &station in &ROSTER {
machine
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation");
}
let own = ROSTER[index];
let _ = machine
.adopt(own, if own == 2 { 6 } else { 5 }, &risen)
.expect("adoption");
for &station in &ROSTER {
if station != own {
machine
.adopt_report(
winner,
&Vouched::trust(station, if station == 2 { 6 } else { 5 }),
)
.expect("peer adoption");
}
}
let sealed = machine.try_seal(&risen).expect("seals").clone();
spellings.push(SealRecord::from_sealed(&sealed).to_bytes());
}
assert_eq!(
fleet[0].newest_sealed().expect("sealed").declaration(),
fleet[1].newest_sealed().expect("sealed").declaration(),
"one address"
);
assert_ne!(
spellings[0], spellings[1],
"two records, byte-distinct under the record spelling"
);
}
#[test]
fn a_racing_departure_attestation_cannot_split_the_record() {
let roster = [1u32, 2, 3];
let mut fleet = alloc::vec![
Epochs::new(roster, horizon()),
Epochs::new(roster, horizon()),
];
let base = seal_first(&mut fleet, &roster);
let reported = cut(&[(1, 5), (2, 5), (3, 5)]);
let mut stability_a = tracker(&roster, &reported);
let stability_b = tracker(&roster, &reported);
let admission = Admission::new(base, [4]).expect("one joiner");
let a = fleet[0]
.open_arrival(admission.clone(), COMMIT, 1, &stability_a)
.expect("opens at 1");
let b = fleet[1]
.open_arrival(admission.clone(), COMMIT, 2, &stability_b)
.expect("opens at 2");
fleet[0]
.fold_endorsement(&Vouched::trust(2, b.clone()), &stability_a)
.expect("folds");
fleet[0]
.fold_endorsement(&Vouched::trust(3, a.clone()), &stability_a)
.expect("3's endorsement folds at 1");
fleet[1]
.fold_endorsement(&Vouched::trust(1, a), &stability_b)
.expect("folds");
fleet[1]
.fold_endorsement(&Vouched::trust(3, b), &stability_b)
.expect("3's endorsement folds at 2");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability_a, &reported)
.expect("the complete round tags");
fleet[1]
.deliver(declaration.clone(), &stability_b, &reported)
.expect("validates");
let winner = declaration.address();
let departed = {
let mut round = Departure::opened(3, 1, [1, 2]).expect("survivors");
let mut held = DotSet::new();
for counter in 1..=5 {
let _ = held.insert(d(3, counter));
}
let _ = round.propose(&held, &DotSet::new()).expect("gap-free");
round
.fold(&Vouched::trust(2, 5))
.expect("survivor proposal");
round.try_seal().expect("every survivor proposed").clone()
};
let _ = stability_a
.abandon_attested(&departed)
.expect("the attestation lands at 1");
let delivered = cut(&[(1, 6), (2, 5), (3, 5)]);
let risen_b = tracker(&roster, &delivered);
let mut risen_a = tracker(&roster, &delivered);
let _ = risen_a
.abandon_attested(&departed)
.expect("the attestation stands at 1");
for &station in &[1u32, 2] {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation at 1");
}
for &station in &roster {
fleet[1]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation at 2");
}
let _ = fleet[0]
.adopt(1, 6, &risen_a)
.expect("assented adoption at 1");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption at 1");
let _ = fleet[1]
.adopt(2, 5, &risen_b)
.expect("assented adoption at 2");
fleet[1]
.adopt_report(winner, &Vouched::trust(1, 6))
.expect("peer adoption at 2");
fleet[1]
.adopt_report(winner, &Vouched::trust(3, 5))
.expect("3's real adoption folds at 2");
let sealed_a = fleet[0]
.try_seal(&risen_a)
.expect("substitution completes the rounds at 1")
.clone();
let sealed_b = fleet[1]
.try_seal(&risen_b)
.expect("3's spoken words complete the rounds at 2")
.clone();
assert_eq!(sealed_a.admission(), Some(&admission));
assert_eq!(
SealRecord::from_sealed(&sealed_a).to_bytes(),
SealRecord::from_sealed(&sealed_b).to_bytes(),
"the racing attestation cannot split the record"
);
}
#[test]
fn a_departure_racing_an_open_round_freezes_it_and_the_arrival_re_agrees() {
let roster = [1u32, 2, 3];
let mut fleet = alloc::vec![Epochs::new(roster, horizon())];
let base = seal_first(&mut fleet, &roster);
let reported = cut(&[(1, 5), (2, 5), (3, 5)]);
let mut stability = tracker(&roster, &reported);
let admission = Admission::new(base, [4]).expect("one joiner");
let _ = fleet[0]
.open_arrival(admission, COMMIT, 1, &stability)
.expect("opens over {1, 2, 3}");
let departed = {
let mut round = Departure::opened(3, 1, [1, 2]).expect("survivors");
let mut held = DotSet::new();
for counter in 1..=5 {
let _ = held.insert(d(3, counter));
}
let _ = round.propose(&held, &DotSet::new()).expect("gap-free");
round
.fold(&Vouched::trust(2, 5))
.expect("survivor proposal");
round.try_seal().expect("sealed").clone()
};
let _ = stability
.abandon_attested(&departed)
.expect("the attestation lands mid-round");
let round = fleet[0].arrival().expect("held");
assert!(
round.pending().any(|station| station == 3),
"the departed slot never fills"
);
assert!(!round.complete(), "the round is frozen, not substituted");
let delayed = fleet[0]
.open_arrival(
Admission::new(base, [4]).expect("one joiner"),
COMMIT,
1,
&stability,
)
.expect("the identical re-open absorbs and re-mints");
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(3, delayed), &stability),
Err(ArrivalRefusal::AttestedDeparture { station: 3 })
);
let still = fleet[0].arrival().expect("held");
assert!(!still.complete(), "the delayed word did not thaw the round");
let tagless = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("declares");
assert!(tagless.admission().is_none(), "a frozen round never rides");
let winner = tagless.address();
let delivered = cut(&[(1, 6), (2, 5), (3, 5)]);
let mut risen = tracker(&roster, &delivered);
let _ = risen.abandon_attested(&departed).expect("stands");
for &station in &[1u32, 2] {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adoption");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let renewed = fleet[0]
.try_seal(&risen)
.expect("substitution completes the window rounds")
.declaration();
assert!(fleet[0].arrival().is_none(), "the frozen round died");
let _ = fleet[0]
.open_arrival(
Admission::new(renewed, [4]).expect("one joiner"),
COMMIT,
1,
&risen,
)
.expect("the re-agreed round opens");
assert_eq!(
fleet[0]
.arrival()
.expect("held")
.family()
.collect::<Vec<_>>(),
alloc::vec![1, 2],
"the re-agreed family is the surviving one"
);
}
#[test]
fn recorded_content_rides_version_two_and_dormant_machines_spell_version_one() {
let (mut fleet, base, stability) = founded();
let dormant = fleet[1].snapshot().to_bytes();
assert_eq!(dormant[0], 0x01);
let plain_record = SealRecord::from_sealed(fleet[1].newest_sealed().expect("retained"));
assert_eq!(plain_record.to_bytes()[0], 0x01);
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let frame = fleet[0].snapshot().to_bytes();
assert_eq!(frame[0], 0x02);
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
let decoded = EpochLedgerSnapshot::from_bytes(&frame, budget).expect("the sibling decodes");
assert_eq!(decoded.to_bytes(), frame, "canonical bijection");
let restored = Epochs::rehydrate(&decoded, ROSTER, horizon()).expect("the checkpoint restores");
assert_eq!(restored, fleet[0], "the round rides the checkpoint whole");
let reported = cut(&[(1, 5), (2, 5)]);
let risen = tracker(&ROSTER, &reported);
let tagged = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &risen, &reported)
.expect("tags");
let bytes = tagged.to_bytes();
assert_eq!(bytes[0], 0x02);
assert_eq!(bytes.len(), tagged.encoded_len());
assert_eq!(
crate::metis::Declaration::from_bytes(&bytes).expect("decodes"),
tagged
);
let mid = fleet[0].snapshot().to_bytes();
assert_eq!(mid[0], 0x02);
let decoded = EpochLedgerSnapshot::from_bytes(&mid, budget).expect("decodes");
assert_eq!(
Epochs::rehydrate(&decoded, ROSTER, horizon()).expect("restores"),
fleet[0]
);
}
#[test]
fn an_admission_bearing_record_round_trips_and_the_joiner_bootstraps() {
let (mut fleet, base, _) = founded();
let founding_record = SealRecord::from_sealed(fleet[0].newest_sealed().expect("sealed"));
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adoption");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let sealed = fleet[0].try_seal(&risen).expect("seals").clone();
let record = SealRecord::from_sealed(&sealed);
let bytes = record.to_bytes();
assert_eq!(bytes[0], 0x02);
assert_eq!(bytes.len(), record.encoded_len());
let decoded = SealRecord::from_bytes(&bytes).expect("the sibling decodes");
assert_eq!(decoded, record);
assert_eq!(decoded.admission(), Some(&boundary(base)));
let frame = fleet[0].snapshot().to_bytes();
assert_eq!(frame[0], 0x02);
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
let decoded = EpochLedgerSnapshot::from_bytes(&frame, budget).expect("decodes");
assert_eq!(decoded.to_bytes(), frame);
let restored =
Epochs::rehydrate(&decoded, [1, 2, JOINER], horizon()).expect("restores widened");
assert_eq!(restored, fleet[0]);
let proof = LineageProofRecord::try_new(alloc::vec![
LineageProofEntry::new(founding_record, [0u8; 32]),
LineageProofEntry::new(record, [0u8; 32]),
])
.expect("two entries");
let mut joiner = Epochs::bootstrap(ROSTER, horizon(), &proof)
.expect("the oldest roster grounds the proof, and the admissions widen it");
assert_eq!(joiner.generation(), fleet[0].generation());
assert!(joiner.roster().eq(fleet[0].roster()));
let wide = [1u32, 2, JOINER];
let reported = cut(&[(1, 6), (2, 5), (3, 5)]);
let stability = tracker(&wide, &reported);
let declaration = fleet[0]
.declare(d(1, 7), Kairos::new(7, 0, 1, 0u16), &stability, &reported)
.expect("the next window opens over the widened roster");
joiner
.deliver(declaration.clone(), &stability, &reported)
.expect("the joiner's machine folds the declaration");
let winner = declaration.address();
let delivered = cut(&[(1, 7), (2, 5), (3, 5)]);
let risen = tracker(&wide, &delivered);
for machine in [&mut fleet[0], &mut joiner] {
for &station in &wide {
machine
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("a confirmation folds");
}
}
let _ = fleet[0].adopt(1, 7, &risen).expect("the incumbent adopts");
let _ = joiner.adopt(JOINER, 5, &risen).expect("the joiner adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
fleet[0]
.adopt_report(winner, &Vouched::trust(JOINER, 5))
.expect("the joiner's adoption folds at the incumbent");
joiner
.adopt_report(winner, &Vouched::trust(1, 7))
.expect("peer adoption");
joiner
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let a = fleet[0]
.try_seal(&risen)
.expect("the incumbent seals")
.clone();
let b = joiner.try_seal(&risen).expect("the joiner seals").clone();
assert_eq!(
SealRecord::from_sealed(&a).to_bytes(),
SealRecord::from_sealed(&b).to_bytes(),
"the admitted station and the incumbent seal one record"
);
}
#[test]
fn a_frame_cannot_claim_an_adopted_tagged_winner_without_its_round() {
let (mut fleet, base, _) = founded();
let joiner: u32 = 0xAB12_CD34;
let admission = Admission::new(base, [joiner]).expect("one joiner");
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let a = fleet[0]
.open_arrival(admission, COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts with assent");
let frame = fleet[0].snapshot().to_bytes();
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
assert!(
EpochLedgerSnapshot::from_bytes(&frame, budget).is_ok(),
"the honest frame decodes"
);
let refused = Err(crate::metis::EpochLedgerDecodeError::InvalidState(
"an adopted tagged winner without its endorsed arrival round",
));
let pattern = joiner.to_be_bytes();
let at = frame
.windows(4)
.position(|window| window == pattern)
.expect("the joiner is spelled in the candidate admission");
let mut discordant = frame.clone();
discordant[at + 3] ^= 0x01;
assert_eq!(
EpochLedgerSnapshot::from_bytes(&discordant, budget),
refused
);
let arrival_section = 1 + (8 + 12 + 8 + 4) + 32 + 4 + 8 + 2 * 5;
let mut absent = frame[..frame.len() - arrival_section].to_vec();
absent.push(0x00);
assert_eq!(EpochLedgerSnapshot::from_bytes(&absent, budget), refused);
}
#[test]
fn a_checkpoint_cannot_place_a_joiners_coordinate_before_its_admission() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let a = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, a), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let _ = fleet[0].try_seal(&risen).expect("seals the admission");
let frame = fleet[0].snapshot().to_bytes();
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
assert!(
EpochLedgerSnapshot::from_bytes(&frame, budget).is_ok(),
"the honest heterogeneous lineage decodes"
);
let entry: Vec<u8> = 2u32
.to_be_bytes()
.iter()
.chain(5u64.to_be_bytes().iter())
.copied()
.collect();
let at = frame
.windows(entry.len())
.position(|window| window == entry)
.expect("record 1's join carries station 2 at counter 5");
let mut crafted = frame;
crafted[at..at + 4].copy_from_slice(&JOINER.to_be_bytes());
assert_eq!(
EpochLedgerSnapshot::from_bytes(&crafted, budget),
Err(crate::metis::EpochLedgerDecodeError::InvalidState(
"sealed join covers a station outside the roster",
))
);
}
#[test]
fn the_assent_binds_to_the_rounds_own_voice() {
let (mut fleet, base, _) = founded();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let mut liar = fleet[0].clone();
let forged = liar
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
liar.fold_endorsement(&Vouched::trust(2, forged), &stability)
.expect("the forged endorsement folds");
let declaration = liar
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let _ = fleet[1]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens as station 1");
assert_eq!(
fleet[1].open_arrival(boundary(base), COMMIT, 2, &stability),
Err(ArrivalRefusal::DiscordantVoice {
held: 1,
offered: 2
})
);
fleet[1]
.deliver(declaration, &stability, &reported)
.expect("agreed inputs validate");
let winner = EpochAddress::try_from_parts(base.generation() + 1, (1, 6)).expect("valid");
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[1]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
assert_eq!(
fleet[1].adopt(2, 5, &risen),
Err(EpochRefusal::UnassentedAdmission { winner }),
"another voice's round is not this station's assent"
);
}
#[test]
fn a_checkpoint_cannot_admit_one_station_twice() {
let first: u32 = 0xAA01;
let second: u32 = 0xAA02;
let (mut fleet, base, _) = founded();
let widen =
|machine: &mut Epochs, base: EpochAddress, joiner: u32, roster: &[u32], dot: Dot| {
let reported = cut(&roster
.iter()
.map(|&s| (s, dot.counter() - 1))
.collect::<Vec<_>>());
let stability = tracker(roster, &reported);
let admission = Admission::new(base, [joiner]).expect("one joiner");
let e = machine
.open_arrival(admission, COMMIT, 1, &stability)
.expect("opens");
for &station in roster {
if station != 1 {
machine
.fold_endorsement(&Vouched::trust(station, e.clone()), &stability)
.expect("folds");
}
}
let declaration = machine
.declare(
dot,
Kairos::new(dot.counter(), 0, 1, 0u16),
&stability,
&reported,
)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&roster
.iter()
.map(|&s| {
(
s,
if s == 1 {
dot.counter()
} else {
dot.counter() - 1
},
)
})
.collect::<Vec<_>>());
let risen = tracker(roster, &delivered);
for &station in roster {
machine
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = machine
.adopt(1, dot.counter(), &risen)
.expect("adopts with assent");
for &station in roster {
if station != 1 {
machine
.adopt_report(winner, &Vouched::trust(station, dot.counter() - 1))
.expect("peer adoption");
}
}
machine.try_seal(&risen).expect("seals").declaration()
};
let second_base = widen(&mut fleet[0], base, first, &[1, 2], d(1, 6));
let _ = widen(&mut fleet[0], second_base, second, &[1, 2, first], d(1, 7));
let frame = fleet[0].snapshot().to_bytes();
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
assert!(
EpochLedgerSnapshot::from_bytes(&frame, budget).is_ok(),
"the honest twice-widened lineage decodes"
);
let pattern = second.to_be_bytes();
let at = frame
.windows(4)
.rposition(|window| window == pattern)
.expect("the second joiner is spelled in the third record's admission");
let mut crafted = frame;
crafted[at..at + 4].copy_from_slice(&first.to_be_bytes());
assert_eq!(
EpochLedgerSnapshot::from_bytes(&crafted, budget),
Err(crate::metis::EpochLedgerDecodeError::InvalidState(
"sealed admission joiner is already a member",
))
);
}
#[test]
fn an_attestation_freezes_even_a_complete_round_at_the_tag_door() {
let roster = [1u32, 2, 3];
let mut fleet = alloc::vec![Epochs::new(roster, horizon())];
let base = seal_first(&mut fleet, &roster);
let reported = cut(&[(1, 5), (2, 5), (3, 5)]);
let mut stability = tracker(&roster, &reported);
let admission = Admission::new(base, [4]).expect("one joiner");
let e = fleet[0]
.open_arrival(admission, COMMIT, 1, &stability)
.expect("opens over {1, 2, 3}");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e.clone()), &stability)
.expect("folds");
fleet[0]
.fold_endorsement(&Vouched::trust(3, e), &stability)
.expect("3 endorsed before departing");
assert!(fleet[0].arrival().expect("held").complete());
let departed = {
let mut round = Departure::opened(3, 1, [1, 2]).expect("survivors");
let mut held = DotSet::new();
for counter in 1..=5 {
let _ = held.insert(d(3, counter));
}
let _ = round.propose(&held, &DotSet::new()).expect("gap-free");
round
.fold(&Vouched::trust(2, 5))
.expect("survivor proposal");
round.try_seal().expect("sealed").clone()
};
let _ = stability
.abandon_attested(&departed)
.expect("the attestation lands after completion");
let plain = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("declares");
assert!(
plain.admission().is_none(),
"a departed identity's word cannot be spent, even latched"
);
let winner = plain.address();
let delivered = cut(&[(1, 6), (2, 5), (3, 5)]);
let mut risen = tracker(&roster, &delivered);
let _ = risen.abandon_attested(&departed).expect("stands");
for &station in &[1u32, 2] {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirmation");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adoption");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let renewed = fleet[0]
.try_seal(&risen)
.expect("substitution completes the window rounds")
.declaration();
let e = fleet[0]
.open_arrival(
Admission::new(renewed, [4]).expect("one joiner"),
COMMIT,
1,
&risen,
)
.expect("re-agrees over the surviving family");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &risen)
.expect("the survivor completes the round");
let reported = cut(&[(1, 6), (2, 5), (3, 5)]);
let risen2 = {
let mut tracker = tracker(&roster, &reported);
let _ = tracker.abandon_attested(&departed).expect("stands");
tracker
};
let tagged = fleet[0]
.declare(d(1, 7), Kairos::new(7, 0, 1, 0u16), &risen2, &reported)
.expect("declares over the new base");
assert!(
tagged.admission().is_some(),
"the re-agreed round tags over the surviving family"
);
}
#[test]
fn restoring_another_stations_checkpoint_turns_loud_at_the_next_open() {
let (mut fleet, base, stability) = founded();
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens as station 1");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let frame = fleet[0].snapshot().to_bytes();
let own_at = frame.len() - (4 + 8 + 2 * 5);
let mut foreign = frame;
foreign[own_at..own_at + 4].copy_from_slice(&2u32.to_be_bytes());
let budget = EpochLedgerDecodeBudget::new(8, 8, 8, 64, 8);
let decoded = EpochLedgerSnapshot::from_bytes(&foreign, budget)
.expect("another station's honest checkpoint decodes");
let mut restored = Epochs::rehydrate(&decoded, ROSTER, horizon()).expect("restores");
assert_eq!(
restored.open_arrival(boundary(base), COMMIT, 1, &stability),
Err(ArrivalRefusal::DiscordantVoice {
held: 2,
offered: 1
}),
"the wrong-checkpoint misconfiguration is loud, not silent"
);
}
#[test]
fn a_tight_candidate_budget_does_not_refuse_membership_growth() {
let (mut fleet, base, _) = founded();
let admission = Admission::new(base, [3, 4]).expect("two joiners");
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let e = fleet[0]
.open_arrival(admission.clone(), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let sealed = fleet[0].try_seal(&risen).expect("seals").clone();
let record = SealRecord::from_sealed(&sealed);
let bytes = record.to_bytes();
let decoded =
SealRecord::from_bytes_with_budget(&bytes, crate::metis::SealDecodeBudget::new(1))
.expect("one candidate fits the budget; joiners are not candidates");
assert_eq!(decoded.admission(), Some(&admission));
}
#[test]
fn a_joiners_dots_before_its_admission_refuse_at_bootstrap() {
let (mut fleet, base, _) = founded();
let founding_bytes =
SealRecord::from_sealed(fleet[0].newest_sealed().expect("sealed")).to_bytes();
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let widening = SealRecord::from_sealed(fleet[0].try_seal(&risen).expect("seals"));
let entry: Vec<u8> = 2u32
.to_be_bytes()
.iter()
.chain(5u64.to_be_bytes().iter())
.copied()
.collect();
let at = founding_bytes
.windows(entry.len())
.rposition(|window| window == entry)
.expect("the founding join carries station 2 at counter 5");
let mut crafted = founding_bytes;
crafted[at..at + 4].copy_from_slice(&JOINER.to_be_bytes());
let founding = SealRecord::from_bytes(&crafted).expect("structurally canonical");
let proof = LineageProofRecord::try_new(alloc::vec![
LineageProofEntry::new(founding, [0u8; 32]),
LineageProofEntry::new(widening, [0u8; 32]),
])
.expect("two entries");
assert!(matches!(
Epochs::bootstrap(ROSTER, horizon(), &proof),
Err(crate::metis::EpochBootstrapError::ForeignStation {
generation: 1,
station: JOINER,
})
));
}
#[test]
fn a_founding_member_cannot_be_re_admitted_by_a_crafted_proof() {
let (mut fleet, base, _) = founded();
let founding_record = SealRecord::from_sealed(fleet[0].newest_sealed().expect("sealed"));
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let bytes = SealRecord::from_sealed(fleet[0].try_seal(&risen).expect("seals")).to_bytes();
let pattern = JOINER.to_be_bytes();
let at = bytes
.windows(4)
.rposition(|window| window == pattern)
.expect("the joiner is spelled in the admission section");
let mut crafted = bytes;
crafted[at..at + 4].copy_from_slice(&2u32.to_be_bytes());
let widening = SealRecord::from_bytes(&crafted).expect("structurally canonical");
let proof = LineageProofRecord::try_new(alloc::vec![
LineageProofEntry::new(founding_record, [0u8; 32]),
LineageProofEntry::new(widening, [0u8; 32]),
])
.expect("two entries");
assert!(matches!(
Epochs::bootstrap(ROSTER, horizon(), &proof),
Err(crate::metis::EpochBootstrapError::AdmissionAlreadyMember {
generation: 2,
station: 2,
})
));
}
#[test]
fn a_commitment_discord_is_fork_evidence_the_address_cannot_see() {
let (mut fleet, base, stability) = founded();
let endorsement = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("the round opens");
assert_eq!(
fleet[0].open_arrival(boundary(base), [9u8; 32], 1, &stability),
Err(ArrivalRefusal::CommitmentDiscord { base })
);
let forked = fleet[1]
.open_arrival(boundary(base), [9u8; 32], 2, &stability)
.expect("the forked peer's round opens at its own machine");
assert_eq!(
fleet[0].fold_endorsement(&Vouched::trust(2, forked), &stability),
Err(ArrivalRefusal::CommitmentDiscord { base })
);
assert!(
!fleet[0].arrival().expect("held").complete(),
"discord latches nothing"
);
let _ = endorsement;
let mut liar = fleet[1].clone();
let e = liar
.open_arrival(boundary(base), [9u8; 32], 2, &stability)
.expect("the liar's round opens");
liar.fold_endorsement(&Vouched::trust(1, e), &stability)
.expect("the forged endorsement folds");
let reported = cut(&[(1, 5), (2, 5)]);
let forked_tag = liar
.declare(d(2, 6), Kairos::new(6, 0, 2, 0u16), &stability, &reported)
.expect("tags under the forked commitment");
fleet[0]
.deliver(forked_tag, &stability, &reported)
.expect("agreed inputs validate");
let winner = EpochAddress::try_from_parts(base.generation() + 1, (2, 6)).expect("valid");
let delivered = cut(&[(1, 5), (2, 6)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
assert_eq!(
fleet[0].adopt(1, 5, &risen),
Err(EpochRefusal::UnassentedAdmission { winner }),
"the assent compares the commitment too"
);
}
#[test]
fn the_joiner_ceiling_is_independent_and_bounds_the_decoder() {
let (mut fleet, base, _) = founded();
let admission = Admission::new(base, [3, 4]).expect("two joiners");
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let e = fleet[0]
.open_arrival(admission, COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let bytes = SealRecord::from_sealed(fleet[0].try_seal(&risen).expect("seals")).to_bytes();
assert!(matches!(
SealRecord::from_bytes_with_budget(
&bytes,
crate::metis::SealDecodeBudget::new(1).with_max_joiners(1),
),
Err(crate::metis::SealDecodeError::TooManyJoiners {
count: 2,
budget: 1
})
));
assert!(
SealRecord::from_bytes_with_budget(&bytes, crate::metis::SealDecodeBudget::new(1)).is_ok(),
"the default ceiling admits legitimate growth under a tight candidate budget"
);
}
#[test]
fn a_heterogeneous_proof_spells_version_two_and_round_trips() {
let (mut fleet, base, _) = founded();
let founding = SealRecord::from_sealed(fleet[0].newest_sealed().expect("sealed"));
let reported = cut(&[(1, 5), (2, 5)]);
let stability = tracker(&ROSTER, &reported);
let e = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
fleet[0]
.fold_endorsement(&Vouched::trust(2, e), &stability)
.expect("completes");
let declaration = fleet[0]
.declare(d(1, 6), Kairos::new(6, 0, 1, 0u16), &stability, &reported)
.expect("tags");
let winner = declaration.address();
let delivered = cut(&[(1, 6), (2, 5)]);
let risen = tracker(&ROSTER, &delivered);
for &station in &ROSTER {
fleet[0]
.confirm(winner, &Vouched::trust(station, delivered.clone()))
.expect("confirms");
}
let _ = fleet[0].adopt(1, 6, &risen).expect("adopts");
fleet[0]
.adopt_report(winner, &Vouched::trust(2, 5))
.expect("peer adoption");
let widening = SealRecord::from_sealed(fleet[0].try_seal(&risen).expect("seals"));
let proof = LineageProofRecord::try_new(alloc::vec![
LineageProofEntry::new(founding.clone(), [0u8; 32]),
LineageProofEntry::new(widening, [0u8; 32]),
])
.expect("two entries");
let bytes = proof.to_bytes();
assert_eq!(bytes[0], 0x02, "an admission-bearing proof is version 2");
assert_eq!(bytes.len(), proof.encoded_len());
assert_eq!(
LineageProofRecord::from_bytes(&bytes).expect("round-trips"),
proof
);
let mut downgraded = bytes;
downgraded[0] = 0x01;
assert!(matches!(
LineageProofRecord::from_bytes(&downgraded),
Err(crate::metis::LineageProofDecodeError::AdmissionInVersionOne { generation: 2 })
));
let plain =
LineageProofRecord::try_new(alloc::vec![LineageProofEntry::new(founding, [0u8; 32])])
.expect("one entry");
let mut upgraded = plain.to_bytes();
assert_eq!(upgraded[0], 0x01);
upgraded[0] = 0x02;
assert!(matches!(
LineageProofRecord::from_bytes(&upgraded),
Err(crate::metis::LineageProofDecodeError::VersionTwoWithoutAdmissions)
));
}
#[test]
fn an_endorsement_travels_as_its_parts() {
let (mut fleet, base, stability) = founded();
let minted = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("the peer endorses at its own machine");
let _ = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
let rebuilt =
crate::metis::Endorsement::from_parts(minted.admission().clone(), *minted.commitment());
assert_eq!(rebuilt, minted);
fleet[0]
.fold_endorsement(&Vouched::trust(2, rebuilt), &stability)
.expect("the rebuilt claim folds");
assert!(fleet[0].arrival().expect("held").complete());
}
#[test]
fn an_endorsement_travels_as_its_wire_frame() {
let (mut fleet, base, stability) = founded();
let minted = fleet[1]
.open_arrival(boundary(base), COMMIT, 2, &stability)
.expect("the peer endorses at its own machine");
let _ = fleet[0]
.open_arrival(boundary(base), COMMIT, 1, &stability)
.expect("opens");
let frame = minted.to_bytes();
assert_eq!(minted.encoded_len(), frame.len());
let decoded = crate::metis::Endorsement::from_bytes(&frame).expect("the frame decodes");
assert_eq!(decoded, minted);
fleet[0]
.fold_endorsement(&Vouched::trust(2, decoded), &stability)
.expect("the decoded claim folds");
assert!(fleet[0].arrival().expect("held").complete());
}