perimeterx-fastly-enforcer 2.2.2

PerimeterX Fastly Compute@Edge Rust Enforcer
Documentation
use crate::pxcontext::{BlockReason, PXModuleMode};
use crate::pxenforce::*;

fn enforcer_with_mode(mode: PXModuleMode) -> PXEnforcer {
    let mut enforcer = PXEnforcer::default();
    enforcer.conf.module_mode = mode;
    enforcer.ctx.risk_mode = mode;
    enforcer
}

#[test]
fn active_blocking_real_block_keeps_simulated_block_false() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Blocking);
    enforcer.ctx.block_reason = Some(BlockReason::ServerScore);
    enforcer.ctx.is_monitored_request = false;

    enforcer.apply_simulated_block_flag();

    assert!(!enforcer.ctx.is_simulated_block);
}

#[test]
fn active_blocking_cookie_score_block_keeps_simulated_block_false() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Blocking);
    enforcer.ctx.block_reason = Some(BlockReason::CookieScore);
    enforcer.ctx.is_monitored_request = false;

    enforcer.apply_simulated_block_flag();

    assert!(!enforcer.ctx.is_simulated_block);
}

#[test]
fn monitor_mode_cookie_score_block_marks_simulated_block_true() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Monitor);
    enforcer.ctx.block_reason = Some(BlockReason::CookieScore);
    enforcer.ctx.is_monitored_request = false;

    enforcer.apply_simulated_block_flag();

    assert!(enforcer.ctx.is_simulated_block);
}

#[test]
fn monitor_mode_server_score_block_marks_simulated_block_true() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Monitor);
    enforcer.ctx.block_reason = Some(BlockReason::ServerScore);
    enforcer.ctx.is_monitored_request = false;

    enforcer.apply_simulated_block_flag();

    assert!(enforcer.ctx.is_simulated_block);
}

#[test]
fn monitor_mode_enforced_request_keeps_simulated_block_false() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Monitor);
    enforcer.ctx.block_reason = Some(BlockReason::ServerScore);
    enforcer.ctx.is_enforced_request = true;

    enforcer.apply_simulated_block_flag();

    assert!(!enforcer.ctx.is_simulated_block);
}

#[test]
fn set_is_enforced_request_fn_stores_callback() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Monitor);
    assert!(enforcer.conf.is_enforced_request_fn.is_none());

    enforcer.set_is_enforced_request_fn(|_req, _conf| true);

    assert!(enforcer.conf.is_enforced_request_fn.is_some());
}

#[test]
fn set_is_monitored_request_fn_stores_callback() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Blocking);
    assert!(enforcer.conf.is_monitored_request_fn.is_none());

    enforcer.set_is_monitored_request_fn(|_req, _conf| true);

    assert!(enforcer.conf.is_monitored_request_fn.is_some());
}

#[test]
fn active_blocking_monitored_request_marks_simulated_block_true() {
    let mut enforcer = enforcer_with_mode(PXModuleMode::Blocking);
    enforcer.ctx.block_reason = Some(BlockReason::ServerScore);
    enforcer.ctx.is_monitored_request = true;

    enforcer.apply_simulated_block_flag();

    assert!(enforcer.ctx.is_simulated_block);
}