kitsune2_core 0.3.2

p2p / dht communication framework core and testing modules
Documentation
use kitsune2_api::{AgentId, BlockTarget, Blocks, Id};

use super::MemBlocks;

const BLOCK_TARGET_AGENT_1: BlockTarget =
    BlockTarget::Agent(AgentId(Id(bytes::Bytes::from_static(b"test-agent-1"))));
const BLOCK_TARGET_AGENT_2: BlockTarget =
    BlockTarget::Agent(AgentId(Id(bytes::Bytes::from_static(b"test-agent-2"))));

#[tokio::test]
async fn unblocked_target_reports_is_blocked_false() {
    let blocks = MemBlocks::default();

    assert!(!blocks.is_blocked(BLOCK_TARGET_AGENT_1).await.unwrap());
}

#[tokio::test]
async fn blocking_target_reports_is_blocked() {
    let blocks = MemBlocks::default();

    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();

    assert!(blocks.is_blocked(BLOCK_TARGET_AGENT_1).await.unwrap());
}

#[tokio::test]
async fn can_block_same_target_multiple_times() {
    let blocks = MemBlocks::default();

    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();
    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();

    assert!(blocks.is_blocked(BLOCK_TARGET_AGENT_1).await.unwrap());
}

#[tokio::test]
async fn targets_are_not_repeated_in_store() {
    let blocks = MemBlocks::default();

    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();
    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();

    assert_eq!(blocks.0.lock().unwrap().len(), 1);
}

#[tokio::test]
async fn only_one_target_is_blocked_when_checking() {
    let blocks = MemBlocks::default();

    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();

    assert!(!blocks
        .are_all_blocked(vec![BLOCK_TARGET_AGENT_1, BLOCK_TARGET_AGENT_2])
        .await
        .unwrap());
}

#[tokio::test]
async fn all_targets_are_blocked_when_checking() {
    let blocks = MemBlocks::default();

    blocks.block(BLOCK_TARGET_AGENT_1).await.unwrap();
    blocks.block(BLOCK_TARGET_AGENT_2).await.unwrap();

    assert!(blocks
        .are_all_blocked(vec![BLOCK_TARGET_AGENT_1, BLOCK_TARGET_AGENT_2])
        .await
        .unwrap());
}

#[tokio::test]
async fn checking_empty_target_list_returns_false() {
    let blocks = MemBlocks::default();
    assert!(!blocks.are_all_blocked(vec![]).await.unwrap());
}