mod common;
mod doctest_template {
use nisshi_sans_io::{
CreateTopicsRequest, ErrorCode, FetchRequest,
create_topics_request::CreatableTopic,
fetch_request::{FetchPartition, FetchTopic},
};
use nisshi_storage::{CreateTopicsService, FetchService, StorageContainer};
use rama::{Context, Layer as _, Service as _, layer::MapStateLayer};
use url::Url;
use crate::common::{Error, init_tracing};
#[tokio::test]
async fn req() -> Result<(), Error> {
let _guard = init_tracing()?;
const CLUSTER_ID: &str = "nisshi";
const NODE_ID: i32 = 111;
const HOST: &str = "localhost";
const PORT: i32 = 9092;
let storage = StorageContainer::builder()
.cluster_id(CLUSTER_ID)
.node_id(NODE_ID)
.advertised_listener(Url::parse(&format!("tcp://{HOST}:{PORT}"))?)
.storage(Url::parse("memory://nisshi/")?)
.build()
.await?;
let create_topic = {
let storage = storage.clone();
MapStateLayer::new(|_| storage).into_layer(CreateTopicsService)
};
let name = "abcba";
let response = create_topic
.serve(
Context::default(),
CreateTopicsRequest::default()
.topics(Some(vec![
CreatableTopic::default()
.name(name.into())
.num_partitions(5)
.replication_factor(3)
.assignments(Some([].into()))
.configs(Some([].into())),
]))
.validate_only(Some(false)),
)
.await?;
let topics = response.topics.unwrap_or_default();
assert_eq!(1, topics.len());
assert_eq!(ErrorCode::None, ErrorCode::try_from(topics[0].error_code)?);
let fetch = {
let storage = storage.clone();
MapStateLayer::new(|_| storage).into_layer(FetchService)
};
let partition = 0;
let response = fetch
.serve(
Context::default(),
FetchRequest::default()
.topics(Some(
[FetchTopic::default()
.topic(Some(name.into()))
.partitions(Some(
[FetchPartition::default().partition(partition)].into(),
))]
.into(),
))
.max_bytes(Some(0))
.max_wait_ms(5_000),
)
.await?;
let topics = response.responses.as_deref().unwrap_or_default();
assert_eq!(1, topics.len());
let partitions = topics[0].partitions.as_deref().unwrap_or_default();
assert_eq!(1, partitions.len());
assert_eq!(
ErrorCode::None,
ErrorCode::try_from(partitions[0].error_code)?
);
Ok(())
}
}