Fixing status page displaying homestead (#1020)
* Fixing status page displaying homestead when running with --testnet switch * Putting cli parsing logic in single place. Adding tests
This commit is contained in:
parent
66477a9476
commit
fdd030d101
@ -43,6 +43,22 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn net_port(&self) -> u16 {
|
||||||
|
self.args.flag_port
|
||||||
|
}
|
||||||
|
|
||||||
|
fn chain(&self) -> String {
|
||||||
|
if self.args.flag_testnet {
|
||||||
|
"morden".to_owned()
|
||||||
|
} else {
|
||||||
|
self.args.flag_chain.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn max_peers(&self) -> u32 {
|
||||||
|
self.args.flag_maxpeers.unwrap_or(self.args.flag_peers) as u32
|
||||||
|
}
|
||||||
|
|
||||||
pub fn path(&self) -> String {
|
pub fn path(&self) -> String {
|
||||||
let d = self.args.flag_datadir.as_ref().unwrap_or(&self.args.flag_db_path);
|
let d = self.args.flag_datadir.as_ref().unwrap_or(&self.args.flag_db_path);
|
||||||
d.replace("$HOME", env::home_dir().unwrap().to_str().unwrap())
|
d.replace("$HOME", env::home_dir().unwrap().to_str().unwrap())
|
||||||
@ -101,10 +117,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn spec(&self) -> Spec {
|
pub fn spec(&self) -> Spec {
|
||||||
if self.args.flag_testnet {
|
match self.chain().as_str() {
|
||||||
return ethereum::new_morden();
|
|
||||||
}
|
|
||||||
match self.args.flag_chain.as_ref() {
|
|
||||||
"frontier" | "homestead" | "mainnet" => ethereum::new_frontier(),
|
"frontier" | "homestead" | "mainnet" => ethereum::new_frontier(),
|
||||||
"morden" | "testnet" => ethereum::new_morden(),
|
"morden" | "testnet" => ethereum::new_morden(),
|
||||||
"olympic" => ethereum::new_olympic(),
|
"olympic" => ethereum::new_olympic(),
|
||||||
@ -135,11 +148,12 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn net_addresses(&self) -> (Option<SocketAddr>, Option<SocketAddr>) {
|
pub fn net_addresses(&self) -> (Option<SocketAddr>, Option<SocketAddr>) {
|
||||||
let listen_address = Some(SocketAddr::new(IpAddr::from_str("0.0.0.0").unwrap(), self.args.flag_port));
|
let port = self.net_port();
|
||||||
|
let listen_address = Some(SocketAddr::new(IpAddr::from_str("0.0.0.0").unwrap(), port));
|
||||||
let public_address = if self.args.flag_nat.starts_with("extip:") {
|
let public_address = if self.args.flag_nat.starts_with("extip:") {
|
||||||
let host = &self.args.flag_nat[6..];
|
let host = &self.args.flag_nat[6..];
|
||||||
let host = IpAddr::from_str(host).unwrap_or_else(|_| die!("Invalid host given with `--nat extip:{}`", host));
|
let host = IpAddr::from_str(host).unwrap_or_else(|_| die!("Invalid host given with `--nat extip:{}`", host));
|
||||||
Some(SocketAddr::new(host, self.args.flag_port))
|
Some(SocketAddr::new(host, port))
|
||||||
} else {
|
} else {
|
||||||
listen_address
|
listen_address
|
||||||
};
|
};
|
||||||
@ -155,7 +169,7 @@ impl Configuration {
|
|||||||
ret.public_address = public;
|
ret.public_address = public;
|
||||||
ret.use_secret = self.args.flag_node_key.as_ref().map(|s| Secret::from_str(&s).unwrap_or_else(|_| s.sha3()));
|
ret.use_secret = self.args.flag_node_key.as_ref().map(|s| Secret::from_str(&s).unwrap_or_else(|_| s.sha3()));
|
||||||
ret.discovery_enabled = !self.args.flag_no_discovery && !self.args.flag_nodiscover;
|
ret.discovery_enabled = !self.args.flag_no_discovery && !self.args.flag_nodiscover;
|
||||||
ret.ideal_peers = self.args.flag_maxpeers.unwrap_or(self.args.flag_peers) as u32;
|
ret.ideal_peers = self.max_peers();
|
||||||
let mut net_path = PathBuf::from(&self.path());
|
let mut net_path = PathBuf::from(&self.path());
|
||||||
net_path.push("network");
|
net_path.push("network");
|
||||||
ret.config_path = Some(net_path.to_str().unwrap().to_owned());
|
ret.config_path = Some(net_path.to_str().unwrap().to_owned());
|
||||||
@ -238,12 +252,20 @@ impl Configuration {
|
|||||||
account_service
|
account_service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn rpc_apis(&self) -> String {
|
||||||
|
self.args.flag_rpcapi.clone().unwrap_or(self.args.flag_jsonrpc_apis.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn rpc_cors(&self) -> Option<String> {
|
||||||
|
self.args.flag_jsonrpc_cors.clone().or(self.args.flag_rpccorsdomain.clone())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn network_settings(&self) -> NetworkSettings {
|
pub fn network_settings(&self) -> NetworkSettings {
|
||||||
NetworkSettings {
|
NetworkSettings {
|
||||||
name: self.args.flag_identity.clone(),
|
name: self.args.flag_identity.clone(),
|
||||||
chain: self.args.flag_chain.clone(),
|
chain: self.chain(),
|
||||||
max_peers: self.args.flag_maxpeers.unwrap_or(self.args.flag_peers),
|
max_peers: self.max_peers(),
|
||||||
network_port: self.args.flag_port,
|
network_port: self.net_port(),
|
||||||
rpc_enabled: self.args.flag_rpc || self.args.flag_jsonrpc,
|
rpc_enabled: self.args.flag_rpc || self.args.flag_jsonrpc,
|
||||||
rpc_interface: self.args.flag_rpcaddr.clone().unwrap_or(self.args.flag_jsonrpc_interface.clone()),
|
rpc_interface: self.args.flag_rpcaddr.clone().unwrap_or(self.args.flag_jsonrpc_interface.clone()),
|
||||||
rpc_port: self.args.flag_rpcport.unwrap_or(self.args.flag_jsonrpc_port),
|
rpc_port: self.args.flag_rpcport.unwrap_or(self.args.flag_jsonrpc_port),
|
||||||
@ -251,3 +273,67 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use cli::USAGE;
|
||||||
|
use docopt::Docopt;
|
||||||
|
use util::network_settings::NetworkSettings;
|
||||||
|
|
||||||
|
fn parse(args: &[&str]) -> Configuration {
|
||||||
|
Configuration {
|
||||||
|
args: Docopt::new(USAGE).unwrap().argv(args).decode().unwrap(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_parse_network_settings() {
|
||||||
|
// given
|
||||||
|
|
||||||
|
// when
|
||||||
|
let conf = parse(&["parity", "--testnet", "--identity", "testname"]);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assert_eq!(conf.network_settings(), NetworkSettings {
|
||||||
|
name: "testname".to_owned(),
|
||||||
|
chain: "morden".to_owned(),
|
||||||
|
max_peers: 25,
|
||||||
|
network_port: 30303,
|
||||||
|
rpc_enabled: false,
|
||||||
|
rpc_interface: "local".to_owned(),
|
||||||
|
rpc_port: 8545,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_parse_rpc_settings_with_geth_compatiblity() {
|
||||||
|
// given
|
||||||
|
fn assert(conf: Configuration) {
|
||||||
|
let net = conf.network_settings();
|
||||||
|
assert_eq!(net.rpc_enabled, true);
|
||||||
|
assert_eq!(net.rpc_interface, "all".to_owned());
|
||||||
|
assert_eq!(net.rpc_port, 8000);
|
||||||
|
assert_eq!(conf.rpc_cors(), Some("*".to_owned()));
|
||||||
|
assert_eq!(conf.rpc_apis(), "web3,eth".to_owned());
|
||||||
|
}
|
||||||
|
|
||||||
|
// when
|
||||||
|
let conf1 = parse(&["parity", "-j",
|
||||||
|
"--jsonrpc-port", "8000",
|
||||||
|
"--jsonrpc-interface", "all",
|
||||||
|
"--jsonrpc-cors", "*",
|
||||||
|
"--jsonrpc-apis", "web3,eth"
|
||||||
|
]);
|
||||||
|
let conf2 = parse(&["parity", "--rpc",
|
||||||
|
"--rpcport", "8000",
|
||||||
|
"--rpcaddr", "all",
|
||||||
|
"--rpccorsdomain", "*",
|
||||||
|
"--rpcapi", "web3,eth"
|
||||||
|
]);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assert(conf1);
|
||||||
|
assert(conf2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -161,11 +161,11 @@ fn execute_client(conf: Configuration) {
|
|||||||
|
|
||||||
// Setup rpc
|
// Setup rpc
|
||||||
let rpc_server = rpc::new(rpc::Configuration {
|
let rpc_server = rpc::new(rpc::Configuration {
|
||||||
enabled: conf.args.flag_jsonrpc || conf.args.flag_rpc,
|
enabled: network_settings.rpc_enabled,
|
||||||
interface: conf.args.flag_rpcaddr.clone().unwrap_or(conf.args.flag_jsonrpc_interface.clone()),
|
interface: network_settings.rpc_interface.clone(),
|
||||||
port: conf.args.flag_rpcport.unwrap_or(conf.args.flag_jsonrpc_port),
|
port: network_settings.rpc_port,
|
||||||
apis: conf.args.flag_rpcapi.clone().unwrap_or(conf.args.flag_jsonrpc_apis.clone()),
|
apis: conf.rpc_apis(),
|
||||||
cors: conf.args.flag_jsonrpc_cors.clone().or(conf.args.flag_rpccorsdomain.clone()),
|
cors: conf.rpc_cors(),
|
||||||
}, rpc::Dependencies {
|
}, rpc::Dependencies {
|
||||||
panic_handler: panic_handler.clone(),
|
panic_handler: panic_handler.clone(),
|
||||||
client: client.clone(),
|
client: client.clone(),
|
||||||
|
@ -16,13 +16,14 @@
|
|||||||
//! Structure to hold network settings configured from CLI
|
//! Structure to hold network settings configured from CLI
|
||||||
|
|
||||||
/// Networking & RPC settings
|
/// Networking & RPC settings
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
pub struct NetworkSettings {
|
pub struct NetworkSettings {
|
||||||
/// Node name
|
/// Node name
|
||||||
pub name: String,
|
pub name: String,
|
||||||
/// Name of the chain we are connected to
|
/// Name of the chain we are connected to
|
||||||
pub chain: String,
|
pub chain: String,
|
||||||
/// Ideal number of peers
|
/// Ideal number of peers
|
||||||
pub max_peers: usize,
|
pub max_peers: u32,
|
||||||
/// Networking port
|
/// Networking port
|
||||||
pub network_port: u16,
|
pub network_port: u16,
|
||||||
/// Is JSON-RPC server enabled?
|
/// Is JSON-RPC server enabled?
|
||||||
|
Loading…
Reference in New Issue
Block a user