fn invariants()

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());
            }
        }
    }