mod common;
use faucet_conformance::{
assert_bounded_memory, assert_config_schema_valid_value, assert_errors_not_panics,
};
use faucet_source_grpc::{GrpcStream, GrpcStreamConfig, RpcKind};
use serde_json::json;
const BATCH: usize = 250;
const TOTAL: usize = 5000;
#[test]
fn conformance_config_schema_valid() {
let schema = serde_json::to_value(schemars::schema_for!(GrpcStreamConfig)).unwrap();
assert_config_schema_valid_value(&schema, "faucet-source-grpc");
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn conformance_bounded_memory() {
let server = common::start_server().await;
let config = GrpcStreamConfig::new(
&server.endpoint,
"faucet.test.echo.EchoService",
"Tail",
common::descriptor_set_path(),
)
.request(json!({ "count": TOTAL, "fail_after": 0 }))
.rpc_kind(RpcKind::ServerStreaming)
.with_batch_size(BATCH);
let stream = GrpcStream::new(config).unwrap();
assert_bounded_memory(&stream, BATCH, TOTAL).await;
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn conformance_errors_not_panics() {
let config = GrpcStreamConfig::new(
"http://127.0.0.1:1",
"faucet.test.echo.EchoService",
"List",
common::descriptor_set_path(),
)
.request(json!({ "count": 1 }))
.rpc_kind(RpcKind::Unary);
let stream = GrpcStream::new(config).expect("grpc stream builds from a valid config");
assert_errors_not_panics(&stream).await;
}