From b22c80106f6766f413e16f1576a0c532b7c120ce Mon Sep 17 00:00:00 2001 From: Tamo Date: Thu, 13 Jan 2022 15:35:24 +0100 Subject: [PATCH] add some settings to the fuzzed milli and use the published version of arbitrary json --- milli/fuzz/Cargo.toml | 3 ++- milli/fuzz/fuzz_targets/indexing.rs | 36 ++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/milli/fuzz/Cargo.toml b/milli/fuzz/Cargo.toml index 3386ddaf9..0456e7098 100644 --- a/milli/fuzz/Cargo.toml +++ b/milli/fuzz/Cargo.toml @@ -9,12 +9,13 @@ edition = "2018" cargo-fuzz = true [dependencies] +arbitrary = "1.0" libfuzzer-sys = "0.4" heed = { git = "https://github.com/Kerollmops/heed", tag = "v0.12.1" } serde_json = { version = "1.0.62", features = ["preserve_order"] } anyhow = "1.0" tempfile = "3.3" -arbitrary-json = { git = "https://github.com/irevoire/arbitrary-json" } +arbitrary-json = "0.1.0" [target.'cfg(target_os = "linux")'.dependencies] jemallocator = "0.3.2" diff --git a/milli/fuzz/fuzz_targets/indexing.rs b/milli/fuzz/fuzz_targets/indexing.rs index 179ccf757..9b63983fb 100644 --- a/milli/fuzz/fuzz_targets/indexing.rs +++ b/milli/fuzz/fuzz_targets/indexing.rs @@ -1,5 +1,6 @@ #![no_main] +use std::collections::HashSet; use std::io::{BufWriter, Cursor, Read, Seek, Write}; use anyhow::{bail, Result}; @@ -46,9 +47,38 @@ fn index_documents( fn create_index() -> Result { let dir = tempfile::tempdir().unwrap(); let mut options = EnvOpenOptions::new(); - options.map_size(100 * 1024 * 1024 * 1024); // 100 GB + options.map_size(10 * 1024 * 1024 * 1024); // 10 GB options.max_readers(1); - Ok(Index::new(options, dir.path())?) + let index = Index::new(options, dir.path())?; + + let update_builder = UpdateBuilder::new(); + let mut wtxn = index.write_txn().unwrap(); + let mut builder = update_builder.settings(&mut wtxn, &index); + + let displayed_fields = + ["id", "title", "album", "artist", "genre", "country", "released", "duration"] + .iter() + .map(|s| s.to_string()) + .collect(); + builder.set_displayed_fields(displayed_fields); + + let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect(); + builder.set_searchable_fields(searchable_fields); + + let faceted_fields: HashSet = + ["released-timestamp", "duration-float", "genre", "country", "artist"] + .iter() + .map(|s| s.to_string()) + .collect(); + builder.set_filterable_fields(faceted_fields.clone()); + builder.set_sortable_fields(faceted_fields); + + builder.set_distinct_field("same".to_string()); + + builder.execute(|_| ()).unwrap(); + wtxn.commit().unwrap(); + + Ok(index) } fuzz_target!(|batches: Vec>| { @@ -63,9 +93,9 @@ fuzz_target!(|batches: Vec>| { // We ignore all badly generated documents if let Ok(_count) = read_json(json.as_bytes(), &mut documents) { + documents.rewind().unwrap(); let documents = DocumentBatchReader::from_reader(documents).unwrap(); match index_documents(&mut index, documents) { - // Err(e @ InternalError(_) | e @ IoError(_)) => panic!("{:?}", e), _ => (), } }