rocketmq_common/common/base/
plain_access_config.rs1use 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}