rocketmq_remoting/protocol/header/broker/
broker_heartbeat_request_header.rs1use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodecV2;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
21pub struct BrokerHeartbeatRequestHeader {
22 #[serde(rename = "clusterName")]
23 #[required]
24 pub cluster_name: CheetahString,
25
26 #[serde(rename = "brokerAddr")]
27 #[required]
28 pub broker_addr: CheetahString,
29
30 #[serde(rename = "brokerName")]
31 #[required]
32 pub broker_name: CheetahString,
33
34 #[serde(rename = "brokerId")]
35 pub broker_id: Option<i64>,
36
37 pub epoch: Option<i32>,
38
39 #[serde(rename = "maxOffset")]
40 pub max_offset: Option<i64>,
41
42 #[serde(rename = "confirmOffset")]
43 pub confirm_offset: Option<i64>,
44
45 #[serde(rename = "heartbeatTimeoutMills")]
46 pub heartbeat_timeout_mills: Option<i64>,
47
48 #[serde(rename = "electionPriority")]
49 pub election_priority: Option<i32>,
50}
51
52#[cfg(test)]
53mod tests {
54 use cheetah_string::CheetahString;
55
56 use super::*;
57
58 #[test]
59 fn broker_heartbeat_request_header_with_required_fields() {
60 let header = BrokerHeartbeatRequestHeader {
61 cluster_name: CheetahString::from("testCluster"),
62 broker_addr: CheetahString::from("testAddr"),
63 broker_name: CheetahString::from("testBroker"),
64 broker_id: Some(1),
65 epoch: Some(1),
66 max_offset: Some(100),
67 confirm_offset: Some(50),
68 heartbeat_timeout_mills: Some(3000),
69 election_priority: Some(1),
70 };
71 assert_eq!(header.cluster_name, CheetahString::from("testCluster"));
72 assert_eq!(header.broker_addr, CheetahString::from("testAddr"));
73 assert_eq!(header.broker_name, CheetahString::from("testBroker"));
74 assert_eq!(header.broker_id, Some(1));
75 assert_eq!(header.epoch, Some(1));
76 assert_eq!(header.max_offset, Some(100));
77 assert_eq!(header.confirm_offset, Some(50));
78 assert_eq!(header.heartbeat_timeout_mills, Some(3000));
79 assert_eq!(header.election_priority, Some(1));
80 }
81
82 #[test]
83 fn broker_heartbeat_request_header_with_optional_fields() {
84 let header = BrokerHeartbeatRequestHeader {
85 cluster_name: CheetahString::from("testCluster"),
86 broker_addr: CheetahString::from("testAddr"),
87 broker_name: CheetahString::from("testBroker"),
88 broker_id: None,
89 epoch: None,
90 max_offset: None,
91 confirm_offset: None,
92 heartbeat_timeout_mills: None,
93 election_priority: None,
94 };
95 assert_eq!(header.cluster_name, CheetahString::from("testCluster"));
96 assert_eq!(header.broker_addr, CheetahString::from("testAddr"));
97 assert_eq!(header.broker_name, CheetahString::from("testBroker"));
98 assert!(header.broker_id.is_none());
99 assert!(header.epoch.is_none());
100 assert!(header.max_offset.is_none());
101 assert!(header.confirm_offset.is_none());
102 assert!(header.heartbeat_timeout_mills.is_none());
103 assert!(header.election_priority.is_none());
104 }
105
106 #[test]
107 fn broker_heartbeat_request_header_with_empty_values() {
108 let header = BrokerHeartbeatRequestHeader {
109 cluster_name: CheetahString::from(""),
110 broker_addr: CheetahString::from(""),
111 broker_name: CheetahString::from(""),
112 broker_id: None,
113 epoch: None,
114 max_offset: None,
115 confirm_offset: None,
116 heartbeat_timeout_mills: None,
117 election_priority: None,
118 };
119 assert_eq!(header.cluster_name, CheetahString::from(""));
120 assert_eq!(header.broker_addr, CheetahString::from(""));
121 assert_eq!(header.broker_name, CheetahString::from(""));
122 assert!(header.broker_id.is_none());
123 assert!(header.epoch.is_none());
124 assert!(header.max_offset.is_none());
125 assert!(header.confirm_offset.is_none());
126 assert!(header.heartbeat_timeout_mills.is_none());
127 assert!(header.election_priority.is_none());
128 }
129
130 #[test]
131 fn broker_heartbeat_request_header_with_long_values() {
132 let long_string = "a".repeat(1000);
133 let header = BrokerHeartbeatRequestHeader {
134 cluster_name: CheetahString::from(&long_string),
135 broker_addr: CheetahString::from(&long_string),
136 broker_name: CheetahString::from(&long_string),
137 broker_id: Some(1),
138 epoch: Some(1),
139 max_offset: Some(100),
140 confirm_offset: Some(50),
141 heartbeat_timeout_mills: Some(3000),
142 election_priority: Some(1),
143 };
144 assert_eq!(header.cluster_name, CheetahString::from(&long_string));
145 assert_eq!(header.broker_addr, CheetahString::from(&long_string));
146 assert_eq!(header.broker_name, CheetahString::from(&long_string));
147 assert_eq!(header.broker_id, Some(1));
148 assert_eq!(header.epoch, Some(1));
149 assert_eq!(header.max_offset, Some(100));
150 assert_eq!(header.confirm_offset, Some(50));
151 assert_eq!(header.heartbeat_timeout_mills, Some(3000));
152 assert_eq!(header.election_priority, Some(1));
153 }
154}