rocketmq_common/common/base/
plain_access_config.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 */
17use std::fmt::Display;
18
19use cheetah_string::CheetahString;
20use serde::Deserialize;
21use serde::Serialize;
22
23#[derive(Serialize, Deserialize, Clone, Debug, Default, Eq, PartialEq)]
24#[serde(rename_all = "camelCase")]
25pub struct PlainAccessConfig {
26    pub access_key: Option<CheetahString>,
27    pub secret_key: Option<CheetahString>,
28    pub white_remote_address: Option<CheetahString>,
29    pub admin: bool,
30    pub default_topic_perm: Option<CheetahString>,
31    pub default_group_perm: Option<CheetahString>,
32    pub topic_perms: Vec<CheetahString>,
33    pub group_perms: Vec<CheetahString>,
34}
35
36impl Display for PlainAccessConfig {
37    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38        write!(
39            f,
40            "PlainAccessConfig {{ access_key: {:?}, secret_key: {:?}, white_remote_address: {:?}, \
41             admin: {}, default_topic_perm: {:?}, default_group_perm: {:?}, topic_perms: {:?}, \
42             group_perms: {:?} }}",
43            self.access_key,
44            self.secret_key,
45            self.white_remote_address,
46            self.admin,
47            self.default_topic_perm,
48            self.default_group_perm,
49            self.topic_perms,
50            self.group_perms
51        )
52    }
53}
54
55#[cfg(test)]
56mod tests {
57    use serde_json;
58
59    use super::*;
60
61    #[test]
62    fn plain_access_config_default_values() {
63        let config = PlainAccessConfig {
64            access_key: None,
65            secret_key: None,
66            white_remote_address: None,
67            admin: false,
68            default_topic_perm: None,
69            default_group_perm: None,
70            topic_perms: Vec::new(),
71            group_perms: Vec::new(),
72        };
73        assert!(config.access_key.is_none());
74        assert!(config.secret_key.is_none());
75        assert!(config.white_remote_address.is_none());
76        assert!(!config.admin);
77        assert!(config.default_topic_perm.is_none());
78        assert!(config.default_group_perm.is_none());
79        assert!(config.topic_perms.is_empty());
80        assert!(config.group_perms.is_empty());
81    }
82
83    #[test]
84    fn plain_access_config_equality() {
85        let config1 = PlainAccessConfig {
86            access_key: Some(CheetahString::from("key1")),
87            secret_key: Some(CheetahString::from("secret1")),
88            white_remote_address: Some(CheetahString::from("address1")),
89            admin: true,
90            default_topic_perm: Some(CheetahString::from("perm1")),
91            default_group_perm: Some(CheetahString::from("perm2")),
92            topic_perms: vec![CheetahString::from("topic1")],
93            group_perms: vec![CheetahString::from("group1")],
94        };
95
96        let config2 = PlainAccessConfig {
97            access_key: Some(CheetahString::from("key1")),
98            secret_key: Some(CheetahString::from("secret1")),
99            white_remote_address: Some(CheetahString::from("address1")),
100            admin: true,
101            default_topic_perm: Some(CheetahString::from("perm1")),
102            default_group_perm: Some(CheetahString::from("perm2")),
103            topic_perms: vec![CheetahString::from("topic1")],
104            group_perms: vec![CheetahString::from("group1")],
105        };
106
107        assert_eq!(config1, config2);
108    }
109
110    #[test]
111    fn plain_access_config_inequality() {
112        let config1 = PlainAccessConfig {
113            access_key: Some(CheetahString::from("key1")),
114            secret_key: Some(CheetahString::from("secret1")),
115            white_remote_address: Some(CheetahString::from("address1")),
116            admin: true,
117            default_topic_perm: Some(CheetahString::from("perm1")),
118            default_group_perm: Some(CheetahString::from("perm2")),
119            topic_perms: vec![CheetahString::from("topic1")],
120            group_perms: vec![CheetahString::from("group1")],
121        };
122
123        let config2 = PlainAccessConfig {
124            access_key: Some(CheetahString::from("key2")),
125            secret_key: Some(CheetahString::from("secret2")),
126            white_remote_address: Some(CheetahString::from("address2")),
127            admin: false,
128            default_topic_perm: Some(CheetahString::from("perm3")),
129            default_group_perm: Some(CheetahString::from("perm4")),
130            topic_perms: vec![CheetahString::from("topic2")],
131            group_perms: vec![CheetahString::from("group2")],
132        };
133
134        assert_ne!(config1, config2);
135    }
136
137    #[test]
138    fn serialize_plain_access_config() {
139        let config = PlainAccessConfig {
140            access_key: Some(CheetahString::from("key1")),
141            secret_key: Some(CheetahString::from("secret1")),
142            white_remote_address: Some(CheetahString::from("address1")),
143            admin: true,
144            default_topic_perm: Some(CheetahString::from("perm1")),
145            default_group_perm: Some(CheetahString::from("perm2")),
146            topic_perms: vec![CheetahString::from("topic1")],
147            group_perms: vec![CheetahString::from("group1")],
148        };
149        let serialized = serde_json::to_string(&config).unwrap();
150        assert_eq!(
151            serialized,
152            r#"{"accessKey":"key1","secretKey":"secret1","whiteRemoteAddress":"address1","admin":true,"defaultTopicPerm":"perm1","defaultGroupPerm":"perm2","topicPerms":["topic1"],"groupPerms":["group1"]}"#
153        );
154    }
155
156    #[test]
157    fn deserialize_plain_access_config() {
158        let json = r#"{"accessKey":"key1","secretKey":"secret1","whiteRemoteAddress":"address1","admin":true,"defaultTopicPerm":"perm1","defaultGroupPerm":"perm2","topicPerms":["topic1"],"groupPerms":["group1"]}"#;
159        let deserialized: PlainAccessConfig = serde_json::from_str(json).unwrap();
160        assert_eq!(deserialized.access_key, Some(CheetahString::from("key1")));
161        assert_eq!(
162            deserialized.secret_key,
163            Some(CheetahString::from("secret1"))
164        );
165        assert_eq!(
166            deserialized.white_remote_address,
167            Some(CheetahString::from("address1"))
168        );
169        assert!(deserialized.admin);
170        assert_eq!(
171            deserialized.default_topic_perm,
172            Some(CheetahString::from("perm1"))
173        );
174        assert_eq!(
175            deserialized.default_group_perm,
176            Some(CheetahString::from("perm2"))
177        );
178        assert_eq!(
179            deserialized.topic_perms,
180            vec![CheetahString::from("topic1")]
181        );
182        assert_eq!(
183            deserialized.group_perms,
184            vec![CheetahString::from("group1")]
185        );
186    }
187
188    #[test]
189    fn deserialize_plain_access_config_missing_optional_fields() {
190        let json = r#"{"admin":true,"topicPerms":[],"groupPerms":[]}"#;
191        let deserialized: PlainAccessConfig = serde_json::from_str(json).unwrap();
192        assert!(deserialized.access_key.is_none());
193        assert!(deserialized.secret_key.is_none());
194        assert!(deserialized.white_remote_address.is_none());
195        assert!(deserialized.admin);
196        assert!(deserialized.default_topic_perm.is_none());
197        assert!(deserialized.default_group_perm.is_none());
198        assert!(deserialized.topic_perms.is_empty());
199        assert!(deserialized.group_perms.is_empty());
200    }
201}