#![cfg(all(feature = "conformance", feature = "memory"))]
use ruststream::Bytes;
use ruststream::conformance::helpers::unique_subject;
use ruststream::conformance::message_shape::{self, OptionCases};
#[cfg(feature = "asyncapi")]
use ruststream::memory::ConnectedMemoryBroker;
use ruststream::memory::{MemoryBroker, MemoryPublish, MemorySource, PARTITION_KEY_HEADER};
#[allow(clippy::redundant_closure, clippy::redundant_closure_for_method_calls)]
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn memory_broker_keeps_keys_and_their_order() {
message_shape::keyed_order(
MemoryBroker::new,
&unique_subject("conformance.keyed"),
|name| MemorySource::new(name),
|connected| connected.publisher(),
|key, headers| {
headers.insert(PARTITION_KEY_HEADER, Bytes::copy_from_slice(key));
None
},
)
.await;
}
#[allow(clippy::redundant_closure)]
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn memory_broker_resolves_its_options() {
message_shape::publish_options(
MemoryBroker::new,
&unique_subject("conformance.options"),
|name| MemorySource::new(name),
MemoryPublish,
OptionCases::new(()).overrides((), ()),
|_delivery| (),
)
.await;
}
#[cfg(feature = "asyncapi")]
#[test]
fn memory_publish_policy_binds_no_credentials() {
message_shape::publishes_without_credentials::<ConnectedMemoryBroker, _>(
&MemoryPublish,
"hunter2",
);
}