ptth/src/lib.rs

77 lines
1.7 KiB
Rust

pub mod http_serde;
// It's easier if the server can stream its response body
// back to the relay un-changed inside its request body
// So we wrap the server's actual response head
// (status code, headers, etc.) in this one header field.
pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4";
// Basically binaries, but in the lib we can do experimental
// test stuff like spawn them both in the same process
pub mod relay;
pub mod server;
#[cfg (test)]
mod tests {
use tokio::{
runtime::Runtime,
spawn,
};
use super::{
relay,
server,
};
#[test]
fn end_to_end () {
use reqwest::Client;
let mut rt = Runtime::new ().unwrap ();
// Spawn the root task
rt.block_on (async {
let relay_url = "http://127.0.0.1:4000";
spawn (async {
relay::main ().await.unwrap ();
});
let relay_url_2 = relay_url.into ();
spawn (async move {
let opt = server::Opt {
relay_url: relay_url_2,
file_server_root: "./".into (),
};
server::main (opt).await.unwrap ();
});
let client = Client::new ();
let resp = client.get (&format! ("{}/relay_up_check", relay_url))
.send ().await.unwrap ().bytes ().await.unwrap ();
assert_eq! (resp, "Relay is up\n");
let resp = client.get (&format! ("{}/servers/alien_wildlands/COPYING", relay_url))
.send ().await.unwrap ().bytes ().await.unwrap ();
assert_eq! (blake3::hash (&resp), blake3::Hash::from ([
0xca, 0x02, 0x92, 0x78,
0x9c, 0x0a, 0x0e, 0xcb,
0xa7, 0x06, 0xf4, 0xb3,
0xf3, 0x49, 0x30, 0x07,
0xa9, 0x95, 0x17, 0x31,
0xc1, 0xd4, 0x32, 0xc5,
0x2c, 0x4a, 0xac, 0x1f,
0x1a, 0xbb, 0xa8, 0xef,
]));
});
}
}