use crate::common::message_flow_auth::{
message_should_not_pass, message_should_not_pass_with_ctx, message_should_pass_with_ctx,
};
use ockam_core::{route, AllowAll, Result};
use ockam_identity::{secure_channels, SecureChannelListenerOptions, SecureChannelOptions};
use ockam_node::Context;
use ockam_transport_tcp::{TcpConnectionOptions, TcpListenerOptions, TcpTransport};
use std::time::Duration;
mod common;
#[ockam_macros::test]
async fn test1(ctx: &mut Context) -> Result<()> {
let alice_secure_channels = secure_channels().await?;
let bob_secure_channels = secure_channels().await?;
let alice = alice_secure_channels
.identities()
.identities_creation()
.create_identity()
.await?;
let bob = bob_secure_channels
.identities()
.identities_creation()
.create_identity()
.await?;
let bob_listener = bob_secure_channels.create_secure_channel_listener(
ctx,
&bob,
"listener",
SecureChannelListenerOptions::new(),
)?;
let channel_to_bob = alice_secure_channels
.create_secure_channel(ctx, &alice, route!["listener"], SecureChannelOptions::new())
.await?;
ctx.sleep(Duration::from_millis(50)).await; let channel_to_alice = bob_secure_channels
.secure_channel_registry()
.get_channel_list()
.first()
.unwrap()
.encryptor_messaging_address()
.clone();
let mut bob_ctx = ctx.new_detached("bob_ctx", AllowAll, AllowAll)?;
message_should_not_pass_with_ctx(ctx, channel_to_bob.encryptor_address(), &mut bob_ctx).await?;
ctx.flow_controls()
.add_consumer(&"bob_ctx".into(), bob_listener.flow_control_id());
message_should_pass_with_ctx(ctx, channel_to_bob.encryptor_address(), &mut bob_ctx).await?;
let mut alice_ctx = ctx.new_detached("alice_ctx", AllowAll, AllowAll)?;
message_should_not_pass_with_ctx(ctx, &channel_to_alice, &mut alice_ctx).await?;
ctx.flow_controls()
.add_consumer(&"alice_ctx".into(), channel_to_bob.flow_control_id());
message_should_pass_with_ctx(ctx, &channel_to_alice, &mut alice_ctx).await?;
Ok(())
}
#[ockam_macros::test]
async fn test2(ctx: &mut Context) -> Result<()> {
let tcp_alice = TcpTransport::create_new(ctx)?;
let tcp_bob = TcpTransport::create_new(ctx)?;
let listener = tcp_bob
.listen("127.0.0.1:0", TcpListenerOptions::new())
.await?;
let connection_to_bob = tcp_alice
.connect(listener.socket_string(), TcpConnectionOptions::new())
.await?;
ctx.sleep(Duration::from_millis(50)).await; let senders = tcp_bob.registry().get_all_sender_workers();
assert_eq!(senders.len(), 1);
let connection_to_alice = senders.first().unwrap().clone();
message_should_not_pass(ctx, &connection_to_bob.clone().into()).await?;
message_should_not_pass(ctx, connection_to_alice.address()).await?;
let alice_secure_channels = secure_channels().await?;
let bob_secure_channels = secure_channels().await?;
let alice = alice_secure_channels
.identities()
.identities_creation()
.create_identity()
.await?;
let bob = bob_secure_channels
.identities()
.identities_creation()
.create_identity()
.await?;
let bob_options = SecureChannelListenerOptions::new().as_consumer(listener.flow_control_id());
let bob_listener =
bob_secure_channels.create_secure_channel_listener(ctx, &bob, "listener", bob_options)?;
let channel_to_bob = alice_secure_channels
.create_secure_channel(
ctx,
&alice,
route![connection_to_bob, "listener"],
SecureChannelOptions::new(),
)
.await?;
ctx.sleep(Duration::from_millis(500)).await;
let channels = bob_secure_channels
.secure_channel_registry()
.get_channel_list();
assert_eq!(channels.len(), 1);
let channel_to_alice = channels
.first()
.unwrap()
.encryptor_messaging_address()
.clone();
let mut bob_ctx = ctx.new_detached("bob_ctx", AllowAll, AllowAll)?;
message_should_not_pass_with_ctx(ctx, channel_to_bob.encryptor_address(), &mut bob_ctx).await?;
ctx.flow_controls()
.add_consumer(&"bob_ctx".into(), bob_listener.flow_control_id());
message_should_pass_with_ctx(ctx, channel_to_bob.encryptor_address(), &mut bob_ctx).await?;
let mut alice_ctx = ctx.new_detached("alice_ctx", AllowAll, AllowAll)?;
message_should_not_pass_with_ctx(ctx, &channel_to_alice, &mut alice_ctx).await?;
ctx.flow_controls()
.add_consumer(&"alice_ctx".into(), channel_to_bob.flow_control_id());
message_should_pass_with_ctx(ctx, &channel_to_alice, &mut alice_ctx).await?;
Ok(())
}