Subscribe to chains by genesis hash (#395)

* Handle subscription by hash in the frontend

* Forward-ported backend changes

* Fix unit tests

* Remove unused `chains_by_label`

* fmt

* Updated but failing E2E tests

* subscribe by genesis hash in tests

* fmt

* Copy `BlockHash` instead of returning a ref

* Pin chains by genesisHash

Co-authored-by: James Wilson <james@jsdw.me>
This commit is contained in:
Maciej Hirsz
2021-09-02 17:54:19 +02:00
committed by GitHub
parent ec5db0fbbf
commit a4069e4b3d
16 changed files with 156 additions and 140 deletions
+21 -15
View File
@@ -73,16 +73,17 @@ pub enum FeedMessage {
},
AddedChain {
name: String,
genesis_hash: BlockHash,
node_count: usize,
},
RemovedChain {
name: String,
genesis_hash: BlockHash,
},
SubscribedTo {
name: String,
genesis_hash: BlockHash,
},
UnsubscribedFrom {
name: String,
genesis_hash: BlockHash,
},
Pong {
msg: String,
@@ -260,23 +261,27 @@ impl FeedMessage {
}
// AddedChain
11 => {
let (name, node_count) = serde_json::from_str(raw_val.get())?;
FeedMessage::AddedChain { name, node_count }
let (name, genesis_hash, node_count) = serde_json::from_str(raw_val.get())?;
FeedMessage::AddedChain {
name,
genesis_hash,
node_count,
}
}
// RemovedChain
12 => {
let name = serde_json::from_str(raw_val.get())?;
FeedMessage::RemovedChain { name }
let genesis_hash = serde_json::from_str(raw_val.get())?;
FeedMessage::RemovedChain { genesis_hash }
}
// SubscribedTo
13 => {
let name = serde_json::from_str(raw_val.get())?;
FeedMessage::SubscribedTo { name }
let genesis_hash = serde_json::from_str(raw_val.get())?;
FeedMessage::SubscribedTo { genesis_hash }
}
// UnsubscribedFrom
14 => {
let name = serde_json::from_str(raw_val.get())?;
FeedMessage::UnsubscribedFrom { name }
let genesis_hash = serde_json::from_str(raw_val.get())?;
FeedMessage::UnsubscribedFrom { genesis_hash }
}
// Pong
15 => {
@@ -355,12 +360,12 @@ mod test {
#[test]
fn decode_remove_node_msg() {
// "remove chain ''":
let msg = r#"[12,""]"#;
let msg = r#"[12,"0x0000000000000000000000000000000000000000000000000000000000000000"]"#;
assert_eq!(
FeedMessage::from_bytes(msg.as_bytes()).unwrap(),
vec![FeedMessage::RemovedChain {
name: "".to_owned()
genesis_hash: BlockHash::zero(),
}]
);
}
@@ -368,16 +373,17 @@ mod test {
#[test]
fn decode_remove_then_add_node_msg() {
// "remove chain '', then add chain 'Local Testnet' with 1 node":
let msg = r#"[12,"",11,["Local Testnet",1]]"#;
let msg = r#"[12,"0x0000000000000000000000000000000000000000000000000000000000000000",11,["Local Testnet","0x0000000000000000000000000000000000000000000000000000000000000000",1]]"#;
assert_eq!(
FeedMessage::from_bytes(msg.as_bytes()).unwrap(),
vec![
FeedMessage::RemovedChain {
name: "".to_owned()
genesis_hash: BlockHash::zero(),
},
FeedMessage::AddedChain {
name: "Local Testnet".to_owned(),
genesis_hash: BlockHash::zero(),
node_count: 1
},
]