Skip to main content

rocketmq_remoting/protocol/header/controller/
register_broker_to_controller_response_header.rs

1// Copyright 2023 The RocketMQ Rust Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use cheetah_string::CheetahString;
16use rocketmq_macros::RequestHeaderCodecV2;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Clone, Debug, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
21#[serde(rename_all = "camelCase")]
22pub struct RegisterBrokerToControllerResponseHeader {
23    pub cluster_name: Option<CheetahString>,
24    pub broker_name: Option<CheetahString>,
25    pub master_broker_id: Option<i64>,
26    pub master_address: Option<CheetahString>,
27    pub master_epoch: Option<i32>,
28    pub sync_state_set_epoch: Option<i32>,
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 register_broker_to_controller_response_header_serializes_correctly() {
41        let header = RegisterBrokerToControllerResponseHeader {
42            cluster_name: Some(CheetahString::from_static_str("test_cluster")),
43            broker_name: Some(CheetahString::from_static_str("test_broker")),
44            master_broker_id: Some(123),
45            master_address: Some(CheetahString::from_static_str("127.0.0.1:10911")),
46            master_epoch: Some(5),
47            sync_state_set_epoch: Some(10),
48        };
49        let map = header.to_map().unwrap();
50        assert_eq!(
51            map.get(&CheetahString::from_static_str("clusterName")).unwrap(),
52            "test_cluster"
53        );
54        assert_eq!(
55            map.get(&CheetahString::from_static_str("brokerName")).unwrap(),
56            "test_broker"
57        );
58        assert_eq!(
59            map.get(&CheetahString::from_static_str("masterBrokerId")).unwrap(),
60            "123"
61        );
62        assert_eq!(
63            map.get(&CheetahString::from_static_str("masterAddress")).unwrap(),
64            "127.0.0.1:10911"
65        );
66        assert_eq!(map.get(&CheetahString::from_static_str("masterEpoch")).unwrap(), "5");
67        assert_eq!(
68            map.get(&CheetahString::from_static_str("syncStateSetEpoch")).unwrap(),
69            "10"
70        );
71    }
72
73    #[test]
74    fn register_broker_to_controller_response_header_deserializes_correctly() {
75        let mut map = HashMap::new();
76        map.insert(
77            CheetahString::from_static_str("clusterName"),
78            CheetahString::from_static_str("test_cluster"),
79        );
80        map.insert(
81            CheetahString::from_static_str("brokerName"),
82            CheetahString::from_static_str("test_broker"),
83        );
84        map.insert(
85            CheetahString::from_static_str("masterBrokerId"),
86            CheetahString::from_static_str("123"),
87        );
88        map.insert(
89            CheetahString::from_static_str("masterAddress"),
90            CheetahString::from_static_str("127.0.0.1:10911"),
91        );
92        map.insert(
93            CheetahString::from_static_str("masterEpoch"),
94            CheetahString::from_static_str("5"),
95        );
96        map.insert(
97            CheetahString::from_static_str("syncStateSetEpoch"),
98            CheetahString::from_static_str("10"),
99        );
100
101        let header = <RegisterBrokerToControllerResponseHeader as FromMap>::from(&map).unwrap();
102        assert_eq!(
103            header.cluster_name,
104            Some(CheetahString::from_static_str("test_cluster"))
105        );
106        assert_eq!(header.broker_name, Some(CheetahString::from_static_str("test_broker")));
107        assert_eq!(header.master_broker_id, Some(123));
108        assert_eq!(
109            header.master_address,
110            Some(CheetahString::from_static_str("127.0.0.1:10911"))
111        );
112        assert_eq!(header.master_epoch, Some(5));
113        assert_eq!(header.sync_state_set_epoch, Some(10));
114    }
115
116    #[test]
117    fn register_broker_to_controller_response_header_default() {
118        let header = RegisterBrokerToControllerResponseHeader::default();
119        assert_eq!(header.cluster_name, None);
120        assert_eq!(header.broker_name, None);
121        assert_eq!(header.master_broker_id, None);
122        assert_eq!(header.master_address, None);
123        assert_eq!(header.master_epoch, None);
124        assert_eq!(header.sync_state_set_epoch, None);
125    }
126
127    #[test]
128    fn register_broker_to_controller_response_header_clone() {
129        let header = RegisterBrokerToControllerResponseHeader {
130            cluster_name: Some(CheetahString::from_static_str("test_cluster")),
131            broker_name: Some(CheetahString::from_static_str("test_broker")),
132            master_broker_id: Some(123),
133            master_address: Some(CheetahString::from_static_str("127.0.0.1:10911")),
134            master_epoch: Some(5),
135            sync_state_set_epoch: Some(10),
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.master_broker_id, cloned.master_broker_id);
141        assert_eq!(header.master_address, cloned.master_address);
142        assert_eq!(header.master_epoch, cloned.master_epoch);
143        assert_eq!(header.sync_state_set_epoch, cloned.sync_state_set_epoch);
144    }
145}