Skip to content

Commit

Permalink
More unit tests for fe2o3 conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
LarryOsterman committed Aug 2, 2024
1 parent fe8bff9 commit 2c13ccd
Show file tree
Hide file tree
Showing 4 changed files with 249 additions and 83 deletions.
124 changes: 124 additions & 0 deletions sdk/core/azure_core_amqp/src/fe2o3/messaging/message_source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ use crate::{
value::{AmqpOrderedMap, AmqpSymbol, AmqpValue},
};

#[cfg(test)]
use crate::messaging::{AmqpOutcome, DistributionMode, TerminusDurability, TerminusExpiryPolicy};

impl From<AmqpSource> for fe2o3_amqp_types::messaging::Source {
fn from(source: AmqpSource) -> Self {
let mut builder = fe2o3_amqp_types::messaging::Source::builder();
Expand Down Expand Up @@ -116,3 +119,124 @@ impl From<fe2o3_amqp_types::messaging::Source> for AmqpSource {
amqp_source_builder.build()
}
}

#[test]
fn message_source_conversion_fe2o3_amqp() {
let fe2o3_source = fe2o3_amqp_types::messaging::Source::builder()
.address("test")
.durable(fe2o3_amqp_types::messaging::TerminusDurability::UnsettledState)
.expiry_policy(fe2o3_amqp_types::messaging::TerminusExpiryPolicy::SessionEnd)
.timeout(95)
.dynamic(false)
.dynamic_node_properties(fe2o3_amqp_types::messaging::LifetimePolicy::DeleteOnClose(
fe2o3_amqp_types::messaging::DeleteOnClose {},
))
.add_lifetime_policy(fe2o3_amqp_types::messaging::DeleteOnClose {})
.distribution_mode(fe2o3_amqp_types::messaging::DistributionMode::Move {})
.add_to_filter(
fe2o3_amqp_types::primitives::Symbol::from("filter_key"),
Some(serde_amqp::described::Described {
descriptor: serde_amqp::descriptor::Descriptor::Name(
fe2o3_amqp_types::primitives::Symbol::from("filter_descriptor"),
),
value: fe2o3_amqp_types::primitives::Value::from("filter_value"),
}),
)
.outcomes(vec![fe2o3_amqp_types::primitives::Symbol::from("outcome")])
.default_outcome(fe2o3_amqp_types::messaging::Outcome::Accepted(
fe2o3_amqp_types::messaging::Accepted {},
))
.capabilities(vec![fe2o3_amqp_types::primitives::Symbol::from(
"capability",
)])
.build();

let amqp_source = AmqpSource::from(fe2o3_source.clone());
let round_trip = fe2o3_amqp_types::messaging::Source::from(amqp_source);

// fe2o3 source does not implement PartialEq
assert_eq!(fe2o3_source.address, round_trip.address);
assert_eq!(fe2o3_source.durable, round_trip.durable);
assert_eq!(fe2o3_source.expiry_policy, round_trip.expiry_policy);
assert_eq!(fe2o3_source.timeout, round_trip.timeout);
assert_eq!(fe2o3_source.dynamic, round_trip.dynamic);
assert_eq!(
fe2o3_source.dynamic_node_properties,
round_trip.dynamic_node_properties
);
assert_eq!(fe2o3_source.filter, round_trip.filter);
assert_eq!(fe2o3_source.outcomes, round_trip.outcomes);
assert_eq!(fe2o3_source.capabilities, round_trip.capabilities);
assert_eq!(
fe2o3_source.distribution_mode.is_some(),
round_trip.distribution_mode.is_some()
);

// DistributionMode is an enum, so we need to match on it and it doesn't implement PartialEq
let original_distribution_mode = fe2o3_source.distribution_mode.unwrap();
let round_trip_distribution_mode = round_trip.distribution_mode.unwrap();
match original_distribution_mode {
fe2o3_amqp_types::messaging::DistributionMode::Move => {
assert!(matches!(
round_trip_distribution_mode,
fe2o3_amqp_types::messaging::DistributionMode::Move
));
}
fe2o3_amqp_types::messaging::DistributionMode::Copy => {
assert!(matches!(
round_trip_distribution_mode,
fe2o3_amqp_types::messaging::DistributionMode::Copy
));
}
}

assert_eq!(
fe2o3_source.default_outcome.is_some(),
round_trip.default_outcome.is_some()
);

if fe2o3_source.default_outcome.is_some() {
let original_default_outcome = fe2o3_source.default_outcome.unwrap();
let round_trip_default_outcome = round_trip.default_outcome.unwrap();

assert_eq!(
original_default_outcome.is_accepted(),
round_trip_default_outcome.is_accepted(),
);
assert_eq!(
original_default_outcome.is_rejected(),
round_trip_default_outcome.is_rejected(),
);
assert_eq!(
original_default_outcome.is_released(),
round_trip_default_outcome.is_released(),
);
assert_eq!(
original_default_outcome.is_modified(),
round_trip_default_outcome.is_modified(),
);
}
}

#[test]
fn message_source_conversion_amqp_fe2o3() {
let amqp_source = AmqpSource::builder()
.with_address("test")
.with_durable(TerminusDurability::UnsettledState)
.with_expiry_policy(TerminusExpiryPolicy::SessionEnd)
.with_timeout(95)
.with_dynamic(true)
.with_dynamic_node_properties(AmqpOrderedMap::new())
.with_distribution_mode(DistributionMode::Move)
.with_filter(AmqpOrderedMap::new())
.with_default_outcome(AmqpOutcome::Accepted)
.with_outcomes(vec![])
.with_capabilities(vec![])
.build();

let fe2o3_source = fe2o3_amqp_types::messaging::Source::from(amqp_source.clone());

let round_trip = AmqpSource::from(fe2o3_source);

assert_eq!(amqp_source, round_trip);
}
127 changes: 84 additions & 43 deletions sdk/core/azure_core_amqp/src/fe2o3/messaging/messaging_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

// cspell: words amqp servicebus eventhub mgmt

use crate::messaging::AmqpOutcome;
use crate::messaging::{AmqpOutcome, DistributionMode, TerminusDurability, TerminusExpiryPolicy};

impl From<fe2o3_amqp_types::messaging::Outcome> for AmqpOutcome {
fn from(outcome: fe2o3_amqp_types::messaging::Outcome) -> Self {
Expand Down Expand Up @@ -38,19 +38,33 @@ impl From<AmqpOutcome> for fe2o3_amqp_types::messaging::Outcome {
}
}

#[test]
fn test_outcome_round_trip() {
let outcomes = vec![
AmqpOutcome::Accepted,
AmqpOutcome::Released,
AmqpOutcome::Rejected,
AmqpOutcome::Modified,
];

for outcome in outcomes {
let fe2o3_outcome: fe2o3_amqp_types::messaging::Outcome = outcome.clone().into();
let amqp_outcome: AmqpOutcome = fe2o3_outcome.into();
assert_eq!(outcome, amqp_outcome);
}
}

impl From<fe2o3_amqp_types::messaging::TerminusDurability>
for crate::messaging::TerminusDurability
{
fn from(durability: fe2o3_amqp_types::messaging::TerminusDurability) -> Self {
match durability {
fe2o3_amqp_types::messaging::TerminusDurability::None => {
crate::messaging::TerminusDurability::None
}
fe2o3_amqp_types::messaging::TerminusDurability::None => TerminusDurability::None,
fe2o3_amqp_types::messaging::TerminusDurability::Configuration => {
crate::messaging::TerminusDurability::Configuration
TerminusDurability::Configuration
}
fe2o3_amqp_types::messaging::TerminusDurability::UnsettledState => {
crate::messaging::TerminusDurability::UnsettledState
TerminusDurability::UnsettledState
}
}
}
Expand All @@ -61,83 +75,110 @@ impl From<crate::messaging::TerminusDurability>
{
fn from(durability: crate::messaging::TerminusDurability) -> Self {
match durability {
crate::messaging::TerminusDurability::None => {
fe2o3_amqp_types::messaging::TerminusDurability::None
}
crate::messaging::TerminusDurability::Configuration => {
TerminusDurability::None => fe2o3_amqp_types::messaging::TerminusDurability::None,
TerminusDurability::Configuration => {
fe2o3_amqp_types::messaging::TerminusDurability::Configuration
}
crate::messaging::TerminusDurability::UnsettledState => {
TerminusDurability::UnsettledState => {
fe2o3_amqp_types::messaging::TerminusDurability::UnsettledState
}
}
}
}

impl From<fe2o3_amqp_types::messaging::TerminusExpiryPolicy>
for crate::messaging::TerminusExpiryPolicy
{
#[test]
fn test_terminus_durability_round_trip() {
let durabilities = vec![
TerminusDurability::None,
TerminusDurability::Configuration,
TerminusDurability::UnsettledState,
];

for durability in durabilities {
let fe2o3_durability =
fe2o3_amqp_types::messaging::TerminusDurability::from(durability.clone());
let amqp_durability = TerminusDurability::from(fe2o3_durability);
assert_eq!(durability, amqp_durability);
}
}

impl From<fe2o3_amqp_types::messaging::TerminusExpiryPolicy> for TerminusExpiryPolicy {
fn from(expiry_policy: fe2o3_amqp_types::messaging::TerminusExpiryPolicy) -> Self {
match expiry_policy {
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::LinkDetach => {
crate::messaging::TerminusExpiryPolicy::LinkDetach
TerminusExpiryPolicy::LinkDetach
}
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::SessionEnd => {
crate::messaging::TerminusExpiryPolicy::SessionEnd
TerminusExpiryPolicy::SessionEnd
}
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::ConnectionClose => {
crate::messaging::TerminusExpiryPolicy::ConnectionClose
}
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::Never => {
crate::messaging::TerminusExpiryPolicy::Never
TerminusExpiryPolicy::ConnectionClose
}
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::Never => TerminusExpiryPolicy::Never,
}
}
}

impl From<crate::messaging::TerminusExpiryPolicy>
for fe2o3_amqp_types::messaging::TerminusExpiryPolicy
{
fn from(expiry_policy: crate::messaging::TerminusExpiryPolicy) -> Self {
impl From<TerminusExpiryPolicy> for fe2o3_amqp_types::messaging::TerminusExpiryPolicy {
fn from(expiry_policy: TerminusExpiryPolicy) -> Self {
match expiry_policy {
crate::messaging::TerminusExpiryPolicy::LinkDetach => {
TerminusExpiryPolicy::LinkDetach => {
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::LinkDetach
}
crate::messaging::TerminusExpiryPolicy::SessionEnd => {
TerminusExpiryPolicy::SessionEnd => {
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::SessionEnd
}
crate::messaging::TerminusExpiryPolicy::ConnectionClose => {
TerminusExpiryPolicy::ConnectionClose => {
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::ConnectionClose
}
crate::messaging::TerminusExpiryPolicy::Never => {
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::Never
}
TerminusExpiryPolicy::Never => fe2o3_amqp_types::messaging::TerminusExpiryPolicy::Never,
}
}
}

impl From<fe2o3_amqp_types::messaging::DistributionMode> for crate::messaging::DistributionMode {
#[test]
fn test_terminus_expiry_policy_round_trip() {
let expiry_policies = vec![
TerminusExpiryPolicy::LinkDetach,
TerminusExpiryPolicy::SessionEnd,
TerminusExpiryPolicy::ConnectionClose,
TerminusExpiryPolicy::Never,
];

for expiry_policy in expiry_policies {
let fe2o3_expiry_policy =
fe2o3_amqp_types::messaging::TerminusExpiryPolicy::from(expiry_policy.clone());
let amqp_expiry_policy = TerminusExpiryPolicy::from(fe2o3_expiry_policy);
assert_eq!(expiry_policy, amqp_expiry_policy);
}
}

impl From<fe2o3_amqp_types::messaging::DistributionMode> for DistributionMode {
fn from(distribution_mode: fe2o3_amqp_types::messaging::DistributionMode) -> Self {
match distribution_mode {
fe2o3_amqp_types::messaging::DistributionMode::Move => {
crate::messaging::DistributionMode::Move
}
fe2o3_amqp_types::messaging::DistributionMode::Copy => {
crate::messaging::DistributionMode::Copy
}
fe2o3_amqp_types::messaging::DistributionMode::Move => DistributionMode::Move,
fe2o3_amqp_types::messaging::DistributionMode::Copy => DistributionMode::Copy,
}
}
}

impl From<crate::messaging::DistributionMode> for fe2o3_amqp_types::messaging::DistributionMode {
fn from(distribution_mode: crate::messaging::DistributionMode) -> Self {
match distribution_mode {
crate::messaging::DistributionMode::Move => {
fe2o3_amqp_types::messaging::DistributionMode::Move
}
crate::messaging::DistributionMode::Copy => {
fe2o3_amqp_types::messaging::DistributionMode::Copy
}
DistributionMode::Move => fe2o3_amqp_types::messaging::DistributionMode::Move,
DistributionMode::Copy => fe2o3_amqp_types::messaging::DistributionMode::Copy,
}
}
}

#[test]
fn test_distribution_mode_round_trip() {
let distribution_modes = vec![DistributionMode::Move, DistributionMode::Copy];

for distribution_mode in distribution_modes {
let fe2o3_distribution_mode =
fe2o3_amqp_types::messaging::DistributionMode::from(distribution_mode.clone());
let amqp_distribution_mode = DistributionMode::from(fe2o3_distribution_mode);
assert_eq!(distribution_mode, amqp_distribution_mode);
}
}
Loading

0 comments on commit 2c13ccd

Please sign in to comment.