aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/common/mod.rs23
-rw-r--r--tests/files/GET_highlight.txt2
-rw-r--r--tests/files/GET_highlight_complex.txt2
-rw-r--r--tests/files/GET_highlight_fields.txt2
-rw-r--r--tests/files/GET_highlight_query.txt2
-rw-r--r--tests/files/GET_search.txt2
-rw-r--r--tests/files/GET_search_bool.txt2
-rw-r--r--tests/files/GET_search_boosting.txt2
-rw-r--r--tests/files/GET_search_docvalues.txt2
-rw-r--r--tests/files/GET_search_multi_match.txt2
-rw-r--r--tests/files/POST_search_inner.txt2
-rw-r--r--tests/files/POST_search_rescore.txt2
-rw-r--r--tests/files/POST_search_sort_mode.txt2
-rw-r--r--tests/parse_es_requests.rs50
14 files changed, 65 insertions, 32 deletions
diff --git a/tests/common/mod.rs b/tests/common/mod.rs
index a65fb2e..890dead 100644
--- a/tests/common/mod.rs
+++ b/tests/common/mod.rs
@@ -1,20 +1,21 @@
+use hyper::{Request, Body, Method};
use std::path::Path;
use std::io::BufRead;
-pub struct ExampleRequest {
+pub struct ExampleParts {
pub method: String,
pub path_and_query: String,
pub body: Option<String>,
}
-pub fn load_request_by_name(name: &str) -> ExampleRequest {
+pub fn load_parts_by_name(name: &str) -> ExampleParts {
let path = format!("tests/files/{}.txt", name);
let path = Path::new(&path);
- load_request(&path)
+ load_parts(&path)
}
-pub fn load_request(path: &Path) -> ExampleRequest {
+pub fn load_parts(path: &Path) -> ExampleParts {
let file = std::fs::File::open(path).unwrap();
let mut lines = std::io::BufReader::new(file).lines();
@@ -26,9 +27,21 @@ pub fn load_request(path: &Path) -> ExampleRequest {
Some(body.join("\n"))
};
- ExampleRequest {
+ ExampleParts {
method: first_line[0].clone(),
path_and_query: first_line[1].clone(),
body: body,
}
}
+
+pub fn load_request(path: &Path) -> Request<Body> {
+ let parts = load_parts(path);
+ Request::builder()
+ .uri(parts.path_and_query)
+ .method(Method::from_bytes(parts.method.as_bytes()).expect("valid method in example text file"))
+ .body(match parts.body {
+ Some(data) => Body::from(data),
+ None => Body::empty(),
+ })
+ .expect("constructing upstream request")
+}
diff --git a/tests/files/GET_highlight.txt b/tests/files/GET_highlight.txt
index 15346fb..8dc23ea 100644
--- a/tests/files/GET_highlight.txt
+++ b/tests/files/GET_highlight.txt
@@ -1,4 +1,4 @@
-GET my-index-000001/_search
+GET /my-index-000001/_search
{
"query": {
"match_phrase": { "message": "number 1" }
diff --git a/tests/files/GET_highlight_complex.txt b/tests/files/GET_highlight_complex.txt
index 94e4221..288aa9f 100644
--- a/tests/files/GET_highlight_complex.txt
+++ b/tests/files/GET_highlight_complex.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query" : {
"match": { "user.id": "kimchy" }
diff --git a/tests/files/GET_highlight_fields.txt b/tests/files/GET_highlight_fields.txt
index bbd474a..85b55cb 100644
--- a/tests/files/GET_highlight_fields.txt
+++ b/tests/files/GET_highlight_fields.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"query_string": {
diff --git a/tests/files/GET_highlight_query.txt b/tests/files/GET_highlight_query.txt
index 2540b45..7c7f0ea 100644
--- a/tests/files/GET_highlight_query.txt
+++ b/tests/files/GET_highlight_query.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"match": {
diff --git a/tests/files/GET_search.txt b/tests/files/GET_search.txt
index 1ed6157..7ff7ca6 100644
--- a/tests/files/GET_search.txt
+++ b/tests/files/GET_search.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"match": {
diff --git a/tests/files/GET_search_bool.txt b/tests/files/GET_search_bool.txt
index f04ac5a..3f402f9 100644
--- a/tests/files/GET_search_bool.txt
+++ b/tests/files/GET_search_bool.txt
@@ -1,4 +1,4 @@
-GET _search
+GET /some-index/_search
{
"query": {
"bool": {
diff --git a/tests/files/GET_search_boosting.txt b/tests/files/GET_search_boosting.txt
index 4db1814..9045a54 100644
--- a/tests/files/GET_search_boosting.txt
+++ b/tests/files/GET_search_boosting.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"boosting": {
diff --git a/tests/files/GET_search_docvalues.txt b/tests/files/GET_search_docvalues.txt
index 5b92b39..2fd57b1 100644
--- a/tests/files/GET_search_docvalues.txt
+++ b/tests/files/GET_search_docvalues.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"match_all": {}
diff --git a/tests/files/GET_search_multi_match.txt b/tests/files/GET_search_multi_match.txt
index 17aca77..cf07050 100644
--- a/tests/files/GET_search_multi_match.txt
+++ b/tests/files/GET_search_multi_match.txt
@@ -1,4 +1,4 @@
-GET /_search
+GET /some-index/_search
{
"query": {
"multi_match" : {
diff --git a/tests/files/POST_search_inner.txt b/tests/files/POST_search_inner.txt
index b6b3804..56c5acc 100644
--- a/tests/files/POST_search_inner.txt
+++ b/tests/files/POST_search_inner.txt
@@ -1,4 +1,4 @@
-POST test/_search
+POST /test/_search
{
"query": {
"nested": {
diff --git a/tests/files/POST_search_rescore.txt b/tests/files/POST_search_rescore.txt
index 81fcd96..071cf5f 100644
--- a/tests/files/POST_search_rescore.txt
+++ b/tests/files/POST_search_rescore.txt
@@ -1,4 +1,4 @@
-POST /_search
+POST /some-index/_search
{
"query" : {
"match" : {
diff --git a/tests/files/POST_search_sort_mode.txt b/tests/files/POST_search_sort_mode.txt
index 1d6988f..54155ca 100644
--- a/tests/files/POST_search_sort_mode.txt
+++ b/tests/files/POST_search_sort_mode.txt
@@ -1,4 +1,4 @@
-POST /_search
+POST /some-index/_search
{
"query" : {
"term" : { "product" : "chocolate" }
diff --git a/tests/parse_es_requests.rs b/tests/parse_es_requests.rs
index c34dfad..bd38ce6 100644
--- a/tests/parse_es_requests.rs
+++ b/tests/parse_es_requests.rs
@@ -2,27 +2,28 @@
use std::fs;
use std::ffi::OsStr;
use es_public_proxy::parse::{ScrollBody, SearchBody};
+use es_public_proxy::{ProxyConfig, filter_request};
mod common;
#[test]
fn basic_load() {
- let request = common::load_request_by_name("GET_search");
- assert_eq!(request.method, "GET");
- assert_eq!(request.path_and_query, "/_search");
+ let parts = common::load_parts_by_name("GET_search");
+ assert_eq!(parts.method, "GET");
+ assert_eq!(parts.path_and_query, "/some-index/_search");
}
#[test]
fn basic_parse() {
- let request = common::load_request_by_name("GET_search");
- assert_eq!(request.method, "GET");
- assert_eq!(request.path_and_query, "/_search");
+ let parts = common::load_parts_by_name("GET_search");
+ assert_eq!(parts.method, "GET");
+ assert_eq!(parts.path_and_query, "/some-index/_search");
- let _parsed: SearchBody = serde_json::from_str(&request.body.unwrap()).unwrap();
+ let _parsed: SearchBody = serde_json::from_str(&parts.body.unwrap()).unwrap();
}
#[test]
-fn parse_search_requests() {
+fn parse_search_bodies() {
let file_paths = fs::read_dir("tests/files").unwrap();
@@ -31,8 +32,8 @@ fn parse_search_requests() {
if path.extension() != Some(OsStr::new("txt")) {
continue
}
- let request = common::load_request(&path);
- if let Some(body) = request.body {
+ let parts = common::load_parts(&path);
+ if let Some(body) = parts.body {
println!("parsing: {}", path.display());
println!("BODY: {}", body);
let _parsed: SearchBody = serde_json::from_str(&body).unwrap();
@@ -41,7 +42,7 @@ fn parse_search_requests() {
}
#[test]
-fn parse_scroll_requests() {
+fn parse_scroll_bodies() {
let file_paths = fs::read_dir("tests/files/scroll").unwrap();
@@ -50,11 +51,30 @@ fn parse_scroll_requests() {
if path.extension() != Some(OsStr::new("txt")) {
continue
}
- let request = common::load_request(&path);
- if let Some(body) = request.body {
- println!("parsing: {}", path.display());
- println!("BODY: {}", body);
+ let parts = common::load_parts(&path);
+ if let Some(body) = parts.body {
+ println!(" parsing: {}", path.display());
+ //println!("BODY: {}", body);
let _parsed: ScrollBody = serde_json::from_str(&body).unwrap();
}
}
}
+
+#[test]
+fn filter_search_requests() {
+
+ let file_paths = fs::read_dir("tests/files").unwrap();
+ let mut config = ProxyConfig::default();
+ config.allow_all_indices = Some(true);
+ let mut rt = tokio::runtime::Runtime::new().unwrap();
+
+ for path in file_paths {
+ let path = path.unwrap().path();
+ if path.extension() != Some(OsStr::new("txt")) {
+ continue
+ }
+ println!(" filtering: {}", path.display());
+ let req = common::load_request(&path);
+ rt.block_on(filter_request(req, &config)).unwrap();
+ }
+}