From 1bef64b66cb11f98d4d0611c4f377b664861f6c1 Mon Sep 17 00:00:00 2001 From: Yuval Kogman Date: Wed, 12 Mar 2025 14:37:44 +0100 Subject: [PATCH 1/2] Fix confusing and incorrect test condition When a v2 receiver polls expecting a 200 or 202 status response, that status code is associated with the OHTTP encapsulated response, and is therefore handled in the process_res method and detected implicitly via the empty body branch. The response status for OHTTP gateway requests will always be 200 regardless of what the internal request's status is. --- payjoin/tests/integration.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/payjoin/tests/integration.rs b/payjoin/tests/integration.rs index be9156c96..c1d00fb6e 100644 --- a/payjoin/tests/integration.rs +++ b/payjoin/tests/integration.rs @@ -486,25 +486,26 @@ mod integration { let mock_ohttp_relay = services.ohttp_gateway_url(); let receiver_loop = tokio::task::spawn(async move { let agent_clone = agent_clone.clone(); - let (response, ctx) = loop { + let proposal = loop { let (req, ctx) = session.extract_req(&mock_ohttp_relay)?; let response = agent_clone.post(req.url).body(req.body).send().await?; if response.status() == 200 { - break (response.bytes().await?.to_vec(), ctx); - } else if response.status() == 202 { - log::info!( - "No response yet for POST payjoin request, retrying some seconds" - ); - tokio::time::sleep(std::time::Duration::from_secs(1)).await; + if let Some(proposal) = session + .process_res(response.bytes().await?.to_vec().as_slice(), ctx)? + { + break proposal; + } else { + log::info!( + "No response yet for POST payjoin request, retrying some seconds" + ); + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } } else { log::error!("Unexpected response status: {}", response.status()); panic!("Unexpected response status: {}", response.status()) } }; - let proposal = session - .process_res(response.as_slice(), ctx)? - .expect("proposal should exist"); let mut payjoin_proposal = handle_directory_proposal(&receiver_clone, proposal, None) .map_err(|e| e.to_string())?; From 0f7b9e57c092cc23666da9794639cebc9c49f7f7 Mon Sep 17 00:00:00 2001 From: Yuval Kogman Date: Wed, 12 Mar 2025 19:14:46 +0100 Subject: [PATCH 2/2] Remove polling delay from test --- payjoin/tests/integration.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/payjoin/tests/integration.rs b/payjoin/tests/integration.rs index c1d00fb6e..0ba602fd6 100644 --- a/payjoin/tests/integration.rs +++ b/payjoin/tests/integration.rs @@ -499,7 +499,6 @@ mod integration { log::info!( "No response yet for POST payjoin request, retrying some seconds" ); - tokio::time::sleep(std::time::Duration::from_secs(1)).await; } } else { log::error!("Unexpected response status: {}", response.status());