Skip to content

Commit 999fad7

Browse files
lyrixxjoelwurtz
authored andcommitted
Add a test with backend status code
1 parent 6f80704 commit 999fad7

File tree

1 file changed

+110
-2
lines changed

1 file changed

+110
-2
lines changed

tests/redirectionio_router_test.rs

Lines changed: 110 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8481,12 +8481,18 @@ fn setup_rule_with_response_status_codes() -> Router<Rule> {
84818481
let config: RouterConfig = serde_json::from_str(r#"{"always_match_any_host":false,"ignore_header_case":false,"ignore_host_case":false,"ignore_marketing_query_params":true,"ignore_path_and_query_case":false,"marketing_query_params":["utm_source","utm_medium","utm_campaign","utm_term","utm_content"],"pass_marketing_query_params_to_target":true}"#).expect("cannot deserialize");
84828482
let mut router = Router::<Rule>::from_config(config);
84838483

8484-
let route_1: Rule = serde_json::from_str(r#"{"id":"rule-method-post","rank":0,"source":{"path":"/foo","response_status_codes":[404]},"status_code":302,"target":"/baz"}"#).expect("cannot deserialize");
8484+
let route_1: Rule = serde_json::from_str(r#"{"id":"rule-404","rank":0,"source":{"path":"/foo","response_status_codes":[404]},"status_code":302,"target":"/baz"}"#).expect("cannot deserialize");
84858485
router.insert(route_1.into_route(&router.config));
84868486

8487-
let route_2: Rule = serde_json::from_str(r#"{"id":"rule-multiple-methods","rank":0,"source":{"path":"/bar","response_status_codes":[400,402]},"status_code":302,"target":"/bor"}"#).expect("cannot deserialize");
8487+
let route_2: Rule = serde_json::from_str(r#"{"id":"rule-404-402","rank":0,"source":{"path":"/bar","response_status_codes":[400,402]},"status_code":302,"target":"/bor"}"#).expect("cannot deserialize");
84888488
router.insert(route_2.into_route(&router.config));
84898489

8490+
let route_3: Rule = serde_json::from_str(r#"{"id":"rule-A-404","rank":10,"source":{"path":"/something","response_status_codes":[404]},"status_code":302,"target":"/A-target"}"#).expect("cannot deserialize");
8491+
router.insert(route_3.into_route(&router.config));
8492+
8493+
let route_4: Rule = serde_json::from_str(r#"{"id":"rule-B","rank":100,"source":{"path":"/something"},"status_code":302,"target":"/B-target"}"#).expect("cannot deserialize");
8494+
router.insert(route_4.into_route(&router.config));
8495+
84908496
router
84918497
}
84928498

@@ -8614,6 +8620,108 @@ fn test_rule_with_response_status_codes_5() {
86148620
assert_eq!(action.should_log_request(true, response_status_code), true);
86158621
}
86168622

8623+
#[test]
8624+
fn test_rule_with_response_status_codes_6() {
8625+
let router = setup_rule_with_response_status_codes();
8626+
let default_config = RouterConfig::default();
8627+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/something"#), r#"/something"#.to_string(),None,None,None,None,None);
8628+
let request_configured = Request::rebuild_with_config(&router.config, &request);
8629+
let matched = router.match_request(&request_configured);
8630+
let traces = router.trace_request(&request_configured);
8631+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
8632+
8633+
assert_eq!(!matched.is_empty(), true);
8634+
assert_eq!(!routes_traces.is_empty(), true);
8635+
8636+
let mut action = Action::from_routes_rule(matched, &request_configured);
8637+
let mut response_status_code = 404;
8638+
8639+
response_status_code = action.get_status_code(response_status_code);
8640+
assert_eq!(response_status_code, 302);
8641+
let headers = action.filter_headers(Vec::new(), response_status_code, false);
8642+
assert_eq!(headers.len(), 1);
8643+
8644+
let target_header = headers.first().unwrap();
8645+
assert_eq!(target_header.name, "Location");
8646+
assert_eq!(target_header.value, r#"/A-target"#);
8647+
assert_eq!(action.should_log_request(true, response_status_code), true);
8648+
}
8649+
8650+
#[test]
8651+
fn test_rule_with_response_status_codes_7() {
8652+
let router = setup_rule_with_response_status_codes();
8653+
let default_config = RouterConfig::default();
8654+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/something"#), r#"/something"#.to_string(),None,None,None,None,None);
8655+
let request_configured = Request::rebuild_with_config(&router.config, &request);
8656+
let matched = router.match_request(&request_configured);
8657+
let traces = router.trace_request(&request_configured);
8658+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
8659+
8660+
assert_eq!(!matched.is_empty(), true);
8661+
assert_eq!(!routes_traces.is_empty(), true);
8662+
8663+
let mut action = Action::from_routes_rule(matched, &request_configured);
8664+
let mut response_status_code = 200;
8665+
8666+
response_status_code = action.get_status_code(response_status_code);
8667+
assert_eq!(response_status_code, 302);
8668+
let headers = action.filter_headers(Vec::new(), response_status_code, false);
8669+
assert_eq!(headers.len(), 1);
8670+
8671+
let target_header = headers.first().unwrap();
8672+
assert_eq!(target_header.name, "Location");
8673+
assert_eq!(target_header.value, r#"/B-target"#);
8674+
assert_eq!(action.should_log_request(true, response_status_code), true);
8675+
}
8676+
8677+
#[test]
8678+
fn test_rule_with_response_status_codes_8() {
8679+
let router = setup_rule_with_response_status_codes();
8680+
let default_config = RouterConfig::default();
8681+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/something"#), r#"/something"#.to_string(),None,None,None,None,None);
8682+
let request_configured = Request::rebuild_with_config(&router.config, &request);
8683+
let matched = router.match_request(&request_configured);
8684+
let traces = router.trace_request(&request_configured);
8685+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
8686+
8687+
assert_eq!(!matched.is_empty(), true);
8688+
assert_eq!(!routes_traces.is_empty(), true);
8689+
8690+
let mut action = Action::from_routes_rule(matched, &request_configured);
8691+
let mut response_status_code = 0;
8692+
8693+
response_status_code = action.get_status_code(response_status_code);
8694+
assert_eq!(response_status_code, 302);
8695+
assert_eq!(action.should_log_request(true, response_status_code), true);
8696+
}
8697+
8698+
#[test]
8699+
fn test_rule_with_response_status_codes_9() {
8700+
let router = setup_rule_with_response_status_codes();
8701+
let default_config = RouterConfig::default();
8702+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/something"#), r#"/something"#.to_string(),None,None,None,None,None);
8703+
let request_configured = Request::rebuild_with_config(&router.config, &request);
8704+
let matched = router.match_request(&request_configured);
8705+
let traces = router.trace_request(&request_configured);
8706+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
8707+
8708+
assert_eq!(!matched.is_empty(), true);
8709+
assert_eq!(!routes_traces.is_empty(), true);
8710+
8711+
let mut action = Action::from_routes_rule(matched, &request_configured);
8712+
let mut response_status_code = 0;
8713+
8714+
response_status_code = action.get_status_code(response_status_code);
8715+
assert_eq!(response_status_code, 0);
8716+
let headers = action.filter_headers(Vec::new(), response_status_code, false);
8717+
assert_eq!(headers.len(), 1);
8718+
8719+
let target_header = headers.first().unwrap();
8720+
assert_eq!(target_header.name, "Location");
8721+
assert_eq!(target_header.value, r#"/B-target"#);
8722+
assert_eq!(action.should_log_request(true, response_status_code), true);
8723+
}
8724+
86178725

86188726
fn setup_rule_with_slash() -> Router<Rule> {
86198727
let config: RouterConfig = serde_json::from_str(r#"{"always_match_any_host":false,"ignore_header_case":false,"ignore_host_case":false,"ignore_marketing_query_params":true,"ignore_path_and_query_case":false,"marketing_query_params":["utm_source","utm_medium","utm_campaign","utm_term","utm_content"],"pass_marketing_query_params_to_target":true}"#).expect("cannot deserialize");

0 commit comments

Comments
 (0)