in quic/s2n-quic-transport/src/space/handshake_status/fuzz_target.rs [217:260]
fn invariants(&self) {
assert_eq!(self.subject.is_complete(), self.oracle.complete);
assert_eq!(self.subject.is_confirmed(), self.oracle.confirmed);
assert_eq!(
self.oracle.pending,
matches!(self.subject, HandshakeStatus::InProgress)
);
if matches!(self.subject, HandshakeStatus::Confirmed) {
assert!(self.oracle.complete);
assert!(self.oracle.confirmed);
}
// SERVER
if self.oracle.endpoint_type.is_server() {
if self.oracle.complete {
assert!(self.subject.is_confirmed());
}
if self.oracle.handshake_done_sent {
assert!(!matches!(self.subject, HandshakeStatus::InProgress));
if let HandshakeStatus::ServerCompleteConfirmed(flag) = &self.subject {
// HANDSHAKE_DONE should either needs transmission or is in-flight
assert!(!flag.is_idle());
}
}
if self.oracle.handshake_done_delivered {
assert!(matches!(self.subject, HandshakeStatus::Confirmed));
}
}
// CLIENT
if self.oracle.endpoint_type.is_client() {
// If handshake is complete but awaiting confirmation
if self.subject.is_complete() && !self.oracle.handshake_done_received {
assert!(!self.subject.is_confirmed());
assert!(matches!(self.subject, HandshakeStatus::ClientComplete));
}
if self.oracle.handshake_done_received {
assert!(self.subject.is_confirmed());
}
}
}