use std::collections::HashMap;
use cheetah_string::CheetahString;
use serde::Deserialize;
use serde::Serialize;
use crate::protocol::DataVersion;
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ClusterAclVersionInfo {
pub broker_name: CheetahString,
pub broker_addr: CheetahString,
pub acl_config_data_version: Option<DataVersion>,
pub all_acl_config_data_version: HashMap<CheetahString, DataVersion>,
pub cluster_name: CheetahString,
}
#[cfg(test)]
mod tests {
use std::collections::HashMap;
use std::sync::atomic::Ordering;
use cheetah_string::CheetahString;
use super::*;
use crate::protocol::DataVersion;
#[test]
fn serialize_cluster_acl_version_info() {
let mut all_acl_config_data_version = HashMap::new();
all_acl_config_data_version.insert(CheetahString::from("key1"), DataVersion::default());
let info = ClusterAclVersionInfo {
broker_name: CheetahString::from("broker1"),
broker_addr: CheetahString::from("addr1"),
acl_config_data_version: Some(DataVersion::default()),
all_acl_config_data_version,
cluster_name: CheetahString::from("cluster1"),
};
let serialized = serde_json::to_string(&info).unwrap();
assert!(serialized.contains("\"brokerName\":\"broker1\""));
assert!(serialized.contains("\"brokerAddr\":\"addr1\""));
assert!(serialized.contains("\"aclConfigDataVersion\":"));
assert!(serialized.contains("\"allAclConfigDataVersion\":"));
assert!(serialized.contains("\"clusterName\":\"cluster1\""));
}
#[test]
fn deserialize_cluster_acl_version_info_with_data_version() {
let json = r#"{
"brokerName": "broker1",
"brokerAddr": "addr1",
"aclConfigDataVersion": {"counter": 1, "timestamp": 123456789,"stateVersion": 0},
"allAclConfigDataVersion": {"key1": {"counter": 1, "timestamp": 123456789,"stateVersion": 0}},
"clusterName": "cluster1"
}"#;
let deserialized: ClusterAclVersionInfo = serde_json::from_str(json).unwrap();
assert_eq!(&deserialized.broker_name, &CheetahString::from("broker1"));
assert_eq!(&deserialized.broker_addr, &CheetahString::from("addr1"));
assert!(deserialized.acl_config_data_version.is_some());
assert_eq!(
deserialized
.acl_config_data_version
.as_ref()
.unwrap()
.counter
.load(Ordering::Relaxed),
1
);
assert_eq!(
deserialized.acl_config_data_version.as_ref().unwrap().timestamp,
123456789
);
assert_eq!(
deserialized
.all_acl_config_data_version
.get(&CheetahString::from("key1"))
.unwrap()
.counter
.load(Ordering::Relaxed),
1
);
assert_eq!(
deserialized
.all_acl_config_data_version
.get(&CheetahString::from("key1"))
.unwrap()
.timestamp,
123456789
);
assert_eq!(deserialized.cluster_name, CheetahString::from("cluster1"));
}
}