assemblyline_models/datastore/
mod.rs

1
2pub mod submission;
3pub mod error;
4pub mod alert;
5pub mod workflow;
6pub mod result;
7pub mod tagging;
8pub mod file;
9pub mod service;
10pub mod service_delta;
11pub mod retrohunt;
12pub mod user;
13pub mod filescore;
14pub mod emptyresult;
15pub mod badlist;
16pub mod heuristic;
17pub mod safelist;
18
19pub use submission::Submission;
20pub use error::Error;
21pub use alert::Alert;
22pub use workflow::Workflow;
23pub use result::Result;
24pub use tagging::Tagging;
25pub use file::File;
26pub use service::Service;
27pub use service_delta::ServiceDelta;
28pub use retrohunt::{Retrohunt, RetrohuntHit};
29pub use emptyresult::EmptyResult;
30
31
32// #[cfg(test)]
33// mod python {
34//     use serde_json::json;
35
36//     use crate::meta::Mappings;
37
38//     use super::{super::meta::build_mapping, Submission};
39//     use pretty_assertions::assert_eq;
40
41//     #[test]
42//     fn submission() {
43//         let output = std::process::Command::new("python").arg("-c").arg("from assemblyline.datastore.support.build import build_mapping; from assemblyline.odm.models.submission import Submission; import json; print(json.dumps(build_mapping(Submission.fields().values())))").output().unwrap();
44//         let stderr = String::from_utf8(output.stderr).unwrap();
45//         let stdout = String::from_utf8(output.stdout).unwrap();
46//         if !output.status.success() || !stderr.is_empty() {
47//             println!("{stderr}");
48//             panic!();
49//         }
50
51//         let (properties, dynamic_templates): (serde_json::Value, serde_json::Value) = serde_json::from_str(&stdout).unwrap();
52//         let py_mapping = json!({
53//             "properties": properties,
54//             "dynamic_templates": dynamic_templates,
55//         });
56//         let py_mapping: Mappings = serde_json::from_value(py_mapping).unwrap();
57
58
59//         println!("{}", serde_json::to_string_pretty(&properties).unwrap());
60//         println!("{}", serde_json::to_string_pretty(&dynamic_templates).unwrap());
61
62//         let mapping = build_mapping::<Submission>().unwrap();
63//         assert_eq!(mapping, py_mapping);
64//         todo!();
65//         // let rs_properties: serde_json::Value = rs_properties.into(); 
66//         // let rs_dynamic_templates: serde_json::Value = rs_dynamic_templates.into(); 
67
68//         // assert_eq!(properties, rs_properties);
69//         // assert_eq!(dynamic_templates, rs_dynamic_templates);
70//     }
71
72// }
73
74
75#[cfg(test)]
76mod python {
77
78    use serde_json::json;
79
80    use super::{RetrohuntHit, File};
81    use crate::datastore::badlist::Badlist;
82    use crate::datastore::safelist::Safelist;
83    use crate::datastore::user::User;
84    use crate::datastore::{Retrohunt, Service, ServiceDelta, Tagging, Workflow};
85    use crate::datastore::{Alert, EmptyResult, Error, Result, Submission, filescore::FileScore, heuristic::Heuristic};
86    use crate::meta::Mappings;
87
88    use crate::meta::build_mapping;
89    use pretty_assertions::assert_eq;
90
91    fn load_mapping(module: &str, name: &str) -> Mappings {
92        let output = std::process::Command::new("python").arg("-c").arg("from assemblyline.datastore.support.build import build_mapping; from assemblyline.odm.models. ".to_owned() + module + " import " + name + "; import json; print(json.dumps(build_mapping(" + name + ".fields().values())))").output().unwrap();
93        let stderr = String::from_utf8(output.stderr).unwrap();
94        let stdout = String::from_utf8(output.stdout).unwrap();
95        if !output.status.success() || !stderr.is_empty() {
96            println!("{stderr}");
97            panic!();
98        }
99
100        let (properties, dynamic_templates): (serde_json::Value, serde_json::Value) = serde_json::from_str(&stdout).unwrap();
101        let py_mapping = json!({
102            "dynamic": true,
103            "properties": properties,
104            "dynamic_templates": dynamic_templates,
105        });
106        serde_json::from_value(py_mapping).unwrap()
107    }
108
109    #[test]
110    fn alert_schema() {
111        let py_mappings = load_mapping("alert", "Alert");
112        let mapping = build_mapping::<Alert>().unwrap();
113        assert_eq!(mapping, py_mappings);
114    }
115
116    
117    #[test]
118    fn badlist_schema() {
119        let py_mappings = load_mapping("badlist", "Badlist");
120        // py_mappings.properties.remove("archive_ts");
121        let mapping = build_mapping::<Badlist>().unwrap();
122        assert_eq!(mapping, py_mappings);
123    }
124
125    #[test]
126    fn emptyresult_schema() {
127        let py_mappings = load_mapping("emptyresult", "EmptyResult");
128        let mapping = build_mapping::<EmptyResult>().unwrap();
129        assert_eq!(mapping, py_mappings);
130    }
131
132    #[test]
133    fn error_schema() {
134        let py_mappings = load_mapping("error", "Error");
135        let mapping = build_mapping::<Error>().unwrap();
136        assert_eq!(mapping, py_mappings);
137    }
138
139    #[test]
140    fn file_schema() {
141        let py_mappings = load_mapping("file", "File");
142        let mapping = build_mapping::<File>().unwrap();
143        assert_eq!(mapping, py_mappings);
144    }
145
146    #[test]
147    fn filescore_schema() {
148        let py_mappings = load_mapping("filescore", "FileScore");
149        let mapping = build_mapping::<FileScore>().unwrap();
150        assert_eq!(mapping, py_mappings);
151    }
152
153    #[test]
154    fn heuristic_schema() {
155        let py_mappings = load_mapping("heuristic", "Heuristic");
156        let mapping = build_mapping::<Heuristic>().unwrap();
157        assert_eq!(mapping, py_mappings);
158    }
159
160    #[test]
161    fn result_schema() {
162        let py_mappings = load_mapping("result", "Result");
163        let mapping = build_mapping::<Result>().unwrap();
164        assert_eq!(mapping, py_mappings);
165    }
166
167    #[test]
168    fn retrohunt_schema() {
169        let py_mappings = load_mapping("retrohunt", "Retrohunt");
170        let mapping = build_mapping::<Retrohunt>().unwrap();
171        assert_eq!(mapping, py_mappings);
172    }
173
174    #[test]
175    fn retrohunt_hits_schema() {
176        let py_mappings = load_mapping("retrohunt", "RetrohuntHit");
177        let mapping = build_mapping::<RetrohuntHit>().unwrap();
178        assert_eq!(mapping, py_mappings);
179    }
180
181    #[test]
182    fn safelist_schema() {
183        let py_mappings = load_mapping("safelist", "Safelist");
184        let mapping = build_mapping::<Safelist>().unwrap();
185        assert_eq!(mapping, py_mappings);
186    }
187
188    #[test]
189    fn service_delta_schema() {
190        let py_mappings = load_mapping("service_delta", "ServiceDelta");
191        let mapping = build_mapping::<ServiceDelta>().unwrap();
192        assert_eq!(mapping, py_mappings);
193    }
194
195    #[test]
196    fn service_schema() {
197        let py_mappings = load_mapping("service", "Service");
198        let mapping = build_mapping::<Service>().unwrap();
199        assert_eq!(mapping, py_mappings);
200    }
201
202    #[test]
203    fn submission_schema() {
204        let mut py_mappings = load_mapping("submission", "Submission");
205        py_mappings.properties.remove("params.ignore_dynamic_recursion_prevention");
206        let mapping = build_mapping::<Submission>().unwrap();
207        assert_eq!(mapping, py_mappings);
208    }
209
210    #[test]
211    fn tagging_schema() {
212        let py_mappings = load_mapping("tagging", "Tagging");
213        let mapping = build_mapping::<Tagging>().unwrap();
214        assert_eq!(mapping, py_mappings);
215    }
216
217    #[test]
218    fn user_schema() {
219        let py_mappings = load_mapping("user", "User");
220        // py_mappings.properties.remove("archive_ts");
221        let mapping = build_mapping::<User>().unwrap();
222        assert_eq!(mapping, py_mappings);
223    }
224
225    #[test]
226    fn workflow_schema() {
227        let py_mappings = load_mapping("workflow", "Workflow");
228        // py_mappings.properties.remove("archive_ts");
229        let mapping = build_mapping::<Workflow>().unwrap();
230        assert_eq!(mapping, py_mappings);
231    }
232
233}