Add: Make Ganache Startup Timeout *Configurable*. (#1224)
* Add: Configurable Ganache Startup TImeout * fix lint, add docs.
This commit is contained in:
parent
16e17078fd
commit
f5c5468420
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue