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