84 lines
2.2 KiB
Rust
84 lines
2.2 KiB
Rust
use std::time::Duration;
|
|
|
|
use radicle::test::arbitrary;
|
|
use radicle_core::{NodeId, RepoId};
|
|
|
|
use crate::fetcher::state::{command, event};
|
|
use crate::fetcher::test::state::helpers;
|
|
use crate::fetcher::FetcherState;
|
|
|
|
#[test]
|
|
fn independent_queues() {
|
|
let mut state = FetcherState::new(helpers::config(1, 10));
|
|
let node_a: NodeId = arbitrary::gen(1);
|
|
let node_b: NodeId = arbitrary::gen(1);
|
|
let repo_a_active: RepoId = arbitrary::gen(1);
|
|
let repo_b_active: RepoId = arbitrary::gen(2);
|
|
let repo_a_queued: RepoId = arbitrary::gen(10);
|
|
let repo_b_queued: RepoId = arbitrary::gen(20);
|
|
let timeout = Duration::from_secs(30);
|
|
|
|
// Fill capacity for both nodes
|
|
state.fetch(command::Fetch {
|
|
from: node_a,
|
|
rid: repo_a_active,
|
|
refs_at: helpers::gen_refs_at(1),
|
|
timeout,
|
|
});
|
|
state.fetch(command::Fetch {
|
|
from: node_b,
|
|
rid: repo_b_active,
|
|
refs_at: helpers::gen_refs_at(1),
|
|
timeout,
|
|
});
|
|
|
|
// Queue for both
|
|
state.fetch(command::Fetch {
|
|
from: node_a,
|
|
rid: repo_a_queued,
|
|
refs_at: helpers::gen_refs_at(1),
|
|
timeout,
|
|
});
|
|
state.fetch(command::Fetch {
|
|
from: node_b,
|
|
rid: repo_b_queued,
|
|
refs_at: helpers::gen_refs_at(1),
|
|
timeout,
|
|
});
|
|
|
|
// Dequeue from A doesn't affect B
|
|
state.fetched(command::Fetched {
|
|
from: node_a,
|
|
rid: repo_a_active,
|
|
});
|
|
let a_item = state.dequeue(&node_a);
|
|
assert_eq!(a_item.unwrap().rid, repo_a_queued);
|
|
|
|
state.fetched(command::Fetched {
|
|
from: node_b,
|
|
rid: repo_b_active,
|
|
});
|
|
let b_item = state.dequeue(&node_b);
|
|
assert_eq!(b_item.unwrap().rid, repo_b_queued);
|
|
}
|
|
|
|
#[test]
|
|
fn high_count() {
|
|
let mut state = FetcherState::new(helpers::config(1, 10));
|
|
let timeout = Duration::from_secs(30);
|
|
|
|
for i in 0..100 {
|
|
let node: NodeId = arbitrary::gen(i + 1);
|
|
let repo: RepoId = arbitrary::gen(i + 1);
|
|
let event = state.fetch(command::Fetch {
|
|
from: node,
|
|
rid: repo,
|
|
refs_at: helpers::gen_refs_at(1),
|
|
timeout,
|
|
});
|
|
assert!(matches!(event, event::Fetch::Started { .. }));
|
|
}
|
|
|
|
assert_eq!(state.active_fetches().len(), 100);
|
|
}
|