pub mod body;
pub mod header;
pub mod metadata;
pub mod status_code;
#[cfg(test)]
pub(crate) mod tests {
use bytes::Bytes;
use http::{HeaderMap, StatusCode};
use parlov_core::{
always_applicable, DifferentialSet, NormativeStrength, OracleClass, ProbeDefinition,
ProbeExchange, ResponseSurface, SignalSurface, Technique, Vector,
};
pub fn fake_exchange(status: u16) -> ProbeExchange {
ProbeExchange {
request: ProbeDefinition {
url: "http://test/resource/1".to_string(),
method: http::Method::GET,
headers: HeaderMap::new(),
body: None,
},
response: ResponseSurface {
status: StatusCode::from_u16(status).expect("valid status"),
headers: HeaderMap::new(),
body: Bytes::new(),
timing_ns: 0,
},
}
}
pub fn fake_exchange_with_headers(status: u16, headers: HeaderMap) -> ProbeExchange {
ProbeExchange {
request: ProbeDefinition {
url: "http://test/resource/1".to_string(),
method: http::Method::GET,
headers: HeaderMap::new(),
body: None,
},
response: ResponseSurface {
status: StatusCode::from_u16(status).expect("valid status"),
headers,
body: Bytes::new(),
timing_ns: 0,
},
}
}
pub fn status_code_diff_technique() -> Technique {
Technique {
id: "test-status-diff",
name: "Test status code diff",
oracle_class: OracleClass::Existence,
vector: Vector::StatusCodeDiff,
strength: NormativeStrength::Must,
normalization_weight: Some(0.2),
inverted_signal_weight: None,
method_relevant: false,
parser_relevant: false,
applicability: always_applicable,
contradiction_surface: SignalSurface::Status,
}
}
pub fn single_diff_set(baseline_status: u16, probe_status: u16) -> DifferentialSet {
DifferentialSet {
baseline: vec![fake_exchange(baseline_status)],
probe: vec![fake_exchange(probe_status)],
canonical: None,
technique: status_code_diff_technique(),
}
}
pub fn diff_set_with_statuses(baseline: &[u16], probe: &[u16]) -> DifferentialSet {
DifferentialSet {
baseline: baseline.iter().map(|&s| fake_exchange(s)).collect(),
probe: probe.iter().map(|&s| fake_exchange(s)).collect(),
canonical: None,
technique: status_code_diff_technique(),
}
}
pub fn single_diff_set_with_headers(
baseline_status: u16,
probe_status: u16,
baseline_headers: HeaderMap,
probe_headers: HeaderMap,
) -> DifferentialSet {
DifferentialSet {
baseline: vec![fake_exchange_with_headers(
baseline_status,
baseline_headers,
)],
probe: vec![fake_exchange_with_headers(probe_status, probe_headers)],
canonical: None,
technique: status_code_diff_technique(),
}
}
pub fn single_diff_set_with_baseline_headers(
baseline_status: u16,
probe_status: u16,
baseline_headers: HeaderMap,
) -> DifferentialSet {
DifferentialSet {
baseline: vec![fake_exchange_with_headers(
baseline_status,
baseline_headers,
)],
probe: vec![fake_exchange(probe_status)],
canonical: None,
technique: status_code_diff_technique(),
}
}
pub fn fake_exchange_with_body(status: u16, body: &[u8]) -> ProbeExchange {
ProbeExchange {
request: ProbeDefinition {
url: "http://test/resource/1".to_string(),
method: http::Method::GET,
headers: HeaderMap::new(),
body: None,
},
response: ResponseSurface {
status: StatusCode::from_u16(status).expect("valid status"),
headers: HeaderMap::new(),
body: Bytes::from(body.to_vec()),
timing_ns: 0,
},
}
}
pub fn single_diff_set_with_bodies(
baseline_status: u16,
probe_status: u16,
baseline_body: &[u8],
probe_body: &[u8],
) -> DifferentialSet {
DifferentialSet {
baseline: vec![fake_exchange_with_body(baseline_status, baseline_body)],
probe: vec![fake_exchange_with_body(probe_status, probe_body)],
canonical: None,
technique: status_code_diff_technique(),
}
}
pub fn fake_exchange_with_url_and_body(url: &str, status: u16, body: &[u8]) -> ProbeExchange {
ProbeExchange {
request: ProbeDefinition {
url: url.to_string(),
method: http::Method::GET,
headers: HeaderMap::new(),
body: None,
},
response: ResponseSurface {
status: StatusCode::from_u16(status).expect("valid status"),
headers: HeaderMap::new(),
body: Bytes::from(body.to_vec()),
timing_ns: 0,
},
}
}
pub fn single_diff_set_with_urls_and_bodies(
baseline_url: &str,
probe_url: &str,
baseline_status: u16,
probe_status: u16,
baseline_body: &[u8],
probe_body: &[u8],
) -> DifferentialSet {
DifferentialSet {
baseline: vec![fake_exchange_with_url_and_body(
baseline_url,
baseline_status,
baseline_body,
)],
probe: vec![fake_exchange_with_url_and_body(
probe_url,
probe_status,
probe_body,
)],
canonical: None,
technique: status_code_diff_technique(),
}
}
}