#![allow(dead_code, unused_doc_comments)]
use tracing::*;
use acton_reactive::prelude::*;
use acton_test::prelude::*;
use crate::setup::{
actors::{messenger::Messenger, pool_item::PoolItem},
initialize_tracing,
messages::Ping,
};
mod setup;
#[acton_test]
async fn test_messaging_behavior() -> anyhow::Result<()> {
initialize_tracing();
let mut runtime: ActorRuntime = ActonApp::launch_async().await;
let mut pool_item_actor_builder = runtime.new_actor::<PoolItem>();
pool_item_actor_builder
.mutate_on::<Ping>(|actor, _envelope| {
let type_name = std::any::type_name::<Ping>();
info!(type_name = type_name, "Received in sync handler");
actor.model.receive_count += 1;
Reply::ready()
})
.after_stop(|actor| {
assert_eq!(actor.model.receive_count, 1, "expected one Ping");
info!("Processed {} Pings", actor.model.receive_count);
Reply::ready()
});
let actor_handle = pool_item_actor_builder.start().await;
actor_handle.send(Ping).await;
actor_handle.stop().await?;
Ok(())
}
#[acton_test]
async fn test_basic_messenger() -> anyhow::Result<()> {
initialize_tracing();
let mut runtime: ActorRuntime = ActonApp::launch_async().await;
let mut messenger_actor_builder = runtime.new_actor::<Messenger>();
messenger_actor_builder
.mutate_on::<Ping>(|_actor, _envelope| {
let type_name = std::any::type_name::<Ping>();
info!(type_name = type_name, "Received in Messenger handler");
Reply::ready()
})
.after_stop(|_actor| {
info!("Stopping");
Reply::ready()
});
let actor_handle = messenger_actor_builder.start().await;
actor_handle.send(Ping).await;
actor_handle.stop().await?;
Ok(())
}
#[acton_test]
async fn test_async_messaging_behavior() -> anyhow::Result<()> {
initialize_tracing();
let mut runtime: ActorRuntime = ActonApp::launch_async().await;
let mut pool_item_actor_builder = runtime.new_actor::<PoolItem>();
pool_item_actor_builder
.mutate_on::<Ping>(|actor, _envelope| {
let type_name = std::any::type_name::<Ping>();
info!(type_name = type_name, "Received in async handler");
actor.model.receive_count += 1;
Reply::ready()
})
.after_stop(|actor| {
assert_eq!(actor.model.receive_count, 1, "expected one Ping");
info!("Processed {} Pings", actor.model.receive_count);
Reply::ready()
});
let actor_handle = pool_item_actor_builder.start().await;
actor_handle.send(Ping).await;
actor_handle.stop().await?;
Ok(())
}