rocketmq_remoting/protocol/header/controller/
register_broker_to_controller_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_common::TimeUtils::current_millis;
17use rocketmq_macros::RequestHeaderCodecV2;
18use serde::Deserialize;
19use serde::Serialize;
20
21#[derive(Clone, Debug, Serialize, Deserialize, RequestHeaderCodecV2)]
22#[serde(rename_all = "camelCase")]
23pub struct RegisterBrokerToControllerRequestHeader {
24 pub cluster_name: Option<CheetahString>,
25 pub broker_name: Option<CheetahString>,
26 pub broker_id: Option<i64>,
27 pub broker_address: Option<CheetahString>,
28 pub invoke_time: u64,
29}
30
31impl Default for RegisterBrokerToControllerRequestHeader {
32 fn default() -> Self {
33 Self {
34 cluster_name: None,
35 broker_name: None,
36 broker_id: None,
37 broker_address: None,
38 invoke_time: current_millis(),
39 }
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use std::collections::HashMap;
46
47 use super::*;
48 use crate::protocol::command_custom_header::CommandCustomHeader;
49 use crate::protocol::command_custom_header::FromMap;
50
51 #[test]
52 fn register_broker_to_controller_request_header_serializes_correctly() {
53 let header = RegisterBrokerToControllerRequestHeader {
54 cluster_name: Some(CheetahString::from_static_str("test_cluster")),
55 broker_name: Some(CheetahString::from_static_str("test_broker")),
56 broker_id: Some(123),
57 broker_address: Some(CheetahString::from_static_str("127.0.0.1:10911")),
58 invoke_time: 1234567890,
59 };
60 let map = header.to_map().unwrap();
61 assert_eq!(
62 map.get(&CheetahString::from_static_str("clusterName")).unwrap(),
63 "test_cluster"
64 );
65 assert_eq!(
66 map.get(&CheetahString::from_static_str("brokerName")).unwrap(),
67 "test_broker"
68 );
69 assert_eq!(map.get(&CheetahString::from_static_str("brokerId")).unwrap(), "123");
70 assert_eq!(
71 map.get(&CheetahString::from_static_str("brokerAddress")).unwrap(),
72 "127.0.0.1:10911"
73 );
74 assert_eq!(
75 map.get(&CheetahString::from_static_str("invokeTime")).unwrap(),
76 "1234567890"
77 );
78 }
79
80 #[test]
81 fn register_broker_to_controller_request_header_deserializes_correctly() {
82 let mut map = HashMap::new();
83 map.insert(
84 CheetahString::from_static_str("clusterName"),
85 CheetahString::from_static_str("test_cluster"),
86 );
87 map.insert(
88 CheetahString::from_static_str("brokerName"),
89 CheetahString::from_static_str("test_broker"),
90 );
91 map.insert(
92 CheetahString::from_static_str("brokerId"),
93 CheetahString::from_static_str("123"),
94 );
95 map.insert(
96 CheetahString::from_static_str("brokerAddress"),
97 CheetahString::from_static_str("127.0.0.1:10911"),
98 );
99 map.insert(
100 CheetahString::from_static_str("invokeTime"),
101 CheetahString::from_static_str("1234567890"),
102 );
103
104 let header = <RegisterBrokerToControllerRequestHeader as FromMap>::from(&map).unwrap();
105 assert_eq!(
106 header.cluster_name,
107 Some(CheetahString::from_static_str("test_cluster"))
108 );
109 assert_eq!(header.broker_name, Some(CheetahString::from_static_str("test_broker")));
110 assert_eq!(header.broker_id, Some(123));
111 assert_eq!(
112 header.broker_address,
113 Some(CheetahString::from_static_str("127.0.0.1:10911"))
114 );
115 assert_eq!(header.invoke_time, 1234567890);
116 }
117
118 #[test]
119 fn register_broker_to_controller_request_header_default() {
120 let header = RegisterBrokerToControllerRequestHeader::default();
121 assert_eq!(header.cluster_name, None);
122 assert_eq!(header.broker_name, None);
123 assert_eq!(header.broker_id, None);
124 assert_eq!(header.broker_address, None);
125 assert!(header.invoke_time > 0);
126 }
127
128 #[test]
129 fn register_broker_to_controller_request_header_clone() {
130 let header = RegisterBrokerToControllerRequestHeader {
131 cluster_name: Some(CheetahString::from_static_str("test_cluster")),
132 broker_name: Some(CheetahString::from_static_str("test_broker")),
133 broker_id: Some(123),
134 broker_address: Some(CheetahString::from_static_str("127.0.0.1:10911")),
135 invoke_time: 1234567890,
136 };
137 let cloned = header.clone();
138 assert_eq!(header.cluster_name, cloned.cluster_name);
139 assert_eq!(header.broker_name, cloned.broker_name);
140 assert_eq!(header.broker_id, cloned.broker_id);
141 assert_eq!(header.broker_address, cloned.broker_address);
142 assert_eq!(header.invoke_time, cloned.invoke_time);
143 }
144}