Skip to main content

rustfs_audit/
factory.rs

1// Copyright 2024 RustFS Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use crate::AuditEntry;
16use rustfs_targets::catalog::builtin::builtin_audit_target_descriptors;
17use rustfs_targets::{BuiltinTargetDescriptor, TargetPluginDescriptor};
18
19pub fn builtin_target_descriptors() -> Vec<BuiltinTargetDescriptor<AuditEntry>> {
20    builtin_audit_target_descriptors::<AuditEntry>()
21}
22
23pub fn builtin_target_plugins() -> Vec<TargetPluginDescriptor<AuditEntry>> {
24    builtin_target_descriptors()
25        .into_iter()
26        .map(|descriptor| descriptor.plugin().clone())
27        .collect()
28}
29
30#[cfg(test)]
31mod tests {
32    use super::builtin_target_descriptors;
33    use rustfs_config::audit::AUDIT_AMQP_KEYS;
34    use rustfs_config::server_config::KVS;
35    use rustfs_config::{AMQP_EXCHANGE, AMQP_QUEUE_DIR, AMQP_ROUTING_KEY, AMQP_URL};
36    use rustfs_targets::target::ChannelTargetType;
37
38    fn amqp_base_config() -> KVS {
39        let mut config = KVS::new();
40        config.insert(AMQP_URL.to_string(), "amqp://127.0.0.1:5672/%2f".to_string());
41        config.insert(AMQP_EXCHANGE.to_string(), "rustfs.audit".to_string());
42        config.insert(AMQP_ROUTING_KEY.to_string(), "audit".to_string());
43        config.insert(AMQP_QUEUE_DIR.to_string(), String::new());
44        config
45    }
46
47    #[test]
48    fn builtin_plugins_include_amqp_descriptor() {
49        let plugin = builtin_target_descriptors()
50            .into_iter()
51            .find(|plugin| plugin.plugin().target_type() == ChannelTargetType::Amqp.as_str())
52            .expect("amqp plugin should exist");
53
54        assert!(plugin.plugin().valid_fields().contains(&AMQP_URL));
55        assert!(plugin.plugin().valid_fields().contains(&AMQP_EXCHANGE));
56        assert!(plugin.plugin().valid_fields().contains(&AMQP_ROUTING_KEY));
57        assert_eq!(plugin.plugin().valid_fields().len(), AUDIT_AMQP_KEYS.len());
58    }
59
60    #[test]
61    fn builtin_plugins_create_audit_amqp_target() {
62        let plugin = builtin_target_descriptors()
63            .into_iter()
64            .find(|plugin| plugin.plugin().target_type() == ChannelTargetType::Amqp.as_str())
65            .expect("amqp plugin should exist");
66
67        let target = plugin
68            .plugin()
69            .create_target("primary".to_string(), &amqp_base_config())
70            .expect("AMQP audit target should be created");
71
72        let target_id = target.id();
73        assert_eq!(target_id.id, "primary");
74        assert_eq!(target_id.name, "amqp");
75        assert!(target.store().is_none());
76    }
77}