mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-01-11 15:39:37 -05:00
Add Tor feature flag and only run test if enabled
This commit is contained in:
parent
5e19949d71
commit
295216a8ee
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@ -46,6 +46,9 @@ jobs:
|
||||
build_test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install tor
|
||||
run: sudo apt-get tor
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v2
|
||||
|
||||
|
@ -22,7 +22,7 @@ serde_json = "1"
|
||||
sha2 = "0.9"
|
||||
thiserror = "1"
|
||||
tokio = { version = "0.2", default-features = false, features = ["blocking", "macros", "rt-core", "time", "rt-threaded"] }
|
||||
torut = "0.1"
|
||||
torut = { version = "0.1", optional = true }
|
||||
tracing = "0.1"
|
||||
|
||||
[dev-dependencies]
|
||||
@ -34,4 +34,8 @@ monero-harness = { path = "../monero-harness" }
|
||||
spectral = "0.6"
|
||||
testcontainers = "0.10"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = "0.2"
|
||||
tracing-subscriber = "0.2"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
tor = ["torut"]
|
||||
|
@ -49,5 +49,6 @@ pub mod alice;
|
||||
pub mod bitcoin;
|
||||
pub mod bob;
|
||||
pub mod monero;
|
||||
#[cfg(feature = "tor")]
|
||||
pub mod tor;
|
||||
pub mod transport;
|
||||
|
@ -1,64 +1,69 @@
|
||||
use anyhow::Result;
|
||||
use hyper::service::{make_service_fn, service_fn};
|
||||
use reqwest::StatusCode;
|
||||
use spectral::prelude::*;
|
||||
use std::convert::Infallible;
|
||||
use tokio::sync::oneshot::Receiver;
|
||||
use torut::onion::TorSecretKeyV3;
|
||||
use xmr_btc::tor::{AuthenticatedConnection, TOR_PROXY_ADDR};
|
||||
#[cfg(feature = "tor")]
|
||||
mod tor_test {
|
||||
|
||||
async fn hello_world(
|
||||
_req: hyper::Request<hyper::Body>,
|
||||
) -> Result<hyper::Response<hyper::Body>, Infallible> {
|
||||
Ok(hyper::Response::new("Hello World".into()))
|
||||
}
|
||||
|
||||
fn start_test_service(port: u16, rx: Receiver<()>) {
|
||||
let make_svc = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(hello_world)) });
|
||||
let addr = ([127, 0, 0, 1], port).into();
|
||||
let server = hyper::Server::bind(&addr).serve(make_svc);
|
||||
let graceful = server.with_graceful_shutdown(async {
|
||||
rx.await.ok();
|
||||
});
|
||||
tokio::spawn(async {
|
||||
// server.await.unwrap();
|
||||
if let Err(e) = graceful.await {
|
||||
eprintln!("server error: {}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_tor_control_port() -> Result<()> {
|
||||
// Setup test HTTP Server
|
||||
let (tx, rx) = tokio::sync::oneshot::channel::<()>();
|
||||
let port = 8080;
|
||||
start_test_service(port, rx);
|
||||
|
||||
// Connect to local Tor service
|
||||
let mut authenticated_connection = AuthenticatedConnection::new().await?;
|
||||
|
||||
// Expose an onion service that re-directs to the echo server.
|
||||
let tor_secret_key_v3 = TorSecretKeyV3::generate();
|
||||
authenticated_connection
|
||||
.add_service(port, &tor_secret_key_v3)
|
||||
.await?;
|
||||
|
||||
// Test if Tor service forwards to HTTP Server
|
||||
|
||||
let proxy = reqwest::Proxy::all(format!("socks5h://{}", *TOR_PROXY_ADDR).as_str())
|
||||
.expect("tor proxy should be there");
|
||||
let client = reqwest::Client::builder().proxy(proxy).build().unwrap();
|
||||
let onion_address = tor_secret_key_v3.public().get_onion_address().to_string();
|
||||
let onion_url = format!("http://{}:8080", onion_address);
|
||||
|
||||
let res = client.get(&onion_url).send().await?;
|
||||
assert_that(&res.status()).is_equal_to(StatusCode::OK);
|
||||
|
||||
let text = res.text().await?;
|
||||
assert_that!(text).contains("Hello World");
|
||||
|
||||
// gracefully shut down server
|
||||
let _ = tx.send(());
|
||||
Ok(())
|
||||
use anyhow::Result;
|
||||
use hyper::service::{make_service_fn, service_fn};
|
||||
use reqwest::StatusCode;
|
||||
use spectral::prelude::*;
|
||||
use std::convert::Infallible;
|
||||
use tokio::sync::oneshot::Receiver;
|
||||
use torut::onion::TorSecretKeyV3;
|
||||
use xmr_btc::tor::{AuthenticatedConnection, TOR_PROXY_ADDR};
|
||||
|
||||
async fn hello_world(
|
||||
_req: hyper::Request<hyper::Body>,
|
||||
) -> Result<hyper::Response<hyper::Body>, Infallible> {
|
||||
Ok(hyper::Response::new("Hello World".into()))
|
||||
}
|
||||
|
||||
fn start_test_service(port: u16, rx: Receiver<()>) {
|
||||
let make_svc =
|
||||
make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(hello_world)) });
|
||||
let addr = ([127, 0, 0, 1], port).into();
|
||||
let server = hyper::Server::bind(&addr).serve(make_svc);
|
||||
let graceful = server.with_graceful_shutdown(async {
|
||||
rx.await.ok();
|
||||
});
|
||||
tokio::spawn(async {
|
||||
// server.await.unwrap();
|
||||
if let Err(e) = graceful.await {
|
||||
eprintln!("server error: {}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_tor_control_port() -> Result<()> {
|
||||
// Setup test HTTP Server
|
||||
let (tx, rx) = tokio::sync::oneshot::channel::<()>();
|
||||
let port = 8080;
|
||||
start_test_service(port, rx);
|
||||
|
||||
// Connect to local Tor service
|
||||
let mut authenticated_connection = AuthenticatedConnection::new().await?;
|
||||
|
||||
// Expose an onion service that re-directs to the echo server.
|
||||
let tor_secret_key_v3 = TorSecretKeyV3::generate();
|
||||
authenticated_connection
|
||||
.add_service(port, &tor_secret_key_v3)
|
||||
.await?;
|
||||
|
||||
// Test if Tor service forwards to HTTP Server
|
||||
|
||||
let proxy = reqwest::Proxy::all(format!("socks5h://{}", *TOR_PROXY_ADDR).as_str())
|
||||
.expect("tor proxy should be there");
|
||||
let client = reqwest::Client::builder().proxy(proxy).build().unwrap();
|
||||
let onion_address = tor_secret_key_v3.public().get_onion_address().to_string();
|
||||
let onion_url = format!("http://{}:8080", onion_address);
|
||||
|
||||
let res = client.get(&onion_url).send().await?;
|
||||
assert_that(&res.status()).is_equal_to(StatusCode::OK);
|
||||
|
||||
let text = res.text().await?;
|
||||
assert_that!(text).contains("Hello World");
|
||||
|
||||
// gracefully shut down server
|
||||
let _ = tx.send(());
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user