parent
e2cdf11bc8
commit
8b13cb7ad3
@ -1 +1,13 @@ |
|||||||
language: rust |
language: rust |
||||||
|
|
||||||
|
before_script: |
||||||
|
- export PATH="$PATH:$HOME/.cargo/bin" |
||||||
|
|
||||||
|
script: |
||||||
|
- cargo test --release |
||||||
|
|
||||||
|
after_success: |
||||||
|
- sudo apt-get install python-unittest2 |
||||||
|
- sudo pip install ghp-import urllib3[secure] autobahntestsuite |
||||||
|
- echo "Running Autobahn TestSuite for client" && ./scripts/autobahn-client.sh |
||||||
|
- echo "Running Autobahn TestSuite for server" && ./scripts/autobahn-server.sh |
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,12 @@ |
|||||||
|
{ |
||||||
|
"outdir": "./autobahn/server", |
||||||
|
"servers": [ |
||||||
|
{ |
||||||
|
"agent": "Tungstenite", |
||||||
|
"url": "ws://127.0.0.1:9002" |
||||||
|
} |
||||||
|
], |
||||||
|
"cases": ["*"], |
||||||
|
"exclude-cases": [], |
||||||
|
"exclude-agent-cases": {} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
{ |
||||||
|
"url": "ws://127.0.0.1:9001", |
||||||
|
"outdir": "./autobahn/client", |
||||||
|
"cases": ["*"], |
||||||
|
"exclude-cases": [], |
||||||
|
"exclude-agent-cases": {} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,73 @@ |
|||||||
|
#[macro_use] extern crate log; |
||||||
|
extern crate env_logger; |
||||||
|
extern crate futures; |
||||||
|
extern crate tokio; |
||||||
|
extern crate tokio_tungstenite; |
||||||
|
extern crate url; |
||||||
|
|
||||||
|
use url::Url; |
||||||
|
use futures::{Future, Stream}; |
||||||
|
use tokio_tungstenite::{ |
||||||
|
connect_async, |
||||||
|
tungstenite::{ |
||||||
|
connect, |
||||||
|
Result, |
||||||
|
Error as WsError, |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
const AGENT: &'static str = "Tungstenite"; |
||||||
|
|
||||||
|
fn get_case_count() -> Result<u32> { |
||||||
|
let (mut socket, _) = connect( |
||||||
|
Url::parse("ws://localhost:9001/getCaseCount").unwrap(), |
||||||
|
)?; |
||||||
|
let msg = socket.read_message()?; |
||||||
|
socket.close(None)?; |
||||||
|
Ok(msg.into_text()?.parse::<u32>().unwrap()) |
||||||
|
} |
||||||
|
|
||||||
|
fn update_reports() -> Result<()> { |
||||||
|
let (mut socket, _) = connect( |
||||||
|
Url::parse(&format!("ws://localhost:9001/updateReports?agent={}", AGENT)).unwrap(), |
||||||
|
)?; |
||||||
|
socket.close(None)?; |
||||||
|
Ok(()) |
||||||
|
} |
||||||
|
|
||||||
|
fn run_test(case: u32) { |
||||||
|
info!("Running test case {}", case); |
||||||
|
let case_url = Url::parse( |
||||||
|
&format!("ws://localhost:9001/runCase?case={}&agent={}", case, AGENT) |
||||||
|
).unwrap(); |
||||||
|
|
||||||
|
let job = connect_async(case_url) |
||||||
|
.map_err(|err| error!("Connect error: {}", err)) |
||||||
|
.and_then(|(ws_stream, _)| { |
||||||
|
let (sink, stream) = ws_stream.split(); |
||||||
|
stream |
||||||
|
.filter(|msg| msg.is_text() || msg.is_binary()) |
||||||
|
.forward(sink) |
||||||
|
.and_then(|(_stream, _sink)| Ok(())) |
||||||
|
.map_err(|err| { |
||||||
|
match err { |
||||||
|
WsError::ConnectionClosed => (), |
||||||
|
err => info!("WS error {}", err), |
||||||
|
} |
||||||
|
}) |
||||||
|
}); |
||||||
|
|
||||||
|
tokio::run(job) |
||||||
|
} |
||||||
|
|
||||||
|
fn main() { |
||||||
|
env_logger::init(); |
||||||
|
|
||||||
|
let total = get_case_count().unwrap(); |
||||||
|
|
||||||
|
for case in 1..(total + 1) { |
||||||
|
run_test(case) |
||||||
|
} |
||||||
|
|
||||||
|
update_reports().unwrap(); |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
#[macro_use] extern crate log; |
||||||
|
extern crate env_logger; |
||||||
|
extern crate futures; |
||||||
|
extern crate tokio; |
||||||
|
extern crate tokio_tungstenite; |
||||||
|
|
||||||
|
use futures::{Future, Stream}; |
||||||
|
use tokio::net::TcpListener; |
||||||
|
use tokio_tungstenite::{ |
||||||
|
accept_async, |
||||||
|
tungstenite::Error as WsError, |
||||||
|
}; |
||||||
|
|
||||||
|
fn main() { |
||||||
|
env_logger::init(); |
||||||
|
|
||||||
|
let mut runtime = tokio::runtime::Builder::new().build().unwrap(); |
||||||
|
|
||||||
|
let addr = "127.0.0.1:9002".parse().unwrap(); |
||||||
|
let socket = TcpListener::bind(&addr).unwrap(); |
||||||
|
info!("Listening on: {}", addr); |
||||||
|
|
||||||
|
let srv = socket.incoming().map_err(Into::into).for_each(move |stream| { |
||||||
|
|
||||||
|
let peer = stream.peer_addr().expect("connected streams should have a peer address"); |
||||||
|
info!("Peer address: {}", peer); |
||||||
|
|
||||||
|
accept_async(stream).and_then(move |ws_stream| { |
||||||
|
info!("New WebSocket connection: {}", peer); |
||||||
|
let (sink, stream) = ws_stream.split(); |
||||||
|
let job = stream |
||||||
|
.filter(|msg| msg.is_text() || msg.is_binary()) |
||||||
|
.forward(sink) |
||||||
|
.and_then(|(_stream, _sink)| Ok(())) |
||||||
|
.map_err(|err| { |
||||||
|
match err { |
||||||
|
WsError::ConnectionClosed => (), |
||||||
|
err => info!("WS error: {}", err), |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
tokio::spawn(job); |
||||||
|
Ok(()) |
||||||
|
}) |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
runtime.block_on(srv).unwrap(); |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
# Author michael <themichaeleden@gmail.com> |
||||||
|
set -euo pipefail |
||||||
|
set -x |
||||||
|
SOURCE_DIR=$(readlink -f "${BASH_SOURCE[0]}") |
||||||
|
SOURCE_DIR=$(dirname "$SOURCE_DIR") |
||||||
|
cd "${SOURCE_DIR}/.." |
||||||
|
|
||||||
|
function cleanup() { |
||||||
|
kill -9 ${FUZZINGSERVER_PID} |
||||||
|
} |
||||||
|
trap cleanup TERM EXIT |
||||||
|
|
||||||
|
function test_diff() { |
||||||
|
if ! diff -q \ |
||||||
|
<(jq -S 'del(."Tungstenite" | .. | .duration?)' 'autobahn/client-results.json') \ |
||||||
|
<(jq -S 'del(."Tungstenite" | .. | .duration?)' 'autobahn/client/index.json') |
||||||
|
then |
||||||
|
echo 'Difference in results, either this is a regression or' \ |
||||||
|
'one should update autobahn/client-results.json with the new results.' \ |
||||||
|
'The results are:' |
||||||
|
exit 64 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
cargo build --release --example autobahn-client |
||||||
|
|
||||||
|
wstest -m fuzzingserver -s 'autobahn/fuzzingserver.json' & FUZZINGSERVER_PID=$! |
||||||
|
sleep 3 |
||||||
|
echo "Server PID: ${FUZZINGSERVER_PID}" |
||||||
|
cargo run --release --example autobahn-client |
||||||
|
test_diff |
@ -0,0 +1,31 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
# Author michael <themichaeleden@gmail.com> |
||||||
|
set -euo pipefail |
||||||
|
set -x |
||||||
|
SOURCE_DIR=$(readlink -f "${BASH_SOURCE[0]}") |
||||||
|
SOURCE_DIR=$(dirname "$SOURCE_DIR") |
||||||
|
cd "${SOURCE_DIR}/.." |
||||||
|
WSSERVER_PID= |
||||||
|
|
||||||
|
function cleanup() { |
||||||
|
kill -9 ${WSSERVER_PID} |
||||||
|
} |
||||||
|
trap cleanup TERM EXIT |
||||||
|
|
||||||
|
function test_diff() { |
||||||
|
if ! diff -q \ |
||||||
|
<(jq -S 'del(."Tungstenite" | .. | .duration?)' 'autobahn/client-results.json') \ |
||||||
|
<(jq -S 'del(."Tungstenite" | .. | .duration?)' 'autobahn/server/index.json') |
||||||
|
then |
||||||
|
echo Difference in results, either this is a regression or \ |
||||||
|
one should update autobahn/server-results.json with the new results. |
||||||
|
exit 64 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
cargo build --release --example autobahn-server |
||||||
|
cargo run --release --example autobahn-server & WSSERVER_PID=$! |
||||||
|
echo "Server PID: ${WSSERVER_PID}" |
||||||
|
sleep 3 |
||||||
|
wstest -m fuzzingclient -s 'autobahn/fuzzingclient.json' |
||||||
|
test_diff |
Loading…
Reference in new issue