ic-response-verification 3.2.0

Client side response verification for the Internet Computer
Documentation
use crate::cel::{map_cel_ast, parse_cel_expression};
use ic_http_certification::{
    cel::{
        CelExpression, DefaultCelExpression, DefaultFullCelExpression, DefaultRequestCertification,
        DefaultResponseOnlyCelExpression,
    },
    DefaultResponseCertification,
};
use ic_response_verification_test_utils::remove_whitespace;

#[test]
fn parses_no_certification_expression() {
    let cel_expression = r#"
        default_certification (
            ValidationArgs {
                no_certification: Empty { }
            }
        )
    "#
    .to_string();
    let expected_result = CelExpression::Default(DefaultCelExpression::Skip);

    let parsed_cel_expr = parse_cel_expression(&cel_expression).unwrap();
    let result = map_cel_ast(&parsed_cel_expr).unwrap();

    let minified_cel_expression = remove_whitespace(&cel_expression);
    let parsed_min_cel_expr = parse_cel_expression(&minified_cel_expression).unwrap();
    let minified_result = map_cel_ast(&parsed_min_cel_expr).unwrap();

    assert_eq!(&result, &expected_result);
    assert_eq!(&minified_result, &expected_result);
}

#[test]
fn parses_no_request_certification_expression() {
    let cel_expression = r#"
        default_certification (
            ValidationArgs {
                certification: Certification {
                    no_request_certification: Empty {},
                    response_certification: ResponseCertification {
                        response_header_exclusions: ResponseHeaderList {
                            headers: ["Server","Date","X-Cache-Status"]
                        }
                    }
                }
            }
        )
    "#
    .to_string();
    let expected_result = CelExpression::Default(DefaultCelExpression::ResponseOnly(
        DefaultResponseOnlyCelExpression {
            response: DefaultResponseCertification::response_header_exclusions(vec![
                "Server",
                "Date",
                "X-Cache-Status",
            ]),
        },
    ));

    let parsed_cel_expr = parse_cel_expression(&cel_expression).unwrap();
    let result = map_cel_ast(&parsed_cel_expr).unwrap();

    let minified_cel_expression = remove_whitespace(&cel_expression);
    let parsed_min_cel_expr = parse_cel_expression(&minified_cel_expression).unwrap();
    let minified_result = map_cel_ast(&parsed_min_cel_expr).unwrap();

    assert_eq!(&result, &expected_result);
    assert_eq!(&minified_result, &expected_result);
}

#[test]
fn parses_full_certification_expression() {
    let cel_expression = r#"
        default_certification (
            ValidationArgs {
                certification: Certification {
                    request_certification: RequestCertification {
                        certified_request_headers: ["host"],
                        certified_query_parameters: ["filter"]
                    },
                    response_certification: ResponseCertification {
                        response_header_exclusions: ResponseHeaderList {
                            headers: ["Content-Type","X-Frame-Options","Content-Security-Policy","Strict-Transport-Security","Referrer-Policy","Permissions-Policy"]
                        }
                    }
                }
            }
        )
    "#.to_string();
    let expected_result =
        CelExpression::Default(DefaultCelExpression::Full(DefaultFullCelExpression {
            request: DefaultRequestCertification::new(vec!["host"], vec!["filter"]),
            response: DefaultResponseCertification::response_header_exclusions(vec![
                "Content-Type",
                "X-Frame-Options",
                "Content-Security-Policy",
                "Strict-Transport-Security",
                "Referrer-Policy",
                "Permissions-Policy",
            ]),
        }));

    let parsed_cel_expr = parse_cel_expression(&cel_expression).unwrap();
    let result = map_cel_ast(&parsed_cel_expr).unwrap();

    let minified_cel_expression = remove_whitespace(&cel_expression);
    let parsed_min_cel_expr = parse_cel_expression(&minified_cel_expression).unwrap();
    let minified_result = map_cel_ast(&parsed_min_cel_expr).unwrap();

    assert_eq!(&result, &expected_result);
    assert_eq!(&minified_result, &expected_result);
}