rocketmq_remoting/protocol/header/
get_meta_data_response_header.rs1use rocketmq_macros::RequestHeaderCodecV2;
16use serde::Deserialize;
17use serde::Serialize;
18
19use crate::protocol::CheetahString;
20
21#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
22#[serde(rename_all = "camelCase")]
23pub struct GetMetaDataResponseHeader {
24 pub group: Option<CheetahString>,
25 pub controller_leader_id: Option<CheetahString>,
26 pub controller_leader_address: Option<CheetahString>,
27 pub is_leader: Option<bool>,
28 pub peers: Option<CheetahString>,
29}
30
31#[cfg(test)]
32mod tests {
33 use std::collections::HashMap;
34
35 use super::*;
36 use crate::protocol::command_custom_header::CommandCustomHeader;
37 use crate::protocol::command_custom_header::FromMap;
38
39 #[test]
40 fn get_meta_data_response_header_serializes_correctly() {
41 let header = GetMetaDataResponseHeader {
42 group: Some(CheetahString::from_static_str("test_group")),
43 controller_leader_id: Some(CheetahString::from_static_str("1")),
44 controller_leader_address: Some(CheetahString::from_static_str("192.168.1.1:9876")),
45 is_leader: Some(true),
46 peers: Some(CheetahString::from_static_str("192.168.1.1:9876,192.168.1.2:9876")),
47 };
48 let map = header.to_map().unwrap();
49 assert_eq!(
50 map.get(&CheetahString::from_static_str(GetMetaDataResponseHeader::GROUP))
51 .unwrap(),
52 "test_group"
53 );
54 assert_eq!(
55 map.get(&CheetahString::from_static_str(
56 GetMetaDataResponseHeader::CONTROLLER_LEADER_ID
57 ))
58 .unwrap(),
59 "1"
60 );
61 assert_eq!(
62 map.get(&CheetahString::from_static_str(
63 GetMetaDataResponseHeader::CONTROLLER_LEADER_ADDRESS
64 ))
65 .unwrap(),
66 "192.168.1.1:9876"
67 );
68 assert_eq!(
69 map.get(&CheetahString::from_static_str(GetMetaDataResponseHeader::IS_LEADER))
70 .unwrap(),
71 "true"
72 );
73 assert_eq!(
74 map.get(&CheetahString::from_static_str(GetMetaDataResponseHeader::PEERS))
75 .unwrap(),
76 "192.168.1.1:9876,192.168.1.2:9876"
77 );
78 }
79
80 #[test]
81 fn get_meta_data_response_header_deserializes_correctly() {
82 let mut map = HashMap::new();
83 map.insert(
84 CheetahString::from_static_str(GetMetaDataResponseHeader::GROUP),
85 CheetahString::from("test_group"),
86 );
87 map.insert(
88 CheetahString::from_static_str(GetMetaDataResponseHeader::CONTROLLER_LEADER_ID),
89 CheetahString::from("1"),
90 );
91 map.insert(
92 CheetahString::from_static_str(GetMetaDataResponseHeader::CONTROLLER_LEADER_ADDRESS),
93 CheetahString::from("192.168.1.1:9876"),
94 );
95 map.insert(
96 CheetahString::from_static_str(GetMetaDataResponseHeader::IS_LEADER),
97 CheetahString::from("true"),
98 );
99 map.insert(
100 CheetahString::from_static_str(GetMetaDataResponseHeader::PEERS),
101 CheetahString::from("192.168.1.1:9876,192.168.1.2:9876"),
102 );
103 let header = <GetMetaDataResponseHeader as FromMap>::from(&map).unwrap();
104 assert_eq!(header.group, Some(CheetahString::from_static_str("test_group")));
105 assert_eq!(header.controller_leader_id, Some(CheetahString::from_static_str("1")));
106 assert_eq!(
107 header.controller_leader_address,
108 Some(CheetahString::from_static_str("192.168.1.1:9876"))
109 );
110 assert_eq!(header.is_leader, Some(true));
111 assert_eq!(
112 header.peers,
113 Some(CheetahString::from_static_str("192.168.1.1:9876,192.168.1.2:9876"))
114 );
115 }
116
117 #[test]
118 fn get_meta_data_response_header_handles_missing_optional_fields() {
119 let map = HashMap::new();
120 let header = <GetMetaDataResponseHeader as FromMap>::from(&map).unwrap();
121 assert!(header.group.is_none());
122 assert!(header.controller_leader_id.is_none());
123 assert!(header.controller_leader_address.is_none());
124 assert!(header.is_leader.is_none());
125 assert!(header.peers.is_none());
126 }
127}