feat(core): expose genesis and private key in Geth (#2091)
* feat(core): expose genesis and private key in Geth * expose the genesis and clique_private_key fields in GethInstance * add tests which initialize geth with clique_private_key, making sure the genesis and clique_private_key fields are exposed on the GethInstance * add clique p2p port test * refactor tests to clean up properly
This commit is contained in:
parent
08514ea986
commit
9ebc5b378c
|
@ -48,6 +48,8 @@ pub struct GethInstance {
|
||||||
ipc: Option<PathBuf>,
|
ipc: Option<PathBuf>,
|
||||||
data_dir: Option<PathBuf>,
|
data_dir: Option<PathBuf>,
|
||||||
p2p_port: Option<u16>,
|
p2p_port: Option<u16>,
|
||||||
|
genesis: Option<Genesis>,
|
||||||
|
clique_private_key: Option<SigningKey>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GethInstance {
|
impl GethInstance {
|
||||||
|
@ -81,6 +83,16 @@ impl GethInstance {
|
||||||
&self.data_dir
|
&self.data_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the genesis configuration used to conifugre this instance
|
||||||
|
pub fn genesis(&self) -> &Option<Genesis> {
|
||||||
|
&self.genesis
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the private key used to configure clique on this instance
|
||||||
|
pub fn clique_private_key(&self) -> &Option<SigningKey> {
|
||||||
|
&self.clique_private_key
|
||||||
|
}
|
||||||
|
|
||||||
/// Takes the stderr contained in the child process.
|
/// Takes the stderr contained in the child process.
|
||||||
///
|
///
|
||||||
/// This leaves a `None` in its place, so calling methods that require a stderr to be present
|
/// This leaves a `None` in its place, so calling methods that require a stderr to be present
|
||||||
|
@ -186,9 +198,9 @@ pub struct Geth {
|
||||||
data_dir: Option<PathBuf>,
|
data_dir: Option<PathBuf>,
|
||||||
chain_id: Option<u64>,
|
chain_id: Option<u64>,
|
||||||
insecure_unlock: bool,
|
insecure_unlock: bool,
|
||||||
pub genesis: Option<Genesis>,
|
genesis: Option<Genesis>,
|
||||||
mode: GethMode,
|
mode: GethMode,
|
||||||
pub clique_private_key: Option<SigningKey>,
|
clique_private_key: Option<SigningKey>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Geth {
|
impl Geth {
|
||||||
|
@ -515,7 +527,15 @@ impl Geth {
|
||||||
|
|
||||||
child.stderr = Some(reader.into_inner());
|
child.stderr = Some(reader.into_inner());
|
||||||
|
|
||||||
GethInstance { pid: child, port, ipc: self.ipc_path, data_dir: self.data_dir, p2p_port }
|
GethInstance {
|
||||||
|
pid: child,
|
||||||
|
port,
|
||||||
|
ipc: self.ipc_path,
|
||||||
|
data_dir: self.data_dir,
|
||||||
|
p2p_port,
|
||||||
|
genesis: self.genesis,
|
||||||
|
clique_private_key: self.clique_private_key,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,4 +589,64 @@ mod tests {
|
||||||
|
|
||||||
assert!(p2p_port.is_none());
|
assert!(p2p_port.is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clique_private_key_configured() {
|
||||||
|
let temp_dir = tempfile::tempdir().unwrap();
|
||||||
|
let temp_dir_path = temp_dir.path().to_path_buf();
|
||||||
|
|
||||||
|
let private_key = SigningKey::random(&mut rand::thread_rng());
|
||||||
|
let geth = Geth::new()
|
||||||
|
.set_clique_private_key(private_key)
|
||||||
|
.chain_id(1337u64)
|
||||||
|
.data_dir(temp_dir_path)
|
||||||
|
.spawn();
|
||||||
|
|
||||||
|
let clique_private_key = geth.clique_private_key().clone();
|
||||||
|
|
||||||
|
drop(geth);
|
||||||
|
temp_dir.close().unwrap();
|
||||||
|
|
||||||
|
assert!(clique_private_key.is_some());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clique_genesis_configured() {
|
||||||
|
let temp_dir = tempfile::tempdir().unwrap();
|
||||||
|
let temp_dir_path = temp_dir.path().to_path_buf();
|
||||||
|
|
||||||
|
let private_key = SigningKey::random(&mut rand::thread_rng());
|
||||||
|
let geth = Geth::new()
|
||||||
|
.set_clique_private_key(private_key)
|
||||||
|
.chain_id(1337u64)
|
||||||
|
.data_dir(temp_dir_path)
|
||||||
|
.spawn();
|
||||||
|
|
||||||
|
let genesis = geth.genesis().clone();
|
||||||
|
|
||||||
|
drop(geth);
|
||||||
|
temp_dir.close().unwrap();
|
||||||
|
|
||||||
|
assert!(genesis.is_some());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clique_p2p_configured() {
|
||||||
|
let temp_dir = tempfile::tempdir().unwrap();
|
||||||
|
let temp_dir_path = temp_dir.path().to_path_buf();
|
||||||
|
|
||||||
|
let private_key = SigningKey::random(&mut rand::thread_rng());
|
||||||
|
let geth = Geth::new()
|
||||||
|
.set_clique_private_key(private_key)
|
||||||
|
.chain_id(1337u64)
|
||||||
|
.data_dir(temp_dir_path)
|
||||||
|
.spawn();
|
||||||
|
|
||||||
|
let p2p_port = geth.p2p_port();
|
||||||
|
|
||||||
|
drop(geth);
|
||||||
|
temp_dir.close().unwrap();
|
||||||
|
|
||||||
|
assert!(p2p_port.is_some());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue