rocketmq_remoting/protocol/header/
unregister_client_request_header.rs

1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18use cheetah_string::CheetahString;
19use rocketmq_macros::RequestHeaderCodecV2;
20use serde::Deserialize;
21use serde::Serialize;
22
23use crate::rpc::rpc_request_header::RpcRequestHeader;
24
25#[derive(Debug, Serialize, Deserialize, Default, RequestHeaderCodecV2)]
26pub struct UnregisterClientRequestHeader {
27    #[required]
28    #[serde(rename = "clientID")]
29    pub client_id: CheetahString,
30    pub producer_group: Option<CheetahString>,
31    pub consumer_group: Option<CheetahString>,
32    #[serde(flatten)]
33    pub rpc_request_header: Option<RpcRequestHeader>,
34}
35
36#[cfg(test)]
37mod tests {
38
39    use std::collections::HashMap;
40
41    use cheetah_string::CheetahString;
42
43    use super::*;
44    use crate::protocol::command_custom_header::CommandCustomHeader;
45    use crate::protocol::command_custom_header::FromMap;
46
47    #[test]
48    fn un_register_client_request_header_serializes_correctly() {
49        let header: UnregisterClientRequestHeader = UnregisterClientRequestHeader {
50            client_id: CheetahString::from_static_str("test_client_id"),
51            producer_group: Some(CheetahString::from_static_str("test_producer_group")),
52            consumer_group: Some(CheetahString::from_static_str("test_consumer_group")),
53            rpc_request_header: None,
54        };
55        let map = header.to_map().unwrap();
56        assert_eq!(
57            map.get(&CheetahString::from_static_str("consumerGroup"))
58                .unwrap(),
59            "test_consumer_group"
60        );
61        assert_eq!(
62            map.get(&CheetahString::from_static_str("clientId"))
63                .unwrap(),
64            "test_client_id"
65        );
66        assert_eq!(
67            map.get(&CheetahString::from_static_str("producerGroup"))
68                .unwrap(),
69            "test_producer_group"
70        );
71        assert_eq!(
72            map.get(&CheetahString::from_static_str("rpcRequestHeader")),
73            None
74        );
75    }
76
77    #[test]
78    fn un_register_client_request_header_deserializes_correctly() {
79        let mut map = HashMap::new();
80        map.insert(
81            CheetahString::from_static_str("consumerGroup"),
82            CheetahString::from_static_str("test_consumer_group"),
83        );
84        map.insert(
85            CheetahString::from_static_str("clientId"),
86            CheetahString::from_static_str("test_client_id"),
87        );
88        map.insert(
89            CheetahString::from_static_str("producerGroup"),
90            CheetahString::from_static_str("test_producer_group"),
91        );
92        let header: UnregisterClientRequestHeader =
93            <UnregisterClientRequestHeader as FromMap>::from(&map).unwrap();
94        assert_eq!(
95            header.consumer_group.as_deref(),
96            Some("test_consumer_group")
97        );
98        assert_eq!(header.client_id, "test_client_id");
99        assert_eq!(
100            header.producer_group.as_deref(),
101            Some("test_producer_group")
102        );
103    }
104
105    #[test]
106    fn un_register_client_request_header_missing_optional_fields() {
107        let mut map = HashMap::new();
108        map.insert(
109            CheetahString::from_static_str("clientId"),
110            CheetahString::from_static_str("test_client_id"),
111        );
112
113        let header: UnregisterClientRequestHeader =
114            <UnregisterClientRequestHeader as FromMap>::from(&map).unwrap();
115        assert_eq!(header.client_id, "test_client_id");
116        assert!(header.rpc_request_header.is_some());
117    }
118
119    #[test]
120    fn un_register_client_request_header_deserialize_from_json() {
121        let data = r#"{"clientID":"test_client_id","consumerGroup":"test_consumer_group"}"#;
122        let header: UnregisterClientRequestHeader = serde_json::from_str(data).unwrap();
123        assert_eq!(
124            header.client_id,
125            CheetahString::from_static_str("test_client_id")
126        );
127        assert_eq!(header.consumer_group.as_deref(), None);
128        assert!(header.rpc_request_header.is_some());
129    }
130}