use neqo_common::{event::Provider as _, header::HeadersExt as _}; use neqo_http3::{Error, Header, Http3ClientEvent, Http3ServerEvent, Priority}; use test_fixture::{default_http3_client, default_http3_server, exchange_packets, now};
const AUTHORITY: &str = "something.com";
#[test] fn classic_connect() { // Connect a client and a server. letmut client = default_http3_client(); letmut server = default_http3_server(); let out = test_fixture::connect_peers(&mut client, &mut server);
assert_eq!(server.process(out, now()).dgram(), None);
// Ignore all events so far.
drop(server.events());
client.events();
// Have client send a CONNECT request. let stream_id = client
.connect(now(), AUTHORITY, &[], Priority::default())
.unwrap();
client.send_data(stream_id, b"ping", now()).unwrap();
exchange_packets(&mut client, &mut server, false, None);
let Some(Http3ServerEvent::Headers { headers, .. }) = server.next_event() else {
panic!("Expected Headers event");
};
assert_eq!(
headers.find_header(":method").map(Header::value),
Some(b"CONNECT".as_ref())
);
assert_eq!(
headers.find_header(":authority").map(Header::value),
Some(AUTHORITY.as_bytes())
); // > The :scheme and :path pseudo-header fields are omitted // // <https://datatracker.ietf.org/doc/html/rfc9114#section-4.4>
assert_eq!(headers.find_header(":scheme"), None);
assert_eq!(headers.find_header(":path"), None);
let Some(Http3ServerEvent::Data { stream, data, .. }) = server.next_event() else {
panic!("Expected Data event");
};
assert_eq!(stream.stream_id(), stream_id);
assert_eq!(data, b"ping");
// Have server respond.
stream
.send_headers(&[Header::new(":status", "200")])
.unwrap();
stream.send_data(b"pong", now()).unwrap();
exchange_packets(&mut client, &mut server, false, None);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.