ibc_testkit/fixtures/core/client/
mod.rs

1#[cfg(feature = "serde")]
2mod msg_create_client;
3#[cfg(feature = "serde")]
4mod msg_update_client;
5mod msg_upgrade_client;
6
7#[cfg(feature = "serde")]
8pub use self::msg_create_client::*;
9#[cfg(feature = "serde")]
10pub use self::msg_update_client::*;
11pub use self::msg_upgrade_client::*;
12
13#[cfg(test)]
14mod tests {
15    use core::str::FromStr;
16
17    use ibc::core::client::types::events::*;
18    use ibc::core::client::types::Height;
19    use ibc::core::host::types::identifiers::*;
20    use ibc::primitives::prelude::*;
21    use ibc::primitives::ToVec;
22    use ibc_proto::google::protobuf::Any;
23    use tendermint::abci::Event as AbciEvent;
24
25    use crate::fixtures::clients::mock::dummy_new_mock_header;
26
27    #[test]
28    fn ibc_to_abci_client_events() {
29        struct Test {
30            event_kind: &'static str,
31            event: AbciEvent,
32            expected_keys: Vec<&'static str>,
33            expected_values: Vec<&'static str>,
34        }
35
36        let client_type = ClientType::from_str("07-tendermint")
37            .expect("never fails because it's a valid client type");
38        let client_id = client_type.build_client_id(0);
39        let consensus_height = Height::new(0, 5).unwrap();
40        let consensus_heights = vec![Height::new(0, 5).unwrap(), Height::new(0, 7).unwrap()];
41        let header: Any = dummy_new_mock_header(5).into();
42        let expected_keys = vec![
43            "client_id",
44            "client_type",
45            "consensus_height",
46            "consensus_heights",
47            "header",
48        ];
49
50        let expected_values = vec![
51            "07-tendermint-0",
52            "07-tendermint",
53            "0-5",
54            "0-5,0-7",
55            "0a102f6962632e6d6f636b2e486561646572120e0a021005108080889ebdc8819b17",
56        ];
57
58        let tests: Vec<Test> = vec![
59            Test {
60                event_kind: CREATE_CLIENT_EVENT,
61                event: CreateClient::new(client_id.clone(), client_type.clone(), consensus_height)
62                    .into(),
63                expected_keys: expected_keys[0..3].to_vec(),
64                expected_values: expected_values[0..3].to_vec(),
65            },
66            Test {
67                event_kind: UPDATE_CLIENT_EVENT,
68                event: UpdateClient::new(
69                    client_id.clone(),
70                    client_type.clone(),
71                    consensus_height,
72                    consensus_heights,
73                    header.to_vec(),
74                )
75                .into(),
76                expected_keys: expected_keys.clone(),
77                expected_values: expected_values.clone(),
78            },
79            Test {
80                event_kind: UPGRADE_CLIENT_EVENT,
81                event: UpgradeClient::new(client_id.clone(), client_type.clone(), consensus_height)
82                    .into(),
83                expected_keys: expected_keys[0..3].to_vec(),
84                expected_values: expected_values[0..3].to_vec(),
85            },
86            Test {
87                event_kind: CLIENT_MISBEHAVIOUR_EVENT,
88                event: ClientMisbehaviour::new(client_id, client_type).into(),
89                expected_keys: expected_keys[0..2].to_vec(),
90                expected_values: expected_values[0..2].to_vec(),
91            },
92        ];
93
94        for t in tests {
95            assert_eq!(t.event.kind, t.event_kind);
96            assert_eq!(t.expected_keys.len(), t.event.attributes.len());
97            for (i, e) in t.event.attributes.iter().enumerate() {
98                assert_eq!(
99                    e.key_str().unwrap(),
100                    t.expected_keys[i],
101                    "key mismatch for {:?}",
102                    t.event_kind
103                );
104            }
105            for (i, e) in t.event.attributes.iter().enumerate() {
106                assert_eq!(
107                    e.value_str().unwrap(),
108                    t.expected_values[i],
109                    "value mismatch for {:?}",
110                    t.event_kind
111                );
112            }
113        }
114    }
115}