From bb39003aa946e391d670b4258af3624ef89158f1 Mon Sep 17 00:00:00 2001 From: spacebear Date: Thu, 30 Jan 2025 13:25:21 -0500 Subject: [PATCH 1/2] Display response status on failed asserts Fixes #421 --- payjoin/tests/integration.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/payjoin/tests/integration.rs b/payjoin/tests/integration.rs index 0e1e1532..cce128d7 100644 --- a/payjoin/tests/integration.rs +++ b/payjoin/tests/integration.rs @@ -293,7 +293,7 @@ mod integration { let mock_ohttp_relay = directory.clone(); let (req, ctx) = session.extract_req(&mock_ohttp_relay)?; let response = agent.post(req.url).body(req.body).send().await?; - assert!(response.status().is_success()); + assert!(response.status().is_success(), "error response: {}", response.status()); let response_body = session.process_res(response.bytes().await?.to_vec().as_slice(), ctx)?; // No proposal yet since sender has not responded @@ -319,7 +319,7 @@ mod integration { .send() .await?; log::info!("Response: {:#?}", &response); - assert!(response.status().is_success()); + assert!(response.status().is_success(), "error response: {}", response.status()); let send_ctx = send_ctx.process_response(&response.bytes().await?)?; // POST Original PSBT @@ -523,7 +523,7 @@ mod integration { let response = agent.post(url).header("Content-Type", content_type).body(body).send().await?; log::info!("Response: {:#?}", &response); - assert!(response.status().is_success()); + assert!(response.status().is_success(), "error response: {}", response.status()); let res = response.bytes().await?.to_vec(); let checked_payjoin_proposal_psbt = From 64a0e3cf9e9721333a11cae4466ca28d4881ffb8 Mon Sep 17 00:00:00 2001 From: spacebear Date: Thu, 30 Jan 2025 13:49:16 -0500 Subject: [PATCH 2/2] Cleanup test assertions This improves legibility by having tokio::select! return the test result and calling `assert!` as a distinct step. --- payjoin-cli/tests/e2e.rs | 6 +++--- payjoin/tests/integration.rs | 32 +++++++++++++++++++------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/payjoin-cli/tests/e2e.rs b/payjoin-cli/tests/e2e.rs index 9f3b79b8..7c05420e 100644 --- a/payjoin-cli/tests/e2e.rs +++ b/payjoin-cli/tests/e2e.rs @@ -152,15 +152,15 @@ mod e2e { let temp_dir = env::temp_dir(); let receiver_db_path = temp_dir.join("receiver_db"); let sender_db_path = temp_dir.join("sender_db"); - let result: Result<()> = tokio::select! { + let result = tokio::select! { res = services.take_ohttp_relay_handle() => Err(format!("Ohttp relay is long running: {:?}", res).into()), res = services.take_directory_handle() => Err(format!("Directory server is long running: {:?}", res).into()), - res = send_receive_cli_async(&services, receiver_db_path.clone(), sender_db_path.clone()) => res.map_err(|e| format!("send_receive failed: {:?}", e).into()), + res = send_receive_cli_async(&services, receiver_db_path.clone(), sender_db_path.clone()) => res, }; cleanup_temp_file(&receiver_db_path).await; cleanup_temp_file(&sender_db_path).await; - assert!(result.is_ok(), "{}", result.unwrap_err()); + assert!(result.is_ok(), "send_receive failed: {:#?}", result.unwrap_err()); async fn send_receive_cli_async( services: &TestServices, diff --git a/payjoin/tests/integration.rs b/payjoin/tests/integration.rs index cce128d7..a1d41a19 100644 --- a/payjoin/tests/integration.rs +++ b/payjoin/tests/integration.rs @@ -187,14 +187,14 @@ mod integration { OhttpKeys::from_str("OH1QYPM5JXYNS754Y4R45QWE336QFX6ZR8DQGVQCULVZTV20TFVEYDMFQC") .expect("Invalid OhttpKeys"); let mut services = TestServices::initialize().await?; - tokio::select!( + let result = tokio::select!( err = services.take_directory_handle() => panic!("Directory server exited early: {:?}", err), - res = try_request_with_bad_keys(&services, bad_ohttp_keys) => { - assert_eq!( - res?.headers().get("content-type").expect("content type should be present"), - "application/problem+json" - ); - } + res = try_request_with_bad_keys(&services, bad_ohttp_keys) => res + ); + + assert_eq!( + result?.headers().get("content-type").expect("content type should be present"), + "application/problem+json" ); async fn try_request_with_bad_keys( @@ -220,12 +220,14 @@ mod integration { async fn test_session_expiration() -> Result<(), BoxSendSyncError> { init_tracing(); let mut services = TestServices::initialize().await?; - tokio::select!( + let result = tokio::select!( err = services.take_ohttp_relay_handle() => panic!("Ohttp relay exited early: {:?}", err), err = services.take_directory_handle() => panic!("Directory server exited early: {:?}", err), - res = do_expiration_tests(&services) => assert!(res.is_ok(), "v2 send receive failed: {:#?}", res) + res = do_expiration_tests(&services) => res ); + assert!(result.is_ok(), "v2 send receive failed: {:#?}", result.unwrap_err()); + async fn do_expiration_tests(services: &TestServices) -> Result<(), BoxError> { let (_bitcoind, sender, receiver) = init_bitcoind_sender_receiver(None, None)?; services.wait_for_services_ready().await?; @@ -269,12 +271,14 @@ mod integration { async fn v2_to_v2() -> Result<(), BoxSendSyncError> { init_tracing(); let mut services = TestServices::initialize().await?; - tokio::select!( + let result = tokio::select!( err = services.take_ohttp_relay_handle() => panic!("Ohttp relay exited early: {:?}", err), err = services.take_directory_handle() => panic!("Directory server exited early: {:?}", err), - res = do_v2_send_receive(&services) => assert!(res.is_ok(), "v2 send receive failed: {:#?}", res) + res = do_v2_send_receive(&services) => res ); + assert!(result.is_ok(), "v2 send receive failed: {:#?}", result.unwrap_err()); + async fn do_v2_send_receive(services: &TestServices) -> Result<(), BoxError> { let (_bitcoind, sender, receiver) = init_bitcoind_sender_receiver(None, None)?; let agent = services.http_agent(); @@ -432,12 +436,14 @@ mod integration { async fn v1_to_v2() -> Result<(), BoxSendSyncError> { init_tracing(); let mut services = TestServices::initialize().await?; - tokio::select!( + let result = tokio::select!( err = services.take_ohttp_relay_handle() => panic!("Ohttp relay exited early: {:?}", err), err = services.take_directory_handle() => panic!("Directory server exited early: {:?}", err), - res = do_v1_to_v2(&services) => assert!(res.is_ok(), "v2 send receive failed: {:#?}", res) + res = do_v1_to_v2(&services) => res ); + assert!(result.is_ok(), "v2 send receive failed: {:#?}", result.unwrap_err()); + async fn do_v1_to_v2(services: &TestServices) -> Result<(), BoxError> { let (_bitcoind, sender, receiver) = init_bitcoind_sender_receiver(None, None)?; let agent = services.http_agent();