sz-orm-rw 5.1.0

Read-write splitting: query routing, replica health, load balancing
Documentation
use sz_orm_rw::*;

#[test]
fn test_load_balance_strategy_variants() {
    assert_eq!(
        LoadBalanceStrategy::RoundRobin,
        LoadBalanceStrategy::RoundRobin
    );
    assert_ne!(LoadBalanceStrategy::RoundRobin, LoadBalanceStrategy::Random);
    assert_ne!(
        LoadBalanceStrategy::LeastConnections,
        LoadBalanceStrategy::WeightedRoundRobin
    );
}

#[test]
fn test_slave_health_variants() {
    assert_eq!(SlaveHealth::Healthy, SlaveHealth::Healthy);
    assert_ne!(SlaveHealth::Healthy, SlaveHealth::Unhealthy);
    assert_ne!(SlaveHealth::Unhealthy, SlaveHealth::Drained);
}

#[test]
fn test_weighted_slave_new() {
    let slave = WeightedSlave::new("127.0.0.1:3306", 5);
    assert_eq!(slave.addr, "127.0.0.1:3306");
    assert_eq!(slave.weight, 5);
    assert_eq!(slave.health, SlaveHealth::Healthy);
}

#[test]
fn test_weighted_slave_min_weight() {
    let slave = WeightedSlave::new("host", 0);
    assert_eq!(slave.weight, 1);
}

#[test]
fn test_weighted_slave_with_health() {
    let slave = WeightedSlave::new("host", 1).with_health(SlaveHealth::Unhealthy);
    assert_eq!(slave.health, SlaveHealth::Unhealthy);
}

#[test]
fn test_weighted_slave_drained() {
    let slave = WeightedSlave::new("host", 1).with_health(SlaveHealth::Drained);
    assert_eq!(slave.health, SlaveHealth::Drained);
}

#[test]
fn test_read_write_router_new() {
    let router = ReadWriteRouter::new("master:3306", vec!["slave1:3306"]);
    assert_eq!(router.master(), "master:3306");
}

#[test]
fn test_read_write_router_slaves() {
    let router = ReadWriteRouter::new("master:3306", vec!["slave1:3306", "slave2:3306"]);
    let slaves = router.slaves();
    assert_eq!(slaves.len(), 2);
    assert_eq!(slaves[0], "slave1:3306");
    assert_eq!(slaves[1], "slave2:3306");
}

#[test]
fn test_read_write_router_slave() {
    let router = ReadWriteRouter::new("master:3306", vec!["slave1:3306", "slave2:3306"]);
    let first = router.slave();
    let second = router.slave();
    let third = router.slave();
    assert!(first == "slave1:3306" || first == "slave2:3306");
    assert!(second == "slave1:3306" || second == "slave2:3306");
    assert!(third == "slave1:3306" || third == "slave2:3306");
}

#[test]
fn test_read_write_router_no_slaves() {
    let router = ReadWriteRouter::new("master:3306", vec![]);
    assert_eq!(router.slaves().len(), 0);
}

#[test]
fn test_read_write_router_single_slave() {
    let router = ReadWriteRouter::new("m", vec!["s1"]);
    assert_eq!(router.slave(), "s1");
    assert_eq!(router.slave(), "s1");
}

#[test]
fn test_latency_snapshot_default() {
    let snapshot = LatencySnapshot::default();
    assert_eq!(snapshot.samples, 0);
}