assemblyline_models/datastore/
mod.rs1
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)]
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 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 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 let mapping = build_mapping::<Workflow>().unwrap();
230 assert_eq!(mapping, py_mappings);
231 }
232
233}