Skip to content

Commit 8d9c61c

Browse files
committed
Merge branch 'update-master'
2 parents 8799bac + 06c7645 commit 8d9c61c

32 files changed

+2385
-942
lines changed

ci/publish_results.sh

+6-3
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,12 @@ cat README.md.clean | sed -n '/\(Results Marker\)/,$p' | tail -n+2 >> README.md
5252

5353
mkdir -p "results/$RESULTS_LABEL"
5454
cp ../generated.tar.gz "results/$RESULTS_LABEL/$GENERATED_NAME.tar.gz"
55-
git add README.md "results/$RESULTS_LABEL/$GENERATED_NAME.tar.gz"
55+
git checkout --orphan new-master
56+
git add README.md results
5657
git commit -m "Latest results for $RESULTS_LABEL ($GENERATED_TYPE) - $STATUS"
57-
git pull
58-
git push
58+
git branch -D master
59+
git branch -M new-master master
60+
git checkout master
61+
git push -f -u origin HEAD
5962

6063
popd

multinode_integration_tests/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ base64 = "0.10.1"
1313
ethereum-types = "0.6.0"
1414
ethsign-crypto = "0.1.0"
1515
futures = "0.1.28"
16+
itertools = "0.8.0"
1617
pretty-hex = "0.1.0"
1718
primitive-types = {version = "0.5.0", default-features = false, features = ["default", "rlp", "serde"] }
1819
regex = "1.2.1"

multinode_integration_tests/src/multinode_gossip.rs

+1-25
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
// Copyright (c) 2017-2019, Substratum LLC (https://substratum.net) and/or its affiliates. All rights reserved.
22
use crate::substratum_node::SubstratumNode;
33
use node_lib::neighborhood::gossip::{Gossip, GossipNodeRecord};
4-
use node_lib::neighborhood::node_record::NodeRecordInner;
54
use node_lib::neighborhood::AccessibleGossipRecord;
6-
use node_lib::sub_lib::cryptde::CryptData;
7-
use node_lib::sub_lib::cryptde::PlainData;
85
use node_lib::sub_lib::cryptde::PublicKey;
96
use node_lib::sub_lib::cryptde_null::CryptDENull;
107
use node_lib::test_utils::{vec_to_set, DEFAULT_CHAIN_ID};
11-
use std::collections::{BTreeSet, HashSet};
8+
use std::collections::HashSet;
129
use std::convert::{TryFrom, TryInto};
1310
use std::net::IpAddr;
1411

@@ -383,24 +380,3 @@ fn nodes_of_degree(nodes: &Vec<AccessibleGossipRecord>, degree: usize) -> Vec<Pu
383380
.map(|node| node.inner.public_key.clone())
384381
.collect::<Vec<PublicKey>>()
385382
}
386-
387-
impl From<&dyn SubstratumNode> for AccessibleGossipRecord {
388-
fn from(substratum_node: &dyn SubstratumNode) -> Self {
389-
let cryptde = substratum_node.signing_cryptde().unwrap_or_else (|| panic! ("You can only make an AccessibleGossipRecord from a SubstratumRealNode if it has a CryptDENull, not a CryptDEReal."));
390-
let mut agr = AccessibleGossipRecord {
391-
inner: NodeRecordInner {
392-
data_version: NodeRecordInner::data_version(),
393-
public_key: substratum_node.public_key().clone(),
394-
earning_wallet: substratum_node.earning_wallet(),
395-
rate_pack: substratum_node.rate_pack(),
396-
neighbors: BTreeSet::new(),
397-
version: 0,
398-
},
399-
node_addr_opt: Some(substratum_node.node_addr()),
400-
signed_gossip: PlainData::new(b""),
401-
signature: CryptData::new(b""),
402-
};
403-
agr.regenerate_signed_gossip(cryptde);
404-
agr
405-
}
406-
}

multinode_integration_tests/src/neighborhood_constructor.rs

+9-25
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ use crate::substratum_node::SubstratumNode;
66
use crate::substratum_node_cluster::SubstratumNodeCluster;
77
use crate::substratum_real_node::SubstratumRealNode;
88
use crate::substratum_real_node::{make_consuming_wallet_info, NodeStartupConfigBuilder};
9-
use node_lib::blockchain::blockchain_interface::chain_id_from_name;
109
use node_lib::neighborhood::gossip::Gossip;
1110
use node_lib::neighborhood::gossip_producer::{GossipProducer, GossipProducerReal};
1211
use node_lib::neighborhood::neighborhood_database::NeighborhoodDatabase;
1312
use node_lib::neighborhood::neighborhood_test_utils::db_from_node;
14-
use node_lib::neighborhood::node_record::{NodeRecord, NodeRecordInner, NodeRecordMetadata};
15-
use node_lib::sub_lib::cryptde::{CryptData, PlainData, PublicKey};
16-
use node_lib::sub_lib::cryptde_null::CryptDENull;
17-
use node_lib::test_utils::DEFAULT_CHAIN_ID;
13+
use node_lib::neighborhood::node_record::{NodeRecord, NodeRecordMetadata};
14+
use node_lib::neighborhood::AccessibleGossipRecord;
15+
use node_lib::sub_lib::cryptde::PublicKey;
1816
use std::collections::{BTreeSet, HashMap};
1917
use std::convert::TryInto;
2018
use std::time::Duration;
@@ -239,29 +237,15 @@ impl From<&SubstratumRealNode> for NodeRecord {
239237
}
240238

241239
fn from_substratum_node_to_node_record(substratum_node: &dyn SubstratumNode) -> NodeRecord {
242-
let mut result = NodeRecord {
243-
inner: NodeRecordInner {
244-
data_version: NodeRecordInner::data_version(),
245-
public_key: substratum_node.public_key().clone(),
246-
earning_wallet: substratum_node.earning_wallet(),
247-
rate_pack: substratum_node.rate_pack(),
248-
neighbors: BTreeSet::new(),
249-
version: 0,
250-
},
240+
let agr = AccessibleGossipRecord::from(substratum_node);
241+
let result = NodeRecord {
242+
inner: agr.inner.clone(),
251243
metadata: NodeRecordMetadata {
252244
desirable: true,
253-
node_addr_opt: Some(substratum_node.node_addr()),
245+
node_addr_opt: agr.node_addr_opt.clone(),
254246
},
255-
signed_gossip: PlainData::new(b""),
256-
signature: CryptData::new(b""),
247+
signed_gossip: agr.signed_gossip.clone(),
248+
signature: agr.signature.clone(),
257249
};
258-
let cryptde = CryptDENull::from(
259-
substratum_node.public_key(),
260-
substratum_node
261-
.chain()
262-
.map(|chain_name| chain_id_from_name(chain_name.as_str()))
263-
.unwrap_or(DEFAULT_CHAIN_ID),
264-
);
265-
result.regenerate_signed_gossip(&cryptde);
266250
result
267251
}

multinode_integration_tests/src/substratum_cores_server.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ impl SubstratumCoresServer {
132132
pub fn node_reference(&self) -> NodeReference {
133133
NodeReference {
134134
public_key: self.cryptde.public_key().clone(),
135-
node_addr: NodeAddr::new(&self.socket_addr.ip(), &vec![self.socket_addr.port()]),
135+
node_addr_opt: Some(NodeAddr::new(
136+
&self.socket_addr.ip(),
137+
&vec![self.socket_addr.port()],
138+
)),
136139
}
137140
}
138141

@@ -144,8 +147,8 @@ impl SubstratumCoresServer {
144147
self.node_reference().public_key.clone()
145148
}
146149

147-
pub fn node_addr(&self) -> NodeAddr {
148-
self.node_reference().node_addr.clone()
150+
pub fn node_addr_opt(&self) -> Option<NodeAddr> {
151+
self.node_reference().node_addr_opt.clone()
149152
}
150153

151154
pub fn private_key(&self) -> &PrivateKey {

multinode_integration_tests/src/substratum_mock_node.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl SubstratumNode for SubstratumMockNode {
6565
fn node_reference(&self) -> NodeReference {
6666
NodeReference::new(
6767
self.signing_cryptde().unwrap().public_key().clone(),
68-
self.node_addr().ip_addr(),
68+
Some(self.node_addr().ip_addr()),
6969
self.node_addr().ports(),
7070
)
7171
}
@@ -119,6 +119,14 @@ impl SubstratumNode for SubstratumMockNode {
119119
fn chain(&self) -> Option<String> {
120120
self.guts.chain.clone()
121121
}
122+
123+
fn accepts_connections(&self) -> bool {
124+
true // just a guess
125+
}
126+
127+
fn routes_data(&self) -> bool {
128+
true // just a guess
129+
}
122130
}
123131

124132
impl SubstratumMockNode {
@@ -343,7 +351,7 @@ impl SubstratumMockNode {
343351
match self.wait_for_package(&masquerader, timeout) {
344352
Ok((from, _, package)) => {
345353
let incoming_cores_package = package
346-
.to_expired(from.ip(), self.signing_cryptde().unwrap())
354+
.to_expired(from, self.signing_cryptde().unwrap())
347355
.unwrap();
348356
match incoming_cores_package.payload {
349357
MessageType::Gossip(g) => Some((g, from.ip())),

multinode_integration_tests/src/substratum_node.rs

+53-26
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use std::time::Instant;
2828
#[derive(PartialEq, Clone, Debug)]
2929
pub struct NodeReference {
3030
pub public_key: PublicKey,
31-
pub node_addr: NodeAddr,
31+
pub node_addr_opt: Option<NodeAddr>,
3232
}
3333

3434
impl FromStr for NodeReference {
@@ -49,14 +49,19 @@ impl FromStr for NodeReference {
4949
impl fmt::Display for NodeReference {
5050
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
5151
let public_key_string = base64::encode_config(&self.public_key.as_slice(), STANDARD_NO_PAD);
52-
let ip_addr_string = format!("{}", self.node_addr.ip_addr());
53-
let port_list_string = self
54-
.node_addr
55-
.ports()
56-
.iter()
57-
.map(|port| port.to_string())
58-
.collect::<Vec<String>>()
59-
.join(",");
52+
let ip_addr_string = match &self.node_addr_opt {
53+
Some(node_addr) => format!("{}", node_addr.ip_addr()),
54+
None => String::new(),
55+
};
56+
let port_list_string = match &self.node_addr_opt {
57+
Some(node_addr) => node_addr
58+
.ports()
59+
.iter()
60+
.map(|port| port.to_string())
61+
.collect::<Vec<String>>()
62+
.join(","),
63+
None => String::new(),
64+
};
6065
write!(
6166
f,
6267
"{}:{}:{}",
@@ -68,10 +73,20 @@ impl fmt::Display for NodeReference {
6873
}
6974

7075
impl NodeReference {
71-
pub fn new(public_key: PublicKey, ip_addr: IpAddr, ports: Vec<u16>) -> NodeReference {
72-
NodeReference {
73-
public_key,
74-
node_addr: NodeAddr::new(&ip_addr, &ports),
76+
pub fn new(
77+
public_key: PublicKey,
78+
ip_addr_opt: Option<IpAddr>,
79+
ports: Vec<u16>,
80+
) -> NodeReference {
81+
match ip_addr_opt {
82+
Some(ip_addr) => NodeReference {
83+
public_key,
84+
node_addr_opt: Some(NodeAddr::new(&ip_addr, &ports)),
85+
},
86+
None => NodeReference {
87+
public_key,
88+
node_addr_opt: None,
89+
},
7590
}
7691
}
7792

@@ -82,14 +97,18 @@ impl NodeReference {
8297
}
8398
}
8499

85-
fn extract_ip_addr(slice: &str) -> Result<IpAddr, String> {
86-
match IpAddr::from_str(slice) {
87-
Ok(ip_addr) => Ok(ip_addr),
88-
Err(_) => {
89-
return Err(format!(
90-
"The IP address of a NodeReference must be valid, not '{}'",
91-
slice
92-
));
100+
fn extract_ip_addr(slice: &str) -> Result<Option<IpAddr>, String> {
101+
if slice.is_empty() {
102+
Ok(None)
103+
} else {
104+
match IpAddr::from_str(slice) {
105+
Ok(ip_addr) => Ok(Some(ip_addr)),
106+
Err(_) => {
107+
return Err(format!(
108+
"The IP address of a NodeReference must be valid, not '{}'",
109+
slice
110+
));
111+
}
93112
}
94113
}
95114
}
@@ -159,6 +178,8 @@ pub trait SubstratumNode: Any {
159178
fn rate_pack(&self) -> RatePack;
160179
// Valid values are "dev, "ropsten" for now. Add "mainnet" when it's time.
161180
fn chain(&self) -> Option<String>;
181+
fn accepts_connections(&self) -> bool;
182+
fn routes_data(&self) -> bool;
162183
}
163184

164185
pub struct SubstratumNodeUtils {}
@@ -319,8 +340,11 @@ mod tests {
319340

320341
assert_eq!(result.public_key, key);
321342
assert_eq!(
322-
result.node_addr,
323-
NodeAddr::new(&IpAddr::from_str("12.34.56.78").unwrap(), &vec!(1234, 2345))
343+
result.node_addr_opt,
344+
Some(NodeAddr::new(
345+
&IpAddr::from_str("12.34.56.78").unwrap(),
346+
&vec!(1234, 2345)
347+
))
324348
);
325349
}
326350

@@ -333,16 +357,19 @@ mod tests {
333357

334358
assert_eq!(result.public_key, key);
335359
assert_eq!(
336-
result.node_addr,
337-
NodeAddr::new(&IpAddr::from_str("12.34.56.78").unwrap(), &vec!())
360+
result.node_addr_opt,
361+
Some(NodeAddr::new(
362+
&IpAddr::from_str("12.34.56.78").unwrap(),
363+
&vec!()
364+
))
338365
);
339366
}
340367

341368
#[test]
342369
fn node_reference_can_display_itself() {
343370
let subject = NodeReference::new(
344371
PublicKey::new(&b"Booga"[..]),
345-
IpAddr::from_str("12.34.56.78").unwrap(),
372+
Some(IpAddr::from_str("12.34.56.78").unwrap()),
346373
vec![1234, 5678],
347374
);
348375

0 commit comments

Comments
 (0)