Add: Make Ganache Startup Timeout *Configurable*. (#1224)

* Add: Configurable Ganache Startup TImeout

* fix lint, add docs.
This commit is contained in:
inconspicuous99 2022-05-05 09:40:48 -05:00 committed by GitHub
parent 16e17078fd
commit f5c5468420
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 2 deletions

View File

@ -9,7 +9,7 @@ use std::{
time::{Duration, Instant}, time::{Duration, Instant},
}; };
/// How long we will wait for ganache to indicate that it is ready. /// Default amount of time we will wait for ganache to indicate that it is ready.
const GANACHE_STARTUP_TIMEOUT_MILLIS: u64 = 10_000; const GANACHE_STARTUP_TIMEOUT_MILLIS: u64 = 10_000;
/// A ganache CLI instance. Will close the instance when dropped. /// A ganache CLI instance. Will close the instance when dropped.
@ -83,6 +83,7 @@ pub struct Ganache {
mnemonic: Option<String>, mnemonic: Option<String>,
fork: Option<String>, fork: Option<String>,
args: Vec<String>, args: Vec<String>,
startup_timeout: Option<u64>,
} }
impl Ganache { impl Ganache {
@ -92,6 +93,13 @@ impl Ganache {
Self::default() Self::default()
} }
/// Sets the startup timeout which will be used when the `ganache-cli` instance is launched in
/// miliseconds. 10_000 miliseconds by default).
pub fn startup_timeout_millis<T: Into<u64>>(mut self, timeout: T) -> Self {
self.startup_timeout = Some(timeout.into());
self
}
/// Sets the port which will be used when the `ganache-cli` instance is launched. /// Sets the port which will be used when the `ganache-cli` instance is launched.
#[must_use] #[must_use]
pub fn port<T: Into<u16>>(mut self, port: T) -> Self { pub fn port<T: Into<u16>>(mut self, port: T) -> Self {
@ -176,8 +184,11 @@ impl Ganache {
let mut private_keys = Vec::new(); let mut private_keys = Vec::new();
let mut addresses = Vec::new(); let mut addresses = Vec::new();
let mut is_private_key = false; let mut is_private_key = false;
let startup_timeout =
Duration::from_millis(self.startup_timeout.unwrap_or(GANACHE_STARTUP_TIMEOUT_MILLIS));
loop { loop {
if start + Duration::from_millis(GANACHE_STARTUP_TIMEOUT_MILLIS) <= Instant::now() { if start + startup_timeout <= Instant::now() {
panic!("Timed out waiting for ganache to start. Is ganache-cli installed?") panic!("Timed out waiting for ganache to start. Is ganache-cli installed?")
} }
@ -205,3 +216,18 @@ impl Ganache {
GanacheInstance { pid: child, private_keys, addresses, port } GanacheInstance { pid: child, private_keys, addresses, port }
} }
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn configurable_startup_timeout() {
Ganache::new().startup_timeout_millis(100000_u64).spawn();
}
#[test]
fn default_startup_works() {
Ganache::new().spawn();
}
}