ic-query 0.93.1

Internet Computer query library for CloudEngine, NNS, SNS, ICRC, system canisters, and public network metadata
Documentation
use super::*;

#[test]
fn completeness_requires_api_exhaustion_and_consistent_page_evidence() {
    for page_size in 0..=2 {
        for page_count in 0..=2 {
            for declared_row_count in 0..=2 {
                for actual_row_count in 0..=2 {
                    let completeness = CacheCollectionCompleteness::api_exhausted(
                        page_size,
                        page_count,
                        declared_row_count,
                        false,
                    );
                    let expected_valid = page_size > 0
                        && page_count > 0
                        && declared_row_count == actual_row_count
                        && actual_row_count <= (page_size * page_count) as usize;

                    assert_eq!(
                        validate_cache_collection_completeness(&completeness, actual_row_count)
                            .is_ok(),
                        expected_valid,
                        "page_size={page_size}, page_count={page_count}, declared_row_count={declared_row_count}, actual_row_count={actual_row_count}"
                    );
                }
            }
        }
    }

    let mut unknown = CacheCollectionCompleteness::api_exhausted(1, 1, 0, false);
    unknown.status = "unknown".to_string();
    assert_eq!(
        validate_cache_collection_completeness(&unknown, 0),
        Err("completeness status is unknown, expected api_exhausted".to_string())
    );
    assert_eq!(
        serde_json::to_value(CacheCollectionCompleteness::api_exhausted(1, 1, 0, false))
            .expect("serialize completeness")["status"],
        "api_exhausted"
    );
}

#[test]
fn completeness_enforces_page_capacity_without_narrow_multiplication() {
    for (page_size, page_count, row_count, valid) in [
        (2, 2, 4, true),
        (2, 2, 5, false),
        (1, 1, 0, true),
        (u32::MAX, 2, 100, true),
        (u32::MAX, u32::MAX, 0, true),
    ] {
        let completeness =
            CacheCollectionCompleteness::api_exhausted(page_size, page_count, row_count, false);
        assert_eq!(
            validate_cache_collection_completeness(&completeness, row_count).is_ok(),
            valid
        );
    }
}