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