Skip to content

Commit 482055d

Browse files
committed
Use payjoin-io in integration tests
1 parent 752db7c commit 482055d

File tree

3 files changed

+18
-39
lines changed

3 files changed

+18
-39
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

payjoin/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ tokio = { version = "1.12.0", features = ["full"] }
4646
tracing = "0.1.40"
4747
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
4848
ureq = "2.9.4"
49+
payjoin-io = { path = "../payjoin-io", features = ["danger-local-https"]}
4950

5051
[package.metadata.docs.rs]
5152
features = ["send", "receive", "base64", "v2"]

payjoin/tests/integration.rs

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ mod integration {
7070
struct HeaderMock(HashMap<String, String>);
7171

7272
impl Headers for HeaderMock {
73-
fn get_header(&self, key: &str) -> Option<&str> { self.0.get(key).map(|e| e.as_str()) }
73+
fn get_header(&self, key: &str) -> Option<&str> {
74+
self.0.get(key).map(|e| e.as_str())
75+
}
7476
}
7577

7678
impl HeaderMock {
@@ -276,7 +278,7 @@ mod integration {
276278
wait_for_service_ready(ohttp_relay.clone(), agent.clone()).await.unwrap();
277279
wait_for_service_ready(directory.clone(), agent.clone()).await.unwrap();
278280
let ohttp_keys =
279-
fetch_ohttp_keys(&ohttp_relay, &directory, cert_der.clone()).await?;
281+
fetch_ohttp_keys(ohttp_relay, directory.clone(), cert_der.clone()).await?;
280282

281283
// **********************
282284
// Inside the Receiver:
@@ -388,7 +390,7 @@ mod integration {
388390
wait_for_service_ready(ohttp_relay.clone(), agent.clone()).await.unwrap();
389391
wait_for_service_ready(directory.clone(), agent.clone()).await.unwrap();
390392
let ohttp_keys =
391-
fetch_ohttp_keys(&ohttp_relay, &directory, cert_der.clone()).await?;
393+
fetch_ohttp_keys(ohttp_relay, directory.clone(), cert_der.clone()).await?;
392394

393395
let mut enrolled =
394396
enroll_with_directory(directory, ohttp_keys.clone(), cert_der.clone()).await?;
@@ -525,38 +527,16 @@ mod integration {
525527
}
526528

527529
async fn fetch_ohttp_keys(
528-
ohttp_relay: &Url,
529-
directory: &Url,
530+
ohttp_relay: Url,
531+
directory: Url,
530532
cert_der: Vec<u8>,
531-
) -> Result<payjoin::OhttpKeys, BoxError> {
532-
let ohttp_relay = ohttp_relay.clone();
533-
let directory_ohttp_keys = directory.join("/ohttp-keys")?;
534-
let res = spawn_blocking(move || {
535-
http_proxy(cert_der, &ohttp_relay)
536-
.unwrap()
537-
.get(directory_ohttp_keys.as_str())
538-
.call()
533+
) -> Result<payjoin::OhttpKeys, payjoin::V2Error> {
534+
let res = tokio::task::spawn_blocking(move || {
535+
payjoin_io::fetch_ohttp_keys(ohttp_relay.clone(), directory.clone(), cert_der)
539536
})
540-
.await??;
541-
assert_eq!(res.status(), 200, "Failed to connect to target {}", res.status());
542-
let mut body = Vec::new();
543-
let _ = res.into_reader().read_to_end(&mut body)?;
544-
Ok(payjoin::OhttpKeys::decode(&body)?)
545-
}
546-
547-
/// Normalize the Url to include the port for ureq. ureq has a bug
548-
/// which makes Proxy::new(...) use port 8080 for all input with scheme
549-
/// http regardless of the port included in the Url. This prevents that.
550-
/// https://github.com/algesten/ureq/pull/717
551-
fn normalize_proxy_url(proxy: &Url) -> Result<String, BoxError> {
552-
let scheme = proxy.scheme();
553-
let host = proxy.host_str().ok_or("No host")?;
554-
555-
if scheme == "http" || scheme == "https" {
556-
Ok(format!("{}:{}", host, proxy.port().unwrap_or(80)))
557-
} else {
558-
Ok(proxy.as_str().to_string())
559-
}
537+
.await
538+
.map_err(|e| e.to_string())??;
539+
Ok(res)
560540
}
561541

562542
async fn enroll_with_directory(
@@ -692,11 +672,6 @@ mod integration {
692672
Ok(http_agent_builder(cert_der)?.build())
693673
}
694674

695-
fn http_proxy(cert_der: Vec<u8>, proxy: &Url) -> Result<Agent, BoxError> {
696-
let proxy = ureq::Proxy::new(normalize_proxy_url(proxy)?)?;
697-
Ok(http_agent_builder(cert_der)?.proxy(proxy).build())
698-
}
699-
700675
fn http_agent_builder(cert_der: Vec<u8>) -> Result<AgentBuilder, BoxError> {
701676
use rustls::client::ClientConfig;
702677
use rustls::pki_types::CertificateDer;
@@ -711,7 +686,9 @@ mod integration {
711686
Ok(AgentBuilder::new().tls_config(Arc::new(client_config)))
712687
}
713688

714-
fn is_success(status: u16) -> bool { status >= 200 && status < 300 }
689+
fn is_success(status: u16) -> bool {
690+
status >= 200 && status < 300
691+
}
715692

716693
fn find_free_port() -> u16 {
717694
let listener = std::net::TcpListener::bind("0.0.0.0:0").unwrap();

0 commit comments

Comments
 (0)