Skip to content

Commit

Permalink
Add integration test for PoolSv2
Browse files Browse the repository at this point in the history
  • Loading branch information
jbesraa committed Oct 2, 2024
1 parent bc9ad26 commit 5120e3b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ jobs:
cargo build --manifest-path=roles/Cargo.toml
cargo build --manifest-path=utils/Cargo.toml
- name: Roles Integration Tests
run: |
cargo test --manifest-path=roles/Cargo.toml --verbose --test '*' -- --nocapture
- name: Run sv1-client-and-server example
run: |
cargo run --manifest-path=examples/sv1-client-and-server/Cargo.toml --bin client_and_server -- 60
Expand Down
2 changes: 1 addition & 1 deletion roles/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 11 additions & 5 deletions roles/tests-integration/tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,11 +168,11 @@ impl Drop for TemplateProvider {
}
}

pub fn is_port_open(address: SocketAddr) -> bool {
fn is_port_open(address: SocketAddr) -> bool {
TcpListener::bind(address).is_err()
}

pub fn get_available_port() -> u16 {
fn get_available_port() -> u16 {
let mut unique_ports = UNIQUE_PORTS.lock().unwrap();

loop {
Expand Down Expand Up @@ -214,7 +214,11 @@ impl TestPoolSv2 {
template_provider_address: Option<SocketAddr>,
) -> Self {
use pool_sv2::mining_pool::{CoinbaseOutput, Configuration};
let pool_port = get_available_port();
let pool_port = if let Some(listen_addr) = listening_address {
listen_addr.port()
} else {
get_available_port()
};
let listening_address = listening_address
.unwrap_or(SocketAddr::from_str(&format!("127.0.0.1:{}", pool_port)).unwrap());
let is_pool_port_open = is_port_open(listening_address);
Expand Down Expand Up @@ -247,8 +251,10 @@ impl TestPoolSv2 {
cert_validity_sec,
pool_signature,
);
let template_provider_config =
pool_sv2::mining_pool::TemplateProviderConfig::new(tp_address, None);
let template_provider_config = pool_sv2::mining_pool::TemplateProviderConfig::new(
tp_address,
Some(authority_public_key),
);
let authority_config =
pool_sv2::mining_pool::AuthorityConfig::new(authority_public_key, authority_secret_key);
let config = Configuration::new(
Expand Down
16 changes: 16 additions & 0 deletions roles/tests-integration/tests/pool_integration.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
mod common;

#[tokio::test]
async fn success_pool_template_provider_connection() {
let sniffer_addr = common::get_available_address();
let tp_addr = common::get_available_address();
let pool_addr = common::get_available_address();
let _tp = common::start_template_provider(tp_addr.port()).await;
let sniffer = common::start_sniffer(tp_addr, sniffer_addr).await;
let _ = common::start_pool(Some(pool_addr), None, Some(sniffer_addr)).await;
assert!(sniffer.expect_downstream_setup_connection());
assert!(sniffer.expect_upstream_setup_connection_success());
assert!(sniffer.expect_downstream_coinbase_output_data_size());
assert!(sniffer.expect_upstream_new_template());
assert!(sniffer.expect_upstream_set_new_prev_hash());
}

0 comments on commit 5120e3b

Please sign in to comment.