tests: Allow passing path to mocket utility

Also use anyhow to remove some unwraps.
This commit is contained in:
sleepycatcoding 2023-07-23 19:12:00 +03:00 committed by Nathan Adams
parent a0e40287c9
commit 9604b07518
3 changed files with 28 additions and 10 deletions

2
Cargo.lock generated
View File

@ -2849,6 +2849,8 @@ dependencies = [
name = "mocket"
version = "0.1.0"
dependencies = [
"anyhow",
"clap",
"ruffle_socket_format",
"tracing",
"tracing-subscriber",

View File

@ -8,6 +8,8 @@ repository.workspace = true
version.workspace = true
[dependencies]
anyhow = "1.0"
clap = { version = "4.3.12", features = ["derive"] }
tracing = { workspace = true}
tracing-subscriber = { workspace = true }
ruffle_socket_format = { path = "../socket-format" }

View File

@ -1,7 +1,10 @@
use anyhow::Error;
use clap::Parser;
use ruffle_socket_format::SocketEvent;
use std::{
io::{Read, Write},
net::TcpListener,
path::PathBuf,
};
use tracing_subscriber::filter::{EnvFilter, LevelFilter};
@ -11,7 +14,16 @@ static POLICY: &[u8] = b"<?xml version=\"1.0\"?>
<allow-access-from domain=\"*\" to-ports=\"*\"/>
</cross-domain-policy>\0";
fn main() {
#[derive(Parser, Debug)]
struct Opt {
/// Path to a `socket.json` file.
#[clap(name = "FILE")]
file_path: PathBuf,
}
fn main() -> Result<(), Error> {
let opt = Opt::parse();
let subscriber = tracing_subscriber::fmt::Subscriber::builder()
.with_env_filter(
EnvFilter::builder()
@ -22,22 +34,22 @@ fn main() {
// Ignore error if it's already been set
let _ = tracing::subscriber::set_global_default(subscriber);
let events = SocketEvent::from_file("socket.json").unwrap();
let events = SocketEvent::from_file(opt.file_path)?;
let event_count = events.len();
let listener = TcpListener::bind("0.0.0.0:8001").unwrap();
tracing::info!("Listening on {}", listener.local_addr().unwrap());
let (mut stream, addr) = listener.accept().unwrap();
let listener = TcpListener::bind("0.0.0.0:8001")?;
tracing::info!("Listening on {}", listener.local_addr()?);
let (mut stream, addr) = listener.accept()?;
tracing::info!("Incoming connection from {}", addr);
// Handle socket policy stuff. (Required as Flash Player wont want to connect otherwise.)
let mut buffer = [0; 4096];
let _ = stream.read(&mut buffer);
stream.write_all(POLICY).unwrap();
stream.write_all(POLICY)?;
tracing::info!("Policy sent successfully!");
// Now we listen again as flash reopens socket connection.
let (mut stream, addr) = listener.accept().unwrap();
let (mut stream, addr) = listener.accept()?;
tracing::info!("Incoming connection from {}", addr);
for (index, event) in events.into_iter().enumerate() {
@ -53,7 +65,7 @@ fn main() {
match stream.read(&mut buffer) {
Err(_) | Ok(0) => {
tracing::error!("Expected data, but socket was closed.");
return;
return Ok(());
}
Ok(read) => {
if read == 4096 {
@ -80,7 +92,7 @@ fn main() {
match stream.write(&payload) {
Err(_) | Ok(0) => {
tracing::error!("Socket was closed in middle of writing.");
return;
return Ok(());
}
Ok(written) => {
let _ = payload.drain(..written);
@ -94,7 +106,7 @@ fn main() {
match stream.read(&mut buffer) {
Err(_) | Ok(0) => {
tracing::info!("Client has closed the connection!");
return;
return Ok(());
}
Ok(_) => {
tracing::error!(
@ -110,4 +122,6 @@ fn main() {
}
}
}
Ok(())
}