Skip to content

Commit 4c65b77

Browse files
authored
[ISSUE #1370]🚀Add PlainAccessConfig (#1371)
1 parent f4ea308 commit 4c65b77

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed

rocketmq-common/src/common/base.rs

+1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17+
pub mod plain_access_config;
1718
pub mod service_state;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
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+
use std::fmt::Display;
18+
19+
use cheetah_string::CheetahString;
20+
use serde::Deserialize;
21+
use serde::Serialize;
22+
23+
#[derive(Serialize, Deserialize, Clone, Debug, Default, Eq, PartialEq)]
24+
#[serde(rename_all = "camelCase")]
25+
pub 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+
36+
impl 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)]
56+
mod 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+
}

0 commit comments

Comments
 (0)