From f79e6d93878ae3106b4fcfd0c72ee2160feb3ac4 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 11:46:06 +0100 Subject: [PATCH 01/14] fix: materialize pipeline caches and migrate Core.Tests to TUnit Production changes: - Materialize static pipeline caches from IOrderedEnumerable to IReadOnlyList to fix thread-safety bug with concurrent LINQ enumeration - Fix missing post-attribute caching in BuildPipeline/BuildAsyncPipeline - Remove ClearPipelineCache() methods (no longer needed with materialized caches) Test migration (Core.Tests): - Replace xUnit with TUnit test framework - Convert all test attributes ([Fact]->[Test], [Theory]->[Test]+[Arguments], etc.) - Convert xUnit assertions to TUnit async assertions - Convert void test methods to async Task - Replace [Collection] with [NotInParallel] - Replace IClassFixture/IAsyncLifetime with TUnit equivalents - Rename TestState to SpecificationState to avoid TUnit.Core.TestState conflict - Remove all ClearPipelineCache() calls across all test projects - Enable ImplicitUsings in tests/Directory.Build.props - Update test generator Liquid templates --- src/Paramore.Brighter/PipelineBuilder.cs | 51 +- .../TransformPipelineBuilder.cs | 33 +- .../TransformPipelineBuilderAsync.cs | 51 +- tests/Directory.Build.props | 1 + .../When_unwrapping_a_large_message.cs | 3 +- .../When_wrapping_a_large_message.cs | 3 +- .../When_unwrapping_a_large_message.cs | 3 +- .../When_wrapping_a_large_message.cs | 3 +- .../When_unwrapping_a_large_message.cs | 3 +- .../When_unwrapping_a_large_message_async.cs | 3 +- .../When_wrapping_a_large_message.cs | 3 +- .../When_wrapping_a_large_message_async.cs | 3 +- ..._Archiving_Old_Messages_From_The_Outbox.cs | 90 ++-- ...ving_Old_Messages_From_The_Outbox_Async.cs | 75 ++- .../When_Cooldown_On_TrippedTopic.cs | 27 +- ...reating_luggagestore_missing_parameters.cs | 19 +- .../When_unwrapping_a_large_message.cs | 55 +-- .../When_unwrapping_a_large_message_async.cs | 57 +-- .../When_validating_a_luggage_store_exists.cs | 46 +- ...validating_a_luggage_store_exists_async.cs | 41 +- .../When_wrapping_a_large_message.cs | 47 +- .../When_wrapping_a_large_message_async.cs | 48 +- .../When_a_message_is_under_the_threshold.cs | 24 +- ..._a_message_is_under_the_threshold_async.cs | 21 +- .../When_a_message_unwraps_a_large_payload.cs | 28 +- ...a_message_unwraps_a_large_payload_async.cs | 26 +- .../When_a_message_wraps_a_large_payload.cs | 28 +- ...n_a_message_wraps_a_large_payload_async.cs | 27 +- ...hen_luggage_should_be_kept_in_the_store.cs | 24 +- ...ggage_should_be_kept_in_the_store_async.cs | 22 +- .../When_unwrapping_a_large_message.cs | 39 +- .../When_unwrapping_a_large_message_async.cs | 38 +- .../InMemory/When_wrapping_a_large_message.cs | 36 +- .../When_wrapping_a_large_message_async.cs | 38 +- .../CloudEventJsonMessageMapperTests.cs | 318 +++++++------ .../When_a_message_uses_cloud_events.cs | 439 +++++++----------- ...ling_A_Server_Via_The_Command_Processor.cs | 81 +--- ...The_Command_Processor_With_No_In_Mapper.cs | 59 +-- ...he_Command_Processor_With_No_Out_Mapper.cs | 55 +-- ...a_The_Command_Processor_With_No_Timeout.cs | 63 +-- ..._PostBox_On_The_Command_Processor_Async.cs | 110 ++--- ...PostBox_On_The_Command_Processor _Async.cs | 82 +--- ...ng_The_PostBox_On_The_Command_Processor.cs | 103 ++-- ...ng_The_PostBox_On_The_Command_Processor.cs | 92 ++-- ..._PostBox_On_The_Command_Processor_Async.cs | 96 ++-- ...Bag_Should_Be_Accessible_In_The_Handler.cs | 18 +- ...positing_A_Message_In_The_Message_Store.cs | 80 +--- ...ing_A_Message_In_The_Message_StoreAsync.cs | 88 +--- ..._Message_In_The_Message_StoreAsync_Bulk.cs | 152 ++---- ...essage_StoreAsync_Bulk_With_Transaction.cs | 129 ++--- ...The_Message_StoreAsync_With_Transaction.cs | 83 +--- ...ing_A_Message_In_The_Message_Store_Bulk.cs | 134 ++---- ...The_Message_Store_Bulk_With_Transaction.cs | 116 ++--- ...e_In_The_Message_Store_With_Transaction.cs | 82 +--- ..._A_Handler_Is_Part_Of_An_Async_Pipeline.cs | 23 +- .../When_A_Handler_Is_Part_of_A_Pipeline.cs | 22 +- ...andler_Is_Part_of_An_Agreement_Pipeline.cs | 33 +- ..._Is_Part_of_An_Agreement_Pipeline_Async.cs | 33 +- ...eption_Is_Thrown_Terminate_The_Pipeline.cs | 22 +- ...lding_A_Pipeline_Allow_ForiegnAttribues.cs | 20 +- ...ing_A_Pipeline_Allow_Pre_And_Post_Tasks.cs | 20 +- ..._Failures_Should_Be_ConfigurationErrors.cs | 19 +- ..._Building_A_Pipeline_Preserve_The_Order.cs | 19 +- ...n_Building_A_Pipeline_With_Global_Inbox.cs | 24 +- ...With_Global_Inbox_And_NoInbox_Attribute.cs | 25 +- ...obal_Inbox_And_NoInbox_Attribute_Async .cs | 26 +- ...ipeline_With_Global_Inbox_And_Use_Inbox.cs | 36 +- ...e_With_Global_Inbox_And_Use_Inbox_Async.cs | 35 +- ...ding_A_Pipeline_With_Global_Inbox_Async.cs | 30 +- ...line_With_Global_Inbox_Override_Context.cs | 29 +- ...A_Sync_Pipeline_That_Has_Async_Handlers.cs | 34 +- ...n_Async_Pipeline_Allow_ForiegnAttribues.cs | 70 ++- ...Async_Pipeline_Allow_Pre_And_Post_Tasks.cs | 23 +- ..._Failures_Should_Be_ConfigurationErrors.cs | 19 +- ...ng_An_Async_Pipeline_Preserve_The_Order.cs | 20 +- ...n_Async_Pipeline_That_Has_Sync_Handlers.cs | 23 +- .../When_Creating_Context_For_A_Handler.cs | 14 +- ...en_Creating_Context_For_A_Handler_Async.cs | 16 +- ..._Finding_A_Hander_That_Has_Dependencies.cs | 54 +-- .../When_Finding_A_Handler_For_A_Command.cs | 16 +- ...n_Finding_A_Handler_For_A_Command_Async.cs | 18 +- ...ng_A_Handler_For_A_Command_By_Agreement.cs | 29 +- ...andler_For_A_Command_By_Agreement_Async.cs | 29 +- ...Default_Inbox_Into_The_Publish_Pipeline.cs | 51 +- ...t_Inbox_Into_The_Publish_Pipeline_Async.cs | 46 +- ..._A_Default_Inbox_Into_The_Send_Pipeline.cs | 57 +-- ...ault_Inbox_Into_The_Send_Pipeline_Async.cs | 72 +-- ...e_Is_No_Sync_Or_Async_Handler_Factories.cs | 56 +-- ...cised_The_Pipeline_Cleanup_Its_Handlers.cs | 25 +- ...And_There_Is_No_Message_Mapper_Registry.cs | 58 +-- ...ere_Is_No_Message_Mapper_Registry_Async.cs | 53 +-- ...essage_And_There_Is_No_Message_Producer.cs | 38 +- ...age_And_There_Is_No_Message_Transformer.cs | 52 +-- ...d_There_Is_No_Message_Transformer_Async.cs | 51 +- ...ting_A_Message_To_The_Command_Processor.cs | 94 +--- ..._Message_To_The_Command_Processor_Async.cs | 95 +--- ...d_Processor_With_A_Transaction_Provider.cs | 79 +--- ...essor_With_A_Transaction_Provider_Async.cs | 77 +-- ..._Limit_Total_Writes_To_OutBox_In_Window.cs | 84 ++-- ...ultiple_Message_Types_To_A_Single_Topic.cs | 112 ++--- ...e_Message_Types_To_A_Single_Topic_Async.cs | 110 ++--- .../When_Posting_Via_A_Control_Bus_Sender.cs | 75 +-- ..._Posting_Via_A_Control_Bus_Sender_Async.cs | 71 +-- .../Post/When_Posting_With_A_Custom_Policy.cs | 78 +--- .../When_Posting_With_A_Default_Policy.cs | 70 +-- ...Posting_With_An_In_Memory_Message_Store.cs | 62 +-- ...g_With_An_In_Memory_Message_Store_Async.cs | 63 +-- ...Default_Inbox_Into_The_Publish_Pipeline.cs | 51 +- ...t_Inbox_Into_The_Publish_Pipeline_Async.cs | 51 +- ...en_Publishing_An_Event_To_The_Processor.cs | 21 +- ...lishing_An_Event_To_The_Processor_Async.cs | 19 +- ...n_Event_To_The_Processor_With_Agreement.cs | 35 +- ...t_To_The_Processor_With_Agreement_Async.cs | 33 +- ...Subscribers_Should_Aggregate_Exceptions.cs | 27 +- ...ibers_Should_Aggregate_Exceptions_Async.cs | 32 +- .../When_There_Are_Multiple_Subscribers.cs | 32 +- ...en_There_Are_Multiple_Subscribers_Async.cs | 22 +- ...Are_Multiple_Subscribers_With_Agreement.cs | 40 +- ...ltiple_Subscribers_With_Agreement_Async.cs | 37 +- .../When_There_Are_No_Command_Handlers.cs | 37 +- ...hen_There_Are_No_Command_Handlers_Async.cs | 37 +- .../Publish/When_There_Are_No_Subscribers.cs | 23 +- .../When_There_Are_No_Subscribers_Async.cs | 21 +- ...ling_A_Message_To_The_Command_Processor.cs | 201 +++----- ..._Message_To_The_Command_Processor_Async.cs | 181 +++----- .../When_Scheduling_With_Invalid_Parameter.cs | 103 ++-- ...Scheduling_With_Invalid_Parameter_Async.cs | 97 ++-- .../Send/When_Cancelling_An_Async_Command.cs | 14 +- ...ending_A_Command_To_The_Processor_Async.cs | 21 +- ...When_Sending_A_command_To_The_Processor.cs | 16 +- ..._command_To_The_Processor_Via_Agreement.cs | 42 +- ...nd_To_The_Processor_Via_Agreement_Async.cs | 42 +- ..._Are_Multiple_Possible_Command_Handlers.cs | 26 +- ...ultiple_Possible_Command_Handlers_Async.cs | 21 +- ...s_execute_all_the_steps_in_the_pipeline.cs | 23 +- .../When_A_Request_Context_Is_Provided.cs | 326 ++++--------- .../When_No_Request_Context_Is_Provided.cs | 298 ++++-------- ...en_a_message_compresses_a_large_payload.cs | 97 ++-- ...essage_compresses_a_large_payload_async.cs | 85 ++-- .../When_a_message_is_not_compressed.cs | 68 +-- .../When_a_message_is_not_compressed_async.cs | 54 +-- .../When_a_message_is_under_the_threshold.cs | 27 +- ..._a_message_is_under_the_threshold_async.cs | 24 +- ...ompressing_a_large_payload_in_a_message.cs | 105 +---- ...sing_a_large_payload_in_a_message_async.cs | 104 ++--- .../When_Accessing_A_Request_Context.cs | 55 +-- .../When_Creating_A_Request_Context.cs | 21 +- .../When_configuring_a_control_bus.cs | 25 +- .../When_creating_a_control_bus_sender.cs | 20 +- ..._a_configuration_command_from_a_message.cs | 19 +- ...ing_from_a_heartbeat_reply_to_a_message.cs | 45 +- ...g_from_a_heartbeat_request_to_a_message.cs | 26 +- ...ing_from_a_message_to_a_heartbeat_reply.cs | 33 +- ...g_from_a_message_to_a_heartbeat_request.cs | 26 +- ...re_message_from_a_configuration_command.cs | 26 +- ...eiving_a_start_message_for_a_connection.cs | 11 +- ...ceiving_a_stop_message_for_a_connection.cs | 11 +- .../When_receiving_an_all_start_message.cs | 11 +- .../When_receiving_an_all_stop_message.cs | 11 +- .../When_recieving_a_heartbeat_message.cs | 40 +- ...e_can_send_configuration_messages_to_it.cs | 28 +- ...ndler_succeeds_should_not_defer_message.cs | 28 +- ...r_throws_exception_should_defer_message.cs | 33 +- ...e_from_defer_message_on_error_attribute.cs | 37 +- ...ndler_succeeds_should_not_defer_message.cs | 30 +- ...r_throws_exception_should_defer_message.cs | 35 +- ...hrows_exception_should_dont_ack_message.cs | 34 +- ...hrows_exception_should_dont_ack_message.cs | 36 +- .../When_A_Fallback_Is_Broken_Ciruit_Only.cs | 21 +- ...A_Broken_Circuit_Exception_Can_Fallback.cs | 26 +- .../When_Raising_An_Exception_Can_Fallback.cs | 27 +- ...Raising_An_Exception_Run_Fallback_Chain.cs | 26 +- ...d_And_The_Policy_Is_Not_In_The_Registry.cs | 26 +- ...The_Policy_Is_Not_In_The_Registry_Async.cs | 21 +- ...siliencePipeline_Is_Not_In_The_Registry.cs | 25 +- ...cePipeline_Is_Not_In_The_Registry_Async.cs | 22 +- ...siliencePipeline_Is_Not_In_The_Registry.cs | 27 +- ...cePipeline_Is_Not_In_The_Registry_Async.cs | 22 +- ...mand_That_Passes_Multiple_Policy_Checks.cs | 46 +- ...ding_A_Command_That_Passes_Policy_Check.cs | 38 +- ...nd_That_Passes_ResiliencePipeline_Check.cs | 39 +- ...hat_Passes_TypeResiliencePipeline_Check.cs | 39 +- ...hat_Repeatedely_Fails_Break_The_Circuit.cs | 37 +- ...peatedely_Fails_Break_The_Circuit_Async.cs | 33 +- ...eak_The_Circuit_With_ResiliencePipeline.cs | 40 +- ...hen_Repeatedly_Fails_Breaks_The_Circuit.cs | 67 +-- ...peatedly_Fails_Breaks_The_Circuit_Async.cs | 63 +-- ...ing_A_Command_That_Should_Retry_Failure.cs | 37 +- ...Command_That_Should_Retry_Failure_Async.cs | 36 +- ...nd_That_Passes_ResiliencePipeline_Check.cs | 35 +- ...hat_Passes_TypeResiliencePipeline_Check.cs | 35 +- ...eak_The_Circuit_With_ResiliencePipeline.cs | 34 +- ...ommands_That_Share_A_ResiliencePipeline.cs | 27 +- ..._A_Handler_Is_Feature_Switch_Config_Off.cs | 42 +- ...n_A_Handler_Is_Feature_Switch_Config_On.cs | 44 +- ...Feature_Switch_Missing_Config_Exception.cs | 57 +-- ...Feature_Switch_Missing_Config_SilentOff.cs | 38 +- ..._Feature_Switch_Missing_Config_SilentOn.cs | 39 +- .../When_A_Handler_Is_Feature_Switch_Off.cs | 34 +- ...dler_Is_Feature_Switch_Off_With_DontAck.cs | 36 +- ...s_Feature_Switch_Off_With_DontAck_Async.cs | 34 +- .../When_A_Handler_Is_Feature_Switch_On.cs | 34 +- .../When_No_Feature_Switch_Config.cs | 36 +- .../JsonMapper/JsonMessageMapperTests.cs | 192 ++++---- ..._Is_Called_It_Can_Only_Be_Obtained_Once.cs | 32 +- ...hen_A_Request_Logger_Is_In_The_Pipeline.cs | 34 +- ...Request_Logger_Is_In_The_Pipeline_Async.cs | 31 +- ...y_until_connection_re_established_async.cs | 47 +- ...y_until_connection_re_established_async.cs | 51 +- ...essage_is_requeued_until_rejected_async.cs | 42 +- ...lay_Then_message_is_requeued_with_delay.cs | 45 +- ...d_exception_Then_message_is_acked_async.cs | 46 +- ...ck_action_should_nack_the_message_async.cs | 46 +- ...ack_action_should_not_acknowledge_async.cs | 47 +- ..._to_connect_a_channel_and_handler_async.cs | 67 +-- ...ew_connection_added_while_running_async.cs | 57 +-- ...essage_dispatcher_restarts_a_connection.cs | 64 +-- ...fter_all_connections_have_stopped_async.cs | 85 ++-- ...age_dispatcher_shuts_a_connection_async.cs | 51 +- ...er_starts_different_types_of_performers.cs | 78 +--- ...atcher_starts_multiple_performers_async.cs | 54 +-- ...ceptable_message_limit_is_reached_async.cs | 51 +- ...e_fails_to_be_mapped_to_a_request_async.cs | 36 +- ...patched_it_should_reach_a_handler_async.cs | 47 +- ...per_throws_invalid_message_action_async.cs | 58 +-- ...threshold_for_commands_has_been_reached.cs | 49 +- ...t_threshold_for_events_has_been_reached.cs | 49 +- ..._requeue_of_command_exception_is_thrown.cs | 51 +- ..._a_requeue_of_event_exception_is_thrown.cs | 55 +-- ...ack_action_should_not_acknowledge_async.cs | 46 +- ..._throw_a_reject_message_exception_async.cs | 67 +-- ...message_is_requeued_until_rejectedAsync.cs | 48 +- ...d_exception_Then_message_is_acked_async.cs | 46 +- ..._unacceptable_message_is_recieved_async.cs | 49 +- ...ge_is_recieved_async_and_there_is_a_dlq.cs | 108 ++--- ...e_is_recieved_async_and_there_is_an_imc.cs | 55 +-- ...ceptable_message_limit_is_reached_async.cs | 64 +-- ...acceptable_message_limit_is_reset_async.cs | 96 +--- ...ose_async_should_await_consumer_dispose.cs | 51 +- ...eives_quit_should_dispose_channel_async.cs | 48 +- ...nside_async_context_should_not_deadlock.cs | 51 +- ...a_channel_pump_out_to_command_processor.cs | 90 ++-- ...nel_pump_out_to_command_processor_async.cs | 41 +- ...n_a_thread_should_be_able_to_stop_async.cs | 42 +- ...d_retry_until_connection_re_established.cs | 47 +- ...d_retry_until_connection_re_established.cs | 50 +- ...Then_message_is_requeued_until_rejected.cs | 44 +- ...handled_exception_Then_message_is_acked.cs | 43 +- ...dont_ack_action_should_nack_the_message.cs | 46 +- ..._dont_ack_action_should_not_acknowledge.cs | 46 +- ...as_a_new_connection_added_while_running.cs | 53 +-- ..._asked_to_connect_a_channel_and_handler.cs | 59 +-- ...essage_dispatcher_restarts_a_connection.cs | 58 +-- ...tion_after_all_connections_have_stopped.cs | 81 ++-- ...a_message_dispatcher_shuts_a_connection.cs | 47 +- ...er_starts_different_types_of_performers.cs | 65 +-- ...e_dispatcher_starts_multiple_performers.cs | 52 +-- ...message_fails_to_be_mapped_to_a_request.cs | 39 +- ...e_unacceptable_message_limit_is_reached.cs | 47 +- ...is_dispatched_it_should_reach_a_handler.cs | 53 +-- ...ge_mapper_throws_invalid_message_action.cs | 58 +-- ...threshold_for_commands_has_been_reached.cs | 47 +- ...t_threshold_for_events_has_been_reached.cs | 47 +- ..._requeue_of_command_exception_is_thrown.cs | 49 +- ..._a_requeue_of_event_exception_is_thrown.cs | 53 +-- ..._dont_ack_action_should_not_acknowledge.cs | 46 +- ...andler_throw_a_reject_message_exception.cs | 65 +-- ...Then_message_is_requeued_until_rejected.cs | 51 +- ...handled_exception_Then_message_is_acked.cs | 47 +- ...hen_an_unacceptable_message_is_recieved.cs | 47 +- ..._message_is_recieved_and_there_is_a_dlq.cs | 52 +-- ..._message_is_recieved_and_there_is_a_imc.cs | 52 +-- ...n_unacceptable_message_limit_is_reached.cs | 66 +-- ..._an_unacceptable_message_limit_is_reset.cs | 98 +--- ...a_channel_pump_out_to_command_processor.cs | 90 ++-- ...a_channel_pump_out_to_command_processor.cs | 45 +- ...pump_on_a_thread_should_be_able_to_stop.cs | 43 +- ...e_Mapper_Map_To_Message_Has_A_Transform.cs | 29 +- ...per_Map_To_Message_Has_A_TransformAsync.cs | 30 +- ..._Mapper_Map_To_Message_Has_No_Transform.cs | 31 +- ...er_Map_To_Message_Has_No_TransformAsync.cs | 31 +- ...e_Mapper_Map_To_Request_Has_A_Transform.cs | 30 +- ...per_Map_To_Request_Has_A_TransformAsync.cs | 30 +- ..._Mapper_Map_To_Request_Has_No_Transform.cs | 29 +- ...r_Map_To_Request_Has_No_Transform_Async.cs | 29 +- ...g_A_Pipeline_Builder_Without_A_Registry.cs | 31 +- ...peline_Builder_Without_A_Registry_Async.cs | 31 +- .../When_Creating_A_Wrap_Without_A_Factory.cs | 44 +- ...Creating_A_Wrap_Without_A_Factory_Async.cs | 41 +- ...en_Creating_An_Unwrap_Without_A_Factory.cs | 37 +- ...ating_An_Unwrap_Without_A_Factory_Async.cs | 35 +- ...When_Deserializing_A_Message_Header_Bag.cs | 141 +++--- .../When_I_Am_Serialising_The_Payload.cs | 184 +++----- .../When_Unwrapping_A_Message_Mapper.cs | 33 +- .../When_Unwrapping_A_Message_MapperAsync.cs | 31 +- ...age_Mapper_But_Not_In_Transform_Factory.cs | 35 +- ...apping_A_Message_Mapper_With_Parameters.cs | 32 +- ...hen_Unwrapping_A_Vanilla_Message_Mapper.cs | 30 +- ...nwrapping_A_Vanilla_Message_MapperAsync.cs | 28 +- ...hen_Unwrapping_But_Factory_Returns_Null.cs | 35 +- ...wrapping_But_Factory_Returns_Null_Async.cs | 36 +- ...hen_Unwrapping_But_No_Registered_Mapper.cs | 35 +- ...nwrapping_But_No_Registered_MapperAsync.cs | 35 +- .../When_Wrapping_A_Message_Mapper.cs | 35 +- .../When_Wrapping_A_Message_MapperAsync.cs | 34 +- ...age_Mapper_But_Not_In_Transform_Factory.cs | 26 +- ...pper_But_Not_In_Transform_Factory_Async.cs | 26 +- ...apping_A_Message_Mapper_With_Parameters.cs | 36 +- ..._A_Message_Mapper_With_Parameters_Async.cs | 32 +- .../When_Wrapping_A_Vanilla_Message_Mapper.cs | 31 +- ..._Wrapping_A_Vanilla_Message_MapperAsync.cs | 30 +- .../When_Wrapping_But_No_Registered_Mapper.cs | 29 +- ..._Wrapping_But_No_Registered_MapperAsync.cs | 29 +- .../When_Wrapping_Clean_Up_The_Pipeline.cs | 37 +- ...hen_Wrapping_Clean_Up_The_PipelineAsync.cs | 36 +- ...en_A_Stop_Message_Is_Added_To_A_Channel.cs | 27 +- ...When_Acknowledge_Is_Called_On_A_Channel.cs | 23 +- ...nstructing_A_Combined_Producer_Registry.cs | 20 +- ..._ProducerRegistry_With_Empty_Dictionary.cs | 60 +-- ...When_Listening_To_Messages_On_A_Channel.cs | 25 +- ...n_No_Acknowledge_Is_Called_On_A_Channel.cs | 22 +- .../When_Requeuing_A_Message_With_No_Delay.cs | 27 +- ...t_Empty_Read_From_That_Before_Receiving.cs | 77 ++- ...ed_channel_factory_propagates_scheduler.cs | 51 +- ...ructing_a_channel_with_combined_factory.cs | 99 ++-- ...ould_not_dispose_replacement_connection.cs | 47 +- .../When_Monitoring_Is_On_For_A_Handler.cs | 59 +-- ...en_Monitoring_Is_On_For_A_Handler_Async.cs | 54 +-- ...We_Should_Record_But_Rethrow_Exceptions.cs | 45 +- ...uld_Record_But_Rethrow_Exceptions_Async.cs | 48 +- .../When_Serializing_A_Monitoring_Event.cs | 47 +- ...ith_custom_template_should_use_template.cs | 37 +- ...with_default_template_should_append_dlq.cs | 13 +- ...ith_custom_template_should_use_template.cs | 37 +- ..._default_template_should_append_invalid.cs | 37 +- .../Archive/When_archiving_from_the_outbox.cs | 152 ++---- .../When_archiving_from_the_outbox_async.cs | 155 +++---- ...n_Clearing_A_Message_A_Span_Is_Exported.cs | 262 ++++------- ...ring_A_Message_A_Span_Is_Exported_Async.cs | 228 ++++----- ...ring_A_Message_Should_Propogate_Context.cs | 117 ++--- ...A_Message_Should_Propogate_Context_Asyn.cs | 122 ++--- ...ipile_Messages_Spans_Are_Exported_Async.cs | 128 ++--- ...ng_Multiple_Messages_Spans_Are_Exported.cs | 130 ++---- ...Outstanding_Messages_Spans_Are_Exported.cs | 165 ++----- ...anding_Messages_Spans_Are_Exported_Bulk.cs | 166 +++---- ...Depositing_A_Request_A_Span_Is_Exported.cs | 150 +++--- ...ting_A_Request_A_Span_Is_Exported_Async.cs | 149 ++---- ...ng_Multiple_Requests_Spans_Are_Exported.cs | 130 ++---- ...tiple_Requests_Spans_Are_Exported_Async.cs | 128 ++--- ...Publishing_A_Request_A_Span_Is_Exported.cs | 255 ++++------ ...shing_A_Request_A_Span_Is_Exported_Asyn.cs | 255 ++++------ ...Scheduling_A_Request_A_Span_Is_Exported.cs | 222 ++++----- ...ling_A_Request_A_Span_Is_Exported_Async.cs | 214 ++++----- ...en_Sending_A_Request_A_Span_Is_Exported.cs | 208 ++++----- ...ding_A_Request_A_Span_Is_Exported_Async.cs | 204 ++++---- ..._Span_Add_Brighter_Semantic_Conventions.cs | 160 +++---- ..._Name_Add_Brighter_Semantic_Conventions.cs | 160 +++---- ..._Event_Add_Brighter_SemanticConventions.cs | 41 +- ...apper_Add_Brighter_Semantic_Conventions.cs | 57 +-- ..._Span_Add_Brighter_Semantic_Conventions.cs | 89 ++-- ...ctivity_Source_Use_Lib_Name_And_Version.cs | 20 +- ...ge_Is_Dispatched_It_Should_Begin_A_Span.cs | 129 ++--- ...en_There_Are_No_Messages_Close_The_Span.cs | 107 ++--- ...nCircuit_Channel_Failure_Close_The_Span.cs | 119 ++--- ...ere_Is_A_Channel_Failure_Close_The_Span.cs | 114 ++--- ..._There_Is_A_Quit_Message_Close_The_Span.cs | 101 ++-- ...An_Unacceptable_Messages_Close_The_Span.cs | 113 ++--- .../TraceState/When_Adding_TraceState.cs | 48 +- ..._A_Command_Once_Only_With_Inbox_Enabled.cs | 33 +- ...mand_Once_Only_With_Inbox_Enabled_Async.cs | 32 +- ..._A_Command_Once_Only_With_Throw_Enabled.cs | 39 +- ...mand_Once_Only_With_Throw_Enabled_Async.cs | 37 +- ...g_A_Command_Once_Only_With_Warn_Enabled.cs | 38 +- ...mmand_Once_Only_With_Warn_Enabled_Async.cs | 34 +- ...Handling_A_Command_With_A_Inbox_Enabled.cs | 47 +- ...ng_A_Command_With_A_Inbox_Enabled_Async.cs | 36 +- .../Paramore.Brighter.Core.Tests.csproj | 26 +- ...dler_succeeds_should_not_reject_message.cs | 28 +- ..._throws_exception_should_reject_message.cs | 31 +- ...reject_message_on_error_async_attribute.cs | 17 +- ..._from_reject_message_on_error_attribute.cs | 17 +- ...dler_succeeds_should_not_reject_message.cs | 30 +- ..._throws_exception_should_reject_message.cs | 33 +- ...r_at_step_zero_catches_inner_exceptions.cs | 31 +- .../TestDoubles/SpecificationTestState.cs | 4 +- ...n_left_fails_should_evaluate_both_sides.cs | 69 +-- ...ation_graph_should_collect_all_failures.cs | 101 ++-- .../When_evaluating_a_specification.cs | 86 ++-- ...rror_factory_fails_should_collect_error.cs | 120 ++--- .../BrighterSynchronizationContextsTests.cs | 295 +++++------- ...rocessor_failing_a_timeout_policy_check.cs | 31 +- ...rocessor_passing_a_timeout_policy_check.cs | 27 +- ..._has_sync_attribute_should_report_error.cs | 37 +- ...silience_should_report_ordering_warning.cs | 46 +- ..._backstop_before_resilience_should_pass.cs | 36 +- ...escribe_registered_should_describe_once.cs | 17 +- ..._should_run_handler_and_producer_checks.cs | 33 +- ...should_register_diagnostic_writer_in_di.cs | 16 +- ...called_standalone_should_run_at_startup.cs | 42 +- ..._with_producers_should_log_publications.cs | 42 +- ...ld_log_handler_pipeline_detail_at_debug.cs | 29 +- ..._should_log_publication_detail_at_debug.cs | 39 +- ...should_log_subscription_detail_at_debug.cs | 36 +- ...ribes_should_log_summary_at_information.cs | 28 +- ...r_has_no_items_should_produce_no_output.cs | 16 +- ...ly_configured_should_report_no_findings.cs | 47 +- ...t_public_should_report_visibility_error.cs | 32 +- ...nfigured_should_run_only_handler_checks.cs | 23 +- ...dler_should_return_pipeline_description.cs | 96 ++-- ...on_has_sync_handler_should_report_error.cs | 32 +- ...issing_request_type_should_report_error.cs | 29 +- ...t_type_not_IRequest_should_report_error.cs | 23 +- ...ication_valid_should_report_no_findings.cs | 26 +- ..._mismatch_should_report_correct_handler.cs | 54 +-- ...n_has_async_handler_should_report_error.cs | 32 +- ...es_should_exclude_open_generic_handlers.cs | 15 +- ...ber_registry_should_implement_inspector.cs | 28 +- ...r_handler_interface_should_report_error.cs | 35 +- ...ly_configured_should_report_no_findings.cs | 35 +- ..._handler_registered_should_report_error.cs | 30 +- ..._has_no_handlers_pump_match_should_pass.cs | 26 +- ...ion_request_type_is_command_should_pass.cs | 25 +- ..._command_or_event_should_report_warning.cs | 31 +- ...has_async_attribute_should_report_error.cs | 37 +- ...error_false_should_log_errors_not_throw.cs | 79 +--- ...bes_should_return_mapper_and_transforms.cs | 120 ++--- ...uld_register_hosted_service_and_options.cs | 24 +- ..._called_should_register_validator_in_di.cs | 16 +- ..._pipelines_disabled_should_not_register.cs | 74 +-- ...h_producers_should_receive_publications.cs | 47 +- ..._describe_should_build_service_provider.cs | 14 +- ...ed_service_has_warnings_should_log_them.cs | 26 +- ...tarts_without_consumers_should_validate.cs | 69 +-- ...uld_throw_pipeline_validation_exception.cs | 95 ++-- ...gs_and_errors_should_collect_separately.cs | 41 +- ...rrors_across_paths_should_aggregate_all.cs | 43 +- ...om_di_should_validate_through_full_path.cs | 15 +- ...esult_has_only_warnings_should_be_valid.cs | 20 +- .../When_running_a_blocking_wait_workflow.cs | 67 +-- .../When_running_a_change_workflow.cs | 82 ++-- ..._running_a_failing_choice_workflow_step.cs | 101 ++-- ...running_a_multistep_workflow_with_reply.cs | 94 ++-- ..._running_a_passing_choice_workflow_step.cs | 106 ++--- .../When_running_a_single_step_workflow.cs | 68 +-- .../When_running_a_two_step_workflow.cs | 81 ++-- ...unning_a_workflow_with_a_parallel_split.cs | 101 ++-- .../When_running_a_workflow_with_reply.cs | 90 ++-- ...ng_a_workflow_with_robust_reply_nofault.cs | 110 ++--- ...a_workflow_with_robust_reply_with_fault.cs | 112 ++--- .../When_running_multiple_workflows.cs | 95 ++-- .../When_unwrapping_a_large_message.cs | 3 +- .../When_wrapping_a_large_message.cs | 3 +- .../When_unwrapping_a_large_message.cs | 3 +- .../When_unwrapping_a_large_message_async.cs | 3 +- .../When_wrapping_a_large_message.cs | 3 +- .../When_wrapping_a_large_message_async.cs | 3 +- ...essage_It_Should_Not_Throw_Async.cs.liquid | 23 +- ...Stored_With_All_Properties_Async.cs.liquid | 64 ++- ...ck_It_Should_Not_Be_Stored_Async.cs.liquid | 24 +- ...uld_Be_Stored_After_Commit_Async.cs.liquid | 64 ++- ...uld_Be_Removed_From_Outbox_Async.cs.liquid | 27 +- ...uld_Be_Removed_From_Outbox_Async.cs.liquid | 27 +- ...Return_The_Correct_Message_Async.cs.liquid | 64 ++- ...hould_Return_Empty_Message_Async.cs.liquid | 24 +- ...ispatched_And_Undispatched_Async.cs.liquid | 30 +- ...es_It_Should_Filter_By_Age_Async.cs.liquid | 44 +- ...rn_Only_Requested_Messages_Async.cs.liquid | 30 +- ...es_It_Should_Filter_By_Age_Async.cs.liquid | 44 +- ...cate_Message_It_Should_Not_Throw.cs.liquid | 31 +- ...ld_Be_Stored_With_All_Properties.cs.liquid | 70 +-- ...Rollback_It_Should_Not_Be_Stored.cs.liquid | 22 +- ...It_Should_Be_Stored_After_Commit.cs.liquid | 62 +-- ...ey_Should_Be_Removed_From_Outbox.cs.liquid | 26 +- ...It_Should_Be_Removed_From_Outbox.cs.liquid | 26 +- ...hould_Return_The_Correct_Message.cs.liquid | 64 +-- ...e_It_Should_Return_Empty_Message.cs.liquid | 22 +- ...lude_Dispatched_And_Undispatched.cs.liquid | 28 +- ...Messages_It_Should_Filter_By_Age.cs.liquid | 42 +- ...d_Return_Only_Requested_Messages.cs.liquid | 28 +- ...Messages_It_Should_Filter_By_Age.cs.liquid | 42 +- 480 files changed, 8829 insertions(+), 17705 deletions(-) diff --git a/src/Paramore.Brighter/PipelineBuilder.cs b/src/Paramore.Brighter/PipelineBuilder.cs index 2d0eab5e65..598fa45087 100644 --- a/src/Paramore.Brighter/PipelineBuilder.cs +++ b/src/Paramore.Brighter/PipelineBuilder.cs @@ -45,9 +45,10 @@ public partial class PipelineBuilder : IAmAPipelineBuilder, private readonly InboxConfiguration? _inboxConfiguration; private readonly IAmAHandlerFactoryAsync? _asyncHandlerFactory; private readonly List _instanceScopes = new List(); - //GLOBAL! cache of handler attributes - won't change post-startup so avoid re-calculation. Method to clear cache below (if a broken test brought you here) - private static readonly ConcurrentDictionary> s_preAttributesMemento = new ConcurrentDictionary>(); - private static readonly ConcurrentDictionary> s_postAttributesMemento = new ConcurrentDictionary>(); + //GLOBAL cache of handler attributes — derived from reflection so immutable post-startup. + //Values are materialized into IReadOnlyList<> so concurrent reads are thread-safe. + private static readonly ConcurrentDictionary> s_preAttributesMemento = new ConcurrentDictionary>(); + private static readonly ConcurrentDictionary> s_postAttributesMemento = new ConcurrentDictionary>(); /// /// Used to build a pipeline of handlers from the target handler and the attributes on that @@ -244,18 +245,6 @@ public AsyncPipelines BuildAsync(TRequest request, IRequestContext req } } - /// - /// Clears any cached pipeline definitions. - /// - /// - /// Intended primarily for testing scenarios where static caches may cause shared state between tests. - /// - public static void ClearPipelineCache() - { - s_preAttributesMemento.Clear(); - s_postAttributesMemento.Clear(); - } - /// /// Disposes all instance scopes created by this builder. /// @@ -273,31 +262,35 @@ private IHandleRequests BuildPipeline(RequestHandler implici implicitHandler.Context = requestContext; if (!s_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), - out IOrderedEnumerable? preAttributes)) + out IReadOnlyList? preAttributes)) { - preAttributes = + var orderedPreAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.Before) .OrderByDescending(attribute => attribute.Step); - AddGlobalInboxAttributes(ref preAttributes, implicitHandler); + AddGlobalInboxAttributes(ref orderedPreAttributes, implicitHandler); + preAttributes = orderedPreAttributes.ToList().AsReadOnly(); s_preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes); - } var firstInPipeline = PushOntoPipeline(preAttributes, implicitHandler, requestContext, instanceScope); if (!s_postAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), - out IOrderedEnumerable? postAttributes)) + out IReadOnlyList? postAttributes)) { postAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.After) - .OrderByDescending(attribute => attribute.Step); + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); + + s_postAttributesMemento.TryAdd(implicitHandler.Name.ToString(), postAttributes); } AppendToPipeline(postAttributes, implicitHandler, requestContext, instanceScope); @@ -315,29 +308,33 @@ private IHandleRequestsAsync BuildAsyncPipeline(RequestHandlerAsync? preAttributes)) + if (!s_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IReadOnlyList? preAttributes)) { - preAttributes = + var orderedPreAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.Before) .OrderByDescending(attribute => attribute.Step); - AddGlobalInboxAttributesAsync(ref preAttributes, implicitHandler); + AddGlobalInboxAttributesAsync(ref orderedPreAttributes, implicitHandler); + preAttributes = orderedPreAttributes.ToList().AsReadOnly(); s_preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes); - } var firstInPipeline = PushOntoAsyncPipeline(preAttributes, implicitHandler, requestContext, instanceScope, continueOnCapturedContext); - if (!s_postAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IOrderedEnumerable? postAttributes)) + if (!s_postAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out IReadOnlyList? postAttributes)) { postAttributes = implicitHandler.FindHandlerMethod() .GetOtherHandlersInPipeline() .Where(attribute => attribute.Timing == HandlerTiming.After) - .OrderByDescending(attribute => attribute.Step); + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); + + s_postAttributesMemento.TryAdd(implicitHandler.Name.ToString(), postAttributes); } AppendToAsyncPipeline(postAttributes, implicitHandler, requestContext, instanceScope); diff --git a/src/Paramore.Brighter/TransformPipelineBuilder.cs b/src/Paramore.Brighter/TransformPipelineBuilder.cs index 3329b35205..f8d829a6f3 100644 --- a/src/Paramore.Brighter/TransformPipelineBuilder.cs +++ b/src/Paramore.Brighter/TransformPipelineBuilder.cs @@ -53,12 +53,13 @@ public partial class TransformPipelineBuilder private readonly IAmAMessageTransformerFactory _messageTransformerFactory; private readonly InstrumentationOptions _instrumentationOptions; - //GLOBAL! Cache of message mapper transform attributes. This will not be recalculated post start up. Method to clear cache below (if a broken test brought you here). - private static readonly ConcurrentDictionary> s_wrapTransformsMemento = - new ConcurrentDictionary>(); + //GLOBAL cache of message mapper transform attributes — derived from reflection so immutable post-startup. + //Values are materialized into IReadOnlyList<> so concurrent reads are thread-safe. + private static readonly ConcurrentDictionary> s_wrapTransformsMemento = + new ConcurrentDictionary>(); - private static readonly ConcurrentDictionary> s_unWrapTransformsMemento = - new ConcurrentDictionary>(); + private static readonly ConcurrentDictionary> s_unWrapTransformsMemento = + new ConcurrentDictionary>(); /// /// Creates an instance of a transform pipeline builder. @@ -220,12 +221,6 @@ private IEnumerable BuildTransformPipeline(IEnum return new TransformPipelineDescription(mapperType, isDefault, wrapTransforms, unwrapTransforms); } - public static void ClearPipelineCache() - { - s_wrapTransformsMemento.Clear(); - s_unWrapTransformsMemento.Clear(); - } - private IAmAMessageMapper FindMessageMapper() where TRequest : class, IRequest { var messageMapper = _mapperRegistry.Get(); @@ -233,14 +228,16 @@ private IAmAMessageMapper FindMessageMapper() where TRequest return messageMapper; } - private IOrderedEnumerable FindWrapTransforms(IAmAMessageMapper messageMapper) where T : class, IRequest + private IReadOnlyList FindWrapTransforms(IAmAMessageMapper messageMapper) where T : class, IRequest { var key = messageMapper.GetType().Name; - if (!s_wrapTransformsMemento.TryGetValue(key, out IOrderedEnumerable? transformAttributes)) + if (!s_wrapTransformsMemento.TryGetValue(key, out IReadOnlyList? transformAttributes)) { transformAttributes = FindMapToMessage(messageMapper) .GetOtherWrapsInPipeline() - .OrderByDescending(attribute => attribute.Step); + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); s_wrapTransformsMemento.TryAdd(key, transformAttributes); } @@ -248,14 +245,16 @@ private IOrderedEnumerable FindWrapTransforms(IAmAMessageM return transformAttributes; } - private IOrderedEnumerable FindUnwrapTransforms(IAmAMessageMapper messageMapper) where T : class, IRequest + private IReadOnlyList FindUnwrapTransforms(IAmAMessageMapper messageMapper) where T : class, IRequest { var key = messageMapper.GetType().Name; - if (!s_unWrapTransformsMemento.TryGetValue(key, out IOrderedEnumerable? transformAttributes)) + if (!s_unWrapTransformsMemento.TryGetValue(key, out IReadOnlyList? transformAttributes)) { transformAttributes = FindMapToRequest(messageMapper) .GetOtherUnwrapsInPipeline() - .OrderByDescending(attribute => attribute.Step); + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); s_unWrapTransformsMemento.TryAdd(key, transformAttributes); } diff --git a/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs b/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs index 1934bd203e..7b6fb023e4 100644 --- a/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs +++ b/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs @@ -53,12 +53,13 @@ public partial class TransformPipelineBuilderAsync private readonly IAmAMessageTransformerFactoryAsync _messageTransformerFactoryAsync; private readonly InstrumentationOptions _instrumentationOptions; - //GLOBAL! Cache of message mapper transform attributes. This will not be recalculated post start up. Method to clear cache below (if a broken test brought you here). - private static readonly ConcurrentDictionary> s_wrapTransformsMemento = - new ConcurrentDictionary>(); + //GLOBAL cache of message mapper transform attributes — derived from reflection so immutable post-startup. + //Values are materialized into IReadOnlyList<> so concurrent reads are thread-safe. + private static readonly ConcurrentDictionary> s_wrapTransformsMemento = + new ConcurrentDictionary>(); - private static readonly ConcurrentDictionary> s_unWrapTransformsMemento = - new ConcurrentDictionary>(); + private static readonly ConcurrentDictionary> s_unWrapTransformsMemento = + new ConcurrentDictionary>(); /// /// Creates an instance of a transform pipeline builder. @@ -183,12 +184,6 @@ private IEnumerable BuildTransformPipeline( return transforms; } - public static void ClearPipelineCache() - { - s_wrapTransformsMemento.Clear(); - s_unWrapTransformsMemento.Clear(); - } - private IAmAMessageMapperAsync FindMessageMapper() where TRequest : class, IRequest { var messageMapper = _mapperRegistryAsync.GetAsync(); @@ -196,20 +191,38 @@ private IAmAMessageMapperAsync FindMessageMapper() where TRe return messageMapper; } - private IOrderedEnumerable FindWrapTransforms(IAmAMessageMapperAsync messageMapper) where T : class, IRequest + private IReadOnlyList FindWrapTransforms(IAmAMessageMapperAsync messageMapper) where T : class, IRequest { var key = messageMapper.GetType().Name; - return s_wrapTransformsMemento.GetOrAdd(key, s => FindMapToMessage(messageMapper) - .GetOtherWrapsInPipeline() - .OrderByDescending(attribute => attribute.Step)); + if (!s_wrapTransformsMemento.TryGetValue(key, out IReadOnlyList? transformAttributes)) + { + transformAttributes = FindMapToMessage(messageMapper) + .GetOtherWrapsInPipeline() + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); + + s_wrapTransformsMemento.TryAdd(key, transformAttributes); + } + + return transformAttributes; } - private IOrderedEnumerable FindUnwrapTransforms(IAmAMessageMapperAsync messageMapper) where T : class, IRequest + private IReadOnlyList FindUnwrapTransforms(IAmAMessageMapperAsync messageMapper) where T : class, IRequest { var key = messageMapper.GetType().Name; - return s_unWrapTransformsMemento.GetOrAdd(key, s => FindMapToRequest(messageMapper) - .GetOtherUnwrapsInPipeline() - .OrderByDescending(attribute => attribute.Step)); + if (!s_unWrapTransformsMemento.TryGetValue(key, out IReadOnlyList? transformAttributes)) + { + transformAttributes = FindMapToRequest(messageMapper) + .GetOtherUnwrapsInPipeline() + .OrderByDescending(attribute => attribute.Step) + .ToList() + .AsReadOnly(); + + s_unWrapTransformsMemento.TryAdd(key, transformAttributes); + } + + return transformAttributes; } private MethodInfo FindMapToMessage(IAmAMessageMapperAsync messageMapper) where TRequest : class, IRequest diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index b7c2d28040..f1044fd592 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -1,6 +1,7 @@ false + enable net9.0;net10.0 net9.0 true diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs index 56690adc44..3d58d01085 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Net.Http; using System.Text.Json; @@ -27,7 +27,6 @@ public class LargeMessagePaylodUnwrapTests : IAsyncDisposable public LargeMessagePaylodUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( null, diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs index 1ec692ec15..48616fa4a3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Amazon.S3; @@ -29,7 +29,6 @@ public class LargeMessagePayloadWrapTests : IAsyncDisposable public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync( diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs index feddf1c569..05a71e3f1a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Net.Http; using System.Text.Json; @@ -27,7 +27,6 @@ public class LargeMessagePaylodUnwrapTests : IAsyncDisposable public LargeMessagePaylodUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( null, diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs index f005a63492..c0e2ed766e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Amazon.S3; @@ -29,7 +29,6 @@ public class LargeMessagePayloadWrapTests : IAsyncDisposable public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync( diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs index e9ae33bef7..e1908ff8a0 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using Azure.Identity; using Azure.Storage.Blobs; using Paramore.Brighter.Azure.Tests.Helpers; @@ -30,7 +30,6 @@ public LargeMessagePayloadAUnwrapTests() Credential = new AzureCliCredential() }); - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs index daa6963e8d..28f9c3a515 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using Azure.Identity; using Azure.Storage.Blobs; using Paramore.Brighter.Azure.Tests.Helpers; @@ -31,7 +31,6 @@ public LargeMessagePayloadAUnwrapAsyncTests() Credential = new AzureCliCredential() }); - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs index 9683941f5d..f84915d61c 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using Azure.Identity; +using Azure.Identity; using Azure.Storage.Blobs; using Paramore.Brighter.Azure.Tests.Helpers; using Paramore.Brighter.Azure.Tests.TestDoubles; @@ -22,7 +22,6 @@ public class LargeMessagePayloadWrapTests : IDisposable public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs index 8ebeeed9d1..16c64dd8aa 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using Azure.Identity; +using Azure.Identity; using Azure.Storage.Blobs; using Paramore.Brighter.Azure.Tests.Helpers; using Paramore.Brighter.Azure.Tests.TestDoubles; @@ -23,7 +23,6 @@ public class LargeMessagePayloadAsyncWrapTests : IDisposable public LargeMessagePayloadAsyncWrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs index 3ac0476d6c..81cba2f016 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs @@ -1,129 +1,105 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; - public class ServiceBusMessageStoreArchiverTests { private readonly InMemoryOutbox _outbox; private readonly InMemoryArchiveProvider _archiveProvider; private readonly FakeTimeProvider _timeProvider; private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly OutboxArchiver _archiver; - + private readonly OutboxArchiver _archiver; public ServiceBusMessageStoreArchiverTests() { _timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(_timeProvider){Tracer = tracer, EntryTimeToLive = TimeSpan.FromMinutes(30)}; + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer, + EntryTimeToLive = TimeSpan.FromMinutes(30) + }; _archiveProvider = new InMemoryArchiveProvider(); - - _archiver = new OutboxArchiver( - _outbox, - _archiveProvider - ); - + _archiver = new OutboxArchiver(_outbox, _archiveProvider); } - [Fact] - public void When_Archiving_All_Messages_From_The_Outbox() + [Test] + public async Task When_Archiving_All_Messages_From_The_Outbox() { //arrange var context = new RequestContext(); - var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageOne, context); _outbox.MarkDispatched(messageOne.Id, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageTwo, context); _outbox.MarkDispatched(messageTwo.Id, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageThree, context); _outbox.MarkDispatched(messageThree.Id, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromMinutes(15)); - _archiver.Archive(TimeSpan.FromMilliseconds(500), context); - //assert - Assert.Equal(0, _outbox.EntryCount); - Assert.Contains(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(0); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] - public void When_Archiving_Some_Messages_From_The_Outbox() + [Test] + public async Task When_Archiving_Some_Messages_From_The_Outbox() { //arrange var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageOne, context); _outbox.MarkDispatched(messageOne.Id, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageTwo, context); _outbox.MarkDispatched(messageTwo.Id, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageThree, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromSeconds(30)); - _archiver.Archive(TimeSpan.FromSeconds(30), context); - //assert - Assert.Equal(1, _outbox.EntryCount); - Assert.Contains(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(1); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] - public void When_Archiving_No_Messages_From_The_Outbox() + [Test] + public async Task When_Archiving_No_Messages_From_The_Outbox() { var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageOne, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageTwo, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); _outbox.Add(messageThree, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); _archiver.Archive(TimeSpan.FromMilliseconds(20000), context); - //assert - Assert.Equal(3, _outbox.EntryCount); - Assert.DoesNotContain(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(3); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] - public void When_Archiving_An_Empty_The_Outbox() + [Test] + public async Task When_Archiving_An_Empty_The_Outbox() { var context = new RequestContext(); _archiver.Archive(TimeSpan.FromMilliseconds(20000), context); - //assert - Assert.Equal(0, _outbox.EntryCount); + await Assert.That(_outbox.EntryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox_Async.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox_Async.cs index 91c1e1b278..f1fdce1f8b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox_Async.cs @@ -1,33 +1,31 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; - public class ServiceBusMessageStoreArchiverTestsAsync { private readonly InMemoryOutbox _outbox; private readonly InMemoryArchiveProvider _archiveProvider; private readonly FakeTimeProvider _timeProvider; private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly OutboxArchiver _archiver; - + private readonly OutboxArchiver _archiver; public ServiceBusMessageStoreArchiverTestsAsync() { _timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(_timeProvider){Tracer = tracer}; + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; _archiveProvider = new InMemoryArchiveProvider(); - _archiver = new OutboxArchiver(_outbox, _archiveProvider); - } - [Fact] + [Test] public async Task When_Archiving_Old_Messages_From_The_Outbox() { //arrange @@ -35,30 +33,24 @@ public async Task When_Archiving_Old_Messages_From_The_Outbox() var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageOne, context); await _outbox.MarkDispatchedAsync(messageOne.Id, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageTwo, context); await _outbox.MarkDispatchedAsync(messageTwo.Id, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageThree, context); await _outbox.MarkDispatchedAsync(messageThree.Id, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromSeconds(30)); - await _archiver.ArchiveAsync(TimeSpan.FromSeconds(15), context); - //assert - Assert.Equal(0, _outbox.EntryCount); - Assert.Contains(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(0); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] + [Test] public async Task When_Archiving_Some_Messages_From_The_Outbox() { //arrange @@ -66,64 +58,51 @@ public async Task When_Archiving_Some_Messages_From_The_Outbox() var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageOne, context); await _outbox.MarkDispatchedAsync(messageOne.Id, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageTwo, context); await _outbox.MarkDispatchedAsync(messageTwo.Id, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageThree, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromSeconds(30)); - await _archiver.ArchiveAsync(TimeSpan.FromSeconds(15), context); - //assert - Assert.Equal(1, _outbox.EntryCount); - Assert.Contains(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.Contains(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(1); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] + [Test] public async Task When_Archiving_No_Messages_From_The_Outbox() { //arrange var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageOne, context); - var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageTwo, context); - var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); await _outbox.AddAsync(messageThree, context); - //act - Assert.Equal(3, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(3); await _archiver.ArchiveAsync(TimeSpan.FromMilliseconds(20000), context); - //assert - Assert.Equal(3, _outbox.EntryCount); - Assert.DoesNotContain(new KeyValuePair(messageOne.Id, messageOne), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageTwo.Id, messageTwo), _archiveProvider.ArchivedMessages); - Assert.DoesNotContain(new KeyValuePair(messageThree.Id, messageThree), _archiveProvider.ArchivedMessages); + await Assert.That(_outbox.EntryCount).IsEqualTo(3); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageOne.Id, messageOne)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageTwo.Id, messageTwo)); + await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageThree.Id, messageThree)); } - [Fact] + [Test] public async Task When_Archiving_An_Empty_Outbox() { //arrange var context = new RequestContext(); - //act await _archiver.ArchiveAsync(TimeSpan.FromMilliseconds(20000), context); - //assert - Assert.Equal(0, _outbox.EntryCount); + await Assert.That(_outbox.EntryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CircuitBreaker/When_Cooldown_On_TrippedTopic.cs b/tests/Paramore.Brighter.Core.Tests/CircuitBreaker/When_Cooldown_On_TrippedTopic.cs index 6c09bb1aad..745d26e70c 100644 --- a/tests/Paramore.Brighter.Core.Tests/CircuitBreaker/When_Cooldown_On_TrippedTopic.cs +++ b/tests/Paramore.Brighter.Core.Tests/CircuitBreaker/When_Cooldown_On_TrippedTopic.cs @@ -1,40 +1,33 @@ -using Paramore.Brighter.CircuitBreaker; -using Xunit; +using Paramore.Brighter.CircuitBreaker; namespace Paramore.Brighter.Core.Tests.CircuitBreaker { public class CircuitBreakerTests { - [Fact] - public void When_TripTopic_Then_TrippedTopics_Must_Contain_Topic() + [Test] + public async Task When_TripTopic_Then_TrippedTopics_Must_Contain_Topic() { // Arrange var trippedTopic = new RoutingKey("topic"); - var circuitBreaker = new InMemoryOutboxCircuitBreaker( - new OutboxCircuitBreakerOptions() { CooldownCount = 1 }); - + var circuitBreaker = new InMemoryOutboxCircuitBreaker(new OutboxCircuitBreakerOptions() { CooldownCount = 1 }); // Act circuitBreaker.TripTopic(trippedTopic); - // Assert - Assert.Contains(trippedTopic, circuitBreaker.TrippedTopics); + await Assert.That(circuitBreaker.TrippedTopics).Contains(trippedTopic); } - [Fact] - public void When_Cooldown_Decrements_CooldownCount_Then_TrippedTopicRemoved() + [Test] + public async Task When_Cooldown_Decrements_CooldownCount_Then_TrippedTopicRemoved() { // Arrange var trippedTopic = new RoutingKey("topic"); - var circuitBreaker = new InMemoryOutboxCircuitBreaker( - new OutboxCircuitBreakerOptions() { CooldownCount = 1 }); + var circuitBreaker = new InMemoryOutboxCircuitBreaker(new OutboxCircuitBreakerOptions() { CooldownCount = 1 }); circuitBreaker.TripTopic(trippedTopic); - // Act circuitBreaker.CoolDown(); circuitBreaker.CoolDown(); - // Assert - Assert.Empty(circuitBreaker.TrippedTopics); + await Assert.That(circuitBreaker.TrippedTopics).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_creating_luggagestore_missing_parameters.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_creating_luggagestore_missing_parameters.cs index c25bc40b96..bc249065ef 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_creating_luggagestore_missing_parameters.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_creating_luggagestore_missing_parameters.cs @@ -1,21 +1,18 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - public class LuggageUploadMissingParametersTests { - [Theory] - [InlineData("")] - [InlineData(null)] - public void When_creating_luggagestore_missing_pathName(string? bucketName) + [Test] + [Arguments("")] + [Arguments(null)] + public async Task When_creating_luggagestore_missing_pathName(string? bucketName) { //arrange var exception = Catch.Exception(() => new FileSystemStorageProvider(new FileSystemOptions(bucketName!))); - - Assert.NotNull(exception); - Assert.True(exception is ArgumentException); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception is ArgumentException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs index d4aeeb5ade..9b847eb937 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs @@ -1,88 +1,65 @@ -using System; +using System; using System.IO; using System.Text.Json; using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LargeMessagePayloadUnwrapTests : IDisposable +public class LargeMessagePayloadUnwrapTests { private readonly TransformPipelineBuilder _pipelineBuilder; private readonly string _bucketName; private readonly FileSystemStorageProvider _luggageStore; - public LargeMessagePayloadUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), - null - ); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), null); mapperRegistry.Register(); - _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; _luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{_bucketName}")); - _luggageStore.EnsureStoreExists(); - - var messageTransformerFactory = - new SimpleMessageTransformerFactory(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); - + var messageTransformerFactory = new SimpleMessageTransformerFactory(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - [Fact] - public void When_unwrapping_a_large_message() + [Test] + public async Task When_unwrapping_a_large_message() { //arrange - //store our luggage and get the claim check var contents = DataGenerator.CreateString(6000); - var myCommand = new MyLargeCommand(1) { Value = contents }; - var commandAsJson = - JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); - + var myCommand = new MyLargeCommand(1) + { + Value = contents + }; + var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); writer.Write(commandAsJson); writer.Flush(); stream.Position = 0; var id = _luggageStore.Store(stream); - //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; - //set the headers, so that we have a claim check listed - var message = new Message( - new MessageHeader(myCommand.Id, new RoutingKey("MyLargeCommand"), MessageType.MT_COMMAND, - timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, - new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + var message = new Message(new MessageHeader(myCommand.Id, new RoutingKey("MyLargeCommand"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act var transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var transformedMessage = transformPipeline.Unwrap(message, new RequestContext()); - //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(_luggageStore.HasClaim(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(_luggageStore.HasClaim(id)).IsFalse(); } + [After(Test)] public void Dispose() { //The bucket should be empty, allowing us to delete it Directory.Delete($"./{_bucketName}", true); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message_async.cs index 92fe7fcdf5..9077fa8202 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; @@ -7,84 +7,61 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LargeMessagePayloadAsyncUnwrapTests : IDisposable +public class LargeMessagePayloadAsyncUnwrapTests { private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly string _bucketName; private readonly FileSystemStorageProvider _luggageStore; - public LargeMessagePayloadAsyncUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync()) - ); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; _luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{_bucketName}")); - _luggageStore.EnsureStoreExists(); - - var messageTransformerFactory = - new SimpleMessageTransformerFactoryAsync(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); - + var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message_async() { //arrange - //store our luggage and get the claim check var contents = DataGenerator.CreateString(6000); - var myCommand = new MyLargeCommand(1) { Value = contents }; - var commandAsJson = - JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); - + var myCommand = new MyLargeCommand(1) + { + Value = contents + }; + var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); await writer.WriteAsync(commandAsJson); await writer.FlushAsync(); stream.Position = 0; string id = await _luggageStore.StoreAsync(stream); - - //pretend we ran through the claim check - myCommand.Value = $"Claim Check {id}"; - + //pretend we ran through the claim check + myCommand.Value = $"Claim Check {id}"; //set the headers, so that we have a claim check listed - var message = new Message( - new MessageHeader(myCommand.Id, new RoutingKey("MyLargeCommand"), MessageType.MT_COMMAND, - timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, - new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + var message = new Message(new MessageHeader(myCommand.Id, new RoutingKey("MyLargeCommand"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act var transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var transformedMessage = await transformPipeline.UnwrapAsync(message, new RequestContext()); - //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(await _luggageStore.HasClaimAsync(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(await _luggageStore.HasClaimAsync(id)).IsFalse(); } + [After(Test)] public void Dispose() { //The bucket should be empty, allowing us to delete it Directory.Delete($"./{_bucketName}", true); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs index 4df444aac0..dbfcc4f0ac 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs @@ -1,50 +1,36 @@ -using System; +using System; using System.IO; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LuggageStoreExistsTests +public class LuggageStoreExistsTests { - [Fact] - public void When_checking_store_that_exists() + [Test] + public async Task When_checking_store_that_exists() { var pathName = $"brightertestbucket-{Guid.NewGuid()}"; - //arrange var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); - luggageStore.EnsureStoreExists(); - //act luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); - - Assert.NotNull(luggageStore); - + await Assert.That(luggageStore).IsNotNull(); //teardown Directory.Delete($"./{pathName}"); } - - [Fact] - public void When_checking_store_that_does_not_exist_async() + + [Test] + public async Task When_checking_store_that_does_not_exist_async() { - var pathName = $"brightertestbucket-{Guid.NewGuid()}"; - //act - var doesNotExist = Catch.Exception(() => - { - var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}") - { - Strategy = StorageStrategy.Validate - }); - - luggageStore.EnsureStoreExists(); - }); - - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + var doesNotExist = Catch.Exception(() => + { + var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}") { Strategy = StorageStrategy.Validate }); + luggageStore.EnsureStoreExists(); + }); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists_async.cs index 60fb4717c6..a93b8f614d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists_async.cs @@ -1,50 +1,37 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LuggageStoreExistsAsyncTests +public class LuggageStoreExistsAsyncTests { - [Fact] + [Test] public async Task When_checking_store_that_exists_async() { var pathName = $"brightertestbucket-{Guid.NewGuid()}"; - //arrange var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); - await luggageStore.EnsureStoreExistsAsync(); - //act luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); - - Assert.NotNull(luggageStore); - + await Assert.That(luggageStore).IsNotNull(); //teardown Directory.Delete($"./{pathName}"); } - - [Fact] + + [Test] public async Task When_checking_store_that_does_not_exist_async() { - var pathName = $"brightertestbucket-{Guid.NewGuid()}"; - //act - var doesNotExist = await Catch.ExceptionAsync(async () => - { - var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}") - { - Strategy = StorageStrategy.Validate - }); - await luggageStore.EnsureStoreExistsAsync(); - }); - - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + var doesNotExist = await Catch.ExceptionAsync(async () => + { + var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}") { Strategy = StorageStrategy.Validate }); + await luggageStore.EnsureStoreExistsAsync(); + }); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs index 0edbc3164b..a137fdb087 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs @@ -1,13 +1,11 @@ -using System; +using System; using System.IO; using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LargeMessagePayloadWrapTests : IDisposable +public class LargeMessagePayloadWrapTests { private string? _id; private WrapPipeline? _transformPipeline; @@ -16,50 +14,39 @@ public class LargeMessagePayloadWrapTests : IDisposable private readonly FileSystemStorageProvider _luggageStore; private readonly string _bucketName; private readonly Publication _publication; - public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); - - var mapperRegistry = - new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), - null - ); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyLargeCommand(6000); - _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; _luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{_bucketName}")); - _luggageStore.EnsureStoreExists(); - var transformerFactoryAsync = new SimpleMessageTransformerFactory(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); - - _publication = new Publication { Topic = new RoutingKey("MyLargeCommand"), RequestType = typeof(MyLargeCommand) }; - + _publication = new Publication + { + Topic = new RoutingKey("MyLargeCommand"), + RequestType = typeof(MyLargeCommand) + }; _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, transformerFactoryAsync); } - [Fact] - public void When_wrapping_a_large_message() + [Test] + public async Task When_wrapping_a_large_message() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); - //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); - - Assert.True(_luggageStore.HasClaim(_id)); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); + await Assert.That(_luggageStore.HasClaim(_id)).IsTrue(); } + [After(Test)] public void Dispose() { //We have to empty objects from a bucket before deleting it @@ -67,7 +54,7 @@ public void Dispose() { _luggageStore.Delete(_id); } - + Directory.Delete($"./{_bucketName}"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message_async.cs index f17ee96eae..213676c322 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message_async.cs @@ -1,15 +1,13 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Observability; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.FileSystem; - -public class LargeMessagePayloadAsyncWrapTests : IAsyncDisposable +public class LargeMessagePayloadAsyncWrapTests { private string? _id; private WrapPipelineAsync? _transformPipeline; @@ -18,57 +16,47 @@ public class LargeMessagePayloadAsyncWrapTests : IAsyncDisposable private readonly FileSystemStorageProvider _luggageStore; private readonly string _bucketName; private readonly Publication _publication; - public LargeMessagePayloadAsyncWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); - - var mapperRegistry = - new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync( - _ => new MyLargeCommandMessageMapperAsync()) - ); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyLargeCommand(6000); - _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; _luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{_bucketName}")); - _luggageStore.EnsureStoreExists(); - var transformerFactoryAsync = new SimpleMessageTransformerFactoryAsync(_ => new ClaimCheckTransformer(_luggageStore, _luggageStore)); - - _publication = new Publication { Topic = new RoutingKey("MyLargeCommand"), RequestType = typeof(MyLargeCommand) }; - + _publication = new Publication + { + Topic = new RoutingKey("MyLargeCommand"), + RequestType = typeof(MyLargeCommand) + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, transformerFactoryAsync, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_wrapping_a_large_message_async() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); - - Assert.True(await _luggageStore.HasClaimAsync(_id)); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } - public async ValueTask DisposeAsync() + [After(Test)] + public async Task DisposeAsync() { - //We have to empty objects from a bucket before deleting it + //We have to empty objects from a bucket before deleting it if (_id != null) { await _luggageStore.DeleteAsync(_id); } - + Directory.Delete($"./{_bucketName}"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs index 68fa6895b1..8b5156c6ed 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs @@ -1,41 +1,33 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class ClaimCheckSmallPayloadTests { private readonly ClaimCheckTransformer _transformer; private readonly Message _message; private readonly RoutingKey _topic = new("test_topic"); - public ClaimCheckSmallPayloadTests() { //arrange InMemoryStorageProvider store = new(); _transformer = new ClaimCheckTransformer(store, store); - //set the threshold to 5K _transformer.InitializeWrapFromAttributeParams(5); - //but create a string that is just under 5K long - assuming string is 26 + length *2 to allow for 64-bit platform string body = DataGenerator.CreateString(2485); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(body)); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(body)); } - [Fact] - public void When_a_message_is_under_the_threshold() + [Test] + public async Task When_a_message_is_under_the_threshold() { - var luggageCheckedMessage = _transformer.Wrap(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var luggageCheckedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = luggageCheckedMessage.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); - Assert.False(hasLuggage); - Assert.Null(luggageCheckedMessage.Header.DataRef); + await Assert.That(hasLuggage).IsFalse(); + await Assert.That(luggageCheckedMessage.Header.DataRef).IsNull(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold_async.cs index 4166fde306..86fc335b7d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold_async.cs @@ -1,42 +1,33 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncClaimCheckSmallPayloadTests { private readonly ClaimCheckTransformer _transformerAsync; private readonly Message _message; private readonly RoutingKey _topic = new("test_topic"); - public AsyncClaimCheckSmallPayloadTests() { //arrange InMemoryStorageProvider store = new(); _transformerAsync = new ClaimCheckTransformer(store, store); - //set the threshold to 5K _transformerAsync.InitializeWrapFromAttributeParams(5); - //but create a string that is just under 5K long - assuming string is 26 + length *2 to allow for 64-bit platform string body = DataGenerator.CreateString(2485); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(body)); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(body)); } - [Fact] + [Test] public async Task When_a_message_is_under_the_threshold() { - var luggageCheckedMessage = await _transformerAsync.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var luggageCheckedMessage = await _transformerAsync.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = luggageCheckedMessage.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); - - Assert.False(hasLuggage); + await Assert.That(hasLuggage).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs index 104a23ce26..8ca1667642 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs @@ -1,18 +1,15 @@ -using System; +using System; using System.IO; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class RetrieveClaimLargePayloadTests { private readonly InMemoryStorageProvider _store; private readonly ClaimCheckTransformer _transformerAsync; private readonly string _contents; - public RetrieveClaimLargePayloadTests() { _store = new InMemoryStorageProvider(); @@ -22,8 +19,8 @@ public RetrieveClaimLargePayloadTests() _contents = DataGenerator.CreateString(6000); } - [Fact] - public void When_a_message_unwraps_a_large_payload() + [Test] + public async Task When_a_message_unwraps_a_large_payload() { //arrange var stream = new MemoryStream(); @@ -31,23 +28,16 @@ public void When_a_message_unwraps_a_large_payload() writer.Write(_contents); writer.Flush(); stream.Position = 0; - var id = _store.Store(stream); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody($"Claim Check {id}")); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody($"Claim Check {id}")); message.Header.DataRef = id; - //act var unwrappedMessage = _transformerAsync.Unwrap(message); - //assert - Assert.Equal(_contents, unwrappedMessage.Body.Value); - + await Assert.That(unwrappedMessage.Body.Value).IsEqualTo(_contents); //clean up - Assert.Null(message.Header.DataRef); - Assert.False(message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _)); - Assert.False(_store.HasClaim(id)); + await Assert.That(message.Header.DataRef).IsNull(); + await Assert.That(message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _)).IsFalse(); + await Assert.That(_store.HasClaim(id)).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload_async.cs index 58326cc034..a77c8684cb 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload_async.cs @@ -1,19 +1,16 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncRetrieveClaimLargePayloadTests { private readonly InMemoryStorageProvider _store; private readonly ClaimCheckTransformer _transformerAsync; private readonly string _contents; - public AsyncRetrieveClaimLargePayloadTests() { _store = new InMemoryStorageProvider(); @@ -23,7 +20,7 @@ public AsyncRetrieveClaimLargePayloadTests() _contents = DataGenerator.CreateString(6000); } - [Fact] + [Test] public async Task When_a_message_unwraps_a_large_payload() { //arrange @@ -32,24 +29,17 @@ public async Task When_a_message_unwraps_a_large_payload() await writer.WriteAsync(_contents); await writer.FlushAsync(); stream.Position = 0; - var id = await _store.StoreAsync(stream); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody("Claim Check {id}")); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody("Claim Check {id}")); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act var unwrappedMessage = await _transformerAsync.UnwrapAsync(message); - //assert - Assert.Equal(_contents, unwrappedMessage.Body.Value); + await Assert.That(unwrappedMessage.Body.Value).IsEqualTo(_contents); //clean up - Assert.Null(message.Header.DataRef); - Assert.False(message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _)); - Assert.False(await _store.HasClaimAsync(id)); + await Assert.That(message.Header.DataRef).IsNull(); + await Assert.That(message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _)).IsFalse(); + await Assert.That(await _store.HasClaimAsync(id)).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs index 433ce5d62e..6c07bee288 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs @@ -1,12 +1,10 @@ -using System; +using System; using System.IO; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class ClaimCheckLargePayloadTests { private readonly ClaimCheckTransformer _transformer; @@ -14,36 +12,26 @@ public class ClaimCheckLargePayloadTests private readonly string _body; private readonly InMemoryStorageProvider _store; private readonly RoutingKey _topic = new("test_topic"); - public ClaimCheckLargePayloadTests() { //arrange _store = new InMemoryStorageProvider(); _transformer = new ClaimCheckTransformer(_store, new InMemoryStorageProvider()); _transformer.InitializeWrapFromAttributeParams(5); - _body = DataGenerator.CreateString(6000); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(_body)); - + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(_body)); } - [Fact] - public void When_a_message_wraps_a_large_payload() + [Test] + public async Task When_a_message_wraps_a_large_payload() { //act - var luggageCheckedMessage = _transformer.Wrap(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var luggageCheckedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = !string.IsNullOrEmpty(luggageCheckedMessage.Header.DataRef); - - Assert.True(hasLuggage); - + await Assert.That(hasLuggage).IsTrue(); var claimCheck = luggageCheckedMessage.Header.DataRef; - var luggage = new StreamReader(_store.Retrieve(claimCheck)).ReadToEnd(); - - Assert.Equal(_body, luggage); + await Assert.That(luggage).IsEqualTo(_body); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload_async.cs index 5ac942dd7d..d5bfb79146 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload_async.cs @@ -1,13 +1,11 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncClaimCheckLargePayloadTests { private readonly ClaimCheckTransformer _transformerAsync; @@ -15,36 +13,27 @@ public class AsyncClaimCheckLargePayloadTests private readonly string _body; private readonly InMemoryStorageProvider _store; private readonly RoutingKey _topic = new("test_topic"); - public AsyncClaimCheckLargePayloadTests() { //arrange _store = new InMemoryStorageProvider(); _transformerAsync = new ClaimCheckTransformer(_store, _store); _transformerAsync.InitializeWrapFromAttributeParams(5); - _body = DataGenerator.CreateString(6000); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(_body)); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(_body)); } - [Fact] + [Test] public async Task When_a_message_wraps_a_large_payload() { //act - var luggageCheckedMessage = await _transformerAsync.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var luggageCheckedMessage = await _transformerAsync.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = luggageCheckedMessage.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out var storedData); - - Assert.True(hasLuggage); - Assert.Equal(luggageCheckedMessage.Header.DataRef, storedData); - + await Assert.That(hasLuggage).IsTrue(); + await Assert.That(storedData).IsEqualTo(luggageCheckedMessage.Header.DataRef); var claimCheck = (string)storedData!; - var luggage = await new StreamReader(await _store.RetrieveAsync(claimCheck)).ReadToEndAsync(); - - Assert.Equal(_body, luggage); + await Assert.That(luggage).IsEqualTo(_body); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs index ee736a5502..3446699f20 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs @@ -1,29 +1,25 @@ -using System; +using System; using System.IO; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class RetrieveClaimLeaveLuggage { private readonly InMemoryStorageProvider _store; private readonly ClaimCheckTransformer _transformer; private readonly string _contents; - public RetrieveClaimLeaveLuggage() { _store = new InMemoryStorageProvider(); _transformer = new ClaimCheckTransformer(_store, _store); _transformer.InitializeUnwrapFromAttributeParams(true); - _contents = DataGenerator.CreateString(6000); } - [Fact] - public void When_luggage_should_be_kept_in_the_store() + [Test] + public async Task When_luggage_should_be_kept_in_the_store() { //arrange var stream = new MemoryStream(); @@ -31,21 +27,15 @@ public void When_luggage_should_be_kept_in_the_store() writer.WriteAsync(_contents); writer.FlushAsync(); stream.Position = 0; - var id = _store.Store(stream); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody($"Claim Check {id}")); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody($"Claim Check {id}")); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act _ = _transformer.Unwrap(message); - //assert bool hasLuggage = message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); - Assert.True(hasLuggage); - Assert.True(_store.HasClaim(id)); + await Assert.That(hasLuggage).IsTrue(); + await Assert.That(_store.HasClaim(id)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store_async.cs index 202969244c..43cc909d97 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store_async.cs @@ -1,29 +1,25 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncRetrieveClaimLeaveLuggage { private readonly InMemoryStorageProvider _store; private readonly ClaimCheckTransformer _transformerAsync; private readonly string _contents; - public AsyncRetrieveClaimLeaveLuggage() { _store = new InMemoryStorageProvider(); _transformerAsync = new ClaimCheckTransformer(_store, _store); _transformerAsync.InitializeUnwrapFromAttributeParams(true); - _contents = DataGenerator.CreateString(6000); } - [Fact] + [Test] public async Task When_luggage_should_be_kept_in_the_store() { //arrange @@ -32,21 +28,15 @@ public async Task When_luggage_should_be_kept_in_the_store() await writer.WriteAsync(_contents); await writer.FlushAsync(); stream.Position = 0; - var id = await _store.StoreAsync(stream); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody("Claim Check {id}")); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody("Claim Check {id}")); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act var unwrappedMessage = await _transformerAsync.UnwrapAsync(message); - //assert bool hasLuggage = message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); - Assert.True(hasLuggage); - Assert.True(await _store.HasClaimAsync(id)); + await Assert.That(hasLuggage).IsTrue(); + await Assert.That(await _store.HasClaimAsync(id)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs index 953699d2e3..9806f1d41f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs @@ -1,69 +1,54 @@ -using System; +using System; using System.IO; using System.Text.Json; using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class LargeMessagePaylodUnwrapTests { private readonly TransformPipelineBuilder _pipelineBuilder; private readonly InMemoryStorageProvider _inMemoryStorageProvider; - public LargeMessagePaylodUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), null); mapperRegistry.Register(); - _inMemoryStorageProvider = new InMemoryStorageProvider(); var messageTransformerFactory = new SimpleMessageTransformerFactory(_ => new ClaimCheckTransformer(_inMemoryStorageProvider, _inMemoryStorageProvider)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - [Fact] - public void When_unwrapping_a_large_message() + [Test] + public async Task When_unwrapping_a_large_message() { //arrange //store our luggage and get the claim check var contents = DataGenerator.CreateString(6000); - var myCommand = new MyLargeCommand(1) { Value = contents }; + var myCommand = new MyLargeCommand(1) + { + Value = contents + }; var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); - var stream = new MemoryStream(); var writer = new StreamWriter(stream); writer.Write(commandAsJson); writer.Flush(); stream.Position = 0; var id = _inMemoryStorageProvider.Store(stream); - //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; - //set the headers, so that we have a claim check listed - var message = new Message( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + var message = new Message(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.DataRef = id; - //act var transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var transformedMessage = transformPipeline.Unwrap(message, new RequestContext()); - //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(_inMemoryStorageProvider.HasClaim(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(_inMemoryStorageProvider.HasClaim(id)).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message_async.cs index 50eac06b41..ce14263588 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; @@ -7,67 +7,51 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncLargeMessagePaylodUnwrapTests { private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly InMemoryStorageProvider _inMemoryStorageProviderAsync; - public AsyncLargeMessagePaylodUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync()) - ); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _inMemoryStorageProviderAsync = new InMemoryStorageProvider(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync(_ => new ClaimCheckTransformer(_inMemoryStorageProviderAsync, _inMemoryStorageProviderAsync)); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message() { //arrange //store our luggage and get the claim check var contents = DataGenerator.CreateString(6000); - var myCommand = new MyLargeCommand(1) { Value = contents }; + var myCommand = new MyLargeCommand(1) + { + Value = contents + }; var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); - var stream = new MemoryStream(); var writer = new StreamWriter(stream); await writer.WriteAsync(commandAsJson); await writer.FlushAsync(); stream.Position = 0; var id = await _inMemoryStorageProviderAsync.StoreAsync(stream); - //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; - //set the headers, so that we have a claim check listed - var message = new Message( - new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + var message = new Message(new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; - //act var transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var transformedMessage = await transformPipeline.UnwrapAsync(message, new RequestContext()); - //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(await _inMemoryStorageProviderAsync.HasClaimAsync(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(await _inMemoryStorageProviderAsync.HasClaimAsync(id)).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs index 1ef2c07778..949f013ab9 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs @@ -1,10 +1,8 @@ -using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; +using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class LargeMessagePayloadWrapTests { private WrapPipeline _transformPipeline; @@ -12,39 +10,31 @@ public class LargeMessagePayloadWrapTests private readonly MyLargeCommand _myCommand; private InMemoryStorageProvider _inMemoryStorageProvider; private readonly Publication _publication; - public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), null); mapperRegistry.Register(); - - _publication = new Publication{Topic = new RoutingKey("transform.event")}; - + _publication = new Publication + { + Topic = new RoutingKey("transform.event") + }; _myCommand = new MyLargeCommand(6000); - _inMemoryStorageProvider = new InMemoryStorageProvider(); - var messageTransformerFactory = new SimpleMessageTransformerFactory( - _ => new ClaimCheckTransformer(_inMemoryStorageProvider, _inMemoryStorageProvider)); - + var messageTransformerFactory = new SimpleMessageTransformerFactory(_ => new ClaimCheckTransformer(_inMemoryStorageProvider, _inMemoryStorageProvider)); _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - [Fact] - public void When_wrapping_a_large_message() + [Test] + public async Task When_wrapping_a_large_message() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); - //assert var id = message.Header.DataRef; - Assert.False(string.IsNullOrEmpty(id)); - Assert.Equal($"Claim Check {id}", message.Body.Value); - Assert.True(_inMemoryStorageProvider.HasClaim(id)); + await Assert.That(string.IsNullOrEmpty(id)).IsFalse(); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {id}"); + await Assert.That(_inMemoryStorageProvider.HasClaim(id)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message_async.cs index cdd0bd95c3..e84b95ddf4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message_async.cs @@ -1,12 +1,10 @@ -using System.Threading.Tasks; +using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Claims.Test_Doubles; using Paramore.Brighter.Observability; using Paramore.Brighter.Transforms.Storage; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Claims.InMemory; - public class AsyncLargeMessagePayloadWrapTests { private WrapPipelineAsync _transformPipeline; @@ -14,40 +12,32 @@ public class AsyncLargeMessagePayloadWrapTests private readonly MyLargeCommand _myCommand; private readonly InMemoryStorageProvider _inMemoryStorageProviderAsync; private readonly Publication _publication; - public AsyncLargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyLargeCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyLargeCommand(6000); - _inMemoryStorageProviderAsync = new InMemoryStorageProvider(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync( - _ => new ClaimCheckTransformer(_inMemoryStorageProviderAsync, _inMemoryStorageProviderAsync)); - - _publication = new Publication { Topic = new RoutingKey("MyLargeCommand") }; - + var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync(_ => new ClaimCheckTransformer(_inMemoryStorageProviderAsync, _inMemoryStorageProviderAsync)); + _publication = new Publication + { + Topic = new RoutingKey("MyLargeCommand") + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_wrapping_a_large_message() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.Equal(message.Header.DataRef, message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]); - var id = (string) message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {id}", message.Body.Value); - Assert.True(await _inMemoryStorageProviderAsync.HasClaimAsync(id)); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]).IsEqualTo(message.Header.DataRef); + var id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {id}"); + await Assert.That(await _inMemoryStorageProviderAsync.HasClaimAsync(id)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs b/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs index 9c32adfc87..fd69633829 100644 --- a/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net.Mime; using System.Text.Json; @@ -6,214 +6,232 @@ using Paramore.Brighter.Core.Tests.JsonMapper.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessageMappers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CloudEvents; - public class CloudEventJsonMessageMapperTests { - [Fact] - public void When_mapping_command_to_message() + [Test] + public async Task When_mapping_command_to_message() { var mapper = new CloudEventJsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = mapper.MapToMessage(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(message.Id, body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(command.Value, body.Data.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo(message.Id); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(command.Value); } - [Fact] + [Test] public async Task When_mapping_command_to_message_async() { var mapper = new CloudEventJsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = await mapper.MapToMessageAsync(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(message.Id, body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(command.Value, body.Data.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo(message.Id); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(command.Value); } - [Fact] - public void When_mapping_event_to_message() + [Test] + public async Task When_mapping_event_to_message() { var mapper = new CloudEventJsonMessageMapper(); - var @event = new MyEvent { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var @event = new MyEvent + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = mapper.MapToMessage(@event, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, @event.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(message.Id, body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(@event.Value, body.Data.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(@event.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo(message.Id); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(@event.Value); } - [Fact] + [Test] public async Task When_mapping_event_to_message_async() { var mapper = new CloudEventJsonMessageMapper(); - var @event = new MyEvent { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var @event = new MyEvent + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = await mapper.MapToMessageAsync(@event, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, @event.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(message.Id, body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(@event.Value, body.Data.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(@event.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo(message.Id); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(@event.Value); } - [Fact] - public void When_mapping_request_to_message_should_throw_ArgumentNullException() + [Test] + public async Task When_mapping_request_to_message_should_throw_ArgumentNullException() { var mapper = new CloudEventJsonMessageMapper(); - var request = new MyRequest { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - - Assert.Throws(() => mapper.MapToMessage(request, publication)); + var request = new MyRequest + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; + await Assert.That(() => mapper.MapToMessage(request, publication)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_mapping_request_to_message_should_throw_ArgumentNullException_async() { var mapper = new CloudEventJsonMessageMapper(); - var request = new MyRequest { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - - await Assert.ThrowsAsync(() => mapper.MapToMessageAsync(request, publication)); + var request = new MyRequest + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; + await Assert.That(() => mapper.MapToMessageAsync(request, publication)).ThrowsExactly(); } - [Fact] - public void When_mapping_command_to_message_with_additional_properties() + [Test] + public async Task When_mapping_command_to_message_with_additional_properties() { var mapper = new CloudEventJsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var extraProperty = new Dictionary { ["test"] = Guid.NewGuid().ToString() }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var extraProperty = new Dictionary + { + ["test"] = Guid.NewGuid().ToString() + }; var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()), CloudEventsAdditionalProperties = extraProperty }; - var message = mapper.MapToMessage(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(message.Id, body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(command.Value, body.Data.Value); - Assert.NotNull(body.AdditionalProperties); - Assert.Single(body.AdditionalProperties); - Assert.Equal(extraProperty["test"], body.AdditionalProperties["test"]); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo(message.Id); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(command.Value); + await Assert.That(body.AdditionalProperties).IsNotNull(); + await Assert.That(body.AdditionalProperties).HasSingleItem(); + await Assert.That(body.AdditionalProperties["test"]).IsEqualTo(extraProperty["test"]); } - - [Fact] - public void When_mapping_command_to_message_with_duplicated_additional_properties() + + [Test] + public async Task When_mapping_command_to_message_with_duplicated_additional_properties() { var mapper = new CloudEventJsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var extraProperty = new Dictionary { ["id"] = "test-id" }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var extraProperty = new Dictionary + { + ["id"] = "test-id" + }; var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()), CloudEventsAdditionalProperties = extraProperty }; - var message = mapper.MapToMessage(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType("application/cloudevents+json"), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - - var body = JsonSerializer.Deserialize.CloudEventMessage>( - message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal("test-id", body.Id); - Assert.Equal("application/json", body.DataContentType); - Assert.Equal(command.Value, body.Data.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); + var body = JsonSerializer.Deserialize.CloudEventMessage>(message.Body.Bytes, JsonSerialisationOptions.Options); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Id).IsEqualTo("test-id"); + await Assert.That(body.DataContentType).IsEqualTo("application/json"); + await Assert.That(body.Data.Value).IsEqualTo(command.Value); } - [Fact] - public void When_mapping_message_to_command() + [Test] + public async Task When_mapping_message_to_command() { - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; var mapper = new CloudEventJsonMessageMapper(); - - var request = - mapper.MapToRequest(new Message(new MessageHeader(), - new MessageBody( - JsonSerializer.Serialize(new CloudEventJsonMessageMapper.CloudEventMessage - { - Data = command - })))); - Assert.NotNull(request); - Assert.Equal(command.Value, request.Value); + var request = mapper.MapToRequest(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(new CloudEventJsonMessageMapper.CloudEventMessage { Data = command })))); + await Assert.That(request).IsNotNull(); + await Assert.That(request.Value).IsEqualTo(command.Value); } - [Fact] + [Test] public async Task When_mapping_message_to_command_async() { - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; var mapper = new CloudEventJsonMessageMapper(); - - var request = await mapper.MapToRequestAsync(new Message(new MessageHeader(), - new MessageBody( - JsonSerializer.Serialize( - new CloudEventJsonMessageMapper.CloudEventMessage { Data = command })))); - - Assert.NotNull(request); - Assert.Equal(command.Value, request.Value); + var request = await mapper.MapToRequestAsync(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(new CloudEventJsonMessageMapper.CloudEventMessage { Data = command })))); + await Assert.That(request).IsNotNull(); + await Assert.That(request.Value).IsEqualTo(command.Value); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs b/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs index 5607f9309b..6370599e10 100644 --- a/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs +++ b/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Collections.Generic; using System.Text.Json; @@ -6,11 +6,9 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CloudEvents; - -public class CloudEventsTransformerTests +public class CloudEventsTransformerTests { private readonly CloudEventsTransformer _transformer = new(); private readonly Uri _source = new("http://goparamore.io/CloudEventsTransformerTests"); @@ -18,155 +16,107 @@ public class CloudEventsTransformerTests private readonly Uri _dataSchema = new Uri("http://goparamore.io/CloudEventsTransformerTests/schema"); private readonly string _subject = "CloudEventsTransformerTests"; private Message _message; - public CloudEventsTransformerTests() { - _message = new( - new MessageHeader(Id.Random(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND, contentType: new ContentType(MediaTypeNames.Text.Plain), - source: _source, subject: _subject, type: _type, dataSchema: _dataSchema), new MessageBody("test content", contentType: new ContentType(MediaTypeNames.Text.Plain)) - ); + _message = new(new MessageHeader(Id.Random(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND, contentType: new ContentType(MediaTypeNames.Text.Plain), source: _source, subject: _subject, type: _type, dataSchema: _dataSchema), new MessageBody("test content", contentType: new ContentType(MediaTypeNames.Text.Plain))); } - [Fact] - public void When_a_message_uses_cloud_events_via_attribute() + [Test] + public async Task When_a_message_uses_cloud_events_via_attribute() { //act var body = _message.Body; _transformer.InitializeWrapFromAttributeParams(_source.ToString(), _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Binary); - var cloudEvents = _transformer.Wrap(_message, new Publication - { - DataSchema = _dataSchema, - Source = _source, - Type = _type, - Subject = _subject - }); - + var cloudEvents = _transformer.Wrap(_message, new Publication { DataSchema = _dataSchema, Source = _source, Type = _type, Subject = _subject }); //assert - Assert.Equal(_source, cloudEvents.Header.Source); - Assert.Equal(_type, cloudEvents.Header.Type); - Assert.Equal(_message.Header.ContentType, cloudEvents.Header.ContentType!); - Assert.Equal(_dataSchema, cloudEvents.Header.DataSchema); - Assert.Equal(_subject, cloudEvents.Header.Subject); - Assert.Equal(body.Bytes, cloudEvents.Body.Bytes); + await Assert.That(cloudEvents.Header.Source).IsEqualTo(_source); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(_type); + await Assert.That(cloudEvents.Header.ContentType!).IsEqualTo(_message.Header.ContentType); + await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); + await Assert.That(cloudEvents.Body.Bytes).IsEqualTo(body.Bytes); } - - [Fact] - public void When_a_message_uses_cloud_events_via_attribute_and_format_as_json() + + [Test] + public async Task When_a_message_uses_cloud_events_via_attribute_and_format_as_json() { //act var body = _message.Body; _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - var cloudEvents = _transformer.Wrap(_message, new Publication - { - DataSchema = _dataSchema, - Source = _source, - Type = _type, - Subject = _subject - }); - + var cloudEvents = _transformer.Wrap(_message, new Publication { DataSchema = _dataSchema, Source = _source, Type = _type, Subject = _subject }); //assert - Assert.Equal(_source, cloudEvents.Header.Source); - Assert.Equal(_type, cloudEvents.Header.Type); - Assert.Equal(new ContentType("application/cloudevents+json"), cloudEvents.Header.ContentType); - Assert.Equal(_dataSchema, cloudEvents.Header.DataSchema); - Assert.Equal(_subject, cloudEvents.Header.Subject); - Assert.NotEqual(body.Bytes, cloudEvents.Body.Bytes); - + await Assert.That(cloudEvents.Header.Source).IsEqualTo(_source); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(_type); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); + await Assert.That(cloudEvents.Body.Bytes).IsNotEqualTo(body.Bytes); var json = JsonSerializer.Deserialize(cloudEvents.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(json); - Assert.Equal(_source, json.Source); - Assert.Equal(_type, json.Type); - Assert.Equal(new ContentType(MediaTypeNames.Text.Plain).MediaType, json.DataContentType); - Assert.Equal(_dataSchema, json.DataSchema); - Assert.Equal(_subject, json.Subject); - Assert.Equal(body.Value, json.Data?.GetString()); + await Assert.That(json).IsNotNull(); + await Assert.That(json.Source).IsEqualTo(_source); + await Assert.That(json.Type).IsEqualTo(_type); + await Assert.That(json.DataContentType).IsEqualTo(new ContentType(MediaTypeNames.Text.Plain).MediaType); + await Assert.That(json.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(json.Subject).IsEqualTo(_subject); + await Assert.That(json.Data?.GetString()).IsEqualTo(body.Value); } - - [Fact] - public void When_a_empty_message_uses_cloud_events_via_attribute_and_format_as_json() + + [Test] + public async Task When_a_empty_message_uses_cloud_events_via_attribute_and_format_as_json() { //act - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), - new MessageBody([]) ); - + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), new MessageBody([])); var body = _message.Body; - _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - var cloudEvents = _transformer.Wrap(_message, new Publication - { - DataSchema = _dataSchema, - Source = _source, - Type = _type, - Subject = _subject - }); - + _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); + var cloudEvents = _transformer.Wrap(_message, new Publication { DataSchema = _dataSchema, Source = _source, Type = _type, Subject = _subject }); //assert - Assert.Equal(_source, cloudEvents.Header.Source); - Assert.Equal(_type, cloudEvents.Header.Type); - Assert.Equal(new ContentType("application/cloudevents+json"), cloudEvents.Header.ContentType); - Assert.Equal(_dataSchema, cloudEvents.Header.DataSchema); - Assert.Equal(_subject, cloudEvents.Header.Subject); - Assert.NotEqual(body.Bytes, cloudEvents.Body.Bytes); - + await Assert.That(cloudEvents.Header.Source).IsEqualTo(_source); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(_type); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); + await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); + await Assert.That(cloudEvents.Body.Bytes).IsNotEqualTo(body.Bytes); var json = JsonSerializer.Deserialize(cloudEvents.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(json); - Assert.Equal(_source, json.Source); - Assert.Equal(_type, json.Type); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}.ToString(), json.DataContentType); - Assert.Equal(_dataSchema, json.DataSchema); - Assert.Equal(_subject, json.Subject); - Assert.Null(json.Data); + await Assert.That(json).IsNotNull(); + await Assert.That(json.Source).IsEqualTo(_source); + await Assert.That(json.Type).IsEqualTo(_type); + await Assert.That(json.DataContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); + await Assert.That(json.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(json.Subject).IsEqualTo(_subject); + await Assert.That(json.Data).IsNull(); } - - [Fact] - public void When_a_non_json_message_uses_cloud_events_via_attribute_and_format_as_json() + + [Test] + public async Task When_a_non_json_message_uses_cloud_events_via_attribute_and_format_as_json() { //act - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), - new MessageBody("teste")); - + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), new MessageBody("teste")); var body = _message.Body; _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - var cloudEvents = _transformer.Wrap(_message, new Publication - { - DataSchema = _dataSchema, - Source = _source, - Type = _type, - Subject = _subject - }); - + var cloudEvents = _transformer.Wrap(_message, new Publication { DataSchema = _dataSchema, Source = _source, Type = _type, Subject = _subject }); //assert - Assert.Equal(_source, cloudEvents.Header.Source); - Assert.Equal(_type, cloudEvents.Header.Type); - Assert.Equal(_message.Header.ContentType, cloudEvents.Header.ContentType); - Assert.Equal(_dataSchema, cloudEvents.Header.DataSchema); - Assert.Equal(_subject, cloudEvents.Header.Subject); - Assert.Equal(body.Bytes, cloudEvents.Body.Bytes); + await Assert.That(cloudEvents.Header.Source).IsEqualTo(_source); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(_type); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); + await Assert.That(cloudEvents.Body.Bytes).IsEqualTo(body.Bytes); } - - [Fact] - public void When_a_message_uses_cloud_events_via_a_publication() + + [Test] + public async Task When_a_message_uses_cloud_events_via_a_publication() { //act - var cloudEvents = _transformer.Wrap(_message, new Publication - { - Source = _source, - Type = _type, - DataSchema = _dataSchema, - Subject = _subject - }); - + var cloudEvents = _transformer.Wrap(_message, new Publication { Source = _source, Type = _type, DataSchema = _dataSchema, Subject = _subject }); //assert - Assert.Equal(_source, cloudEvents.Header.Source); - Assert.Equal(_type, cloudEvents.Header.Type); - Assert.Equal(_dataSchema.AbsoluteUri, cloudEvents.Header.DataSchema!.AbsoluteUri); - Assert.Equal(_subject, cloudEvents.Header.Subject); - + await Assert.That(cloudEvents.Header.Source).IsEqualTo(_source); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(_type); + await Assert.That(cloudEvents.Header.DataSchema!.AbsoluteUri).IsEqualTo(_dataSchema.AbsoluteUri); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); } - - [Fact] - public void When_a_message_uses_cloud_events_and_a_publication_and_format_as_binary() + + [Test] + public async Task When_a_message_uses_cloud_events_and_a_publication_and_format_as_binary() { //arrange var publication = new Publication @@ -176,34 +126,27 @@ public void When_a_message_uses_cloud_events_and_a_publication_and_format_as_bin DataSchema = _dataSchema, Subject = _subject }; - //These attributes override the publication values above const string source = "http://goparamore.io/OverrideSource"; const string type = "goparamore.io/OverrideType"; //Should use a string, as we want to pass these as constants in the attribute string dataSchema = "http://goparamore.io/CloudEventsTransformerOverride/schema"; - const string subject = "CloudEventsTransformerAlternative"; - + const string subject = "CloudEventsTransformerAlternative"; //act - _transformer.InitializeWrapFromAttributeParams(source, type, null, dataSchema, subject, CloudEventFormat.Binary); - + _transformer.InitializeWrapFromAttributeParams(source, type, null, dataSchema, subject, CloudEventFormat.Binary); var cloudEvents = _transformer.Wrap(_message, publication); - //assert - Assert.Equal(source, cloudEvents.Header.Source.ToString()); - Assert.Equal(type, cloudEvents.Header.Type); - Assert.Equal(_message.Header.ContentType, cloudEvents.Header.ContentType); - Assert.Equal(dataSchema, cloudEvents.Header.DataSchema!.AbsoluteUri); - Assert.Equal(subject, cloudEvents.Header.Subject); - + await Assert.That(cloudEvents.Header.Source.ToString()).IsEqualTo(source); + await Assert.That(cloudEvents.Header.Type.Value).IsEqualTo(type); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(cloudEvents.Header.DataSchema!.AbsoluteUri).IsEqualTo(dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(subject); } - - - [Fact] - public void When_a_message_uses_cloud_events_and_a_publication_and_format_as_json() + + [Test] + public async Task When_a_message_uses_cloud_events_and_a_publication_and_format_as_json() { //arrange - var publication = new Publication { Source = _source, @@ -211,189 +154,151 @@ public void When_a_message_uses_cloud_events_and_a_publication_and_format_as_jso DataSchema = _dataSchema, Subject = _subject }; - //These attributes override the publication values above const string source = "http://goparamore.io/OverrideSource"; const string type = "goparamore.io/OverrideType"; const string dataContentType = MediaTypeNames.Text.Plain; var cloudEventDataContentType = new ContentType("application/cloudevents+json"); const string dataSchema = "http://goparamore.io/CloudEventsTransformerOverride/schema"; - const string subject = "CloudEventsTransformerAlternative"; + const string subject = "CloudEventsTransformerAlternative"; var body = _message.Body; - //act - _transformer.InitializeWrapFromAttributeParams(source, type, null, dataSchema, subject, CloudEventFormat.Json); - + _transformer.InitializeWrapFromAttributeParams(source, type, null, dataSchema, subject, CloudEventFormat.Json); var cloudEvents = _transformer.Wrap(_message, publication); - //assert - Assert.Equal(source, cloudEvents.Header.Source.ToString()); - Assert.Equal(type, cloudEvents.Header.Type); - Assert.Equal(cloudEventDataContentType, cloudEvents.Header.ContentType); - Assert.Equal(dataSchema, cloudEvents.Header.DataSchema!.ToString()); - Assert.Equal(subject, cloudEvents.Header.Subject); - Assert.NotEqual(body.Bytes, cloudEvents.Body.Bytes); - + await Assert.That(cloudEvents.Header.Source.ToString()).IsEqualTo(source); + await Assert.That(cloudEvents.Header.Type.Value).IsEqualTo(type); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(cloudEventDataContentType); + await Assert.That(cloudEvents.Header.DataSchema!.ToString()).IsEqualTo(dataSchema); + await Assert.That(cloudEvents.Header.Subject).IsEqualTo(subject); + await Assert.That(cloudEvents.Body.Bytes).IsNotEqualTo(body.Bytes); var json = JsonSerializer.Deserialize(cloudEvents.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(json); - Assert.Equal(source, json.Source.ToString()); - Assert.Equal(type, json.Type); - Assert.Equal(dataContentType, json.DataContentType); - Assert.Equal(dataSchema, json.DataSchema!.ToString()); - Assert.Equal(subject, json.Subject); - Assert.Equal(body.Value, json.Data?.GetString()); + await Assert.That(json).IsNotNull(); + await Assert.That(json.Source.ToString()).IsEqualTo(source); + await Assert.That(json.Type).IsEqualTo(type); + await Assert.That(json.DataContentType).IsEqualTo(dataContentType); + await Assert.That(json.DataSchema!.ToString()).IsEqualTo(dataSchema); + await Assert.That(json.Subject).IsEqualTo(subject); + await Assert.That(json.Data?.GetString()).IsEqualTo(body.Value); } - - [Fact] - public void When_a_message_uses_cloud_events_but_no_publication_or_arguments() + + [Test] + public async Task When_a_message_uses_cloud_events_but_no_publication_or_arguments() { //arrange var publication = new Publication { - //no cloud events properties set + //no cloud events properties set }; - //These attributes override the publication values above - //act var cloudEvents = _transformer.Wrap(_message, publication); - //assert - Assert.Equal(new Uri("http://goparamore.io"), cloudEvents.Header.Source); - Assert.Equal( CloudEventsType.Empty, cloudEvents.Header.Type); - Assert.Equal(new ContentType(MediaTypeNames.Text.Plain), cloudEvents.Header.ContentType); - Assert.Null(cloudEvents.Header.DataSchema); - Assert.Null(cloudEvents.Header.Subject); + await Assert.That(cloudEvents.Header.Source).IsEqualTo(new Uri("http://goparamore.io")); + await Assert.That(cloudEvents.Header.Type).IsEqualTo(CloudEventsType.Empty); + await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Text.Plain)); + await Assert.That(cloudEvents.Header.DataSchema).IsNull(); + await Assert.That(cloudEvents.Header.Subject).IsNull(); } - - [Fact] - public void When_unwrap_a_message_with_binary_format() + + [Test] + public async Task When_unwrap_a_message_with_binary_format() { //arrange - _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Binary); - + _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Binary); // act var message = _transformer.Unwrap(_message); - - Assert.Equal(_message.Header.Source, message.Header.Source); - Assert.Equal(_message.Header.Type, message.Header.Type); - Assert.Equal(_message.Header.ContentType, message.Header.ContentType); - Assert.Equal(_message.Header.DataSchema, message.Header.DataSchema); - Assert.Equal(_message.Header.Subject, message.Header.Subject); - Assert.Equal(_message.Body.Bytes, message.Body.Bytes); + await Assert.That(message.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(message.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); } - - [Fact] - public void When_unwrap_a_message_with_binary_format_and_wrap_before() + + [Test] + public async Task When_unwrap_a_message_with_binary_format_and_wrap_before() { //arrange var publication = new Publication { - //no cloud events properties set + //no cloud events properties set }; - - _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Binary); - var cloudEvents = _transformer.Wrap(_message, publication); - - // act - var message = _transformer.Unwrap(cloudEvents); - - Assert.Equal(_source, message.Header.Source); - Assert.Equal(CloudEventsType.Empty, message.Header.Type); - Assert.Equal(_dataSchema, message.Header.DataSchema); - Assert.Equal(_subject, message.Header.Subject); - Assert.Equal(_message.Body.Bytes, message.Body.Bytes); + _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Binary); + var cloudEvents = _transformer.Wrap(_message, publication); + // act + var message = _transformer.Unwrap(cloudEvents); + await Assert.That(message.Header.Source).IsEqualTo(_source); + await Assert.That(message.Header.Type).IsEqualTo(CloudEventsType.Empty); + await Assert.That(message.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(message.Header.Subject).IsEqualTo(_subject); + await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); } - - [Fact] - public void When_unwrap_a_message_with_json_format_and_provided_message_is_not_json() + + [Test] + public async Task When_unwrap_a_message_with_json_format_and_provided_message_is_not_json() { //arrange - _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), - new MessageBody("teste")); - + _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), new MessageBody("teste")); // act var message = _transformer.Unwrap(_message); - - Assert.Equal(_message.Header.Source, message.Header.Source); - Assert.Equal(_message.Header.Type, message.Header.Type); - Assert.Equal(_message.Header.ContentType, message.Header.ContentType); - Assert.Equal(_message.Header.DataSchema, message.Header.DataSchema); - Assert.Equal(_message.Header.Subject, message.Header.Subject); - Assert.Equal(_message.Body.Bytes, message.Body.Bytes); + await Assert.That(message.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(message.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); } - - [Fact] - public void When_unwrap_a_message_with_json_format_and_provided_message_is_not_cloud_event_json() + + [Test] + public async Task When_unwrap_a_message_with_json_format_and_provided_message_is_not_cloud_event_json() { //arrange _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - // act var message = _transformer.Unwrap(_message); - - Assert.Equal(_message.Header.Source, message.Header.Source); - Assert.Equal(_message.Header.Type, message.Header.Type); - Assert.Equal(_message.Header.ContentType, message.Header.ContentType); - Assert.Equal(_message.Header.DataSchema, message.Header.DataSchema); - Assert.Equal(_message.Header.Subject, message.Header.Subject); - Assert.Equal(_message.Body.Bytes, message.Body.Bytes); + await Assert.That(message.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(message.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); } - - [Fact] - public void When_unwrap_a_message_with_json_format_and_provided_message_has_no_body() + + [Test] + public async Task When_unwrap_a_message_with_json_format_and_provided_message_has_no_body() { //arrange - _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), - new MessageBody([]) ); - - var cloudEventsMessage = _transformer.Wrap(_message, new Publication - { - DataSchema = _dataSchema, - Source = _source, - Type = _type, - Subject = _subject - }); - + _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("Test Topic"), MessageType.MT_COMMAND), new MessageBody([])); + var cloudEventsMessage = _transformer.Wrap(_message, new Publication { DataSchema = _dataSchema, Source = _source, Type = _type, Subject = _subject }); // act var unwrap = _transformer.Unwrap(cloudEventsMessage); - - Assert.Equal(_message.Header.Source, unwrap.Header.Source); - Assert.Equal(_message.Header.Type, unwrap.Header.Type); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, unwrap.Header.ContentType); - Assert.Equal(_message.Header.DataSchema, unwrap.Header.DataSchema); - Assert.Equal(_message.Header.Subject, unwrap.Header.Subject); - Assert.Equal([], unwrap.Body.Bytes); + await Assert.That(unwrap.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(unwrap.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(unwrap.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(unwrap.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(unwrap.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(unwrap.Body.Bytes).IsEqualTo([]); } - - [Fact] - public void When_unwrap_a_message_with_json_format() + + [Test] + public async Task When_unwrap_a_message_with_json_format() { //arrange _transformer.InitializeWrapFromAttributeParams(_source.AbsoluteUri, _type, null, _dataSchema.ToString(), _subject, CloudEventFormat.Json); var body = _message.Body; - var cloudEventsMessage = _transformer.Wrap(_message, new Publication - { - CloudEventsAdditionalProperties = new Dictionary - { - ["test"] = "test-header" - } - }); - + var cloudEventsMessage = _transformer.Wrap(_message, new Publication { CloudEventsAdditionalProperties = new Dictionary { ["test"] = "test-header" } }); // act var unwrap = _transformer.Unwrap(cloudEventsMessage); - - Assert.Equal(_message.Header.Source, unwrap.Header.Source); - Assert.Equal(_message.Header.Type, unwrap.Header.Type); - Assert.Equal(new ContentType(MediaTypeNames.Text.Plain), unwrap.Header.ContentType); - Assert.Equal(_message.Header.DataSchema, unwrap.Header.DataSchema); - Assert.Equal(_message.Header.Subject, unwrap.Header.Subject); - Assert.Equal(body.Bytes, unwrap.Body.Bytes); - Assert.Single(unwrap.Header.Bag); - Assert.Equal("test-header", unwrap.Header.Bag["test"]); + await Assert.That(unwrap.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(unwrap.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(unwrap.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Text.Plain)); + await Assert.That(unwrap.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(unwrap.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(unwrap.Body.Bytes).IsEqualTo(body.Bytes); + await Assert.That(unwrap.Header.Bag).HasSingleItem(); + await Assert.That(unwrap.Header.Bag["test"]).IsEqualTo("test-header"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor.cs index 44a4d8d651..b12f3418a2 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Polly.Registry; using Polly.Retry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Call { @@ -17,100 +16,56 @@ public class CommandProcessorCallTests { private readonly CommandProcessor _commandProcessor; private readonly MyRequest _myRequest = new(); - private readonly InternalBus _bus = new() ; + private readonly InternalBus _bus = new(); private readonly MessageMapperRegistry _messageMapperRegistry; private readonly RoutingKey _routingKey; - public CommandProcessorCallTests() { - var timeProvider = new FakeTimeProvider(); _routingKey = new RoutingKey("MyRequest"); - var messageProducer = new InMemoryMessageProducer(_bus, new Publication{Topic = _routingKey, RequestType = typeof(MyRequest)}); - + var messageProducer = new InMemoryMessageProducer(_bus, new Publication { Topic = _routingKey, RequestType = typeof(MyRequest) }); _messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyRequestMessageMapper)) return new MyRequestMessageMapper(); if (type == typeof(MyResponseMessageMapper)) return new MyResponseMessageMapper(); - throw new ConfigurationException($"No mapper found for {type.Name}"); }), null); _messageMapperRegistry.Register(); _messageMapperRegistry.Register(); - var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyResponseHandler()); - var internalBus = new InternalBus(); InMemoryChannelFactory inMemoryChannelFactory = new(internalBus, TimeProvider.System); - var replySubs = new List { new Subscription() }; - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); var tracer = new BrighterTracer(); - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - _messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - new InMemoryOutbox(timeProvider){Tracer = tracer}); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - replySubscriptions:replySubs, - responseChannelFactory: inMemoryChannelFactory, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); - + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, _messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), new InMemoryOutbox(timeProvider) { Tracer = tracer }); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, replySubscriptions: replySubs, responseChannelFactory: inMemoryChannelFactory, requestSchedulerFactory: new InMemorySchedulerFactory()); _myRequest.RequestValue = "Hello World"; } - [Fact] - public void When_Calling_A_Server_Via_The_Command_Processor() + [Test] + public async Task When_Calling_A_Server_Via_The_Command_Processor() { //start a message pump on a new thread, to recieve the Call message - Channel channel = new( - new("MyChannel"), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messagePump = new Reactor(_commandProcessor, (message) => typeof(MyRequest),_messageMapperRegistry, - new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; - + Channel channel = new(new("MyChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messagePump = new Reactor(_commandProcessor, (message) => typeof(MyRequest), _messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; //RunAsync the pump on a new thread Task.Factory.StartNew(() => messagePump.Run()); - _commandProcessor.Call(_myRequest, timeOut: TimeSpan.FromMilliseconds(500)); - - MyResponseHandler.ShouldReceive(new MyResponse(_myRequest.ReplyAddress) {Id = _myRequest.Id}); - + MyResponseHandler.ShouldReceive(new MyResponse(_myRequest.ReplyAddress) { Id = _myRequest.Id }); channel.Stop(_routingKey); - } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_In_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_In_Mapper.cs index bcc88d3a45..fb64bdeebc 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_In_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_In_Mapper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Call { @@ -15,67 +14,29 @@ public class CommandProcessorNoInMapperTests { private readonly CommandProcessor _commandProcessor; private readonly MyRequest _myRequest = new MyRequest(); - public CommandProcessorNoInMapperTests() { - _myRequest.RequestValue = "Hello World"; - + _myRequest.RequestValue = "Hello World"; var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyRequestMessageMapper()), null); - messageMapperRegistry.Register(); - var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyResponseHandler()); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyRequest"); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{Topic = routingKey, RequestType = typeof(MyRequest)}) - }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyRequest) }) }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - new InMemoryOutbox( timeProvider) {Tracer = tracer} - ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - replySubscriptions:new List(), - responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), - requestSchedulerFactory: new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), new InMemoryOutbox(timeProvider) { Tracer = tracer }); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, replySubscriptions: new List(), responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact] - public void When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper() + [Test] + public async Task When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper() { var exception = Catch.Exception(() => _commandProcessor.Call(_myRequest, new RequestContext(), TimeSpan.FromMilliseconds(500))); - //should throw an exception as we require a mapper for the outgoing request - Assert.IsType(exception); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper.cs index 8b1308d5de..edacaea1e5 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -9,7 +9,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Call { @@ -17,67 +16,33 @@ public class CommandProcessorMissingOutMapperTests { private readonly CommandProcessor _commandProcessor; private readonly MyRequest _myRequest = new MyRequest(); - public CommandProcessorMissingOutMapperTests() { - _myRequest.RequestValue = "Hello World"; - + _myRequest.RequestValue = "Hello World"; var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyResponseMessageMapper()), null); - messageMapperRegistry.Register(); - var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyResponseHandler()); - var replySubs = new List { new Subscription() }; - var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyRequest"); - var producerRegistry = new ProducerRegistry(new Dictionary - { - { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{Topic =routingKey } ) }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey }) }, }); var tracer = new BrighterTracer(timeProvider); - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - new InMemoryOutbox(timeProvider){Tracer = tracer} - ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - replySubscriptions:replySubs, - responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), - requestSchedulerFactory: new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), new InMemoryOutbox(timeProvider) { Tracer = tracer }); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, replySubscriptions: replySubs, responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact] - public void When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper() + [Test] + public async Task When_Calling_A_Server_Via_The_Command_Processor_With_No_Out_Mapper() { var exception = Catch.Exception(() => _commandProcessor.Call(_myRequest, timeOut: TimeSpan.FromMilliseconds(500))); - //should throw an exception as we require a mapper for the outgoing request - Assert.IsType(exception); + await Assert.That(exception).IsTypeOf(); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout.cs index af3ac787d7..f8b5456702 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Call/When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Call { @@ -15,84 +14,42 @@ public class CommandProcessorCallTestsNoTimeout { private readonly CommandProcessor _commandProcessor; private readonly MyRequest _myRequest = new(); - public CommandProcessorCallTestsNoTimeout() { _myRequest.RequestValue = "Hello World"; - var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyRequestMessageMapper)) return new MyRequestMessageMapper(); if (type == typeof(MyResponseMessageMapper)) return new MyResponseMessageMapper(); - throw new ConfigurationException($"No mapper found for {type.Name}"); }), null); - messageMapperRegistry.Register(); messageMapperRegistry.Register(); - var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyResponseHandler()); - var replySubs = new List { new Subscription() }; - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); const string topic = "MyRequest"; var routingKey = new RoutingKey(topic); var fakeTimeProvider = new FakeTimeProvider(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication {Topic = routingKey, RequestType = typeof(MyRequest)}) - } - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyRequest) }) } }); var tracer = new BrighterTracer(fakeTimeProvider); - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - new InMemoryOutbox( fakeTimeProvider) {Tracer = tracer} - ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - replySubscriptions:replySubs, - responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), - requestSchedulerFactory: new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), new InMemoryOutbox(fakeTimeProvider) { Tracer = tracer }); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, replySubscriptions: replySubs, responseChannelFactory: new InMemoryChannelFactory(new InternalBus(), TimeProvider.System), requestSchedulerFactory: new InMemorySchedulerFactory()); } - - [Fact] - public void When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout() + [Test] + public async Task When_Calling_A_Server_Via_The_Command_Processor_With_No_Timeout() { - var exception = Catch.Exception(() => _commandProcessor.Call( - _myRequest, timeOut: TimeSpan.FromMilliseconds(0)) - ); - + var exception = Catch.Exception(() => _commandProcessor.Call(_myRequest, timeOut: TimeSpan.FromMilliseconds(0))); //should throw an exception as we require a timeout to be set - Assert.IsType(exception); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Bulk_Clearing_The_PostBox_On_The_Command_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Bulk_Clearing_The_PostBox_On_The_Command_Processor_Async.cs index 470d0b9eec..157aba8cb5 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Bulk_Clearing_The_PostBox_On_The_Command_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Bulk_Clearing_The_PostBox_On_The_Command_Processor_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,7 +10,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Clear { @@ -22,98 +21,59 @@ public class CommandProcessorPostBoxBulkClearAsyncTests private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); private readonly IAmAnOutboxProducerMediator _mediator; - public CommandProcessorPostBoxBulkClearAsyncTests() { - var myCommand = new MyCommand{ Value = "Hello World"}; - var myCommand2 = new MyCommand { Value = "Hello World 2" }; - + var myCommand = new MyCommand + { + Value = "Hello World" + }; + var myCommand2 = new MyCommand + { + Value = "Hello World 2" + }; var timeProvider = new FakeTimeProvider(); - var routingKey = new RoutingKey("MyCommand"); - - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication{Topic = routingKey, RequestType = typeof(MyCommand)}); - - var routingKeyTwo = new RoutingKey("MyCommand2"); - InMemoryMessageProducer messageProducerTwo = new(_internalBus, new Publication {Topic = routingKeyTwo, RequestType = typeof(MyCommand)}); - - _messageOne = new Message( - new MessageHeader(myCommand.Id, routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - _messageTwo = new Message( - new MessageHeader(myCommand.Id, routingKeyTwo, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand2, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + var routingKeyTwo = new RoutingKey("MyCommand2"); + InMemoryMessageProducer messageProducerTwo = new(_internalBus, new Publication { Topic = routingKeyTwo, RequestType = typeof(MyCommand) }); + _messageOne = new Message(new MessageHeader(myCommand.Id, routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + _messageTwo = new Message(new MessageHeader(myCommand.Id, routingKeyTwo, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand2, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { routingKey, messageProducer }, - { routingKeyTwo, messageProducerTwo } - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, { routingKeyTwo, messageProducerTwo } }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - _mediator = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - _mediator, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + _mediator = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, _mediator, requestSchedulerFactory: new InMemorySchedulerFactory()); } - - [Fact(Skip = "Erratic due to timing")] + [Test, Skip("Erratic due to timing")] public async Task When_Clearing_The_PostBox_On_The_Command_Processor_Async() { var context = new RequestContext(); await _outbox.AddAsync(_messageOne, context); await _outbox.AddAsync(_messageTwo, context); - await _mediator.ClearOutstandingFromOutboxAsync(2, TimeSpan.FromMilliseconds(1), true, context); - await Task.Delay(3000); - //_should_send_a_message_via_the_messaging_gateway var routingKeyOne = new RoutingKey(_messageOne.Header.Topic); - Assert.True(_internalBus.Stream(routingKeyOne).Any()); - + await Assert.That(_internalBus.Stream(routingKeyOne).Any()).IsTrue(); var sentMessage = _internalBus.Dequeue(routingKeyOne); - Assert.NotNull(sentMessage); - Assert.Equal(_messageOne.Id, sentMessage.Id); - Assert.Equal(_messageOne.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_messageOne.Body.Value, sentMessage.Body.Value); - + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_messageOne.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_messageOne.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_messageOne.Body.Value); var routingKeyTwo = new RoutingKey(_messageTwo.Header.Topic); - Assert.True(_internalBus.Stream(routingKeyOne).Any()); - + await Assert.That(_internalBus.Stream(routingKeyOne).Any()).IsTrue(); var sentMessage2 = _internalBus.Dequeue(routingKeyTwo); - Assert.NotNull(sentMessage2); - Assert.Equal(_messageTwo.Id, sentMessage2.Id); - Assert.Equal(_messageTwo.Header.Topic, sentMessage2.Header.Topic); - Assert.Equal(_messageTwo.Body.Value, sentMessage2.Body.Value); + await Assert.That(sentMessage2).IsNotNull(); + await Assert.That(sentMessage2.Id).IsEqualTo(_messageTwo.Id); + await Assert.That(sentMessage2.Header.Topic).IsEqualTo(_messageTwo.Header.Topic); + await Assert.That(sentMessage2.Body.Value).IsEqualTo(_messageTwo.Body.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor _Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor _Async.cs index 6494358ee6..c20ac35516 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor _Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor _Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,7 +10,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Clear { @@ -21,77 +20,42 @@ public class CommandProcessorPostBoxClearAsyncTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorPostBoxClearAsyncTests() { - var myCommand = new MyCommand{ Value = "Hello World"}; - + var myCommand = new MyCommand + { + Value = "Hello World" + }; var timeProvider = new FakeTimeProvider(); InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Clearing_The_PostBox_On_The_Command_Processor_Async() { var context = new RequestContext(); await _outbox.AddAsync(_message, context); - - await _commandProcessor.ClearOutboxAsync(new []{_message.Id}); - + await _commandProcessor.ClearOutboxAsync(new[] { _message.Id }); //_should_send_a_message_via_the_messaging_gateway var topic = new RoutingKey(_routingKey); - - Assert.True(_internalBus.Stream(topic).Any()); - + await Assert.That(_internalBus.Stream(topic).Any()).IsTrue(); var sentMessage = _internalBus.Dequeue(topic); - Assert.NotNull(sentMessage); - Assert.Equal(_message.Id, sentMessage.Id); - Assert.Equal(_message.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_message.Body.Value, sentMessage.Body.Value); + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_message.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs index e47257b400..c24c6f96ec 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs @@ -1,10 +1,8 @@ -#region Licence +#region Licence /* The MIT License (MIT) ... */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -17,7 +15,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Clear { @@ -28,88 +25,56 @@ public class CommandProcessorPostBoxClearTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorPostBoxClearTests() { - var myCommand = new MyCommand{ Value = "Hello World"}; - + var myCommand = new MyCommand + { + Value = "Hello World" + }; var timeProvider = new FakeTimeProvider(); InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - + var retryPolicy = Policy.Handle().Retry(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); var policyRegistry = new PolicyRegistry { - { CommandProcessor.RETRYPOLICY, retryPolicy }, - { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } + { + CommandProcessor.RETRYPOLICY, + retryPolicy + }, + { + CommandProcessor.CIRCUITBREAKER, + circuitBreakerPolicy + } }; - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - policyRegistry, - resiliencePipelineRegistry, - bus, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), policyRegistry, resiliencePipelineRegistry, bus, requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact] - public void When_Clearing_The_PostBox_On_The_Command_Processor() + [Test] + public async Task When_Clearing_The_PostBox_On_The_Command_Processor() { //arrange var context = new RequestContext(); _outbox.Add(_message, context); - - _commandProcessor.ClearOutbox(new []{_message.Id}); - + _commandProcessor.ClearOutbox(new[] { _message.Id }); //_should_send_a_message_via_the_messaging_gateway var topic = new RoutingKey(_routingKey); - Assert.True(_internalBus.Stream(topic).Any()); - + await Assert.That(_internalBus.Stream(topic).Any()).IsTrue(); var sentMessage = _internalBus.Dequeue(topic); - Assert.NotNull(sentMessage); - Assert.Equal(_message.Id, sentMessage.Id); - Assert.Equal(_message.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_message.Body.Value, sentMessage.Body.Value); + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_message.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs index 4ee4fd64ac..fe76fa883c 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -11,7 +11,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Clear { @@ -24,69 +23,36 @@ public class CommandProcessorPostBoxImplicitClearTests private readonly InMemoryOutbox _outbox; private readonly InternalBus _bus = new(); private readonly IAmAnOutboxProducerMediator _mediator; - public CommandProcessorPostBoxImplicitClearTests() { - var myCommand = new MyCommand{ Value = "Hello World"}; - + var myCommand = new MyCommand + { + Value = "Hello World" + }; var timeProvider = new FakeTimeProvider(); InMemoryMessageProducer messageProducer = new(_bus, new Publication { Topic = new RoutingKey(Topic), RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(myCommand.Id, Topic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - _message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), Topic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(myCommand.Id, Topic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + _message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), Topic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { Topic, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { Topic, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(timeProvider){Tracer = tracer}; - - _mediator = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - _mediator, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + _mediator = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, _mediator, requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact(Skip = "Erratic due to timing")] + [Test, Skip("Erratic due to timing")] public async Task When_Implicit_Clearing_The_PostBox_On_The_Command_Processor() { var context = new RequestContext(); _outbox.Add(_message, context); _outbox.Add(_message2, context); - - await _mediator.ClearOutstandingFromOutboxAsync(1,TimeSpan.Zero, true, context); - + await _mediator.ClearOutstandingFromOutboxAsync(1, TimeSpan.Zero, true, context); var topic = new RoutingKey(Topic); for (var i = 1; i <= 10; i++) { @@ -105,19 +71,17 @@ public async Task When_Implicit_Clearing_The_PostBox_On_The_Command_Processor() } //_should_send_a_message_via_the_messaging_gateway - Assert.True(_bus.Stream(topic).Any()); - + await Assert.That(_bus.Stream(topic).Any()).IsTrue(); var sentMessage = _bus.Stream(topic).FirstOrDefault(m => m.Id == _message.Id); - Assert.NotNull(sentMessage); - Assert.Equal(_message.Id, sentMessage.Id); - Assert.Equal(_message.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_message.Body.Value, sentMessage.Body.Value); - + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_message.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); var sentMessage2 = _bus.Stream(topic).FirstOrDefault(m => m.Id == _message2.Id); - Assert.NotNull(sentMessage2); - Assert.Equal(_message2.Id, sentMessage2.Id); - Assert.Equal(_message2.Header.Topic, sentMessage2.Header.Topic); - Assert.Equal(_message2.Body.Value, sentMessage2.Body.Value); + await Assert.That(sentMessage2).IsNotNull(); + await Assert.That(sentMessage2.Id).IsEqualTo(_message2.Id); + await Assert.That(sentMessage2.Header.Topic).IsEqualTo(_message2.Header.Topic); + await Assert.That(sentMessage2.Body.Value).IsEqualTo(_message2.Body.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_Async.cs index 9f0765b8a7..868eff3c4e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_Async.cs @@ -1,10 +1,8 @@ -#region Licence +#region Licence /* The MIT License (MIT) ... */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -17,7 +15,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Clear { @@ -30,77 +27,40 @@ public class CommandProcessorPostBoxImplicitClearAsyncTests private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new("MyCommand"); private readonly IAmAnOutboxProducerMediator _mediator; - public CommandProcessorPostBoxImplicitClearAsyncTests() { - var myCommand = new MyCommand{ Value = "Hello World"}; - + var myCommand = new MyCommand + { + Value = "Hello World" + }; var timeProvider = new FakeTimeProvider(); - - InMemoryMessageProducer messageProducer = new(_bus, new Publication{Topic = _routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - _message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(_bus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + _message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); _outbox = new InMemoryOutbox(timeProvider); - - _mediator = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - new BrighterTracer(timeProvider), - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - _mediator, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); + _mediator = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), new BrighterTracer(timeProvider), new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, _mediator, requestSchedulerFactory: new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_Async() { var context = new RequestContext(); await _outbox.AddAsync(_message, context); await _outbox.AddAsync(_message2, context); - - await _mediator.ClearOutstandingFromOutboxAsync(1,TimeSpan.Zero, true, context); - + await _mediator.ClearOutstandingFromOutboxAsync(1, TimeSpan.Zero, true, context); for (var i = 1; i <= 10; i++) { - if (_bus.Stream(_routingKey).Count() == 1) break; + if (_bus.Stream(_routingKey).Count() == 1) + break; await Task.Delay(i * 100); } await _mediator.ClearOutstandingFromOutboxAsync(1, TimeSpan.Zero, true, context); - //Try again and kick off another background thread for (var i = 1; i <= 10; i++) { @@ -112,19 +72,17 @@ public async Task When_Implicit_Clearing_The_PostBox_On_The_Command_Processor_As //_should_send_a_message_via_the_messaging_gateway var messages = _bus.Stream(_routingKey).ToArray(); - Assert.True(messages.Any()); - + await Assert.That(messages.Any()).IsTrue(); var sentMessage = messages.FirstOrDefault(m => m.Id == _message.Id); - Assert.NotNull(sentMessage); - Assert.Equal(_message.Id, sentMessage.Id); - Assert.Equal(_message.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_message.Body.Value, sentMessage.Body.Value); - + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_message.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); var sentMessage2 = messages.FirstOrDefault(m => m.Id == _message2.Id); - Assert.NotNull(sentMessage2); - Assert.Equal(_message2.Id, sentMessage2.Id); - Assert.Equal(_message2.Header.Topic, sentMessage2.Header.Topic); - Assert.Equal(_message2.Body.Value, sentMessage2.Body.Value); + await Assert.That(sentMessage2).IsNotNull(); + await Assert.That(sentMessage2.Id).IsEqualTo(_message2.Id); + await Assert.That(sentMessage2.Header.Topic).IsEqualTo(_message2.Header.Topic); + await Assert.That(sentMessage2.Body.Value).IsEqualTo(_message2.Body.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs index ed474f221b..7d8b234e29 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Context { @@ -10,7 +9,6 @@ public class ContextBagVisibilityTests private const string I_AM_A_TEST_OF_THE_CONTEXT_BAG = "I am a test of the context bag"; private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand; - public ContextBagVisibilityTests() { var registry = new SubscriberRegistry(); @@ -18,21 +16,17 @@ public ContextBagVisibilityTests() var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); _myCommand = new MyCommand(); MyContextAwareCommandHandler.TestString = null; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler() + [Test] + public async Task When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler() { var requestContext = new RequestContext(); requestContext.Bag["TestString"] = I_AM_A_TEST_OF_THE_CONTEXT_BAG; - _commandProcessor.Send(_myCommand, requestContext); - - Assert.Equal(I_AM_A_TEST_OF_THE_CONTEXT_BAG, MyContextAwareCommandHandler.TestString); - Assert.Equal("I was called and set the context", requestContext.Bag["MyContextAwareCommandHandler"]); + await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(I_AM_A_TEST_OF_THE_CONTEXT_BAG); + await Assert.That(requestContext.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs index 265acf2370..316303ceb3 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -9,93 +9,55 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { public class CommandProcessorDepositPostTests { private readonly RoutingKey _routingKey = new("MyCommand"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly Message _message; private readonly InMemoryOutbox _fakeOutbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorDepositPostTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication {Topic = _routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _fakeOutbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - requestSchedulerFactory: new InMemorySchedulerFactory() - ); + _fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _fakeOutbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, requestSchedulerFactory: new InMemorySchedulerFactory()); } - - [Fact] - public void When_depositing_a_message_in_the_outbox() + [Test] + public async Task When_depositing_a_message_in_the_outbox() { //act var postedMessageId = _commandProcessor.DepositPost(_myCommand); var context = new RequestContext(); - //assert - //message should not be posted - Assert.False(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsFalse(); //message should correspond to the command var depositedPost = _fakeOutbox.Get(postedMessageId, context); - Assert.Equal(_message.Id, depositedPost.Id); - Assert.Equal(_message.Body.Value, depositedPost.Body.Value); - Assert.Equal(_message.Header.Topic, depositedPost.Header.Topic); - Assert.Equal(_message.Header.MessageType, depositedPost.Header.MessageType); - + await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); + await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); //message should be marked as outstanding if not sent var outstandingMessages = _fakeOutbox.OutstandingMessages(TimeSpan.Zero, context); var outstandingMessage = outstandingMessages.Single(); - Assert.Equal(_message.Id, outstandingMessage.Id); + await Assert.That(outstandingMessage.Id).IsEqualTo(_message.Id); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs index d52acd365e..6ba295e8c4 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,97 +10,57 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { public class CommandProcessorDepositPostTestsAsync { private readonly RoutingKey _routingKey = new("MyCommand"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorDepositPostTestsAsync() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication{ Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync()) - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(timeProvider) { Tracer = tracer }; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_depositing_a_message_in_the_outbox_async() { //act await _commandProcessor.DepositPostAsync(_myCommand); - var context = new RequestContext(); - + var context = new RequestContext(); //assert //message should not be posted - Assert.False(_internalBus.Stream(_routingKey).Any()); - + await Assert.That(_internalBus.Stream(_routingKey).Any()).IsFalse(); //message should be in the store - var depositedPost = _outbox - .OutstandingMessages(TimeSpan.Zero, context) - .SingleOrDefault(msg => msg.Id == _message.Id); - - Assert.NotNull(depositedPost); - + var depositedPost = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message.Id); + await Assert.That(depositedPost).IsNotNull(); //message should correspond to the command - Assert.Equal(_message.Id, depositedPost.Id); - Assert.Equal(_message.Body.Value, depositedPost.Body.Value); - Assert.Equal(_message.Header.Topic, depositedPost.Header.Topic); - Assert.Equal(_message.Header.MessageType, depositedPost.Header.MessageType); - + await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); + await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); //message should be marked as outstanding if not sent var outstandingMessages = await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); var outstandingMessage = outstandingMessages.Single(); - Assert.Equal(_message.Id, outstandingMessage.Id); + await Assert.That(outstandingMessage.Id).IsEqualTo(_message.Id); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs index ed33901936..9141debfde 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -11,7 +11,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { @@ -19,7 +18,6 @@ public class CommandProcessorBulkDepositPostTestsAsync { private readonly RoutingKey _commandTopic = new("MyCommand"); private readonly RoutingKey _eventTopic = new("MyEvent"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); private readonly MyCommand _myCommand2 = new(); @@ -29,136 +27,76 @@ public class CommandProcessorBulkDepositPostTestsAsync private readonly Message _message3; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorBulkDepositPostTestsAsync() { _myCommand.Value = "Hello World"; _myCommand2.Value = "Update World"; - var timeProvider = new FakeTimeProvider(); - - InMemoryMessageProducer commandMessageProducer = new(_internalBus, new Publication - { - Topic = new RoutingKey(_commandTopic), - RequestType = typeof(MyCommand) - } ); - - InMemoryMessageProducer eventMessageProducer = new(_internalBus, new Publication - { - Topic = new RoutingKey(_eventTopic), - RequestType = typeof(MyEvent) - }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - _message2 = new Message( - new MessageHeader(_myCommand2.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand2, JsonSerialisationOptions.Options)) - ); - - _message3 = new Message( - new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((type) => + InMemoryMessageProducer commandMessageProducer = new(_internalBus, new Publication { Topic = new RoutingKey(_commandTopic), RequestType = typeof(MyCommand) }); + InMemoryMessageProducer eventMessageProducer = new(_internalBus, new Publication { Topic = new RoutingKey(_eventTopic), RequestType = typeof(MyEvent) }); + _message = new Message(new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + _message2 = new Message(new MessageHeader(_myCommand2.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand2, JsonSerialisationOptions.Options))); + _message3 = new Message(new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((type) => { if (type == typeof(MyCommandMessageMapperAsync)) return new MyCommandMessageMapperAsync(); - else + else return new MyEventMessageMapperAsync(); })); messageMapperRegistry.RegisterAsync(); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _commandTopic, commandMessageProducer }, - { _eventTopic, eventMessageProducer } - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _commandTopic, commandMessageProducer }, { _eventTopic, eventMessageProducer } }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(new FakeTimeProvider()); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - - [Fact] + [Test] public async Task When_depositing_messages_in_the_outbox_async() { //act var context = new RequestContext(); - var requests = new List {_myCommand, _myCommand2, _myEvent } ; + var requests = new List + { + _myCommand, + _myCommand2, + _myEvent + }; await _commandProcessor.DepositPostAsync(requests); - //assert //message should not be posted - Assert.False(_internalBus.Stream(new RoutingKey(_commandTopic)).Any()); - Assert.False(_internalBus.Stream(new RoutingKey(_eventTopic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_commandTopic)).Any()).IsFalse(); + await Assert.That(_internalBus.Stream(new RoutingKey(_eventTopic)).Any()).IsFalse(); //message should be in the store - var depositedPost = _outbox - .OutstandingMessages(TimeSpan.Zero, context) - .SingleOrDefault(msg => msg.Id == _message.Id); - + var depositedPost = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message.Id); //message should be in the store - var depositedPost2 = _outbox - .OutstandingMessages(TimeSpan.Zero, context) - .SingleOrDefault(msg => msg.Id == _message2.Id); - + var depositedPost2 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message2.Id); //message should be in the store - var depositedPost3 = _outbox - .OutstandingMessages(TimeSpan.Zero, context) - .SingleOrDefault(msg => msg.Id == _message3.Id); - - Assert.NotNull(depositedPost); - + var depositedPost3 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message3.Id); + await Assert.That(depositedPost).IsNotNull(); //message should correspond to the command - Assert.Equal(_message.Id, depositedPost.Id); - Assert.Equal(_message.Body.Value, depositedPost.Body.Value); - Assert.Equal(_message.Header.Topic, depositedPost.Header.Topic); - Assert.Equal(_message.Header.MessageType, depositedPost.Header.MessageType); - + await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); + await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); //message should correspond to the command - Assert.NotNull(depositedPost2); - Assert.Equal(_message2.Id, depositedPost2.Id); - Assert.Equal(_message2.Body.Value, depositedPost2.Body.Value); - Assert.Equal(_message2.Header.Topic, depositedPost2.Header.Topic); - Assert.Equal(_message2.Header.MessageType, depositedPost2.Header.MessageType); - + await Assert.That(depositedPost2).IsNotNull(); + await Assert.That(depositedPost2.Id).IsEqualTo(_message2.Id); + await Assert.That(depositedPost2.Body.Value).IsEqualTo(_message2.Body.Value); + await Assert.That(depositedPost2.Header.Topic).IsEqualTo(_message2.Header.Topic); + await Assert.That(depositedPost2.Header.MessageType).IsEqualTo(_message2.Header.MessageType); //message should correspond to the command - Assert.NotNull(depositedPost3); - Assert.Equal(_message3.Id, depositedPost3.Id); - Assert.Equal(_message3.Body.Value, depositedPost3.Body.Value); - Assert.Equal(_message3.Header.Topic, depositedPost3.Header.Topic); - Assert.Equal(_message3.Header.MessageType, depositedPost3.Header.MessageType); + await Assert.That(depositedPost3).IsNotNull(); + await Assert.That(depositedPost3.Id).IsEqualTo(_message3.Id); + await Assert.That(depositedPost3.Body.Value).IsEqualTo(_message3.Body.Value); + await Assert.That(depositedPost3.Header.Topic).IsEqualTo(_message3.Header.Topic); + await Assert.That(depositedPost3.Header.MessageType).IsEqualTo(_message3.Header.MessageType); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs index 1ad723c14e..15776b1115 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -9,7 +9,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { @@ -17,7 +16,6 @@ public class CommandProcessorBulkDepositPostWithTransactionTestsAsync { private readonly RoutingKey _commandTopic = new("MyCommand"); private readonly RoutingKey _eventTopic = new("MyEvent"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); private readonly MyCommand _myCommandTwo = new(); @@ -26,116 +24,67 @@ public class CommandProcessorBulkDepositPostWithTransactionTestsAsync private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider = new(); private readonly InternalBus _bus = new(); - public CommandProcessorBulkDepositPostWithTransactionTestsAsync() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_commandTopic), - RequestType = typeof(MyCommand) - }); - - InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_eventTopic), - RequestType = typeof(MyEvent) - }); - - _messages.Add(new Message( - new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - )); - _messages.Add(new Message( - new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options)) - )); - _messages.Add(new Message( - new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - )); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((type) => - { - if (type == typeof(MyCommandMessageMapperAsync)) - return new MyCommandMessageMapperAsync(); - else - return new MyEventMessageMapperAsync(); - }) - ); + InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_commandTopic), RequestType = typeof(MyCommand) }); + InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_eventTopic), RequestType = typeof(MyEvent) }); + _messages.Add(new Message(new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)))); + _messages.Add(new Message(new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options)))); + _messages.Add(new Message(new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((type) => + { + if (type == typeof(MyCommandMessageMapperAsync)) + return new MyCommandMessageMapperAsync(); + else + return new MyEventMessageMapperAsync(); + })); messageMapperRegistry.RegisterAsync(); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { _commandTopic, commandMessageProducer }, - { _eventTopic, eventMessageProducer} - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _commandTopic, commandMessageProducer }, { _eventTopic, eventMessageProducer } }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _spyOutbox = new SpyOutbox {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + _spyOutbox = new SpyOutbox + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, scheduler, typeof(SpyTransaction)); } - - [Fact] + [Test] public async Task When_depositing_messages_in_the_outbox_with_a_transaction_async() { //act - var requests = new List {_myCommand, _myCommandTwo, _myEvent } ; + var requests = new List + { + _myCommand, + _myCommandTwo, + _myEvent + }; await _commandProcessor.DepositPostAsync(requests, _transactionProvider); - //assert - //messages should not be in the outbox - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myCommand.Id); - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myCommandTwo.Id); - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myEvent.Id); - + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommand.Id); + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommandTwo.Id); + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myEvent.Id); //messages should be in the current transaction var transaction = _transactionProvider.GetTransaction(); List messages = requests.Select(r => transaction.Get(r.Id)).ToList(); - Assert.DoesNotContain(messages, m => m is null); - + await Assert.That(messages).DoesNotContain(m => m is null); //messages should not be posted - Assert.False(_bus.Stream(new RoutingKey(_commandTopic)).Any()); - Assert.False(_bus.Stream(new RoutingKey(_eventTopic)).Any()); - + await Assert.That(_bus.Stream(new RoutingKey(_commandTopic)).Any()).IsFalse(); + await Assert.That(_bus.Stream(new RoutingKey(_eventTopic)).Any()).IsFalse(); //messages should correspond to the command for (var i = 0; i < messages.Count; i++) { - Assert.Equal(_messages[i].Id, messages[i]?.Id); - Assert.Equal(_messages[i].Body.Value, messages[i]?.Body.Value); - Assert.Equal(_messages[i].Header.Topic, messages[i]?.Header.Topic); - Assert.Equal(_messages[i].Header.MessageType, messages[i]?.Header.MessageType); + await Assert.That(messages[i]?.Id).IsEqualTo(_messages[i].Id); + await Assert.That(messages[i]?.Body.Value).IsEqualTo(_messages[i].Body.Value); + await Assert.That(messages[i]?.Header.Topic).IsEqualTo(_messages[i].Header.Topic); + await Assert.That(messages[i]?.Header.MessageType).IsEqualTo(_messages[i].Header.MessageType); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs index 1560f7ca17..5022d97251 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,98 +10,57 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { public class CommandProcessorDepositPostWithTransactionTestsAsync { private readonly RoutingKey _routingKey = new("MyCommand"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly Message _message; private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider = new(); private readonly InternalBus _internalBus = new(); - public CommandProcessorDepositPostWithTransactionTestsAsync() { _myCommand.Value = "Hello World"; - - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication{Topic = _routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync()) - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _spyOutbox = new SpyOutbox {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + _spyOutbox = new SpyOutbox + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, scheduler, typeof(SpyTransaction)); } - - [Fact] + [Test] public async Task When_depositing_a_message_in_the_outbox_with_a_transaction_async() { //act var postedMessageId = await _commandProcessor.DepositPostAsync(_myCommand, _transactionProvider); var context = new RequestContext(); - //assert - //message should not be in the outbox - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == postedMessageId); - + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == postedMessageId); //message should be in the current transaction var transaction = _transactionProvider.GetTransaction(); var message = transaction.Get(postedMessageId); - Assert.NotNull(message); - + await Assert.That(message).IsNotNull(); //message should not be posted - Assert.False(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsFalse(); //message should correspond to the command - Assert.Equal(_message.Id, message.Id); - Assert.Equal(_message.Body.Value, message.Body.Value); - Assert.Equal(_message.Header.Topic, message.Header.Topic); - Assert.Equal(_message.Header.MessageType, message.Header.MessageType); + await Assert.That(message.Id).IsEqualTo(_message.Id); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(message.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(message.Header.MessageType).IsEqualTo(_message.Header.MessageType); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs index 6fbce95a69..e07a8850a0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -9,7 +9,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { @@ -17,7 +16,6 @@ public class CommandProcessorBulkDepositPostTests { private readonly RoutingKey _commandTopic = new("MyCommand"); private readonly RoutingKey _eventTopic = new("MyEvent"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); private readonly MyCommand _myCommandTwo = new(); @@ -27,127 +25,75 @@ public class CommandProcessorBulkDepositPostTests private readonly Message _messageThree; private readonly InMemoryOutbox _outbox; private readonly InternalBus _bus = new(); - public CommandProcessorBulkDepositPostTests() { _myCommand.Value = "Hello World"; _myCommandTwo.Value = "Hello World Two"; _myEvent.Data = 3; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_commandTopic), - RequestType = typeof(MyCommand) - }); - - InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_eventTopic), - RequestType = typeof(MyEvent) - }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - _messageTwo = new Message( - new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options)) - ); - - _messageThree = new Message( - new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - + InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_commandTopic), RequestType = typeof(MyCommand) }); + InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_eventTopic), RequestType = typeof(MyEvent) }); + _message = new Message(new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + _messageTwo = new Message(new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options))); + _messageThree = new Message(new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyCommandMessageMapper)) return new MyCommandMessageMapper(); else if (type == typeof(MyEventMessageMapper)) return new MyEventMessageMapper(); - throw new ConfigurationException($"No command or event mappers registered for {type.Name}"); }), null); - messageMapperRegistry.Register(); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { _commandTopic, commandMessageProducer }, - { _eventTopic, eventMessageProducer} - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _commandTopic, commandMessageProducer }, { _eventTopic, eventMessageProducer } }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - - [Fact] - public void When_depositing_messages_in_the_outbox() + [Test] + public async Task When_depositing_messages_in_the_outbox() { //act - var requests = new List {_myCommand, _myCommandTwo, _myEvent } ; + var requests = new List + { + _myCommand, + _myCommandTwo, + _myEvent + }; _commandProcessor.DepositPost(requests); var context = new RequestContext(); - //assert - //message should not be posted - Assert.False(_bus.Stream(_commandTopic).Any()); - Assert.False(_bus.Stream(_eventTopic).Any()); - + await Assert.That(_bus.Stream(_commandTopic).Any()).IsFalse(); + await Assert.That(_bus.Stream(_eventTopic).Any()).IsFalse(); //message should correspond to the command var depositedPost = _outbox.Get(_message.Id, context); - Assert.Equal(_message.Id, depositedPost.Id); - Assert.Equal(_message.Body.Value, depositedPost.Body.Value); - Assert.Equal(_message.Header.Topic, depositedPost.Header.Topic); - Assert.Equal(_message.Header.MessageType, depositedPost.Header.MessageType); - + await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); + await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); var depositedPost2 = _outbox.Get(_messageTwo.Id, context); - Assert.Equal(_messageTwo.Id, depositedPost2.Id); - Assert.Equal(_messageTwo.Body.Value, depositedPost2.Body.Value); - Assert.Equal(_messageTwo.Header.Topic, depositedPost2.Header.Topic); - Assert.Equal(_messageTwo.Header.MessageType, depositedPost2.Header.MessageType); - - var depositedPost3 = _outbox - .OutstandingMessages(TimeSpan.Zero, context) - .SingleOrDefault(msg => msg.Id == _messageThree.Id); + await Assert.That(depositedPost2.Id).IsEqualTo(_messageTwo.Id); + await Assert.That(depositedPost2.Body.Value).IsEqualTo(_messageTwo.Body.Value); + await Assert.That(depositedPost2.Header.Topic).IsEqualTo(_messageTwo.Header.Topic); + await Assert.That(depositedPost2.Header.MessageType).IsEqualTo(_messageTwo.Header.MessageType); + var depositedPost3 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _messageThree.Id); //message should correspond to the command - Assert.NotNull(depositedPost3); - Assert.Equal(_messageThree.Id, depositedPost3.Id); - Assert.Equal(_messageThree.Body.Value, depositedPost3.Body.Value); - Assert.Equal(_messageThree.Header.Topic, depositedPost3.Header.Topic); - Assert.Equal(_messageThree.Header.MessageType, depositedPost3.Header.MessageType); - + await Assert.That(depositedPost3).IsNotNull(); + await Assert.That(depositedPost3.Id).IsEqualTo(_messageThree.Id); + await Assert.That(depositedPost3.Body.Value).IsEqualTo(_messageThree.Body.Value); + await Assert.That(depositedPost3.Header.Topic).IsEqualTo(_messageThree.Header.Topic); + await Assert.That(depositedPost3.Header.MessageType).IsEqualTo(_messageThree.Header.MessageType); //message should be marked as outstanding if not sent var outstandingMessages = _outbox.OutstandingMessages(TimeSpan.Zero, context); - Assert.Equal(3, outstandingMessages.Count()); + await Assert.That(outstandingMessages.Count()).IsEqualTo(3); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs index 9c5dc9bbb4..59d03c72e3 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -8,7 +8,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { @@ -16,7 +15,6 @@ public class CommandProcessorBulkDepositPostWithTransactionTests { private readonly RoutingKey _commandTopic = new("MyCommand"); private readonly RoutingKey _eventTopic = new("MyEvent"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); private readonly MyCommand _myCommandTwo = new(); @@ -25,116 +23,68 @@ public class CommandProcessorBulkDepositPostWithTransactionTests private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider = new(); private readonly InternalBus _bus = new(); - public CommandProcessorBulkDepositPostWithTransactionTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_commandTopic), - RequestType = typeof(MyCommand) - }); - - InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication - { - Topic = new RoutingKey(_eventTopic), - RequestType = typeof(MyEvent) - }); - - _messages.Add(new Message( - new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - )); - _messages.Add(new Message( - new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options)) - )); - _messages.Add(new Message( - new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - )); - + InMemoryMessageProducer commandMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_commandTopic), RequestType = typeof(MyCommand) }); + InMemoryMessageProducer eventMessageProducer = new(_bus, new Publication { Topic = new RoutingKey(_eventTopic), RequestType = typeof(MyEvent) }); + _messages.Add(new Message(new MessageHeader(_myCommand.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)))); + _messages.Add(new Message(new MessageHeader(_myCommandTwo.Id, _commandTopic, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommandTwo, JsonSerialisationOptions.Options)))); + _messages.Add(new Message(new MessageHeader(_myEvent.Id, _eventTopic, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)))); var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((type) => { if (type == typeof(MyCommandMessageMapper)) return new MyCommandMessageMapper(); else if (type == typeof(MyEventMessageMapper)) return new MyEventMessageMapper(); - throw new ConfigurationException($"No command or event mappers registered for {type.Name}"); }), null); - messageMapperRegistry.Register(); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { _commandTopic, commandMessageProducer }, - { _eventTopic, eventMessageProducer} - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _commandTopic, commandMessageProducer }, { _eventTopic, eventMessageProducer } }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _spyOutbox = new SpyOutbox() {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + _spyOutbox = new SpyOutbox() + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, scheduler, typeof(SpyTransaction)); } - - [Fact] - public void When_depositing_messages_in_the_outbox_with_a_transaction() + [Test] + public async Task When_depositing_messages_in_the_outbox_with_a_transaction() { //act - var requests = new List {_myCommand, _myCommandTwo, _myEvent } ; + var requests = new List + { + _myCommand, + _myCommandTwo, + _myEvent + }; _commandProcessor.DepositPost(requests, _transactionProvider); - //assert - //messages should not be in the outbox - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myCommand.Id); - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myCommandTwo.Id); - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == _myEvent.Id); - + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommand.Id); + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommandTwo.Id); + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myEvent.Id); //messages should be in the current transaction var transaction = _transactionProvider.GetTransaction(); List messages = requests.Select(r => transaction.Get(r.Id)).ToList(); - Assert.DoesNotContain(messages, m => m is null); - + await Assert.That(messages).DoesNotContain(m => m is null); //messages should not be posted - Assert.False(_bus.Stream(new RoutingKey(_commandTopic)).Any()); - Assert.False(_bus.Stream(new RoutingKey(_eventTopic)).Any()); - + await Assert.That(_bus.Stream(new RoutingKey(_commandTopic)).Any()).IsFalse(); + await Assert.That(_bus.Stream(new RoutingKey(_eventTopic)).Any()).IsFalse(); //messages should correspond to the command for (var i = 0; i < messages.Count; i++) { - Assert.Equal(_messages[i].Id, messages[i]?.Id); - Assert.Equal(_messages[i].Body.Value, messages[i]?.Body.Value); - Assert.Equal(_messages[i].Header.Topic, messages[i]?.Header.Topic); - Assert.Equal(_messages[i].Header.MessageType, messages[i]?.Header.MessageType); + await Assert.That(messages[i]?.Id).IsEqualTo(_messages[i].Id); + await Assert.That(messages[i]?.Body.Value).IsEqualTo(_messages[i].Body.Value); + await Assert.That(messages[i]?.Header.Topic).IsEqualTo(_messages[i].Header.Topic); + await Assert.That(messages[i]?.Header.MessageType).IsEqualTo(_messages[i].Header.MessageType); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs index a39820daf2..f7a684d87c 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -9,97 +9,57 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Deposit { public class CommandProcessorDepositPostWithTransactionTests { private readonly RoutingKey _routingKey = new("MyCommand"); - private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly Message _message; private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider = new(); private readonly InternalBus _internalBus = new(); - public CommandProcessorDepositPostWithTransactionTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { _routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(); - _spyOutbox = new SpyOutbox {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + _spyOutbox = new SpyOutbox + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, scheduler, typeof(SpyTransaction)); } - - [Fact] - public void When_depositing_a_message_in_the_outbox_with_a_transaction() + [Test] + public async Task When_depositing_a_message_in_the_outbox_with_a_transaction() { //act var postedMessageId = _commandProcessor.DepositPost(_myCommand, _transactionProvider); - //assert - //message should not be in the outbox - Assert.DoesNotContain(_spyOutbox.Messages, m => m.Message.Id == postedMessageId); - + await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == postedMessageId); //message should be in the current transaction var transaction = _transactionProvider.GetTransaction(); var message = transaction.Get(postedMessageId); - Assert.NotNull(message); - + await Assert.That(message).IsNotNull(); //message should not be posted - Assert.False(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsFalse(); //message should correspond to the command - Assert.Equal(_message.Id, message.Id); - Assert.Equal(_message.Body.Value, message.Body.Value); - Assert.Equal(_message.Header.Topic, message.Header.Topic); - Assert.Equal(_message.Header.MessageType, message.Header.MessageType); + await Assert.That(message.Id).IsEqualTo(_message.Id); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(message.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(message.Header.MessageType).IsEqualTo(_message.Header.MessageType); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_Of_An_Async_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_Of_An_Async_Pipeline.cs index f7e2d816fb..bdf82e0fff 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_Of_An_Async_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_Of_An_Async_Pipeline.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,33 +10,27 @@ public class PipelineBuilderAsyncTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync? _pipeline; - public PipelineBuilderAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); - - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_A_Handler_Is_Part_Of_An_Async_Pipeline() + [Test] + public async Task When_A_Handler_Is_Part_Of_An_Async_Pipeline() { _pipeline = _pipelineBuilder.BuildAsync(new MyCommand(), new RequestContext(), false).First(); - var trace = TracePipeline().ToString(); - Assert.Contains("MyImplicitHandlerAsync", trace); - Assert.Contains("MyLoggingHandlerAsync", trace); + await Assert.That(trace).Contains("MyImplicitHandlerAsync"); + await Assert.That(trace).Contains("MyLoggingHandlerAsync"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -45,4 +38,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_A_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_A_Pipeline.cs index 9cd8edee0b..497bdc26f6 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_A_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_A_Pipeline.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,32 +10,27 @@ public class PipelineBuilderTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests _pipeline; - public PipelineBuilderTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_A_Handler_Is_Part_of_A_Pipeline() + [Test] + public async Task When_A_Handler_Is_Part_of_A_Pipeline() { _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - var trace = TracePipeline().ToString(); - Assert.Contains("MyImplicitHandler", trace); - Assert.Contains("MyLoggingHandler", trace); + await Assert.That(trace).Contains("MyImplicitHandler"); + await Assert.That(trace).Contains("MyLoggingHandler"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -44,4 +38,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline.cs index ff6c1e2a9d..1febfa13e4 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,7 +10,6 @@ public class PipelineBuilderAgreementAsyncTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests? _pipeline; - public PipelineBuilderAgreementAsyncTests() { var registry = new SubscriberRegistry(); @@ -19,33 +17,26 @@ public PipelineBuilderAgreementAsyncTests() { var myCommand = request as MyCommand; if (myCommand?.Value == "first") - return [typeof(MyImplicitHandler)]; - - return [typeof(MyCommandHandler)]; - }), - [typeof(MyImplicitHandler), typeof(MyCommandHandler)] - ); - + return[typeof(MyImplicitHandler)]; + return[typeof(MyCommandHandler)]; + }), [typeof(MyImplicitHandler), typeof(MyCommandHandler)]); var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_A_Handler_Is_Part_of_A_Pipeline() + [Test] + public async Task When_A_Handler_Is_Part_of_A_Pipeline() { - _pipeline = _pipelineBuilder.Build(new MyCommand{Value = "first"}, new RequestContext()).First(); - + _pipeline = _pipelineBuilder.Build(new MyCommand { Value = "first" }, new RequestContext()).First(); var trace = TracePipeline().ToString(); - Assert.Contains("MyImplicitHandler", trace); - Assert.Contains("MyLoggingHandler", trace); + await Assert.That(trace).Contains("MyImplicitHandler"); + await Assert.That(trace).Contains("MyLoggingHandler"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -53,4 +44,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline_Async.cs index b343742fd4..c0530c7c40 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_A_Handler_Is_Part_of_An_Agreement_Pipeline_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,7 +10,6 @@ public class PipelineBuilderAgreementTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync? _pipeline; - public PipelineBuilderAgreementTests() { var registry = new SubscriberRegistry(); @@ -19,33 +17,26 @@ public PipelineBuilderAgreementTests() { var myCommand = request as MyCommand; if (myCommand?.Value == "first") - return [typeof(MyImplicitHandlerAsync)]; - - return [typeof(MyCommandHandlerAsync)]; - }), - [typeof(MyImplicitHandlerAsync), typeof(MyCommandHandlerAsync)] - ); - + return[typeof(MyImplicitHandlerAsync)]; + return[typeof(MyCommandHandlerAsync)]; + }), [typeof(MyImplicitHandlerAsync), typeof(MyCommandHandlerAsync)]); var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_A_Handler_Is_Part_of_A_Pipeline() + [Test] + public async Task When_A_Handler_Is_Part_of_A_Pipeline() { - _pipeline = _pipelineBuilder.BuildAsync(new MyCommand{Value = "first"}, new RequestContext(), true).First(); - + _pipeline = _pipelineBuilder.BuildAsync(new MyCommand { Value = "first" }, new RequestContext(), true).First(); var trace = TracePipeline().ToString(); - Assert.Contains("MyImplicitHandler", trace); - Assert.Contains("MyLoggingHandler", trace); + await Assert.That(trace).Contains("MyImplicitHandler"); + await Assert.That(trace).Contains("MyLoggingHandler"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -53,4 +44,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_An_Exception_Is_Thrown_Terminate_The_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_An_Exception_Is_Thrown_Terminate_The_Pipeline.cs index cd7a25d69e..b4231bbaed 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_An_Exception_Is_Thrown_Terminate_The_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_An_Exception_Is_Thrown_Terminate_The_Pipeline.cs @@ -1,10 +1,10 @@ -using System; +using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -13,28 +13,22 @@ public class PipelineTerminationTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception _exception; - public PipelineTerminationTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(),new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - public void When_An_Exception_Is_Thrown_Terminate_The_Pipeline() + public async Task When_An_Exception_Is_Thrown_Terminate_The_Pipeline() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - - Assert.NotNull(_exception); - Assert.False(MyUnusedCommandHandler.Shouldreceive(_myCommand)); + await Assert.That(_exception).IsNotNull(); + await Assert.That(MyUnusedCommandHandler.Shouldreceive(_myCommand)).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_ForiegnAttribues.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_ForiegnAttribues.cs index 205fc534c5..54b9604003 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_ForiegnAttribues.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_ForiegnAttribues.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,32 +10,27 @@ public class PipelineForeignAttributesTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests _pipeline; - public PipelineForeignAttributesTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_A_Pipeline_Allow_ForeignAttributes() + [Test] + public async Task When_Building_A_Pipeline_Allow_ForeignAttributes() { _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - var trace = TraceFilters().ToString(); - Assert.Equal("MyValidationHandler`1|MyObsoleteCommandHandler|MyLoggingHandler`1|", trace); + await Assert.That(trace).IsEqualTo("MyValidationHandler`1|MyObsoleteCommandHandler|MyLoggingHandler`1|"); } + private PipelineTracer TraceFilters() { var pipelineTracer = new PipelineTracer(); @@ -44,4 +38,4 @@ private PipelineTracer TraceFilters() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks.cs index be5476e0cb..b250335c42 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,32 +10,27 @@ public class PipelinePreAndPostFiltersTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests _pipeline; - public PipelinePreAndPostFiltersTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks() + [Test] + public async Task When_Building_A_Pipeline_Allow_Pre_And_Post_Tasks() { _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - var trace = TraceFilters().ToString(); - Assert.Equal("MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|", trace); + await Assert.That(trace).IsEqualTo("MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|"); } + private PipelineTracer TraceFilters() { var pipelineTracer = new PipelineTracer(); @@ -44,4 +38,4 @@ private PipelineTracer TraceFilters() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors.cs index 0db83c8569..94cb69b496 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -9,27 +8,23 @@ public class BuildPipelineFaults { private readonly PipelineBuilder _chainBuilder; private readonly RequestContext _requestContext; - public BuildPipelineFaults() { var registry = new SubscriberRegistry(); registry.Register(); - //We'll simulate an IoC error var handlerFactory = new SimpleHandlerFactorySync(_ => throw new InvalidOperationException("Could not create handler")); _requestContext = new RequestContext(); - _chainBuilder = new PipelineBuilder(registry, handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors() + [Test] + public async Task When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors() { var exception = Catch.Exception(() => _chainBuilder.Build(new MyCommand(), _requestContext)); - Assert.NotNull(exception); - Assert.IsType(exception); - Assert.IsType(exception.InnerException); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); + await Assert.That(exception.InnerException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Preserve_The_Order.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Preserve_The_Order.cs index 3c96d16ad5..b4700e8dd0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Preserve_The_Order.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_Preserve_The_Order.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,30 +10,26 @@ public class PipelineOrderingTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests _pipeline; - public PipelineOrderingTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); } - [Fact] - public void When_Building_A_Pipeline_Preserve_The_Order() + [Test] + public async Task When_Building_A_Pipeline_Preserve_The_Order() { _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - - Assert.Equal("MyLoggingHandler`1|MyValidationHandler`1|MyDoubleDecoratedHandler|", PipelineTracer().ToString()); + await Assert.That(PipelineTracer().ToString()).IsEqualTo("MyLoggingHandler`1|MyValidationHandler`1|MyDoubleDecoratedHandler|"); } + private PipelineTracer PipelineTracer() { var pipelineTracer = new PipelineTracer(); @@ -42,4 +37,4 @@ private PipelineTracer PipelineTracer() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox.cs index 7835225060..9a226f263c 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; @@ -6,7 +6,6 @@ using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Inbox.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -16,46 +15,37 @@ public class PipelineGlobalInboxTests private Pipelines _chainOfResponsibility; private readonly RequestContext _requestContext; private readonly Dictionary _receivedMessages = new(); - public PipelineGlobalInboxTests() { IAmAnInboxSync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(_ => new MyCommandHandler(_receivedMessages)); container.AddSingleton(inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _requestContext = new RequestContext(); - InboxConfiguration inboxConfiguration = new(); - _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory, inboxConfiguration); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_A_Pipeline_With_Global_inbox() + [Test] + public async Task When_Building_A_Pipeline_With_Global_inbox() { //act _chainOfResponsibility = _chainBuilder.Build(new MyCommand(), _requestContext); - //assert var tracer = TracePipeline(_chainOfResponsibility.First()); - Assert.Contains("UseInboxHandler", tracer.ToString()); + await Assert.That(tracer.ToString()).Contains("UseInboxHandler"); } + private PipelineTracer TracePipeline(IHandleRequests firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute.cs index e581f3b20c..2677f891d9 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -13,46 +12,36 @@ public class PipelineGlobalInboxNoInboxAttributeTests private readonly PipelineBuilder _chainBuilder; private Pipelines _chainOfResponsibility; private readonly RequestContext _requestContext; - - public PipelineGlobalInboxNoInboxAttributeTests() { IAmAnInboxSync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(inbox); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _requestContext = new RequestContext(); - InboxConfiguration inboxConfiguration = new(); - _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory, inboxConfiguration); - } - [Fact] - public void When_Building_A_Pipeline_With_Global_Inbox() + [Test] + public async Task When_Building_A_Pipeline_With_Global_Inbox() { //act _chainOfResponsibility = _chainBuilder.Build(new MyCommand(), _requestContext); - //assert var tracer = TracePipeline(_chainOfResponsibility.First()); - Assert.DoesNotContain("UseInboxHandler", tracer.ToString()); + await Assert.That(tracer.ToString()).DoesNotContain("UseInboxHandler"); } + private PipelineTracer TracePipeline(IHandleRequests firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute_Async .cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute_Async .cs index 140f5b9386..7714a71a16 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute_Async .cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_NoInbox_Attribute_Async .cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -13,47 +12,36 @@ public class PipelineGlobalInboxNoInboxAttributeAsyncTests private readonly PipelineBuilder _chainBuilder; private AsyncPipelines _chainOfResponsibility; private readonly RequestContext _requestContext; - - public PipelineGlobalInboxNoInboxAttributeAsyncTests() { IAmAnInboxSync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(inbox); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _requestContext = new RequestContext(); - InboxConfiguration inboxConfiguration = new(); - _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory, inboxConfiguration); - } - [Fact] - public void When_Building_A_Pipeline_With_Global_Inbox_Async() + [Test] + public async Task When_Building_A_Pipeline_With_Global_Inbox_Async() { //act _chainOfResponsibility = _chainBuilder.BuildAsync(new MyCommand(), _requestContext, false); - //assert var tracer = TracePipelineAsync(_chainOfResponsibility.First()); - Assert.DoesNotContain("UseInboxHandlerAsync", tracer.ToString()); - + await Assert.That(tracer.ToString()).DoesNotContain("UseInboxHandlerAsync"); } + private PipelineTracer TracePipelineAsync(IHandleRequestsAsync firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox.cs index c56ac475bc..8cc521c79d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Inbox; using Paramore.Brighter.Inbox.Exceptions; using Paramore.Brighter.Inbox.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -16,54 +15,36 @@ public class PipelineGlobalInboxWhenUseInboxTests private readonly PipelineBuilder _chainBuilder; private Pipelines _chainOfResponsibility; private readonly RequestContext _requestContext; - - public PipelineGlobalInboxWhenUseInboxTests() { IAmAnInboxSync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _requestContext = new RequestContext(); - - InboxConfiguration inboxConfiguration = new( - scope: InboxScope.All, - onceOnly: true, - actionOnExists: OnceOnlyAction.Throw); - + InboxConfiguration inboxConfiguration = new(scope: InboxScope.All, onceOnly: true, actionOnExists: OnceOnlyAction.Throw); _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory, inboxConfiguration); - } - [Fact] - public void When_Building_A_Pipeline_With_Global_Inbox() + [Test] + public async Task When_Building_A_Pipeline_With_Global_Inbox() { // Settings for InboxConfiguration on MyCommandInboxedHandler // [InboxConfiguration(step:0, contextKey: typeof(MyCommandInboxedHandler), onceOnly: false)] // Settings for InboxConfiguration as above // _inboxConfiguration = new InboxConfiguration(InboxScope.All, context: true, onceOnly: true); // so global will not allow repeated requests ans calls, but local should override this and allow - - //act _chainOfResponsibility = _chainBuilder.Build(new MyCommand(), _requestContext); - var chain = _chainOfResponsibility.First(); var myCommand = new MyCommand(); - //First pass not impacted by InboxConfiguration Handler chain.Handle(myCommand); - bool noException = true; try { @@ -75,15 +56,14 @@ public void When_Building_A_Pipeline_With_Global_Inbox() } //assert - Assert.True(noException); - + await Assert.That(noException).IsTrue(); } + private PipelineTracer TracePipeline(IHandleRequests firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox_Async.cs index df02bea496..0c922c296b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_And_Use_Inbox_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -8,7 +8,6 @@ using Paramore.Brighter.Inbox; using Paramore.Brighter.Inbox.Exceptions; using Paramore.Brighter.Inbox.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -17,37 +16,23 @@ public class PipelineGlobalInboxWhenUseInboxAsyncTests private readonly PipelineBuilder _chainBuilder; private AsyncPipelines _chainOfResponsibility; private readonly RequestContext _requestContext; - - public PipelineGlobalInboxWhenUseInboxAsyncTests() { IAmAnInboxSync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton((IAmAnInboxAsync)inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - - _requestContext = new RequestContext(); - - InboxConfiguration inboxConfiguration = new( - scope: InboxScope.All, - onceOnly: true, - actionOnExists: OnceOnlyAction.Throw); - + InboxConfiguration inboxConfiguration = new(scope: InboxScope.All, onceOnly: true, actionOnExists: OnceOnlyAction.Throw); _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory, inboxConfiguration); - } - [Fact] + [Test] public async Task When_Building_A_Pipeline_With_Global_Inbox() { // Settings for InboxConfiguration on MyCommandInboxedHandler @@ -55,17 +40,12 @@ public async Task When_Building_A_Pipeline_With_Global_Inbox() // Settings for InboxConfiguration as above // _inboxConfiguration = new InboxConfiguration(InboxScope.All, context: true, onceOnly: true); // so global will not allow repeated requests ans calls, but local should override this and allow - - //act _chainOfResponsibility = _chainBuilder.BuildAsync(new MyCommand(), _requestContext, false); - var chain = _chainOfResponsibility.First(); var myCommand = new MyCommand(); - //First pass not impacted by InboxConfiguration Handler await chain.HandleAsync(myCommand); - bool noException = true; try { @@ -77,15 +57,14 @@ public async Task When_Building_A_Pipeline_With_Global_Inbox() } //assert - Assert.True(noException); - + await Assert.That(noException).IsTrue(); } + private PipelineTracer TracePipeline(IHandleRequests firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Async.cs index f992828a55..8fdfa175cc 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; @@ -6,63 +6,49 @@ using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Inbox.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { //TODO: //Respects different global choices i.e. throw, what to capture, context //allow a lambda for the context, to override, and pass in a default of typeof() ???? - public class PipelineGlobalInboxTestsAsync { private readonly PipelineBuilder _chainBuilder; private AsyncPipelines _chainOfResponsibility; private readonly RequestContext _requestContext; - - public PipelineGlobalInboxTestsAsync() { IAmAnInboxAsync inbox = new InMemoryInbox(new FakeTimeProvider()); var handler = new MyCommandHandlerAsync(new Dictionary()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(handler); container.AddSingleton(inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _requestContext = new RequestContext(); - InboxConfiguration inboxConfiguration = new(); - _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory, inboxConfiguration); - } - [Fact] - public void When_Building_A_Pipeline_With_Global_Inbox() + [Test] + public async Task When_Building_A_Pipeline_With_Global_Inbox() { - //act + //act _chainOfResponsibility = _chainBuilder.BuildAsync(new MyCommand(), _requestContext, false); - //assert var tracer = TracePipeline(_chainOfResponsibility.First()); - Assert.Contains("UseInboxHandlerAsync", tracer.ToString()); - + await Assert.That(tracer.ToString()).Contains("UseInboxHandlerAsync"); } + private PipelineTracer TracePipeline(IHandleRequestsAsync firstInPipeline) { var pipelineTracer = new PipelineTracer(); firstInPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Override_Context.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Override_Context.cs index 44d92a2fa7..a256849c09 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Override_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Pipeline_With_Global_Inbox_Override_Context.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Inbox.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -16,47 +15,33 @@ public class PipelineGlobalInboxContextTests private Pipelines _chainOfResponsibility; private readonly RequestContext _requestContext; private readonly IAmAnInboxSync _inbox; - - public PipelineGlobalInboxContextTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _requestContext = new RequestContext(); - - InboxConfiguration inboxConfiguration = new( - scope: InboxScope.All, - context: (handlerType) => CONTEXT_KEY); - + InboxConfiguration inboxConfiguration = new(scope: InboxScope.All, context: (handlerType) => CONTEXT_KEY); _chainBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory, inboxConfiguration); - PipelineBuilder.ClearPipelineCache(); - } - [Fact] - public void When_Building_A_Pipeline_With_Global_inbox() + [Test] + public async Task When_Building_A_Pipeline_With_Global_inbox() { //act _chainOfResponsibility = _chainBuilder.Build(new MyCommand(), _requestContext); - var firstHandler = _chainOfResponsibility.First(); var myCommmand = new MyCommand(); firstHandler.Handle(myCommmand); - //assert var exists = _inbox.Exists(myCommmand.Id, CONTEXT_KEY, null, 500); - Assert.True(exists); + await Assert.That(exists).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Sync_Pipeline_That_Has_Async_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Sync_Pipeline_That_Has_Async_Handlers.cs index d331ba3eb4..fe8ca01f7c 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Sync_Pipeline_That_Has_Async_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_A_Sync_Pipeline_That_Has_Async_Handlers.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,23 +12,20 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -37,32 +34,25 @@ public class PipelineMixedHandlersTests private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests _pipeline; private Exception _exception; - public PipelineMixedHandlersTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); - + _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactorySync)handlerFactory); } - [Fact] - public void When_Building_A_Sync_Pipeline_That_Has_Async_Handlers() + [Test] + public async Task When_Building_A_Sync_Pipeline_That_Has_Async_Handlers() { _exception = Catch.Exception(() => _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First()); - - Assert.NotNull(_exception); - Assert.IsType(_exception); - Assert.Contains(typeof(MyLoggingHandlerAsync<>).Name, _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception.Message).Contains(typeof(MyLoggingHandlerAsync<>).Name); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_ForiegnAttribues.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_ForiegnAttribues.cs index a49003b6f7..c0c1942975 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_ForiegnAttribues.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_ForiegnAttribues.cs @@ -1,49 +1,41 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { public class PipelineForiegnAttributesAsyncTests - - { - private readonly PipelineBuilder _pipeline_Builder; - private IHandleRequestsAsync _pipeline; - - public PipelineForiegnAttributesAsyncTests() { - var registry = new SubscriberRegistry(); - registry.RegisterAsync(); - - var container = new ServiceCollection(); - - container.AddTransient(); - container.AddTransient>(); - container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _pipeline_Builder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); - } - - [Fact] - public void When_Building_An_Async_Pipeline_Allow_ForeignAttributes() - { - _pipeline = _pipeline_Builder.BuildAsync(new MyCommand(), new RequestContext(), false).First(); - - var trace = TraceFilters().ToString(); - Assert.Equal("MyValidationHandlerAsync`1|MyObsoleteCommandHandlerAsync|MyLoggingHandlerAsync`1|", trace); - } - private PipelineTracer TraceFilters() - { - var pipelineTracer = new PipelineTracer(); - _pipeline.DescribePath(pipelineTracer); - return pipelineTracer; - } + private readonly PipelineBuilder _pipeline_Builder; + private IHandleRequestsAsync _pipeline; + public PipelineForiegnAttributesAsyncTests() + { + var registry = new SubscriberRegistry(); + registry.RegisterAsync(); + var container = new ServiceCollection(); + container.AddTransient(); + container.AddTransient>(); + container.AddTransient>(); + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); + var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); + _pipeline_Builder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); + } + + [Test] + public async Task When_Building_An_Async_Pipeline_Allow_ForeignAttributes() + { + _pipeline = _pipeline_Builder.BuildAsync(new MyCommand(), new RequestContext(), false).First(); + var trace = TraceFilters().ToString(); + await Assert.That(trace).IsEqualTo("MyValidationHandlerAsync`1|MyObsoleteCommandHandlerAsync|MyLoggingHandlerAsync`1|"); + } + + private PipelineTracer TraceFilters() + { + var pipelineTracer = new PipelineTracer(); + _pipeline.DescribePath(pipelineTracer); + return pipelineTracer; + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks.cs index b99d181b10..c97b6ea1f7 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks.cs @@ -1,9 +1,9 @@ -using System; +using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,32 +11,27 @@ public class PipelinePreAndPostFiltersAsyncTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync _pipeline; - public PipelinePreAndPostFiltersAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _pipelineBuilder = new PipelineBuilder(registry,(IAmAHandlerFactoryAsync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); + _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); } - [Fact] - private void When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks() + [Test] + public async Task When_Building_An_Async_Pipeline_Allow_Pre_And_Post_Tasks() { _pipeline = _pipelineBuilder.BuildAsync(new MyCommand(), new RequestContext(), false).First(); - var trace = TraceFilters().ToString(); - Assert.Equal("MyValidationHandlerAsync`1|MyPreAndPostDecoratedHandlerAsync|MyLoggingHandlerAsync`1|", trace); + await Assert.That(trace).IsEqualTo("MyValidationHandlerAsync`1|MyPreAndPostDecoratedHandlerAsync|MyLoggingHandlerAsync`1|"); } + private PipelineTracer TraceFilters() { var pipelineTracer = new PipelineTracer(); @@ -44,4 +39,4 @@ private PipelineTracer TraceFilters() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Failures_Should_Be_ConfigurationErrors.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Failures_Should_Be_ConfigurationErrors.cs index 250376e4e0..5c93fdf8e3 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Failures_Should_Be_ConfigurationErrors.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Failures_Should_Be_ConfigurationErrors.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -9,27 +8,23 @@ public class BuildPipelineFaultsAsync { private readonly PipelineBuilder _chainBuilder; private readonly RequestContext _requestContext; - public BuildPipelineFaultsAsync() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - // We'll simulate an IoC error IAmAHandlerFactoryAsync handlerFactory = new SimpleHandlerFactoryAsync(_ => throw new InvalidOperationException("Could not create handler")); _requestContext = new RequestContext(); - _chainBuilder = new PipelineBuilder(registry, handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors() + [Test] + public async Task When_Building_A_Pipeline_Failures_Should_Be_ConfigurationErrors() { var exception = Catch.Exception(() => _chainBuilder.BuildAsync(new MyCommand(), _requestContext, false)); - Assert.NotNull(exception); - Assert.IsType(exception); - Assert.IsType(exception.InnerException); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); + await Assert.That(exception.InnerException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Preserve_The_Order.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Preserve_The_Order.cs index d01506262d..3231a5978f 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Preserve_The_Order.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_Preserve_The_Order.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,32 +10,27 @@ public class PipelineOrderingAsyncTests { private readonly PipelineBuilder _pipeline_Builder; private IHandleRequestsAsync _pipeline; - public PipelineOrderingAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipeline_Builder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_An_Async_Pipeline_Preserve_The_Order() + [Test] + public async Task When_Building_An_Async_Pipeline_Preserve_The_Order() { _pipeline = _pipeline_Builder.BuildAsync(new MyCommand(), new RequestContext(), false).First(); - var trace = PipelineTracer().ToString(); - Assert.Equal("MyLoggingHandlerAsync`1|MyValidationHandlerAsync`1|MyDoubleDecoratedHandlerAsync|", trace); + await Assert.That(trace).IsEqualTo("MyLoggingHandlerAsync`1|MyValidationHandlerAsync`1|MyDoubleDecoratedHandlerAsync|"); } + private PipelineTracer PipelineTracer() { var pipelineTracer = new PipelineTracer(); @@ -44,4 +38,4 @@ private PipelineTracer PipelineTracer() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_That_Has_Sync_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_That_Has_Sync_Handlers.cs index 2e6129ee26..2a56cea729 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_That_Has_Sync_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Building_An_Async_Pipeline_That_Has_Sync_Handlers.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -13,31 +12,25 @@ public class PipelineMixedHandlersAsyncTests private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync _pipeline; private Exception _exception; - public PipelineMixedHandlersAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _pipelineBuilder = new PipelineBuilder(registry, (IAmAHandlerFactoryAsync)handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Building_An_Async_Pipeline_That_Has_Sync_Handlers() + [Test] + public async Task When_Building_An_Async_Pipeline_That_Has_Sync_Handlers() { _exception = Catch.Exception(() => _pipeline = _pipelineBuilder.BuildAsync(new MyCommand(), new RequestContext(), false).First()); - - Assert.NotNull(_exception); - Assert.IsType(_exception); - Assert.Contains(typeof(MyLoggingHandler<>).Name, _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception.Message).Contains(typeof(MyLoggingHandler<>).Name); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler.cs index 28619a3fc5..bc69a93167 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -11,24 +10,21 @@ public class PipelineForCommandTests private readonly PipelineBuilder _chainBuilder; private IHandleRequests _chainOfResponsibility; private readonly RequestContext _requestContext; - public PipelineForCommandTests() { var registry = new SubscriberRegistry(); registry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyCommandHandler(new Dictionary())); _requestContext = new RequestContext(); - _chainBuilder = new PipelineBuilder(registry, handlerFactory); } - [Fact] - public void When_Creating_Context_For_A_Handler() + [Test] + public async Task When_Creating_Context_For_A_Handler() { _chainOfResponsibility = _chainBuilder.Build(new MyCommand(), _requestContext).First(); - - Assert.NotNull(_chainOfResponsibility.Context); - Assert.Same(_requestContext, _chainOfResponsibility.Context); + await Assert.That(_chainOfResponsibility.Context).IsNotNull(); + await Assert.That(_chainOfResponsibility.Context).IsSameReferenceAs(_requestContext); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs index 7758f4be60..736d336eed 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -12,24 +11,21 @@ public class PipelineForCommandAsyncTests private static IHandleRequestsAsync _chainOfResponsibility; private static RequestContext _requestContext; private readonly IDictionary _receivedMessages = new Dictionary(); - public PipelineForCommandAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(_receivedMessages)); _requestContext = new RequestContext(); - _chainBuilder = new PipelineBuilder(registry, asyncHandlerFactory: handlerFactory); } - [Fact] - public void When_Creating_Context_For_A_Handler_Async() + [Test] + public async Task When_Creating_Context_For_A_Handler_Async() { _chainOfResponsibility = _chainBuilder.BuildAsync(new MyCommand(), _requestContext, false).First(); - - Assert.NotNull(_chainOfResponsibility.Context); - Assert.Same(_requestContext, _chainOfResponsibility.Context); + await Assert.That(_chainOfResponsibility.Context).IsNotNull(); + await Assert.That(_chainOfResponsibility.Context).IsSameReferenceAs(_requestContext); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Hander_That_Has_Dependencies.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Hander_That_Has_Dependencies.cs index 1ba322e81c..c5da870cf7 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Hander_That_Has_Dependencies.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Hander_That_Has_Dependencies.cs @@ -1,40 +1,34 @@ -using System; +using System; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { public class PipelineWithHandlerDependenciesTests - { - private readonly PipelineBuilder _pipelineBuilder; - private IHandleRequests _pipeline; + private readonly PipelineBuilder _pipelineBuilder; + private IHandleRequests _pipeline; + public PipelineWithHandlerDependenciesTests() + { + var registry = new SubscriberRegistry(); + registry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyDependentCommandHandler(new FakeRepository(new FakeSession()))); + _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); + } - public PipelineWithHandlerDependenciesTests() - { - var registry = new SubscriberRegistry(); - registry.Register(); - var handlerFactory = - new SimpleHandlerFactorySync(_ => new MyDependentCommandHandler(new FakeRepository(new FakeSession()))); + [Test] + public async Task When_Finding_A_Handler_That_Has_Dependencies() + { + _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); + await Assert.That(_pipeline).IsTypeOf(); + await Assert.That(TracePipeline().ToString()).IsEqualTo("MyDependentCommandHandler|"); + } - _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); - PipelineBuilder.ClearPipelineCache(); - } - - [Fact] - public void When_Finding_A_Handler_That_Has_Dependencies() - { - _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - - Assert.IsType(_pipeline); - Assert.Equal("MyDependentCommandHandler|", TracePipeline().ToString()); - } - private PipelineTracer TracePipeline() - { - var pipelineTracer = new PipelineTracer(); - _pipeline.DescribePath(pipelineTracer); - return pipelineTracer; - } + private PipelineTracer TracePipeline() + { + var pipelineTracer = new PipelineTracer(); + _pipeline.DescribePath(pipelineTracer); + return pipelineTracer; + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command.cs index b635b67843..151c410d27 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -10,25 +9,22 @@ public class PipelineBuildForCommandTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests? _pipeline; - public PipelineBuildForCommandTests() { var registry = new SubscriberRegistry(); registry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyCommandHandler(new Dictionary())); - _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Finding_A_Handler_For_A_Command() + [Test] + public async Task When_Finding_A_Handler_For_A_Command() { _pipeline = _pipelineBuilder.Build(new MyCommand(), new RequestContext()).First(); - - Assert.IsType(_pipeline); - Assert.Equal("MyCommandHandler|", TracePipeline().ToString()); + await Assert.That(_pipeline).IsTypeOf(); + await Assert.That(TracePipeline().ToString()).IsEqualTo("MyCommandHandler|"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -36,4 +32,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_Async.cs index 97dff3a43d..8240866d75 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_Async.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -10,25 +9,22 @@ public class PipelineBuildForCommandAsyncTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync _pipeline; - - public PipelineBuildForCommandAsyncTests () + public PipelineBuildForCommandAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(new Dictionary())); - _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Finding_A_Handler_For_A_Command() + [Test] + public async Task When_Finding_A_Handler_For_A_Command() { _pipeline = _pipelineBuilder.BuildAsync(new MyCommand(), new RequestContext(), true).First(); - - Assert.IsType(_pipeline); - Assert.Equal("MyCommandHandlerAsync|", TracePipeline().ToString()); + await Assert.That(_pipeline).IsTypeOf(); + await Assert.That(TracePipeline().ToString()).IsEqualTo("MyCommandHandlerAsync|"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -36,4 +32,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement.cs index 1ad59910b4..53d4cce35f 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -10,34 +9,28 @@ public class PipelineBuildForAgreementTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequests? _pipeline; - - public PipelineBuildForAgreementTests () + public PipelineBuildForAgreementTests() { var registry = new SubscriberRegistry(); registry.Register(router: (request, context) => { var command = request as MyCommand; if (command.Value == "new") - return [typeof(MyCommandHandler)]; - - return [typeof(MyObsoleteCommandHandler)]; - }, - [typeof(MyCommandHandler), typeof(MyObsoleteCommandHandler)] - ); + return[typeof(MyCommandHandler)]; + return[typeof(MyObsoleteCommandHandler)]; + }, [typeof(MyCommandHandler), typeof(MyObsoleteCommandHandler)]); var handlerFactory = new SimpleHandlerFactorySync(factoryMethod: _ => new MyCommandHandler(new Dictionary())); - _pipelineBuilder = new PipelineBuilder(subscriberRegistry: registry, syncHandlerFactory: handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Finding_A_Handler_For_A_Command() + [Test] + public async Task When_Finding_A_Handler_For_A_Command() { - _pipeline = _pipelineBuilder.Build(new MyCommand {Value = "new"}, new RequestContext()).First(); - - Assert.IsType(_pipeline); - Assert.Equal("MyCommandHandler|", TracePipeline().ToString()); + _pipeline = _pipelineBuilder.Build(new MyCommand { Value = "new" }, new RequestContext()).First(); + await Assert.That(_pipeline).IsTypeOf(); + await Assert.That(TracePipeline().ToString()).IsEqualTo("MyCommandHandler|"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -45,4 +38,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement_Async.cs index 724a5b26bf..4801a6ac8b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Finding_A_Handler_For_A_Command_By_Agreement_Async.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -10,34 +9,28 @@ public class PipelineBuildForAgreementAsyncTests { private readonly PipelineBuilder _pipelineBuilder; private IHandleRequestsAsync? _pipeline; - - public PipelineBuildForAgreementAsyncTests () + public PipelineBuildForAgreementAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(router: (request, context) => { var command = request as MyCommand; if (command.Value == "new") - return [typeof(MyCommandHandlerAsync)]; - - return [typeof(MyObsoleteCommandHandlerAsync)]; - }, - [typeof(MyCommandHandlerAsync), typeof(MyObsoleteCommandHandlerAsync)] - ); + return[typeof(MyCommandHandlerAsync)]; + return[typeof(MyObsoleteCommandHandlerAsync)]; + }, [typeof(MyCommandHandlerAsync), typeof(MyObsoleteCommandHandlerAsync)]); var handlerFactory = new SimpleHandlerFactoryAsync(factoryMethod: _ => new MyCommandHandlerAsync(new Dictionary())); - _pipelineBuilder = new PipelineBuilder(subscriberRegistry: registry, asyncHandlerFactory: handlerFactory); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Finding_A_Handler_For_A_Command() + [Test] + public async Task When_Finding_A_Handler_For_A_Command() { - _pipeline = _pipelineBuilder.BuildAsync(new MyCommand {Value = "new"}, new RequestContext(), true).First(); - - Assert.IsType(_pipeline); - Assert.Equal("MyCommandHandlerAsync|", TracePipeline().ToString()); + _pipeline = _pipelineBuilder.BuildAsync(new MyCommand { Value = "new" }, new RequestContext(), true).First(); + await Assert.That(_pipeline).IsTypeOf(); + await Assert.That(TracePipeline().ToString()).IsEqualTo("MyCommandHandlerAsync|"); } + private PipelineTracer TracePipeline() { var pipelineTracer = new PipelineTracer(); @@ -45,4 +38,4 @@ private PipelineTracer TracePipeline() return pipelineTracer; } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs index bf1c9eb530..0229a2abd8 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; @@ -8,7 +8,6 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -16,62 +15,36 @@ public class CommandProcessorBuildDefaultInboxPublishTests { private readonly CommandProcessor _commandProcessor; private readonly InMemoryInbox _inbox = new InMemoryInbox(new FakeTimeProvider()); - public CommandProcessorBuildDefaultInboxPublishTests() { var handler = new MyGlobalInboxEventHandler(new Dictionary()); - var subscriberRegistry = new SubscriberRegistry(); //This handler has no Inbox attribute subscriberRegistry.Add(typeof(MyEvent), typeof(MyGlobalInboxEventHandler)); - var container = new ServiceCollection(); container.AddSingleton(handler); container.AddSingleton(_inbox); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - _inbox, - InboxScope.All, //grab all the events - onceOnly: true, //only allow once - actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) - ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry {{CommandProcessor.RETRYPOLICY, retryPolicy}, {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}}, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration + var retryPolicy = Policy.Handle().Retry(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(_inbox, InboxScope.All, //grab all the events + onceOnly: true, //only allow once + actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) ); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - - [Fact] - public void WhenInsertingADefaultInboxIntoThePublishPipeline() + [Test] + public async Task WhenInsertingADefaultInboxIntoThePublishPipeline() { //act var @event = new MyEvent(); _commandProcessor.Publish(@event); - //assert we are in, and auto-context added us under our name var boxed = _inbox.Exists(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs index 8e330aa9db..e80ac00c73 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -8,7 +8,6 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -16,61 +15,34 @@ public class CommandProcessorBuildDefaultInboxPublishAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly InMemoryInbox _inbox = new InMemoryInbox(new FakeTimeProvider()); - public CommandProcessorBuildDefaultInboxPublishAsyncTests() { var handler = new MyEventHandlerAsync(new Dictionary()); - var subscriberRegistry = new SubscriberRegistry(); //This handler has no Inbox attribute subscriberRegistry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(handler); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton( - new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - _inbox //throw on duplicates (we should be the only entry after) - ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry - { - { CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, - { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } - }, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration + var retryPolicy = Policy.Handle().RetryAsync(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(_inbox //throw on duplicates (we should be the only entry after) ); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - [Fact] + [Test] public async Task WhenInsertingADefaultInboxIntoTheSendPipeline() { //act var @event = new MyEvent(); await _commandProcessor.SendAsync(@event); - //assert we are in, and auto-context added us under our name var boxed = await _inbox.ExistsAsync(@event.Id, typeof(MyEventHandlerAsync).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline.cs index 336a1b74dc..68d5370c48 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; @@ -8,7 +8,6 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -17,63 +16,41 @@ public class CommandProcessorBuildDefaultInboxSendTests private readonly CommandProcessor _commandProcessor; private readonly ServiceProvider _provider; private readonly Dictionary _receivedMessages = new(); - public CommandProcessorBuildDefaultInboxSendTests() { var subscriberRegistry = new SubscriberRegistry(); //This handler has no Inbox attribute subscriberRegistry.Add(typeof(MyCommand), typeof(MyCommandHandler)); - var container = new ServiceCollection(); container.AddTransient(_ => new MyCommandHandler(_receivedMessages)); container.AddSingleton(new InMemoryInbox(new FakeTimeProvider())); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); var handlerFactory = new ServiceProviderHandlerFactory(_provider); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - new InMemoryInbox(new FakeTimeProvider()), - InboxScope.All, //grab all the events - onceOnly: true, //only allow once - actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) + var retryPolicy = Policy.Handle().Retry(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(new InMemoryInbox(new FakeTimeProvider()), InboxScope.All, //grab all the events + onceOnly: true, //only allow once + actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry {{CommandProcessor.RETRYPOLICY, retryPolicy}, {CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}}, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration - ); - - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - - [Fact] - public void WhenInsertingADefaultInboxIntoTheSendPipeline() + [Test] + public async Task WhenInsertingADefaultInboxIntoTheSendPipeline() { //act - var command = new MyCommand {Value = "Inbox Capture"}; + var command = new MyCommand + { + Value = "Inbox Capture" + }; _commandProcessor.Send(command); - //assert we are in, and auto-context added us under our name var inbox = _provider.GetService(); - Assert.NotNull(inbox); + await Assert.That(inbox).IsNotNull(); var boxed = inbox.Exists(command.Id, typeof(MyCommandHandler).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline_Async.cs index e27fc61d61..13b796626e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Send_Pipeline_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -8,68 +8,44 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { - public class CommandProcessorBuildDefaultInboxSendAsyncTests + public class CommandProcessorBuildDefaultInboxSendAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly InMemoryInbox _inbox = new(new FakeTimeProvider()); - public CommandProcessorBuildDefaultInboxSendAsyncTests() { - var handler = new MyCommandHandlerAsync(new Dictionary()); - - var subscriberRegistry = new SubscriberRegistry(); - //This handler has no Inbox attribute - subscriberRegistry.RegisterAsync(); - - var container = new ServiceCollection(); - container.AddSingleton(handler); - container.AddSingleton(_inbox); - container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + var handler = new MyCommandHandlerAsync(new Dictionary()); + var subscriberRegistry = new SubscriberRegistry(); + //This handler has no Inbox attribute + subscriberRegistry.RegisterAsync(); + var container = new ServiceCollection(); + container.AddSingleton(handler); + container.AddSingleton(_inbox); + container.AddTransient>(); + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - _inbox //throw on duplicates (we should be the only entry after) + var retryPolicy = Policy.Handle().RetryAsync(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(_inbox //throw on duplicates (we should be the only entry after) ); - - _commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry - { - { CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, - { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } - }, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration - ); + _commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - - [Fact] + + [Test] public async Task WhenInsertingADefaultInboxIntoTheSendPipeline() { //act - var command = new MyCommand {Value = "Inbox Capture"}; + var command = new MyCommand + { + Value = "Inbox Capture" + }; await _commandProcessor.SendAsync(command); - //assert we are in, and auto-context added us under our name var boxed = await _inbox.ExistsAsync(command.Id, typeof(MyCommandHandlerAsync).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_There_Is_No_Sync_Or_Async_Handler_Factories.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_There_Is_No_Sync_Or_Async_Handler_Factories.cs index 6be19d6d8f..cc26c0905e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_There_Is_No_Sync_Or_Async_Handler_Factories.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_There_Is_No_Sync_Or_Async_Handler_Factories.cs @@ -1,57 +1,37 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline; - public class CommandProcessorNoHandlerFactoriesTests { private Exception _exception; - - [Fact] - public void When_There_Are_No_Command_Handlers_Async() + [Test] + public async Task When_There_Are_No_Command_Handlers_Async() { var container = new ServiceCollection(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - _exception = Catch.Exception(() => new CommandProcessor( - new SubscriberRegistry(), - null, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory())); - - Assert.IsType(_exception); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); + _exception = Catch.Exception(() => new CommandProcessor(new SubscriberRegistry(), null, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory())); + await Assert.That(_exception).IsTypeOf(); //_should_have_an_error_message_that_tells_you_why - Assert.NotNull(_exception); - Assert.Contains("No HandlerFactory has been set - either an instance of IAmAHandlerFactorySync or IAmAHandlerFactoryAsync needs to be set", _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("No HandlerFactory has been set - either an instance of IAmAHandlerFactorySync or IAmAHandlerFactoryAsync needs to be set"); } - [Fact] - public void When_using_IAmAHandlerFactory() + [Test] + public async Task When_using_IAmAHandlerFactory() { var container = new ServiceCollection(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - _exception = Catch.Exception(() => new CommandProcessor( - new SubscriberRegistry(), - new DummyHandlerFactory(), - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory())); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); + _exception = Catch.Exception(() => new CommandProcessor(new SubscriberRegistry(), new DummyHandlerFactory(), new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory())); //_should_fail_because_no_handler_factories_have_been_set - Assert.IsType(_exception); - + await Assert.That(_exception).IsTypeOf(); //_should_have_an_error_message_that_tells_you_why - Assert.NotNull(_exception); - Assert.Contains("No HandlerFactory has been set - either an instance of IAmAHandlerFactorySync or IAmAHandlerFactoryAsync needs to be set", _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("No HandlerFactory has been set - either an instance of IAmAHandlerFactorySync or IAmAHandlerFactoryAsync needs to be set"); } - sealed class DummyHandlerFactory : IAmAHandlerFactory; -} + + sealed class DummyHandlerFactory : Paramore.Brighter.IAmAHandlerFactory; +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs index 7296f95fc8..5a3b179e5d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs @@ -1,7 +1,6 @@ using System; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { @@ -9,31 +8,27 @@ public class PipelineCleanupTests { private readonly PipelineBuilder _pipelineBuilder; private static string s_released; - public PipelineCleanupTests() { s_released = string.Empty; - var registry = new SubscriberRegistry(); registry.Register(); registry.Register>(); - var handlerFactory = new CheapHandlerFactorySync(); - _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); _pipelineBuilder.Build(new MyCommand(), new RequestContext()).Any(); } - [Fact] - public void When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers() + [Test] + public async Task When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers() { _pipelineBuilder.Dispose(); - - Assert.True(MyPreAndPostDecoratedHandler.DisposeWasCalled); - Assert.True(MyLoggingHandler.DisposeWasCalled); - Assert.Equal("|MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|MyLoggingHandler`1", s_released); + await Assert.That(MyPreAndPostDecoratedHandler.DisposeWasCalled).IsTrue(); + await Assert.That(MyLoggingHandler.DisposeWasCalled).IsTrue(); + await Assert.That(s_released).IsEqualTo("|MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|MyLoggingHandler`1"); } - internal sealed class CheapHandlerFactorySync : IAmAHandlerFactorySync + + internal sealed class CheapHandlerFactorySync : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory { public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { @@ -41,14 +36,17 @@ public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { return new MyPreAndPostDecoratedHandler(); } + if (handlerType == typeof(MyLoggingHandler)) { return new MyLoggingHandler(); } + if (handlerType == typeof(MyValidationHandler)) { return new MyValidationHandler(); } + return null; } @@ -56,9 +54,8 @@ public void Release(IHandleRequests handler, IAmALifetime lifetime) { var disposable = handler as IDisposable; disposable?.Dispose(); - s_released += "|" + handler.Name; } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry.cs index 92419862d2..a422f68406 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -15,56 +14,29 @@ public class CommandProcessorNoMessageMapperTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); - public CommandProcessorNoMessageMapperTests() { var routingKey = new RoutingKey("MyCommand"); _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer messageProducer = - new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - { routingKey, messageProducer }, - }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + InMemoryMessageProducer messageProducer = new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - var outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + var outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] - public void When_Posting_A_Message_And_There_Is_No_Message_Mapper_Factory() + [Test] + public async Task When_Posting_A_Message_And_There_Is_No_Message_Mapper_Factory() { var exception = Catch.Exception(() => _commandProcessor.Post(_myCommand)); - Assert.IsType(exception); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry_Async.cs index 116c414006..6bbd5fbfd0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Mapper_Registry_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; @@ -8,7 +8,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -16,53 +15,29 @@ public class CommandProcessorNoMessageMapperAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new(); - public CommandProcessorNoMessageMapperAsyncTests() { var routingKey = new RoutingKey("MyCommand"); _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer messageProducer = - new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{routingKey, messageProducer},}); - + InMemoryMessageProducer messageProducer = new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, }); var tracer = new BrighterTracer(timeProvider); - var outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + var outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Posting_A_Message_And_There_Is_No_Message_Mapper_Factory_Async() { var exception = await Catch.ExceptionAsync(() => _commandProcessor.PostAsync(_myCommand)); - Assert.IsType(exception); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Producer.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Producer.cs index fe2ee4b416..e75b9f6462 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Producer.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Producer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Transactions; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -16,38 +15,25 @@ public class CommandProcessorPostMissingMessageProducerTests private readonly InMemoryOutbox _outbox; private readonly MessageMapperRegistry _messageMapperRegistry; private readonly IAmABrighterTracer _tracer; - public CommandProcessorPostMissingMessageProducerTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); _tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = _tracer}; - - _messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = _tracer + }; + _messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); _messageMapperRegistry.Register(); } - [Fact] - public void When_Creating_A_Command_Processor_Without_Producer_Registry() + [Test] + public async Task When_Creating_A_Command_Processor_Without_Producer_Registry() { - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var exception = Catch.Exception(() => new OutboxProducerMediator( - null!, - resiliencePipelineRegistry, - _messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - _tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox) - ); - - Assert.IsType(exception); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var exception = Catch.Exception(() => new OutboxProducerMediator(null!, resiliencePipelineRegistry, _messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), _tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox)); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer.cs index e344c525a7..ad9231c3a3 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -19,48 +18,27 @@ public class CommandProcessorPostMissingMessageTransformerTests private readonly MessageMapperRegistry _messageMapperRegistry; private readonly ProducerRegistry _producerRegistry; private readonly IAmABrighterTracer _tracer; - public CommandProcessorPostMissingMessageTransformerTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); _tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = _tracer}; - + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = _tracer + }; var routingKey = new RoutingKey("MyTopic"); - - _messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + _messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); _messageMapperRegistry.Register(); + _producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }) }, }); + } - _producerRegistry = new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication {Topic = routingKey, RequestType = typeof(MyCommand) }) - }, - }); - } - - [Fact] - public void When_Creating_A_Command_Processor_Without_Message_Transformer() - { - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var exception = Catch.Exception(() => new OutboxProducerMediator( - _producerRegistry, - resiliencePipelineRegistry, - _messageMapperRegistry, - null!, - new EmptyMessageTransformerFactoryAsync(), - _tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox) - ); - - Assert.IsType(exception); + [Test] + public async Task When_Creating_A_Command_Processor_Without_Message_Transformer() + { + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var exception = Catch.Exception(() => new OutboxProducerMediator(_producerRegistry, resiliencePipelineRegistry, _messageMapperRegistry, null!, new EmptyMessageTransformerFactoryAsync(), _tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox)); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer_Async.cs index aaf7090250..929ff286ef 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_And_There_Is_No_Message_Transformer_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -18,47 +17,27 @@ public class CommandProcessorPostMissingMessageTransformerTestsAsync private readonly MessageMapperRegistry _messageMapperRegistry; private readonly ProducerRegistry _producerRegistry; private readonly IAmABrighterTracer _tracer; - public CommandProcessorPostMissingMessageTransformerTestsAsync() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); _tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = _tracer}; - - _messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = _tracer + }; + _messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); _messageMapperRegistry.Register(); - var routingKey = new RoutingKey("MyTopic"); - - _producerRegistry = new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }) - } - }); - } - - [Fact] - public void When_Creating_A_Command_Processor_Without_Message_Transformer_Async() - { - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var exception = Catch.Exception(() => new OutboxProducerMediator( - _producerRegistry, - resiliencePipelineRegistry, - _messageMapperRegistry, - new EmptyMessageTransformerFactory(), - null!, - _tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox) - ); + _producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }) } }); + } - Assert.IsType(exception); + [Test] + public async Task When_Creating_A_Command_Processor_Without_Message_Transformer_Async() + { + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var exception = Catch.Exception(() => new OutboxProducerMediator(_producerRegistry, resiliencePipelineRegistry, _messageMapperRegistry, new EmptyMessageTransformerFactory(), null!, _tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox)); + await Assert.That(exception).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs index 1347addfe1..5063e59b9f 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; @@ -11,7 +11,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -26,83 +25,30 @@ public class CommandProcessorPostCommandTests private readonly PartitionKey _partitionKey = new(Uuid.NewAsString()); private readonly Id _workflowId = Id.Random(); private readonly Id _jobId = Id.Random(); - public CommandProcessorPostCommandTests() { _myCommand.Value = "Hello World"; _myCommand.CorrelationId = Id.Random(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey(Topic); - var cloudEventsType = new CloudEventsType("go.paramore.brighter.test"); - - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication() - { - DataSchema = new Uri("https://goparamore.io/schemas/MyCommand.json"), - Source = new Uri("https://goparamore.io"), - Subject = "MyCommand", - Topic = routingKey, - Type = cloudEventsType, - ReplyTo = "MyEvent", - RequestType = typeof(MyCommand) - }); - - _expectedMessage = new Message( - new MessageHeader( - messageId:_myCommand.Id, - topic: routingKey, - messageType: MessageType.MT_COMMAND, - source: messageProducer.Publication.Source, - type: messageProducer.Publication.Type, - correlationId: _myCommand.CorrelationId, - replyTo: messageProducer.Publication.ReplyTo, - contentType: new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - partitionKey: _partitionKey, - dataSchema: messageProducer.Publication.DataSchema, - subject: messageProducer.Publication.Subject, - workflowId: _workflowId, - jobId: _jobId - ), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication() { DataSchema = new Uri("https://goparamore.io/schemas/MyCommand.json"), Source = new Uri("https://goparamore.io"), Subject = "MyCommand", Topic = routingKey, Type = cloudEventsType, ReplyTo = "MyEvent", RequestType = typeof(MyCommand) }); + _expectedMessage = new Message(new MessageHeader(messageId: _myCommand.Id, topic: routingKey, messageType: MessageType.MT_COMMAND, source: messageProducer.Publication.Source, type: messageProducer.Publication.Type, correlationId: _myCommand.CorrelationId, replyTo: messageProducer.Publication.ReplyTo, contentType: new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, partitionKey: _partitionKey, dataSchema: messageProducer.Publication.DataSchema, subject: messageProducer.Publication.Subject, workflowId: _workflowId, jobId: _jobId), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{new (routingKey, cloudEventsType), messageProducer},}); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var producerRegistry = new ProducerRegistry(new Dictionary { { new(routingKey, cloudEventsType), messageProducer }, }); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] - public void When_Posting_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Posting_A_Message_To_The_Command_Processor() { var requestContext = new RequestContext { @@ -113,15 +59,11 @@ public void When_Posting_A_Message_To_The_Command_Processor() [RequestContextBagNames.JobId] = _jobId } }; - _commandProcessor.Post(_myCommand, requestContext); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var message = _outbox.Get(_myCommand.Id, requestContext); - Assert.NotNull(message); - - Assert.Equal(_expectedMessage, message); + await Assert.That(message).IsNotNull(); + await Assert.That(message).IsEqualTo(_expectedMessage); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_Async.cs index b6ba031e9b..8037b02777 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -12,7 +12,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -27,81 +26,28 @@ public class CommandProcessorPostCommandAsyncTests private readonly PartitionKey _partitionKey = new(Id.Random()); private readonly Id _workflowId = Id.Random(); private readonly Id _jobId = Id.Random(); - public CommandProcessorPostCommandAsyncTests() { _myCommand.Value = "Hello World"; _routingKey = new RoutingKey("MyCommand"); - var timeProvider = new FakeTimeProvider(); var cloudEventsType = new CloudEventsType("go.paramore.brighter.test"); - - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication() - { - DataSchema = new Uri("https://goparamore.io/schemas/MyCommand.json"), - Source = new Uri("https://goparamore.io"), - Subject = "MyCommand", - Topic = _routingKey, - Type = cloudEventsType, - ReplyTo = "MyEvent", - RequestType = typeof(MyCommand) - }); - - _expectedMessage = new Message( - new MessageHeader( - messageId:_myCommand.Id, - topic: _routingKey, - messageType: MessageType.MT_COMMAND, - source: messageProducer.Publication.Source, - type: messageProducer.Publication.Type, - correlationId: _myCommand.CorrelationId, - replyTo: messageProducer.Publication.ReplyTo, - contentType: new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - partitionKey: _partitionKey, - dataSchema: messageProducer.Publication.DataSchema, - subject: messageProducer.Publication.Subject, - workflowId: _workflowId, - jobId: _jobId - ), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync()) - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication() { DataSchema = new Uri("https://goparamore.io/schemas/MyCommand.json"), Source = new Uri("https://goparamore.io"), Subject = "MyCommand", Topic = _routingKey, Type = cloudEventsType, ReplyTo = "MyEvent", RequestType = typeof(MyCommand) }); + _expectedMessage = new Message(new MessageHeader(messageId: _myCommand.Id, topic: _routingKey, messageType: MessageType.MT_COMMAND, source: messageProducer.Publication.Source, type: messageProducer.Publication.Type, correlationId: _myCommand.CorrelationId, replyTo: messageProducer.Publication.ReplyTo, contentType: new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, partitionKey: _partitionKey, dataSchema: messageProducer.Publication.DataSchema, subject: messageProducer.Publication.Subject, workflowId: _workflowId, jobId: _jobId), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{new ProducerKey(_routingKey, cloudEventsType) , messageProducer},}); - - var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, cloudEventsType), messageProducer }, }); + var tracer = new BrighterTracer(timeProvider); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Posting_A_Message_To_The_Command_Processor_Async() { var requestContext = new RequestContext @@ -113,17 +59,12 @@ public async Task When_Posting_A_Message_To_The_Command_Processor_Async() [RequestContextBagNames.JobId] = _jobId } }; - await _commandProcessor.PostAsync(_myCommand, requestContext); - - Assert.True(_internalBus.Stream(_routingKey).Any()); - + await Assert.That(_internalBus.Stream(_routingKey).Any()).IsTrue(); var message = await _outbox.GetAsync(_myCommand.Id, requestContext); - Assert.NotNull(message); - + await Assert.That(message).IsNotNull(); Debug.Assert(_expectedMessage == message); - Assert.Equal(_expectedMessage, message); - + await Assert.That(message).IsEqualTo(_expectedMessage); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs index 34b5d4ae84..981aea5f23 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -33,7 +31,6 @@ THE SOFTWARE. */ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -46,74 +43,42 @@ public class CommandProcessorPostCommandWithTransactionProviderTests private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider; private readonly InternalBus _internalBus = new(); - public CommandProcessorPostCommandWithTransactionProviderTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey(Topic); - - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication {Topic = routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, contentType: new ContentType(MediaTypeNames.Application.Json) {CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, contentType: new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{routingKey, messageProducer},}); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - _spyOutbox = new SpyOutbox {Tracer = tracer}; + _spyOutbox = new SpyOutbox + { + Tracer = tracer + }; _transactionProvider = new SpyTransactionProvider(); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - new ResiliencePipelineRegistry(), - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), new ResiliencePipelineRegistry(), bus, scheduler, typeof(SpyTransaction)); } - [Fact] - public void When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Configured() + [Test] + public async Task When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Configured() { var requestContext = new RequestContext(); _commandProcessor.Post(_myCommand, requestContext); - //message should not be in the current transaction var transaction = _transactionProvider.GetTransaction(); - Assert.Null(transaction.Get(_myCommand.Id)); - + await Assert.That(transaction.Get(_myCommand.Id)).IsNull(); //message should have been posted - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); //message should be in the outbox var message = _spyOutbox.Get(_myCommand.Id, requestContext); - Assert.NotNull(message); - Assert.Equal(_message, message); + await Assert.That(message).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs index 1ee27d6c80..561305999d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -34,7 +32,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -47,73 +44,41 @@ public class CommandProcessorPostCommandWithTransactionProviderTestsAsync private readonly SpyOutbox _spyOutbox; private readonly SpyTransactionProvider _transactionProvider; private readonly InternalBus _internalBus = new(); - public CommandProcessorPostCommandWithTransactionProviderTestsAsync() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey(Topic); - - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication {Topic = routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync()) - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{routingKey, messageProducer},}); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - _spyOutbox = new SpyOutbox() {Tracer = tracer}; + _spyOutbox = new SpyOutbox() + { + Tracer = tracer + }; _transactionProvider = new SpyTransactionProvider(); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _spyOutbox - ); - + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _spyOutbox); var scheduler = new InMemorySchedulerFactory(); - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - scheduler, - typeof(SpyTransaction) - ); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, scheduler, typeof(SpyTransaction)); } - [Fact] + [Test] public async Task When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Configured_Async() { await _commandProcessor.PostAsync(_myCommand); - //message should not be in the current transaction var transaction = _transactionProvider.GetTransaction(); - Assert.Null(transaction.Get(_myCommand.Id)); - + await Assert.That(transaction.Get(_myCommand.Id)).IsNull(); //message should have been posted - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); //message should be in the outbox var message = _spyOutbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(message); - Assert.Equal(_message, message); + await Assert.That(message).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Fails_Limit_Total_Writes_To_OutBox_In_Window.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Fails_Limit_Total_Writes_To_OutBox_In_Window.cs index bb4e067561..745307b3e8 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Fails_Limit_Total_Writes_To_OutBox_In_Window.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Fails_Limit_Total_Writes_To_OutBox_In_Window.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -8,7 +8,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -17,91 +16,74 @@ public class PostFailureLimitCommandTests private readonly CommandProcessor _commandProcessor; private readonly InMemoryOutbox _outbox; private readonly FakeTimeProvider _timeProvider; - public PostFailureLimitCommandTests() { var routingKey = new RoutingKey("MyCommand"); - - IAmAMessageProducer producer = new FakeErroringMessageProducerSync{Publication = { Topic = routingKey, RequestType = typeof(MyCommand)}}; - - var messageMapperRegistry = - new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + IAmAMessageProducer producer = new FakeErroringMessageProducerSync + { + Publication = + { + Topic = routingKey, + RequestType = typeof(MyCommand) + } + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - _timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(); - _outbox = new InMemoryOutbox(_timeProvider) {Tracer = tracer}; - - var producerRegistry = - new ProducerRegistry(new Dictionary { { routingKey, producer }, }); - - var externalBus = new OutboxProducerMediator( - producerRegistry: producerRegistry, - resiliencePipelineRegistry: new ResiliencePipelineRegistry().AddBrighterDefault(), - mapperRegistry: messageMapperRegistry, - messageTransformerFactory: new EmptyMessageTransformerFactory(), - messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), - tracer, - outbox: _outbox, - maxOutStandingMessages:3, - maxOutStandingCheckInterval: TimeSpan.FromMilliseconds(250), - publicationFinder: new FindPublicationByPublicationTopicOrRequestType() - ); - - _commandProcessor = CommandProcessorBuilder.StartNew() - .Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())) - .DefaultResilience() - .ExternalBus(ExternalBusType.FireAndForget, externalBus) - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer }, }); + var externalBus = new OutboxProducerMediator(producerRegistry: producerRegistry, resiliencePipelineRegistry: new ResiliencePipelineRegistry().AddBrighterDefault(), mapperRegistry: messageMapperRegistry, messageTransformerFactory: new EmptyMessageTransformerFactory(), messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), tracer, outbox: _outbox, maxOutStandingMessages: 3, maxOutStandingCheckInterval: TimeSpan.FromMilliseconds(250), publicationFinder: new FindPublicationByPublicationTopicOrRequestType()); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())).DefaultResilience().ExternalBus(ExternalBusType.FireAndForget, externalBus).ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] + [Test] public async Task When_Posting_Fails_Limit_Total_Writes_To_OutBox_In_Window() { - var sentList = new List(); + var sentList = new List(); bool shouldThrowException = false; try { do { - var command = new MyCommand{Value = $"Hello World: {sentList.Count + 1}"}; + var command = new MyCommand + { + Value = $"Hello World: {sentList.Count + 1}"}; _commandProcessor.Post(command); sentList.Add(command.Id); - _timeProvider.Advance(TimeSpan.FromMilliseconds(500)); - //We need to wait for the sweeper thread to check the outstanding in the outbox await Task.Delay(50); - - } while (sentList.Count < 10); + } + while (sentList.Count < 10); } catch (OutboxLimitReachedException) { shouldThrowException = true; } - + //We should error before the end - Assert.True(shouldThrowException); - + await Assert.That(shouldThrowException).IsTrue(); //should store the message in the sent outbox foreach (var id in sentList) { - Assert.NotNull( await _outbox.GetAsync(id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(id, new RequestContext())).IsNotNull(); } } - internal sealed class EmptyHandlerFactorySync : IAmAHandlerFactorySync + + internal sealed class EmptyHandlerFactorySync : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory { public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { return null!; } - public void Release(IHandleRequests handler, IAmALifetime lifetime) {} + public void Release(IHandleRequests handler, IAmALifetime lifetime) + { + } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs index d633a1f831..0313c5e5a7 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -11,7 +11,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyCommand = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post @@ -26,105 +25,58 @@ public class CommandProcessorPostCommandMultiChannelTopicTests private readonly Message _messageTwo; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - - public CommandProcessorPostCommandMultiChannelTopicTests () + public CommandProcessorPostCommandMultiChannelTopicTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey(Topic); - var cloudEventsType = new CloudEventsType("io.goparamore.brighter.mycommand"); var otherEventsType = new CloudEventsType("io.goparamore.brighter.myothercommand"); - - var messageProducer = new InMemoryMessageProducer( - _internalBus, - new Publication - { - Topic = routingKey, - Type = cloudEventsType, - RequestType = typeof(MyCommand) - } - ); - + var messageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, Type = cloudEventsType, RequestType = typeof(MyCommand) }); //This producer is for a different command type, but the same topic - var otherMessageProducer = new InMemoryMessageProducer( - _internalBus, - new Publication - { - Topic = routingKey, - Type = otherEventsType, - RequestType = typeof(MyOtherCommand) - }); - - _message = new Message( - new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, type: cloudEventsType), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - _messageTwo = new Message( - new MessageHeader(_myOtherCommand.Id, routingKey, MessageType.MT_COMMAND, type: otherEventsType), - new MessageBody(JsonSerializer.Serialize(_myOtherCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((mapperType) => mapperType switch - { - var t when mapperType == typeof(MyCommandMessageMapper) => new MyCommandMessageMapper(), - var t when mapperType == typeof(MyOtherCommandMessageMapper) => new MyOtherCommandMessageMapper() - }), - null); + var otherMessageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, Type = otherEventsType, RequestType = typeof(MyOtherCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, type: cloudEventsType), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + _messageTwo = new Message(new MessageHeader(_myOtherCommand.Id, routingKey, MessageType.MT_COMMAND, type: otherEventsType), new MessageBody(JsonSerializer.Serialize(_myOtherCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((mapperType) => mapperType switch + { + var t when mapperType == typeof(MyCommandMessageMapper) => new MyCommandMessageMapper(), + var t when mapperType == typeof(MyOtherCommandMessageMapper) => new MyOtherCommandMessageMapper()}), null); messageMapperRegistry.Register(); messageMapperRegistry.Register(); - var resiliencePipeline = new ResiliencePipelineRegistry().AddBrighterDefault(); var messageProducers = new Dictionary { - { new ProducerKey(routingKey, cloudEventsType), messageProducer }, - { new ProducerKey(routingKey, otherEventsType), otherMessageProducer } + { + new ProducerKey(routingKey, cloudEventsType), + messageProducer + }, + { + new ProducerKey(routingKey, otherEventsType), + otherMessageProducer + } }; - var producerRegistry = new ProducerRegistry(messageProducers); - var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipeline, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipeline, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipeline, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipeline, bus, new InMemorySchedulerFactory()); } - [Fact] - public void When_Posting_Dynamic_Messages_To_The_Command_Processor() + [Test] + public async Task When_Posting_Dynamic_Messages_To_The_Command_Processor() { _commandProcessor.Post(_myCommand); _commandProcessor.Post(_myOtherCommand); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var message = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(message); - + await Assert.That(message).IsNotNull(); var otherMessage = _outbox.Get(_myOtherCommand.Id, new RequestContext()); - Assert.NotNull(otherMessage); - - Assert.Equal(_message, message); - Assert.Equal(_messageTwo, otherMessage); + await Assert.That(otherMessage).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); + await Assert.That(otherMessage).IsEqualTo(_messageTwo); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs index fefdc49876..246c3fd680 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -12,7 +12,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyCommand = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post @@ -27,105 +26,58 @@ public class CommandProcessorPostCommandMultiChannelTopicAsyncTests private readonly Message _messageTwo; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - - public CommandProcessorPostCommandMultiChannelTopicAsyncTests () + public CommandProcessorPostCommandMultiChannelTopicAsyncTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey(Topic); - var cloudEventsType = new CloudEventsType("io.goparamore.brighter.mycommand"); var otherEventsType = new CloudEventsType("io.goparamore.brighter.myothercommand"); - - var messageProducer = new InMemoryMessageProducer( - _internalBus, - new Publication - { - Topic = routingKey, - Type = cloudEventsType, - RequestType = typeof(MyCommand) - } - ); - + var messageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, Type = cloudEventsType, RequestType = typeof(MyCommand) }); //This producer is for a different command type, but the same topic - var otherMessageProducer = new InMemoryMessageProducer( - _internalBus, - new Publication - { - Topic = routingKey, - Type = otherEventsType, - RequestType = typeof(MyOtherCommand) - }); - - _message = new Message( - new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, type: cloudEventsType), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - _messageTwo = new Message( - new MessageHeader(_myOtherCommand.Id, routingKey, MessageType.MT_COMMAND, type: otherEventsType), - new MessageBody(JsonSerializer.Serialize(_myOtherCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((mapperType) => mapperType switch - { - var t when mapperType == typeof(MyCommandMessageMapperAsync) => new MyCommandMessageMapperAsync(), - var t when mapperType == typeof(MyOtherCommandMessageMapperAsync) => new MyOtherCommandMessageMapperAsync() - })); + var otherMessageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, Type = otherEventsType, RequestType = typeof(MyOtherCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND, type: cloudEventsType), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + _messageTwo = new Message(new MessageHeader(_myOtherCommand.Id, routingKey, MessageType.MT_COMMAND, type: otherEventsType), new MessageBody(JsonSerializer.Serialize(_myOtherCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((mapperType) => mapperType switch + { + var t when mapperType == typeof(MyCommandMessageMapperAsync) => new MyCommandMessageMapperAsync(), + var t when mapperType == typeof(MyOtherCommandMessageMapperAsync) => new MyOtherCommandMessageMapperAsync()})); messageMapperRegistry.RegisterAsync(); messageMapperRegistry.RegisterAsync(); - var resiliencePipeline = new ResiliencePipelineRegistry().AddBrighterDefault(); var messageProducers = new Dictionary { - { new ProducerKey(routingKey, cloudEventsType), messageProducer }, - { new ProducerKey(routingKey, otherEventsType), otherMessageProducer } + { + new ProducerKey(routingKey, cloudEventsType), + messageProducer + }, + { + new ProducerKey(routingKey, otherEventsType), + otherMessageProducer + } }; - var producerRegistry = new ProducerRegistry(messageProducers); - var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipeline , - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipeline, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipeline, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipeline, bus, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Posting_Dynamic_Messages_To_The_Command_Processor() { await _commandProcessor.PostAsync(_myCommand); await _commandProcessor.PostAsync(_myOtherCommand); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var message = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(message); - + await Assert.That(message).IsNotNull(); var otherMessage = _outbox.Get(_myOtherCommand.Id, new RequestContext()); - Assert.NotNull(otherMessage); - - Assert.Equal(_message, message); - Assert.Equal(_messageTwo, otherMessage); + await Assert.That(otherMessage).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); + await Assert.That(otherMessage).IsEqualTo(_messageTwo); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs index 23c17719c4..4c54ee4139 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,88 +10,53 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { - public class ControlBusSenderPostMessageTests : IDisposable + public class ControlBusSenderPostMessageTests { private readonly ControlBusSender _controlBusSender; private readonly MyCommand _myCommand = new(); private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly FakeTimeProvider _timeProvider; - public ControlBusSenderPostMessageTests() { var routingKey = new RoutingKey("MyCommand"); _myCommand.Value = "Hello World"; - _timeProvider = new FakeTimeProvider(); - InMemoryMessageProducer messageProducer = - new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + InMemoryMessageProducer messageProducer = new(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{routingKey, messageProducer},}); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(_timeProvider); - _outbox = new InMemoryOutbox(_timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox, - timeProvider: _timeProvider - ); - - CommandProcessor commandProcessor = new( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); - + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox, timeProvider: _timeProvider); + CommandProcessor commandProcessor = new(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); _controlBusSender = new ControlBusSender(commandProcessor); } - [Fact] - public void When_Posting_Via_A_Control_Bus_Sender() + [Test] + public async Task When_Posting_Via_A_Control_Bus_Sender() { _controlBusSender.Post(_myCommand); - _timeProvider.Advance(TimeSpan.FromSeconds(30)); - //_should_store_the_message_in_the_sent_command_message_repository - var message = _outbox - .DispatchedMessages(TimeSpan.FromSeconds(10), new RequestContext(), 1) - .SingleOrDefault(); - - Assert.NotNull(message); - + var message = _outbox.DispatchedMessages(TimeSpan.FromSeconds(10), new RequestContext(), 1).SingleOrDefault(); + await Assert.That(message).IsNotNull(); //_should_convert_the_command_into_a_message - Assert.Equal(_message, message); + await Assert.That(message).IsEqualTo(_message); } + [After(Test)] public void Dispose() { _controlBusSender.Dispose(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender_Async.cs index 282aeff2be..a14876db11 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,11 +10,10 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { - public class ControlBusSenderPostMessageAsyncTests : IDisposable + public class ControlBusSenderPostMessageAsyncTests { private readonly RoutingKey _routingKey = new("MyCommand"); private readonly ControlBusSender _controlBusSender; @@ -22,75 +21,43 @@ public class ControlBusSenderPostMessageAsyncTests : IDisposable private readonly Message _message; private readonly IAmAnOutboxSync _outbox; private readonly InternalBus _internalBus = new(); - public ControlBusSenderPostMessageAsyncTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{_routingKey, messageProducer},}); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - var commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + var commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); _controlBusSender = new ControlBusSender(commandProcessor); } - [Fact(Skip = "Requires publisher confirmation")] + [Test, Skip("Requires publisher confirmation")] public async Task When_Posting_Via_A_Control_Bus_Sender_Async() { await _controlBusSender.PostAsync(_myCommand); - //_should_send_a_message_via_the_messaging_gateway - Assert.True(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); //_should_store_the_message_in_the_sent_command_message_repository - var message = _outbox - .DispatchedMessages(TimeSpan.FromMilliseconds(1200000), new RequestContext(), 1) - .SingleOrDefault(); - - Assert.NotNull(message); - + var message = _outbox.DispatchedMessages(TimeSpan.FromMilliseconds(1200000), new RequestContext(), 1).SingleOrDefault(); + await Assert.That(message).IsNotNull(); //_should_convert_the_command_into_a_message - Assert.Equal(_message, message); + await Assert.That(message).IsEqualTo(_message); } + [After(Test)] public void Dispose() { _controlBusSender.Dispose(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs index c2bec3b2fb..937889e568 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -12,10 +12,8 @@ using Polly; using Polly.Registry; using Polly.Retry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post; - public class PostCommandWithCustomPolicyTests { private readonly ResiliencePipelineRegistry _resiliencePipeline; @@ -25,80 +23,48 @@ public class PostCommandWithCustomPolicyTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public PostCommandWithCustomPolicyTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = - new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - _resiliencePipeline = new ResiliencePipelineRegistry(); _resiliencePipeline.AddBrighterDefault(); - _resiliencePipeline.TryAddBuilder("custom", - (builder, _) => builder - .AddRetry(new RetryStrategyOptions - { - Delay = TimeSpan.FromMilliseconds(50), - MaxRetryAttempts = 3, - BackoffType = DelayBackoffType.Linear - })); - + _resiliencePipeline.TryAddBuilder("custom", (builder, _) => builder.AddRetry(new RetryStrategyOptions { Delay = TimeSpan.FromMilliseconds(50), MaxRetryAttempts = 3, BackoffType = DelayBackoffType.Linear })); var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); - var externalBus = new OutboxProducerMediator( - producerRegistry: producerRegistry, - resiliencePipelineRegistry: _resiliencePipeline, - mapperRegistry: messageMapperRegistry, - messageTransformerFactory: new EmptyMessageTransformerFactory(), - messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), - tracer: tracer, - publicationFinder: new FindPublicationByPublicationTopicOrRequestType(), - outboxCircuitBreaker: new InMemoryOutboxCircuitBreaker(), - outbox: _outbox - ); - - _commandProcessor = CommandProcessorBuilder.StartNew() - .Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())) - .Resilience(_resiliencePipeline) - .ExternalBus(ExternalBusType.FireAndForget, externalBus) - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + var externalBus = new OutboxProducerMediator(producerRegistry: producerRegistry, resiliencePipelineRegistry: _resiliencePipeline, mapperRegistry: messageMapperRegistry, messageTransformerFactory: new EmptyMessageTransformerFactory(), messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), tracer: tracer, publicationFinder: new FindPublicationByPublicationTopicOrRequestType(), outboxCircuitBreaker: new InMemoryOutboxCircuitBreaker(), outbox: _outbox); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())).Resilience(_resiliencePipeline).ExternalBus(ExternalBusType.FireAndForget, externalBus).ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Posting_With_A_Custom_Policy() + [Test] + public async Task When_Posting_With_A_Custom_Policy() { var requestContext = new RequestContext(); _commandProcessor.Post(_myCommand, requestContext); - - Assert.True(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); var message = _outbox.Get(_myCommand.Id, requestContext); - Assert.NotNull(message); - Assert.Equal(_message, message); - Assert.Equal(_resiliencePipeline, requestContext.ResiliencePipeline); + await Assert.That(message).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); + await Assert.That(requestContext.ResiliencePipeline).IsEqualTo(_resiliencePipeline); } - internal sealed class EmptyHandlerFactorySync : IAmAHandlerFactorySync + + internal sealed class EmptyHandlerFactorySync : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory { public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { return null!; } - public void Release(IHandleRequests handler, IAmALifetime lifetime) {} + public void Release(IHandleRequests handler, IAmALifetime lifetime) + { + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs index 378a5d88ad..a4d231d474 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -10,7 +10,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -22,71 +21,44 @@ public class PostCommandTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public PostCommandTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = - new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = - new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); - - var externalBus = new OutboxProducerMediator( - producerRegistry: producerRegistry, - resiliencePipelineRegistry: new ResiliencePipelineRegistry().AddBrighterDefault(), - mapperRegistry: messageMapperRegistry, - messageTransformerFactory: new EmptyMessageTransformerFactory(), - messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), - tracer: tracer, - publicationFinder: new FindPublicationByPublicationTopicOrRequestType(), - outboxCircuitBreaker: new InMemoryOutboxCircuitBreaker(), - outbox: _outbox - ); - - _commandProcessor = CommandProcessorBuilder.StartNew() - .Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())) - .DefaultResilience() - .ExternalBus(ExternalBusType.FireAndForget, externalBus) - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var externalBus = new OutboxProducerMediator(producerRegistry: producerRegistry, resiliencePipelineRegistry: new ResiliencePipelineRegistry().AddBrighterDefault(), mapperRegistry: messageMapperRegistry, messageTransformerFactory: new EmptyMessageTransformerFactory(), messageTransformerFactoryAsync: new EmptyMessageTransformerFactoryAsync(), tracer: tracer, publicationFinder: new FindPublicationByPublicationTopicOrRequestType(), outboxCircuitBreaker: new InMemoryOutboxCircuitBreaker(), outbox: _outbox); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(new SubscriberRegistry(), new EmptyHandlerFactorySync())).DefaultResilience().ExternalBus(ExternalBusType.FireAndForget, externalBus).ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Posting_With_A_Default_Policy() + [Test] + public async Task When_Posting_With_A_Default_Policy() { _commandProcessor.Post(_myCommand); - - Assert.True(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); var message = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(message); - Assert.Equal(_message, message); + await Assert.That(message).IsNotNull(); + await Assert.That(message).IsEqualTo(_message); } - internal sealed class EmptyHandlerFactorySync : IAmAHandlerFactorySync + + internal sealed class EmptyHandlerFactorySync : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory { public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { return null!; } - public void Release(IHandleRequests handler, IAmALifetime lifetime) {} + public void Release(IHandleRequests handler, IAmALifetime lifetime) + { + } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs index 3eb157fd40..032cb5e824 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using System.Transactions; @@ -9,7 +9,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -21,60 +20,33 @@ public class CommandProcessorWithInMemoryOutboxTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorWithInMemoryOutboxTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = new RoutingKey(_routingKey), RequestType = typeof(MyCommand) }); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{_routingKey, messageProducer},}); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] - public void When_Posting_With_An_In_Memory_Outbox() + [Test] + public async Task When_Posting_With_An_In_Memory_Outbox() { var context = new RequestContext(); _commandProcessor.Post(_myCommand, context); - - Assert.NotNull(_outbox.Get(_myCommand.Id, context)); - Assert.NotEmpty(_internalBus.Stream(new RoutingKey(_routingKey))); - Assert.Equal(_message, _outbox.Get(_myCommand.Id, context)); + await Assert.That(_outbox.Get(_myCommand.Id, context)).IsNotNull(); + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey))).IsNotEmpty(); + await Assert.That(_outbox.Get(_myCommand.Id, context)).IsEqualTo(_message); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store_Async.cs index 8fb1c129e3..174338b71d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -11,7 +11,6 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Post { @@ -23,64 +22,36 @@ public class CommandProcessorWithInMemoryOutboxAscyncTests private readonly Message _message; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorWithInMemoryOutboxAscyncTests() { _myCommand.Value = "Hello World"; - var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - InMemoryMessageProducer messageProducer = new(_internalBus, new Publication{Topic = _routingKey, RequestType = typeof(MyCommand)}); - - _message = new Message( - new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync()) - ); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Topic = _routingKey, RequestType = typeof(MyCommand) }); + _message = new Message(new MessageHeader(_myCommand.Id, _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary {{_routingKey, messageProducer},}); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor( - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory() - ); + var producerRegistry = new ProducerRegistry(new Dictionary { { _routingKey, messageProducer }, }); + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Posting_With_An_In_Memory_Outbox_Async() { await _commandProcessor.PostAsync(_myCommand); - var message = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); - //Should store the message in the outbox - Assert.NotNull(message); + await Assert.That(message).IsNotNull(); //Should send a message via the messaging gateway - Assert.True(_internalBus.Stream(new RoutingKey(_routingKey)).Any()); + await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); //Should convert the command into a message - Assert.Equal(_message, message); + await Assert.That(message).IsEqualTo(_message); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs index 4a173bcb58..4feb51df11 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; @@ -8,7 +8,6 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -16,62 +15,36 @@ public class CommandProcessorBuildDefaultInboxPublishTests { private readonly Brighter.CommandProcessor _commandProcessor; private readonly InMemoryInbox _inbox = new InMemoryInbox(new FakeTimeProvider()); - public CommandProcessorBuildDefaultInboxPublishTests() { var handler = new MyGlobalInboxEventHandler(new Dictionary()); - var subscriberRegistry = new SubscriberRegistry(); //This handler has no Inbox attribute subscriberRegistry.Add(typeof(MyEvent), typeof(MyGlobalInboxEventHandler)); - var container = new ServiceCollection(); container.AddSingleton(handler); container.AddSingleton(_inbox); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - _inbox, - InboxScope.All, //grab all the events - onceOnly: true, //only allow once - actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) - ); - - _commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}, {Brighter.CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy}}, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration + var retryPolicy = Policy.Handle().Retry(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreaker(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(_inbox, InboxScope.All, //grab all the events + onceOnly: true, //only allow once + actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) ); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { Brighter.CommandProcessor.RETRYPOLICY, retryPolicy }, { Brighter.CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - - [Fact] - public void WhenInsertingADefaultInboxIntoThePublishPipeline() + [Test] + public async Task WhenInsertingADefaultInboxIntoThePublishPipeline() { //act var @event = new MyEvent(); _commandProcessor.Publish(@event); - //assert we are in, and auto-context added us under our name var boxed = _inbox.Exists(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs index 978deb0009..027eb5b772 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -9,7 +9,6 @@ using Paramore.Brighter.Inbox.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -17,64 +16,36 @@ public class CommandProcessorBuildDefaultInboxPublishAsyncTests { private readonly Brighter.CommandProcessor _commandProcessor; private readonly InMemoryInbox _inbox = new InMemoryInbox(new FakeTimeProvider()); - public CommandProcessorBuildDefaultInboxPublishAsyncTests() { var handler = new MyEventHandlerAsync(new Dictionary()); - var subscriberRegistry = new SubscriberRegistry(); //This handler has no Inbox attribute subscriberRegistry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(handler); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton( - new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var circuitBreakerPolicy = Policy - .Handle() - .CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); - - var inboxConfiguration = new InboxConfiguration( - _inbox, - InboxScope.All, //grab all the events - onceOnly: true, //only allow once - actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) - ); - - _commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry - { - { Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, - { Brighter.CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } - }, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - inboxConfiguration: inboxConfiguration + var retryPolicy = Policy.Handle().RetryAsync(); + var circuitBreakerPolicy = Policy.Handle().CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1)); + var inboxConfiguration = new InboxConfiguration(_inbox, InboxScope.All, //grab all the events + onceOnly: true, //only allow once + actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should be the only entry after) ); + _commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry { { Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy }, { Brighter.CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy } }, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), inboxConfiguration: inboxConfiguration); } - [Fact] + [Test] public async Task WhenInsertingADefaultInboxIntoTheSendPipeline() { //act var @event = new MyEvent(); await _commandProcessor.SendAsync(@event); - //assert we are in, and auto-context added us under our name var boxed = await _inbox.ExistsAsync(@event.Id, typeof(MyEventHandlerAsync).FullName, null, 100); - Assert.True(boxed); + await Assert.That(boxed).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor.cs index a2b6e60cac..d5137bbd24 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -11,26 +10,20 @@ public class CommandProcessorPublishEventTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyEvent _myEvent = new(); - public CommandProcessorPublishEventTests() { var registry = new SubscriberRegistry(); registry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Publishing_An_Event_To_The_Processor() + [Test] + public async Task When_Publishing_An_Event_To_The_Processor() { _commandProcessor.Publish(_myEvent); - - //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id), _receivedMessages); - + //Should publish the command to the first event handler + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_Async.cs index 326e4bbc50..c32df1c2b0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -12,26 +11,20 @@ public class CommandProcessorPublishEventAsyncTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyEvent _myEvent = new(); - public CommandProcessorPublishEventAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyEventHandlerAsync(_receivedMessages)); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Publishing_An_Event_To_The_Processor() { await _commandProcessor.PublishAsync(_myEvent); - - //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id), _receivedMessages); - + //Should publish the command to the first event handler + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement.cs index bf0da183f5..1f4eca2102 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -10,36 +9,30 @@ public class CommandProcessorPublishEventAgreementTests { private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); - public CommandProcessorPublishEventAgreementTests() { var registry = new SubscriberRegistry(); registry.Register((request, context) => { var myEvent = request as MyEvent; - if (myEvent.Data == 4) - return [typeof(MyEventHandler)]; - - return [..Array.Empty()]; - }, - [typeof(MyEventHandler)]); + return[typeof(MyEventHandler)]; + return[..Array.Empty()]; + }, [typeof(MyEventHandler)]); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Publishing_An_Event_To_The_Processor() + [Test] + public async Task When_Publishing_An_Event_To_The_Processor() { - var myEvent = new MyEvent { Data = 4 }; + var myEvent = new MyEvent + { + Data = 4 + }; _commandProcessor.Publish(myEvent); - - //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandler), myEvent.Id), _receivedMessages); - + //Should publish the command to the first event handler + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandler), myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement_Async.cs index 8213707651..0a20a01212 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_An_Event_To_The_Processor_With_Agreement_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -11,36 +10,30 @@ public class CommandProcessorPublishEventAgreementAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); - public CommandProcessorPublishEventAgreementAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync((request, context) => { var myEvent = request as MyEvent; - if (myEvent.Data == 4) - return [typeof(MyEventHandlerAsync)]; - - return [..Array.Empty()]; - }, - [typeof(MyEventHandlerAsync)]); + return[typeof(MyEventHandlerAsync)]; + return[..Array.Empty()]; + }, [typeof(MyEventHandlerAsync)]); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyEventHandlerAsync(_receivedMessages)); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Publishing_An_Event_To_The_Processor() { - var myEvent = new MyEvent { Data = 4 }; + var myEvent = new MyEvent + { + Data = 4 + }; await _commandProcessor.PublishAsync(myEvent); - - //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandlerAsync), myEvent.Id), _receivedMessages); - + //Should publish the command to the first event handler + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandlerAsync), myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions.cs index ce575f7391..d033a2840b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -15,42 +14,34 @@ public class PublishingToMultipleSubscribersTests private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyEvent _myEvent = new MyEvent(); private Exception _exception; - public PublishingToMultipleSubscribersTests() { var registry = new SubscriberRegistry(); registry.Register(); registry.Register(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions() + [Test] + public async Task When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions() { _exception = Catch.Exception(() => _commandProcessor.Publish(_myEvent)); - //Should throw an aggregate exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); //Should have an inner exception from the handler - Assert.IsType(((AggregateException)_exception).InnerException); + await Assert.That(((AggregateException)_exception).InnerException).IsTypeOf(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandler), _myEvent.Id), _receivedMessages); - + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandler), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions_Async.cs index fe6c02d7f0..cb64bdb2d5 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright � 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -40,41 +37,34 @@ public class PublishingToMultipleSubscribersAsyncTests private readonly MyEvent _myEvent = new(); private readonly IDictionary _receivedMessages = new Dictionary(); private Exception? _exception; - public PublishingToMultipleSubscribersAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] + [Test] public async Task When_Publishing_To_Multiple_Subscribers_Should_Aggregate_Exceptions_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.PublishAsync(_myEvent)); - //Should throw an aggregate exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); //Should have an inner exception from the handler - Assert.IsType(((AggregateException)_exception).InnerException); + await Assert.That(((AggregateException)_exception).InnerException).IsTypeOf(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers.cs index 663b2be133..bbb0246574 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -40,37 +37,30 @@ public class CommandProcessorPublishMultipleMatchesTests private readonly IDictionary _receivedMessages = new ConcurrentDictionary(); private readonly MyEvent _myEvent = new(); private Exception? _exception; - public CommandProcessorPublishMultipleMatchesTests() { var registry = new SubscriberRegistry(); registry.Register(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_There_Are_Multiple_Subscribers() + [Test] + public async Task When_There_Are_Multiple_Subscribers() { _exception = Catch.Exception(() => _commandProcessor.Publish(_myEvent)); - //Should not throw an exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandler), _myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandler), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandler), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_Async.cs index b51f7b5cfd..67d285b174 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; @@ -7,7 +7,6 @@ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -17,38 +16,31 @@ public class CommandProcessorPublishMultipleMatchesAsyncTests private readonly IDictionary _receivedMessages = new ConcurrentDictionary(); private readonly MyEvent _myEvent = new(); private Exception? _exception; - public CommandProcessorPublishMultipleMatchesAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } //Ignore any errors about adding System.Runtime from the IDE. See https://social.msdn.microsoft.com/Forums/en-US/af4dc0db-046c-4728-bfe0-60ceb93f7b9f/vs2012net-45-rc-compiler-error-when-using-actionblock-missing-reference-to?forum=tpldataflow - [Fact] + [Test] public async Task When_There_Are_Multiple_Subscribers_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.PublishAsync(_myEvent)); - //Should not throw an exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandlerAsync), _myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), _myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), _myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement.cs index c0349dcfa5..5a17b73712 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -39,7 +36,6 @@ public class CommandProcessorPublishMultipleMatchesAgreementTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new ConcurrentDictionary(); private Exception? _exception; - public CommandProcessorPublishMultipleMatchesAgreementTests() { var registry = new SubscriberRegistry(); @@ -47,47 +43,35 @@ public CommandProcessorPublishMultipleMatchesAgreementTests() { var myEvent = request as MyEvent; var handlerList = new List(); - if (myEvent.Data == 4) handlerList.Add(typeof(MyEventHandler)); - if (myEvent.Data > 2) handlerList.Add(typeof(MyOtherEventHandler)); - return handlerList; - }, [typeof(MyEventHandler), typeof(MyOtherEventHandler)]); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_There_Are_Multiple_Subscribers() + [Test] + public async Task When_There_Are_Multiple_Subscribers() { var myEvent = new MyEvent { Data = 4 // This will match both handlers }; - _exception = Catch.Exception(() => _commandProcessor.Publish(myEvent)); - //Should not throw an exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandler), myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandler), myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandler), myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandler), myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement_Async.cs index f382b0d317..54637acf5e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_Multiple_Subscribers_With_Agreement_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -39,7 +36,6 @@ public class CommandProcessorPublishMultipleMatchesAgreementAsyncTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new ConcurrentDictionary(); private Exception? _exception; - public CommandProcessorPublishMultipleMatchesAgreementAsyncTests() { var registry = new SubscriberRegistry(); @@ -47,39 +43,28 @@ public CommandProcessorPublishMultipleMatchesAgreementAsyncTests() { var myEvent = request as MyEvent; var handlerList = new List(); - if (myEvent.Data == 4) handlerList.Add(typeof(MyEventHandlerAsync)); - if (myEvent.Data > 2) handlerList.Add(typeof(MyOtherEventHandlerAsync)); - return handlerList; - }, [typeof(MyEventHandlerAsync), typeof(MyOtherEventHandlerAsync)]); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_There_Are_Multiple_Subscribers() { var myEvent = new MyEvent { Data = 4 // This will match both handlers }; - try { await _commandProcessor.PublishAsync(myEvent); @@ -90,11 +75,11 @@ public async Task When_There_Are_Multiple_Subscribers() } //Should not throw an exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); //Should publish the command to the first event handler - Assert.Contains(new KeyValuePair(nameof(MyEventHandlerAsync), myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyEventHandlerAsync), myEvent.Id)); //Should publish the command to the second event handler - Assert.Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), myEvent.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyOtherEventHandlerAsync), myEvent.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers.cs index 03c25b2be0..dbd86f1914 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,23 +12,20 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -37,32 +34,22 @@ public class CommandProcessorNoHandlersMatchTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception _exception; - public CommandProcessorNoHandlersMatchTests() { var container = new ServiceCollection(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - _commandProcessor = new CommandProcessor( - new SubscriberRegistry(), - new ServiceProviderHandlerFactory(container.BuildServiceProvider()), - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); + _commandProcessor = new CommandProcessor(new SubscriberRegistry(), new ServiceProviderHandlerFactory(container.BuildServiceProvider()), new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_There_Are_No_Command_Handlers() + [Test] + public async Task When_There_Are_No_Command_Handlers() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //Should fail because multiple receivers found - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); //Should have an error message that tells you why - Assert.NotNull(_exception); - Assert.Contains("No command handler was found", _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("No command handler was found"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers_Async.cs index cb6bd51a1e..8f7e748fd0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Command_Handlers_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -38,33 +35,21 @@ public class CommandProcessorNoHandlersMatchAsyncTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorNoHandlersMatchAsyncTests() { var container = new ServiceCollection(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - _commandProcessor = new CommandProcessor( - new SubscriberRegistry(), - new ServiceProviderHandlerFactory(container.BuildServiceProvider()), - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); + _commandProcessor = new CommandProcessor(new SubscriberRegistry(), new ServiceProviderHandlerFactory(container.BuildServiceProvider()), new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_There_Are_No_Command_Handlers_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //Throw an exception when there are no handlers found - Assert.IsType(_exception); - Assert.NotNull(_exception); - Assert.Contains( - "No command handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should have exactly one handler.", - _exception.Message); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("No command handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should have exactly one handler."); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers.cs index f9a05184af..64c34be28e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,22 +12,19 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -37,23 +34,19 @@ public class CommandProcessorNoMatchingSubcribersTests private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyEvent _myEvent = new MyEvent(); private Exception _exception; - public CommandProcessorNoMatchingSubcribersTests() { var registry = new SubscriberRegistry(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_There_Are_No_Subscribers() + [Test] + public async Task When_There_Are_No_Subscribers() { _exception = Catch.Exception(() => _commandProcessor.Publish(_myEvent)); - //_should_not_throw_an_exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers_Async.cs index 2758bb134f..1c3e237f26 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_There_Are_No_Subscribers_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,23 +12,20 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Publish { @@ -38,24 +35,20 @@ public class CommandProcessorNoMatchingSubcribersAsyncTests private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyEvent _myEvent = new MyEvent(); private Exception? _exception; - public CommandProcessorNoMatchingSubcribersAsyncTests() { var registry = new SubscriberRegistry(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyEventHandlerAsync(_receivedMessages)); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } //Ignore any errors about adding System.Runtime from the IDE. See https://social.msdn.microsoft.com/Forums/en-US/af4dc0db-046c-4728-bfe0-60ceb93f7b9f/vs2012net-45-rc-compiler-error-when-using-actionblock-missing-reference-to?forum=tpldataflow - [Fact] + [Test] public async Task When_There_Are_No_Subscribers_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.PublishAsync(_myEvent)); - //_should_not_throw_an_exception - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs index b0cd9909c0..9dc30ad278 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs @@ -1,10 +1,9 @@ -#region Licence - +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright � 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -13,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -36,10 +33,8 @@ THE SOFTWARE. */ using Paramore.Brighter.Scheduler.Events; using Paramore.Brighter.Scheduler.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Scheduler; - public class CommandProcessorSchedulerCommandTests { private const string Topic = "MyCommand"; @@ -49,169 +44,113 @@ public class CommandProcessorSchedulerCommandTests private readonly FakeTimeProvider _timeProvider; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorSchedulerCommandTests() { - _myCommand = new() { Value = $"Hello World {Guid.NewGuid():N}" }; + _myCommand = new() + { + Value = $"Hello World {Guid.NewGuid():N}"}; var routingKey = new RoutingKey("MyCommand"); _timeProvider = new FakeTimeProvider(); _timeProvider.SetUtcNow(DateTimeOffset.UtcNow); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.Register(); - var handlerFactory = new SimpleHandlerFactory( - _ => new MyCommandHandler(_receivedMessages), - _ => new FireSchedulerRequestHandler(_commandProcessor!)); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); - + var handlerFactory = new SimpleHandlerFactory(_ => new MyCommandHandler(_receivedMessages), _ => new FireSchedulerRequestHandler(_commandProcessor!)); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var producer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - - var producerRegistry = - new ProducerRegistry(new Dictionary { { routingKey, producer }, }); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer }, }); var tracer = new BrighterTracer(_timeProvider); - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = tracer }; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor(registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory { TimeProvider = _timeProvider }); - PipelineBuilder.ClearPipelineCache(); - PipelineBuilder.ClearPipelineCache(); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory { TimeProvider = _timeProvider }); } - [Fact] - public void When_Scheduling_Send_With_Delay_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Send_With_Delay_A_Message_To_The_Command_Processor() { _commandProcessor.Send(TimeSpan.FromSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandler), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandler), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandler)); } - [Fact] - public void When_Scheduling_Send_With_At_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Send_With_At_A_Message_To_The_Command_Processor() { _commandProcessor.Send(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandler), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandler), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandler)); } - [Fact] - public void When_Scheduling_Publish_With_Delay_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Publish_With_Delay_A_Message_To_The_Command_Processor() { _commandProcessor.Publish(TimeSpan.FromSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandler), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandler), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandler)); } - [Fact] - public void When_Scheduling_Publish_With_At_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Publish_With_At_A_Message_To_The_Command_Processor() { _commandProcessor.Publish(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandler), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandler), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandler)); } - [Fact] - public void When_Scheduling_Post_With_At_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Post_With_At_A_Message_To_The_Command_Processor() { _commandProcessor.Post(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - Assert.False(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var actual = _outbox.Get(_myCommand.Id, new RequestContext()); - - Assert.NotNull(actual); - var expected = new Message( - new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual).IsNotNull(); + var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That((actual.Header.TimeStamp - expected.Header.TimeStamp).Duration()).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_Scheduling_Post_With_Delay_A_Message_To_The_Command_Processor() + [Test] + public async Task When_Scheduling_Post_With_Delay_A_Message_To_The_Command_Processor() { _commandProcessor.Post(TimeSpan.FromSeconds(10), _myCommand); - Assert.False(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var actual = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(actual); - - var expected = new Message( - new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual).IsNotNull(); + var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That((actual.Header.TimeStamp - expected.Header.TimeStamp).Duration()).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs index 002201b447..802f096987 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -13,10 +13,8 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Scheduler; - public class CommandProcessorSchedulerCommandAsyncTests { private const string Topic = "MyCommand"; @@ -26,14 +24,14 @@ public class CommandProcessorSchedulerCommandAsyncTests private readonly FakeTimeProvider _timeProvider; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorSchedulerCommandAsyncTests() { - _myCommand = new() { Value = $"Hello World {Guid.NewGuid():N}" }; + _myCommand = new() + { + Value = $"Hello World {Guid.NewGuid():N}"}; var routingKey = new RoutingKey("MyCommand"); _timeProvider = new FakeTimeProvider(); _timeProvider.SetUtcNow(DateTimeOffset.UtcNow); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); @@ -46,153 +44,108 @@ public CommandProcessorSchedulerCommandAsyncTests() return new MyCommandHandlerAsync(_receivedMessages); }); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); - + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var producer = new InMemoryMessageProducer (_internalBus) { Publication = { Topic = routingKey, RequestType = typeof(MyCommand) } }; + var producer = new InMemoryMessageProducer(_internalBus) + { + Publication = + { + Topic = routingKey, + RequestType = typeof(MyCommand) + } + }; var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer }, }); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(_timeProvider); - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = tracer }; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor(registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory { TimeProvider = _timeProvider }); - PipelineBuilder.ClearPipelineCache(); - PipelineBuilder.ClearPipelineCache(); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory { TimeProvider = _timeProvider }); } - [Fact] + [Test] public async Task When_Scheduling_Send_With_Delay_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.SendAsync(TimeSpan.FromSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandlerAsync), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandlerAsync)); } - [Fact] + [Test] public async Task When_Scheduling_Send_With_At_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.SendAsync(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandlerAsync), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandlerAsync)); } - [Fact] + [Test] public async Task When_Scheduling_Publish_With_Delay_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.PublishAsync(TimeSpan.FromSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandlerAsync), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandlerAsync)); } - [Fact] + [Test] public async Task When_Scheduling_Publish_With_At_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.PublishAsync(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - - Assert.DoesNotContain(nameof(MyCommandHandlerAsync), _receivedMessages); - + await Assert.That(_receivedMessages.Keys).DoesNotContain(nameof(MyCommandHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.Contains(nameof(MyCommandHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyCommandHandlerAsync)); } - [Fact] + [Test] public async Task When_Scheduling_Post_With_At_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.PostAsync(_timeProvider.GetUtcNow().AddSeconds(10), _myCommand); - Assert.False(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var actual = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(actual); - - var expected = new Message( - new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual).IsNotNull(); + var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That((actual.Header.TimeStamp - expected.Header.TimeStamp).Duration()).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_Scheduling_Post_With_Delay_A_Message_To_The_Command_Processor_Async() { await _commandProcessor.PostAsync(TimeSpan.FromSeconds(10), _myCommand); - Assert.False(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - - Assert.True(_internalBus.Stream(new RoutingKey(Topic)).Any()); - + await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); var actual = _outbox.Get(_myCommand.Id, new RequestContext()); - Assert.NotNull(actual); - - var expected = new Message( - new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options)) - ); - - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); - + await Assert.That(actual).IsNotNull(); + var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That((actual.Header.TimeStamp - expected.Header.TimeStamp).Duration()).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter.cs index 5d725613c8..fe0b55d589 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Transactions; using Microsoft.Extensions.Time.Testing; @@ -10,10 +10,8 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Scheduler; - public class CommandProcessorSchedulerCommandWithInvalidParamsTests { private const string Topic = "MyCommand"; @@ -23,93 +21,62 @@ public class CommandProcessorSchedulerCommandWithInvalidParamsTests private readonly FakeTimeProvider _timeProvider; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorSchedulerCommandWithInvalidParamsTests() { - _myCommand = new() { Value = $"Hello World {Guid.NewGuid():N}" }; + _myCommand = new() + { + Value = $"Hello World {Guid.NewGuid():N}"}; var routingKey = new RoutingKey("MyCommand"); _timeProvider = new FakeTimeProvider(); _timeProvider.SetUtcNow(DateTimeOffset.UtcNow); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.Register(); - var handlerFactory = new SimpleHandlerFactory( - _ => new MyCommandHandler(_receivedMessages), - _ => new FireSchedulerRequestHandler(_commandProcessor!)); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); - + var handlerFactory = new SimpleHandlerFactory(_ => new MyCommandHandler(_receivedMessages), _ => new FireSchedulerRequestHandler(_commandProcessor!)); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var producer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer }, }); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(_timeProvider); - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = tracer }; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor(registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory { TimeProvider = _timeProvider }); - PipelineBuilder.ClearPipelineCache(); - PipelineBuilder.ClearPipelineCache(); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory { TimeProvider = _timeProvider }); } - [Fact] - public void When_Scheduling_Send_With_Invalid_Parameter() + [Test] + public async Task When_Scheduling_Send_With_Invalid_Parameter() { - var exception = Catch.Exception(() => - _commandProcessor.Send(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + var exception = Catch.Exception(() => _commandProcessor.Send(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = Catch.Exception(() => _commandProcessor.Send(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } - [Fact] - public void When_Scheduling_Publish_With_Invalid_Parameter() + [Test] + public async Task When_Scheduling_Publish_With_Invalid_Parameter() { - var exception = Catch.Exception(() => - _commandProcessor.Publish(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + var exception = Catch.Exception(() => _commandProcessor.Publish(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = Catch.Exception(() => _commandProcessor.Publish(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } - - [Fact] - public void When_Scheduling_Post_With_Invalid_Parameter() + + [Test] + public async Task When_Scheduling_Post_With_Invalid_Parameter() { var exception = Catch.Exception(() => _commandProcessor.Post(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = Catch.Exception(() => _commandProcessor.Post(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter_Async.cs index 622891be2c..fa0b969abc 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_With_Invalid_Parameter_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; @@ -11,10 +11,8 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Scheduler; - public class CommandProcessorSchedulerCommandWithInvalidParamsAsyncTests { private const string Topic = "MyCommand"; @@ -24,93 +22,62 @@ public class CommandProcessorSchedulerCommandWithInvalidParamsAsyncTests private readonly FakeTimeProvider _timeProvider; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); - public CommandProcessorSchedulerCommandWithInvalidParamsAsyncTests() { - _myCommand = new() { Value = $"Hello World {Guid.NewGuid():N}" }; + _myCommand = new() + { + Value = $"Hello World {Guid.NewGuid():N}"}; var routingKey = new RoutingKey("MyCommand"); _timeProvider = new FakeTimeProvider(); _timeProvider.SetUtcNow(DateTimeOffset.UtcNow); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.Register(); - var handlerFactory = new SimpleHandlerFactory( - _ => new MyCommandHandler(_receivedMessages), - _ => new FireSchedulerRequestHandler(_commandProcessor!)); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); - + var handlerFactory = new SimpleHandlerFactory(_ => new MyCommandHandler(_receivedMessages), _ => new FireSchedulerRequestHandler(_commandProcessor!)); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var producer = new InMemoryMessageProducer(_internalBus, new Publication { Topic = routingKey, RequestType = typeof(MyCommand) }); - var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer }, }); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry() - .AddBrighterDefault(); - + var resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); var tracer = new BrighterTracer(_timeProvider); - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = tracer }; - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox - ); - - _commandProcessor = new CommandProcessor(registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new DefaultPolicy(), - resiliencePipelineRegistry, - bus, - new InMemorySchedulerFactory { TimeProvider = _timeProvider }); - PipelineBuilder.ClearPipelineCache(); - PipelineBuilder.ClearPipelineCache(); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = tracer + }; + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new DefaultPolicy(), resiliencePipelineRegistry, bus, new InMemorySchedulerFactory { TimeProvider = _timeProvider }); } - [Fact] + [Test] public async Task When_Scheduling_Send_With_Invalid_Parameter_Async() { - var exception = await Catch.ExceptionAsync(() => - _commandProcessor.SendAsync(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + var exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } - [Fact] + [Test] public async Task When_Scheduling_Publish_With_Invalid_Parameter() { - var exception = await Catch.ExceptionAsync(() => - _commandProcessor.PublishAsync(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + var exception = await Catch.ExceptionAsync(() => _commandProcessor.PublishAsync(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = await Catch.ExceptionAsync(() => _commandProcessor.PublishAsync(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } - - [Fact] + + [Test] public async Task When_Scheduling_Post_With_Invalid_Parameter() { var exception = await Catch.ExceptionAsync(() => _commandProcessor.PostAsync(_timeProvider.GetUtcNow().AddMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); - + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); exception = await Catch.ExceptionAsync(() => _commandProcessor.PostAsync(TimeSpan.FromMilliseconds(-1), _myCommand)); - Assert.NotNull(exception); - Assert.True((exception) is ArgumentOutOfRangeException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ArgumentOutOfRangeException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Cancelling_An_Async_Command.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Cancelling_An_Async_Command.cs index 9ae411ba4b..cd42992069 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Cancelling_An_Async_Command.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Cancelling_An_Async_Command.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -12,26 +11,21 @@ public class CancellingAsyncPipelineTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyCommand _myCommand = new MyCommand(); - public CancellingAsyncPipelineTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(_receivedMessages)); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } //Ignore any errors about adding System.Runtime from the IDE. See https://social.msdn.microsoft.com/Forums/en-US/af4dc0db-046c-4728-bfe0-60ceb93f7b9f/vs2012net-45-rc-compiler-error-when-using-actionblock-missing-reference-to?forum=tpldataflow - [Fact] + [Test] public async Task When_Cancelling_An_Async_Command() { await _commandProcessor.SendAsync(_myCommand); - //Should send the command to the command handler - Assert.Contains(new KeyValuePair(nameof(MyCommandHandlerAsync), _myCommand.Id), _receivedMessages); - + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyCommandHandlerAsync), _myCommand.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_Command_To_The_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_Command_To_The_Processor_Async.cs index bd2ff92caa..e3a3c7b002 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_Command_To_The_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_Command_To_The_Processor_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright � 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,22 +12,19 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -36,26 +33,22 @@ public class CommandProcessorSendAsyncTests private readonly CommandProcessor _commandProcessor; private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyCommand _myCommand = new MyCommand(); - public CommandProcessorSendAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(_receivedMessages)); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } // Ignore any errors about adding System.Runtime from the IDE. // See https://social.msdn.microsoft.com/Forums/en-US/af4dc0db-046c-4728-bfe0-60ceb93f7b9f/vs2012net-45-rc-compiler-error-when-using-actionblock-missing-reference-to?forum=tpldataflow - [Fact] + [Test] public async Task When_Sending_A_Command_To_The_Processor_Async() { await _commandProcessor.SendAsync(_myCommand); - // _should_send_the_command_to_the_command_handler - Assert.Contains(new KeyValuePair(nameof(MyCommandHandlerAsync), _myCommand.Id), _receivedMessages); + await Assert.That(_receivedMessages).Contains(new KeyValuePair(nameof(MyCommandHandlerAsync), _myCommand.Id)); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor.cs index a2daf05cc5..f9f3ab6414 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -11,26 +10,21 @@ public class CommandProcessorSendTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly MyCommandHandler _myCommandHandler; - public CommandProcessorSendTests() { var registry = new SubscriberRegistry(); registry.Register(); _myCommandHandler = new MyCommandHandler(new Dictionary()); var handlerFactory = new SimpleHandlerFactorySync(_ => _myCommandHandler); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor() + [Test] + public async Task When_Sending_A_Command_To_The_Processor() { _commandProcessor.Send(_myCommand); - //_should_send_the_command_to_the_command_handler - Assert.True(_myCommandHandler.ShouldReceive(_myCommand)); - + await Assert.That(_myCommandHandler.ShouldReceive(_myCommand)).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement.cs index 362d4136a2..b4ce0e4689 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement.cs @@ -1,47 +1,39 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { public class CommandProcessorSendViaAgreementTests { private readonly CommandProcessor _commandProcessor; - private readonly MyCommand _myCommand; + private readonly MyCommand _myCommand; private readonly MyCommandHandler _myCommandHandler; - public CommandProcessorSendViaAgreementTests() { var registry = new SubscriberRegistry(); registry.Register((request, context) => - { - var command = request as MyCommand; - if (command.Value == "new") - return [typeof(MyCommandHandler)]; - - return [typeof(MyObsoleteCommandHandler)]; - - }, [typeof(MyCommandHandler), typeof(MyObsoleteCommandHandler)] - ); + { + var command = request as MyCommand; + if (command.Value == "new") + return[typeof(MyCommandHandler)]; + return[typeof(MyObsoleteCommandHandler)]; + }, [typeof(MyCommandHandler), typeof(MyObsoleteCommandHandler)]); _myCommandHandler = new MyCommandHandler(new Dictionary()); var handlerFactory = new SimpleHandlerFactorySync(_ => _myCommandHandler); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - _myCommand = new MyCommand {Value = "new"}; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + _myCommand = new MyCommand + { + Value = "new" + }; } - [Fact] - public void When_Sending_A_Command_To_The_Processor() + [Test] + public async Task When_Sending_A_Command_To_The_Processor() { _commandProcessor.Send(_myCommand); - - Assert.True(_myCommandHandler.ShouldReceive(_myCommand)); - + await Assert.That(_myCommandHandler.ShouldReceive(_myCommand)).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement_Async.cs index 8cfc964075..6679152b06 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_Sending_A_command_To_The_Processor_Via_Agreement_Async.cs @@ -1,48 +1,40 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { public class CommandProcessorSendViaAgreementAsyncTests { private readonly CommandProcessor _commandProcessor; - private readonly MyCommand _myCommand; + private readonly MyCommand _myCommand; private readonly MyCommandHandlerAsync _myCommandHandler; - - public CommandProcessorSendViaAgreementAsyncTests () + public CommandProcessorSendViaAgreementAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync((request, context) => - { - var command = request as MyCommand; - if (command.Value == "new") - return [typeof(MyCommandHandlerAsync)]; - - return [typeof(MyObsoleteCommandHandlerAsync)]; - - }, [typeof(MyCommandHandlerAsync), typeof(MyObsoleteCommandHandlerAsync)] - ); + { + var command = request as MyCommand; + if (command.Value == "new") + return[typeof(MyCommandHandlerAsync)]; + return[typeof(MyObsoleteCommandHandlerAsync)]; + }, [typeof(MyCommandHandlerAsync), typeof(MyObsoleteCommandHandlerAsync)]); _myCommandHandler = new MyCommandHandlerAsync(new Dictionary()); var handlerFactory = new SimpleHandlerFactoryAsync(_ => _myCommandHandler); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - _myCommand = new MyCommand {Value = "new"}; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + _myCommand = new MyCommand + { + Value = "new" + }; } - [Fact] + [Test] public async Task When_Sending_A_Command_To_The_Processor() { await _commandProcessor.SendAsync(_myCommand); - - Assert.True(_myCommandHandler.ShouldReceive(_myCommand)); - + await Assert.That(_myCommandHandler.ShouldReceive(_myCommand)).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers.cs index 2b529efdf0..802aab9173 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -15,36 +14,29 @@ public class CommandProcessorSendWithMultipleMatchesTests private readonly Dictionary _receivedMessages = new(); private readonly MyCommand _myCommand = new(); private Exception _exception; - public CommandProcessorSendWithMultipleMatchesTests() { var registry = new SubscriberRegistry(); registry.Register(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(_ => new MyCommandHandler(_receivedMessages)); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_There_Are_Multiple_Possible_Command_Handlers() + [Test] + public async Task When_There_Are_Multiple_Possible_Command_Handlers() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - - //Should fail because multiple receivers found - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); //Should have an error message that tells you why - Assert.NotNull(_exception); - Assert.Contains("More than one handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should only have one handler.", _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("More than one handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should only have one handler."); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers_Async.cs index 90c1d45b41..aa981d8a09 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_There_Are_Multiple_Possible_Command_Handlers_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -6,7 +6,6 @@ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -16,37 +15,31 @@ public class CommandProcessorSendWithMultipleMatchesAsyncTests private readonly IDictionary _receivedMessages = new Dictionary(); private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorSendWithMultipleMatchesAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddTransient>(); container.AddSingleton(_receivedMessages); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } //Ignore any errors about adding System.Runtime from the IDE. See https://social.msdn.microsoft.com/Forums/en-US/af4dc0db-046c-4728-bfe0-60ceb93f7b9f/vs2012net-45-rc-compiler-error-when-using-actionblock-missing-reference-to?forum=tpldataflow - [Fact] + [Test] public async Task When_There_Are_Multiple_Possible_Command_Handlers_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //Should fail because multiple receivers found - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); //Should have an error message that tells you why - Assert.NotNull(_exception); - Assert.Contains("More than one handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should only have one handler.", _exception.Message); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains("More than one handler was found for the typeof command Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyCommand - a command should only have one handler."); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_there_are_no_failures_execute_all_the_steps_in_the_pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_there_are_no_failures_execute_all_the_steps_in_the_pipeline.cs index 235518f0b5..03108308be 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_there_are_no_failures_execute_all_the_steps_in_the_pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Send/When_there_are_no_failures_execute_all_the_steps_in_the_pipeline.cs @@ -1,9 +1,8 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors.Send { @@ -11,34 +10,28 @@ public class CommandProcessorPipelineStepsTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); - public CommandProcessorPipelineStepsTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); } - [Fact] - public void When_There_Are_No_Failures_Execute_All_The_Steps_In_The_Pipeline() + [Test] + public async Task When_There_Are_No_Failures_Execute_All_The_Steps_In_The_Pipeline() { _commandProcessor.Send(_myCommand); - // Should call the pre-validation handler - Assert.True(MyStepsValidationHandler.ShouldReceive(_myCommand)); - Assert.True(MyStepsPreAndPostDecoratedHandler.ShouldReceive(_myCommand)); + await Assert.That(MyStepsValidationHandler.ShouldReceive(_myCommand)).IsTrue(); + await Assert.That(MyStepsPreAndPostDecoratedHandler.ShouldReceive(_myCommand)).IsTrue(); // Should call the post validation handler - Assert.True(MyStepsLoggingHandler.ShouldReceive(_myCommand)); + await Assert.That(MyStepsLoggingHandler.ShouldReceive(_myCommand)).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs index f8e279ff61..fec3db3b37 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; @@ -7,30 +7,29 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors; - -public class RequestContextPresentTests : IDisposable +public class RequestContextPresentTests { private readonly SpyContextFactory _requestContextFactory; private readonly IPolicyRegistry _policyRegistry; - private readonly ResiliencePipelineRegistry _resiliencePipelineRegistry; - + private readonly ResiliencePipelineRegistry _resiliencePipelineRegistry; public RequestContextPresentTests() { - MyContextAwareCommandHandler.TestString = null; - MyContextAwareCommandHandlerAsync.TestString = null; - MyContextAwareEventHandler.TestString = null; - MyContextAwareEventHandlerAsync.TestString = null; - + MyContextAwareCommandHandler.TestString = null; + MyContextAwareCommandHandlerAsync.TestString = null; + MyContextAwareEventHandler.TestString = null; + MyContextAwareEventHandlerAsync.TestString = null; _policyRegistry = new DefaultPolicy(); _resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); - _requestContextFactory = new SpyContextFactory { CreateWasCalled = false }; + _requestContextFactory = new SpyContextFactory + { + CreateWasCalled = false + }; } - [Fact] - public void When_A_Request_Context_Is_Provided_On_A_Send() + [Test] + public async Task When_A_Request_Context_Is_Provided_On_A_Send() { //arrange var registry = new SubscriberRegistry(); @@ -38,30 +37,20 @@ public void When_A_Request_Context_Is_Provided_On_A_Send() var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); var spyRequestContextFactory = new SpyContextFactory(); var policyRegistry = new DefaultPolicy(); - - var commandProcessor = new CommandProcessor( - registry, - handlerFactory, - spyRequestContextFactory, - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, spyRequestContextFactory, policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); - context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue) ; + context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); commandProcessor.Send(new MyCommand(), context); - //assert - Assert.False(spyRequestContextFactory.CreateWasCalled); - Assert.Equal(testBagValue, MyContextAwareCommandHandler.TestString); - Assert.Contains("MyContextAwareCommandHandler", context.Bag); - Assert.Equal("I was called and set the context", context.Bag["MyContextAwareCommandHandler"]); + await Assert.That(spyRequestContextFactory.CreateWasCalled).IsFalse(); + await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(testBagValue); + await Assert.That(context.Bag.Keys).Contains("MyContextAwareCommandHandler"); + await Assert.That(context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] + [Test] public async Task When_A_Request_Context_Is_Provided_On_A_Send_Async() { //arrange @@ -70,305 +59,170 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Send_Async() var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync()); var spyRequestContextFactory = new SpyContextFactory(); var policyRegistry = new DefaultPolicy(); - - var commandProcessor = new CommandProcessor( - registry, - handlerFactory, - spyRequestContextFactory, - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, spyRequestContextFactory, policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); await commandProcessor.SendAsync(new MyCommand(), context); - //assert - Assert.False(spyRequestContextFactory.CreateWasCalled); - Assert.Equal(testBagValue, MyContextAwareCommandHandlerAsync.TestString); - Assert.Contains("MyContextAwareCommandHandler", context.Bag); - Assert.Equal("I was called and set the context", context.Bag["MyContextAwareCommandHandler"]); + await Assert.That(spyRequestContextFactory.CreateWasCalled).IsFalse(); + await Assert.That(MyContextAwareCommandHandlerAsync.TestString).IsEqualTo(testBagValue); + await Assert.That(context.Bag.Keys).Contains("MyContextAwareCommandHandler"); + await Assert.That(context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] - public void When_A_Request_Context_Is_Provided_On_A_Publish() + [Test] + public async Task When_A_Request_Context_Is_Provided_On_A_Publish() { //arrange var registry = new SubscriberRegistry(); registry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler()); - - var commandProcessor = new CommandProcessor( - registry, - handlerFactory, - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); commandProcessor.Publish(new MyEvent(), context); - //assert - Assert.False(_requestContextFactory.CreateWasCalled); - Assert.Equal(testBagValue, MyContextAwareEventHandler.TestString); - Assert.Contains("MyContextAwareEventHandler", context.Bag); - Assert.Equal("I was called and set the context", context.Bag["MyContextAwareEventHandler"]); + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); + await Assert.That(MyContextAwareEventHandler.TestString).IsEqualTo(testBagValue); + await Assert.That(context.Bag.Keys).Contains("MyContextAwareEventHandler"); + await Assert.That(context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] + [Test] public async Task When_A_Request_Context_Is_Provided_On_A_Publish_Async() { //arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync()); - - var commandProcessor = new CommandProcessor( - registry, - handlerFactory, - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); await commandProcessor.PublishAsync(new MyEvent(), context); - //assert - Assert.False(_requestContextFactory.CreateWasCalled); - Assert.Equal(testBagValue, MyContextAwareEventHandlerAsync.TestString); - Assert.Contains("MyContextAwareEventHandler", context.Bag); - Assert.Equal("I was called and set the context", context.Bag["MyContextAwareEventHandler"]); + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); + await Assert.That(MyContextAwareEventHandlerAsync.TestString).IsEqualTo(testBagValue); + await Assert.That(context.Bag.Keys).Contains("MyContextAwareEventHandler"); + await Assert.That(context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] - public void When_A_Request_Context_Is_Provided_On_A_Deposit() + [Test] + public async Task When_A_Request_Context_Is_Provided_On_A_Deposit() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var fakeTimeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey}) - }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) }, }); var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); - context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue) ; + context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); commandProcessor.DepositPost(new MyCommand(), context); - //assert - Assert.False(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); } - [Fact] + [Test] public async Task When_A_Request_Context_Is_Provided_On_A_Deposit_Async() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey}) - }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) }, }); var tracer = new BrighterTracer(timeProvider); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); await commandProcessor.DepositPostAsync(new MyCommand(), context); - //assert - Assert.False(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); } - [Fact] - public void When_A_Request_Context_Is_Provided_On_A_Clear() + [Test] + public async Task When_A_Request_Context_Is_Provided_On_A_Clear() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey})} - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) } }); var tracer = new BrighterTracer(timeProvider); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - - var myCommand = new MyCommand() {Id = Guid.NewGuid().ToString()}; + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); + var myCommand = new MyCommand() + { + Id = Guid.NewGuid().ToString() + }; var message = new Message(new MessageHeader(myCommand.Id, new("MyCommand"), MessageType.MT_COMMAND), new MessageBody("test content")); bus.AddToOutbox(message, new RequestContext()); - //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); - context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue) ; - commandProcessor.ClearOutbox(new []{myCommand.Id}, context); - + context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); + commandProcessor.ClearOutbox(new[] { myCommand.Id }, context); //assert - Assert.False(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); } - [Fact] + [Test] public async Task When_A_Request_Context_Is_Provided_On_A_Clear_Async() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey} ) - }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) }, }); var tracer = new BrighterTracer(timeProvider); var fakeOutbox = new InMemoryOutbox(timeProvider); - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - - var myCommand = new MyCommand() {Id = Guid.NewGuid().ToString()}; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); + var myCommand = new MyCommand() + { + Id = Guid.NewGuid().ToString() + }; var message = new Message(new MessageHeader(myCommand.Id, new("MyCommand"), MessageType.MT_COMMAND), new MessageBody("test content")); bus.AddToOutbox(message, new RequestContext()); - //act var context = new RequestContext(); var testBagValue = Guid.NewGuid().ToString(); - context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue) ; + context.Bag.AddOrUpdate("TestString", testBagValue, (_, _) => testBagValue); await commandProcessor.ClearOutboxAsync([myCommand.Id], context); - //assert - Assert.False(_requestContextFactory.CreateWasCalled); - + await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); } + [After(Test)] public void Dispose() { MyContextAwareCommandHandler.TestString = null; @@ -376,4 +230,4 @@ public void Dispose() MyContextAwareEventHandler.TestString = null; MyContextAwareEventHandlerAsync.TestString = null; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs index 4ea8805d77..7e185299d0 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Transactions; @@ -7,49 +7,46 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.CommandProcessors; - -public class RequestContextFromFactoryTests : IDisposable +public class RequestContextFromFactoryTests { private readonly SpyContextFactory _requestContextFactory; private readonly IPolicyRegistry _policyRegistry; - private readonly ResiliencePipelineRegistry _resiliencePipelineRegistry; - + private readonly ResiliencePipelineRegistry _resiliencePipelineRegistry; public RequestContextFromFactoryTests() { MyContextAwareCommandHandler.TestString = null; MyContextAwareCommandHandlerAsync.TestString = null; MyContextAwareEventHandler.TestString = null; MyContextAwareEventHandlerAsync.TestString = null; - _policyRegistry = new DefaultPolicy(); _resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); - _requestContextFactory = new SpyContextFactory { Context = null, CreateWasCalled = false }; + _requestContextFactory = new SpyContextFactory + { + Context = null, + CreateWasCalled = false + }; } - [Fact] - public void When_No_Request_Context_Is_Provided_On_A_Send() + [Test] + public async Task When_No_Request_Context_Is_Provided_On_A_Send() { - //arrange - var registry = new SubscriberRegistry(); - registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); - var myCommand = new MyCommand(); - - var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - - //act - commandProcessor.Send(myCommand); - - //assert - Assert.True(_requestContextFactory.CreateWasCalled); - Assert.Equal(_requestContextFactory.Context!.Bag["TestString"].ToString(), MyContextAwareCommandHandler.TestString); - Assert.Equal("I was called and set the context", _requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]); + //arrange + var registry = new SubscriberRegistry(); + registry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); + var myCommand = new MyCommand(); + var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + //act + commandProcessor.Send(myCommand); + //assert + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); + await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); + await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] + [Test] public async Task When_No_Request_Context_Is_Provided_On_A_Send_Async() { //arrange @@ -57,39 +54,33 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Send_Async() registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync()); var myCommand = new MyCommand(); - var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - //act await commandProcessor.SendAsync(myCommand); - //assert - Assert.True(_requestContextFactory.CreateWasCalled); - Assert.Equal(_requestContextFactory.Context!.Bag["TestString"].ToString(), MyContextAwareCommandHandlerAsync.TestString); - Assert.Equal("I was called and set the context", _requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); + await Assert.That(MyContextAwareCommandHandlerAsync.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); + await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] - public void When_No_Request_Context_Is_Provided_On_A_Publish() + [Test] + public async Task When_No_Request_Context_Is_Provided_On_A_Publish() { //arrange var registry = new SubscriberRegistry(); registry.Register(); var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler()); var myEvent = new MyEvent(); - - var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act commandProcessor.Publish(myEvent); - //assert - Assert.True(_requestContextFactory.CreateWasCalled); - Assert.Equal(_requestContextFactory.Context.Bag["TestString"].ToString(), MyContextAwareEventHandler.TestString); - Assert.Equal("I was called and set the context", _requestContextFactory.Context.Bag["MyContextAwareEventHandler"]); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); + await Assert.That(MyContextAwareEventHandler.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); + await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] + [Test] public async Task When_No_Request_Context_Is_Provided_On_A_Publish_Async() { //arrange @@ -97,223 +88,114 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Publish_Async() registry.RegisterAsync(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync()); var myEvent = new MyEvent(); - var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - //act await commandProcessor.PublishAsync(myEvent); - //assert - Assert.True(_requestContextFactory.CreateWasCalled); - Assert.Equal(_requestContextFactory.Context.Bag["TestString"].ToString(), MyContextAwareEventHandlerAsync.TestString); - Assert.Equal("I was called and set the context", _requestContextFactory.Context.Bag["MyContextAwareEventHandler"]); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); + await Assert.That(MyContextAwareEventHandlerAsync.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); + await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } - [Fact] - public void When_No_Request_Context_Is_Provided_On_A_Deposit() + [Test] + public async Task When_No_Request_Context_Is_Provided_On_A_Deposit() { - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey}) - } - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) } }); var tracer = new BrighterTracer(); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); //act commandProcessor.DepositPost(new MyCommand()); - //assert - Assert.True(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); } - [Fact] + [Test] public async Task When_No_Request_Context_Is_Provided_On_A_Deposit_Async() { - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication{RequestType = typeof(MyCommand), Topic = routingKey}) - }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { RequestType = typeof(MyCommand), Topic = routingKey }) }, }); var tracer = new BrighterTracer(); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); //act await commandProcessor.DepositPostAsync(new MyCommand()); - //assert - Assert.True(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); } - [Fact] - public void When_No_Request_Context_Is_Provided_On_A_Clear() + [Test] + public async Task When_No_Request_Context_Is_Provided_On_A_Clear() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { routingKey, new InMemoryMessageProducer(new InternalBus(), instrumentationOptions:InstrumentationOptions.All) - { - Publication = new Publication{RequestType = typeof(MyCommand), Topic = routingKey} - } }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), instrumentationOptions: InstrumentationOptions.All) { Publication = new Publication { RequestType = typeof(MyCommand), Topic = routingKey } } }, }); var tracer = new BrighterTracer(); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - - var myCommand = new MyCommand() {Id = Guid.NewGuid().ToString()}; + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); + var myCommand = new MyCommand() + { + Id = Guid.NewGuid().ToString() + }; var message = new Message(new MessageHeader(myCommand.Id, routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); bus.AddToOutbox(message, new RequestContext()); - //act - commandProcessor.ClearOutbox(new []{myCommand.Id}); - + commandProcessor.ClearOutbox(new[] { myCommand.Id }); //assert - Assert.True(_requestContextFactory.CreateWasCalled); + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); } - [Fact] + [Test] public async Task When_A_Request_Context_Is_Provided_On_A_Clear_Async() { //arrange - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var timeProvider = new FakeTimeProvider(); var routingKey = new RoutingKey("MyCommand"); - - var producerRegistry = - new ProducerRegistry(new Dictionary - { - { routingKey, new InMemoryMessageProducer(new InternalBus(), instrumentationOptions:InstrumentationOptions.All) - { - Publication = new Publication{RequestType = typeof(MyCommand), Topic = routingKey} - } }, - }); - + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), instrumentationOptions: InstrumentationOptions.All) { Publication = new Publication { RequestType = typeof(MyCommand), Topic = routingKey } } }, }); var tracer = new BrighterTracer(); - var fakeOutbox = new InMemoryOutbox(timeProvider) {Tracer = tracer}; - - var bus = new OutboxProducerMediator( - producerRegistry, - _resiliencePipelineRegistry, - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - fakeOutbox - ); - - var commandProcessor = new CommandProcessor( - _requestContextFactory, - _policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory() - ); - - var myCommand = new MyCommand() {Id = Guid.NewGuid().ToString()}; + var fakeOutbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var bus = new OutboxProducerMediator(producerRegistry, _resiliencePipelineRegistry, messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), fakeOutbox); + var commandProcessor = new CommandProcessor(_requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory()); + var myCommand = new MyCommand() + { + Id = Guid.NewGuid().ToString() + }; var message = new Message(new MessageHeader(myCommand.Id, routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); bus.AddToOutbox(message, new RequestContext()); - //act - await commandProcessor.ClearOutboxAsync(new []{myCommand.Id}); - + await commandProcessor.ClearOutboxAsync(new[] { myCommand.Id }); //assert - Assert.True(_requestContextFactory.CreateWasCalled); - + await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); } + [After(Test)] public void Dispose() { MyContextAwareCommandHandler.TestString = null; @@ -321,4 +203,4 @@ public void Dispose() MyContextAwareEventHandler.TestString = null; MyContextAwareEventHandlerAsync.TestString = null; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs index de9ef64a2d..6eeeb2ccf8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs @@ -1,13 +1,11 @@ -using System; +using System; using System.IO.Compression; using System.Net.Mime; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class CompressLargePayloadTests { private readonly CompressPayloadTransformer _transformer; @@ -15,89 +13,56 @@ public class CompressLargePayloadTests private readonly RoutingKey _topic = new("test_topic"); private const ushort GZIP_LEAD_BYTES = 0x8b1f; private const byte ZLIB_LEAD_BYTE = 0x78; - public CompressLargePayloadTests() { _transformer = new CompressPayloadTransformer(); - string body = DataGenerator.CreateString(6000); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8)); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8)); } - [Fact] - public void When_a_message_gzip_compresses_a_large_payload() + [Test] + public async Task When_a_message_gzip_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.GZip, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - Assert.Equal(GZIP_LEAD_BYTES, BitConverter.ToUInt16(compressedMessage.Body.Bytes, 0)); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); + await Assert.That(BitConverter.ToUInt16(compressedMessage.Body.Bytes, 0)).IsEqualTo(GZIP_LEAD_BYTES); //mime types - Assert.Equal( - new ContentType("application/gzip"), - compressedMessage.Header.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]); - Assert.Equal( - new ContentType("application/gzip"), - compressedMessage.Body.ContentType); + await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType("application/gzip")); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType("application/gzip")); } - [Fact] - public void When_a_message_zlib_compresses_a_large_payload() + [Test] + public async Task When_a_message_zlib_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Zlib, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication{ Topic = new RoutingKey(_topic)}); - + var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - Assert.Equal( - new ContentType("application/deflate"), - compressedMessage.Body.ContentType); - Assert.Equal(ZLIB_LEAD_BYTE, compressedMessage.Body.Bytes[0]); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType("application/deflate")); + await Assert.That(compressedMessage.Body.Bytes[0]).IsEqualTo(ZLIB_LEAD_BYTE); //mime types - Assert.Equal( - new ContentType(CompressPayloadTransformer.DEFLATE), - compressedMessage.Header.ContentType - ); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]); - Assert.Equal( - new ContentType(CompressPayloadTransformer.DEFLATE), - compressedMessage.Body.ContentType); + await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE)); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE)); } - [Fact] - public void When_a_message_brotli_compresses_a_large_payload() + [Test] + public async Task When_a_message_brotli_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Brotli, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - Assert.Equal( - new ContentType("application/br"), - compressedMessage.Body.ContentType); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType("application/br")); //mime types - Assert.Equal( - new ContentType(CompressPayloadTransformer.BROTLI), - compressedMessage.Header.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}.ToString(), - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]); - Assert.Equal( - new ContentType(CompressPayloadTransformer.BROTLI), - compressedMessage.Body.ContentType); + await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.BROTLI)); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.BROTLI)); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload_async.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload_async.cs index 81204f9dc0..d26b4cfa35 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload_async.cs @@ -1,14 +1,12 @@ -using System; +using System; using System.IO.Compression; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class AsyncCompressLargePayloadTests { private readonly CompressPayloadTransformer _transformer; @@ -16,80 +14,59 @@ public class AsyncCompressLargePayloadTests private readonly RoutingKey _topic = new("test_topic"); private const ushort GZIP_LEAD_BYTES = 0x8b1f; private const byte ZLIB_LEAD_BYTE = 0x78; - public AsyncCompressLargePayloadTests() { _transformer = new CompressPayloadTransformer(); - string body = DataGenerator.CreateString(6000); - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), - new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8)); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8)); } - [Fact] + [Test] public async Task When_a_message_gzip_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.GZip, CompressionLevel.Optimal, 5); - var compressedMessage = await _transformer.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - Assert.Equal(GZIP_LEAD_BYTES, BitConverter.ToUInt16(compressedMessage.Body.Bytes, 0)); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); + await Assert.That(BitConverter.ToUInt16(compressedMessage.Body.Bytes, 0)).IsEqualTo(GZIP_LEAD_BYTES); //mime types - Assert.Equal( - new ContentType("application/gzip"){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - compressedMessage.Header.ContentType); - Assert.Equal(new ContentType("application/gzip"){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - compressedMessage.Body.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString(), - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]); + await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType("application/gzip") { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType("application/gzip") { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); } - [Fact] + [Test] public async Task When_a_message_zlib_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Zlib, CompressionLevel.Optimal, 5); - var compressedMessage = await _transformer.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - Assert.Equal(new ContentType("application/deflate").MediaType, compressedMessage.Body.ContentType!.MediaType); - Assert.Equal(ZLIB_LEAD_BYTE, compressedMessage.Body.Bytes[0]); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); + await Assert.That(compressedMessage.Body.ContentType!.MediaType).IsEqualTo(new ContentType("application/deflate").MediaType); + await Assert.That(compressedMessage.Body.Bytes[0]).IsEqualTo(ZLIB_LEAD_BYTE); //mime types - Assert.Equal( - new ContentType(CompressPayloadTransformer.DEFLATE){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - compressedMessage.Header.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}.ToString(), - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]); - Assert.Equal( - new ContentType(CompressPayloadTransformer.DEFLATE){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - compressedMessage.Body.ContentType); + await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); + await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); } - [Fact] + [Test] public async Task When_a_message_brotli_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Brotli, CompressionLevel.Optimal, 5); - var compressedMessage = await _transformer.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.NotNull(compressedMessage.Body.Bytes); - Assert.True(compressedMessage.Body.Bytes.Length >= 2); - + await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); + await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); //mime types - var contentType = new ContentType("application/br"){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}; - Assert.Equal(contentType, compressedMessage.Body.ContentType!); - Assert.Equal(contentType, compressedMessage.Header.ContentType!); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}.ToString(), - compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] - ); + var contentType = new ContentType("application/br") + { + CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() + }; + await Assert.That(compressedMessage.Body.ContentType!).IsEqualTo(contentType); + await Assert.That(compressedMessage.Header.ContentType!).IsEqualTo(contentType); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs index 59a21c02e7..1e10cdb582 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs @@ -1,91 +1,55 @@ -using System; +using System; using System.Net.Mime; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class UncompressedPayloadTests { - - [Fact] - public void When_a_message_is_not_gzip_compressed() + [Test] + public async Task When_a_message_is_not_gzip_compressed() { - //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.GZip); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = transformer.Unwrap(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } - - [Fact] - public void When_a_message_is_not_zlib_compressed() + + [Test] + public async Task When_a_message_is_not_zlib_compressed() { - //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Zlib); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = transformer.Unwrap(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } - - [Fact] - public void When_a_message_is_not_brotli_compressed() + + [Test] + public async Task When_a_message_is_not_brotli_compressed() { - //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Brotli); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = transformer.Unwrap(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed_async.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed_async.cs index 619f1cb0e0..0286f726f8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed_async.cs @@ -1,88 +1,56 @@ -using System; +using System; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class AsyncUncompressedPayloadTests { - [Fact] + [Test] public async Task When_a_message_is_not_gzip_compressed() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.GZip); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = await transformer.UnwrapAsync(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } - [Fact] + [Test] public async Task When_a_message_is_not_zlib_compressed() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Zlib); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = await transformer.UnwrapAsync(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } - [Fact] + [Test] public async Task When_a_message_is_not_brotli_compressed() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Brotli); - var smallContent = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - var body = new MessageBody(smallContent, contentType); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act var msg = await transformer.UnwrapAsync(message); - //assert - Assert.Equal(smallContent, msg.Body.Value); + await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs index 3768ccc2b6..c6f95a4721 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs @@ -1,41 +1,30 @@ -using System; +using System; using System.IO.Compression; using System.Net.Mime; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class SmallPayloadNotCompressedTests { private readonly CompressPayloadTransformer _transformer; private readonly Message _message; private readonly RoutingKey _topic = new("test_topic"); - public SmallPayloadNotCompressedTests() { _transformer = new CompressPayloadTransformer(); _transformer.InitializeWrapFromAttributeParams(CompressionMethod.GZip, CompressionLevel.Optimal, 5); - string body = "small message"; var contentType = new ContentType(MediaTypeNames.Application.Json); - _message = new Message( - new MessageHeader(Id.Random(), _topic, MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: contentType), - new MessageBody(body, contentType, CharacterEncoding.UTF8) - ); + _message = new Message(new MessageHeader(Id.Random(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), new MessageBody(body, contentType, CharacterEncoding.UTF8)); } - [Fact] - public void When_a_message_is_under_the_threshold() + [Test] + public async Task When_a_message_is_under_the_threshold() { - var uncompressedMessage = _transformer.Wrap(_message, new Publication{Topic = _topic}); - + var uncompressedMessage = _transformer.Wrap(_message, new Publication { Topic = _topic }); //look for gzip in the bytes - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - uncompressedMessage.Body.ContentType); - Assert.Equal(_message.Body.Value, uncompressedMessage.Body.Value); + await Assert.That(uncompressedMessage.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(uncompressedMessage.Body.Value).IsEqualTo(_message.Body.Value); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold_async.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold_async.cs index 845249e5d3..83fec6a6a3 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold_async.cs @@ -1,41 +1,31 @@ -using System; +using System; using System.IO.Compression; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class AsyncSmallPayloadNotCompressedTests { private readonly CompressPayloadTransformer _transformer; private readonly Message _message; private readonly RoutingKey _topic = new("test_topic"); private const ushort GZIP_LEAD_BYTES = 0x8b1f; - public AsyncSmallPayloadNotCompressedTests() { _transformer = new CompressPayloadTransformer(); _transformer.InitializeWrapFromAttributeParams(CompressionMethod.GZip, CompressionLevel.Optimal, 5); - string body = "small message"; - _message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: new ContentType(MediaTypeNames.Application.Json) - ), - new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8) - ); + _message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(MediaTypeNames.Application.Json)), new MessageBody(body, new ContentType(MediaTypeNames.Application.Json), CharacterEncoding.UTF8)); } - [Fact] + [Test] public async Task When_a_message_is_under_the_threshold() { - var uncompressedMessage = await _transformer.WrapAsync(_message, new Publication{Topic = new RoutingKey(_topic)}); - + var uncompressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes - Assert.Equal(new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, uncompressedMessage.Body.ContentType); - Assert.Equal(_message.Body.Value, uncompressedMessage.Body.Value); + await Assert.That(uncompressedMessage.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(uncompressedMessage.Body.Value).IsEqualTo(_message.Body.Value); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs index a25fc970f3..f805bff439 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.IO.Compression; using System.Net.Mime; @@ -6,134 +6,79 @@ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class UncompressLargePayloadTests { - [Fact] - public void When_decompressing_a_large_gzip_payload_in_a_message() + [Test] + public async Task When_decompressing_a_large_gzip_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.GZip); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new GZipStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.GZIP; input.CopyToAsync(compressionStream); compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - //act var msg = transformer.Unwrap(message); - //assert - Assert.Equal(largeContent, msg.Body.Value); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - msg.Body.ContentType); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - msg.Header.ContentType); + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(msg.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); } - - [Fact] - public void When_decompressing_a_large_zlib_payload_in_a_message() + + [Test] + public async Task When_decompressing_a_large_zlib_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Zlib); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new ZLibStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.DEFLATE; input.CopyToAsync(compressionStream); compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, - timeStamp:DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - - //act + //act var msg = transformer.Unwrap(message); - //assert - Assert.Equal(largeContent, msg.Body.Value); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - msg.Body.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - msg.Header.ContentType); + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(msg.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); } - - [Fact] - public void When_decompressing_a_large_brotli_payload_in_a_message() + + [Test] + public async Task When_decompressing_a_large_brotli_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Brotli); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new BrotliStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.BROTLI; input.CopyToAsync(compressionStream); compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - //act - var msg = transformer.Unwrap(message); - - //assert - Assert.Equal(largeContent, msg.Body.Value); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}, - msg.Body.ContentType); - Assert.Equal( - new ContentType(MediaTypeNames.Application.Json){ CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }, - msg.Header.ContentType); - + var msg = transformer.Unwrap(message); + //assert + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(msg.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message_async.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message_async.cs index ad097ef79e..1e04ec8a5c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.IO.Compression; using System.Net.Mime; @@ -7,128 +7,92 @@ using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Compression; - public class AsyncUncompressLargePayloadTests { private readonly RoutingKey _routingKey = new RoutingKey("test_topic"); - - [Fact] + [Test] public async Task When_decompressing_a_large_gzip_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.GZip); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new GZipStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.GZIP; await input.CopyToAsync(compressionStream); await compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, - timeStamp:DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - //act var msg = await transformer.UnwrapAsync(message); - //assert - Assert.Equal(largeContent, msg.Body.Value); - var expected = new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}; - Assert.Equal(expected, msg.Body.ContentType); - Assert.Equal(expected, msg.Header.ContentType); + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + var expected = new ContentType(MediaTypeNames.Application.Json) + { + CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() + }; + await Assert.That(msg.Body.ContentType).IsEqualTo(expected); + await Assert.That(msg.Header.ContentType).IsEqualTo(expected); } - - [Fact] + + [Test] public async Task When_decompressing_a_large_zlib_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Zlib); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new ZLibStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.DEFLATE; await input.CopyToAsync(compressionStream); await compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - - //act + //act var msg = await transformer.UnwrapAsync(message); - //assert - Assert.Equal(largeContent, msg.Body.Value); - var expected = new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}; - Assert.Equal(expected, msg.Body.ContentType); - Assert.Equal(expected, msg.Header.ContentType); + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + var expected = new ContentType(MediaTypeNames.Application.Json) + { + CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() + }; + await Assert.That(msg.Body.ContentType).IsEqualTo(expected); + await Assert.That(msg.Header.ContentType).IsEqualTo(expected); } - - [Fact] + + [Test] public async Task When_decompressing_a_large_brotli_payload_in_a_message() { //arrange var transformer = new CompressPayloadTransformer(); transformer.InitializeUnwrapFromAttributeParams(CompressionMethod.Brotli); - var largeContent = DataGenerator.CreateString(6000); - using var input = new MemoryStream(Encoding.ASCII.GetBytes(largeContent)); using var output = new MemoryStream(); - Stream compressionStream = new BrotliStream(output, CompressionLevel.Optimal); - string mimeType = CompressPayloadTransformer.BROTLI; await input.CopyToAsync(compressionStream); await compressionStream.FlushAsync(); - var body = new MessageBody(output.ToArray(), new ContentType(mimeType)); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType) - ), - body - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; - //act - var msg = await transformer.UnwrapAsync(message); - - //assert - Assert.Equal(largeContent, msg.Body.Value); - var expected = new ContentType(MediaTypeNames.Application.Json){CharSet = CharacterEncoding.UTF8.FromCharacterEncoding()}; - Assert.Equal(expected, msg.Body.ContentType); - Assert.Equal(expected, msg.Header.ContentType); + var msg = await transformer.UnwrapAsync(message); + //assert + await Assert.That(msg.Body.Value).IsEqualTo(largeContent); + var expected = new ContentType(MediaTypeNames.Application.Json) + { + CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() + }; + await Assert.That(msg.Body.ContentType).IsEqualTo(expected); + await Assert.That(msg.Header.ContentType).IsEqualTo(expected); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs b/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs index 81c9c8c07c..5d18e0740f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using OpenTelemetry; @@ -9,55 +9,40 @@ using Paramore.Brighter.FeatureSwitch.Providers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Context; - -public class RequestContextTests +public class RequestContextTests { - [Fact] - public void When_Accessing_A_Request_Context() + [Test] + public async Task When_Accessing_A_Request_Context() { //arrange var builder = Sdk.CreateTracerProviderBuilder(); - var exportedActivities = new List(); - var traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(exportedActivities) - .Build(); - + var traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(exportedActivities).Build(); var activitySource = new ActivitySource("Paramore.Brighter.Tests"); var span = activitySource.StartActivity(); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test"), MessageType.MT_COMMAND), - new MessageBody("test content")); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test"), MessageType.MT_COMMAND), new MessageBody("test content")); //act - var context = new RequestContext { - FeatureSwitches = FluentConfigRegistryBuilder - .With() - .StatusOf() - .Is(FeatureSwitchStatus.On) - .Build(), - Policies = new PolicyRegistry{ - { "key", Policy.NoOp() } + FeatureSwitches = FluentConfigRegistryBuilder.With().StatusOf().Is(FeatureSwitchStatus.On).Build(), + Policies = new PolicyRegistry + { + { + "key", + Policy.NoOp() + } } }; context.Bag.AddOrUpdate("key", "value", (key, oldValue) => "value"); context.Span = span; - context.OriginatingMessage = message; - + context.OriginatingMessage = message; //assert - Assert.Equal(context.Bag["key"], "value"); - Assert.NotNull(context.Policies["key"]); - Assert.Equal(span?.Id, context.Span?.Id); - Assert.NotNull(context.OriginatingMessage); - Assert.Equal(context.OriginatingMessage.Header.MessageId, message.Header.MessageId); - + await Assert.That("value").IsEqualTo(context.Bag["key"]); + await Assert.That(context.Policies["key"]).IsNotNull(); + await Assert.That(context.Span?.Id).IsEqualTo(span?.Id); + await Assert.That(context.OriginatingMessage).IsNotNull(); + await Assert.That(message.Header.MessageId).IsEqualTo(context.OriginatingMessage.Header.MessageId); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Context/When_Creating_A_Request_Context.cs b/tests/Paramore.Brighter.Core.Tests/Context/When_Creating_A_Request_Context.cs index b3c3e5f9bc..5a6fc7b5ab 100644 --- a/tests/Paramore.Brighter.Core.Tests/Context/When_Creating_A_Request_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/Context/When_Creating_A_Request_Context.cs @@ -1,23 +1,18 @@ -using Xunit; - namespace Paramore.Brighter.Core.Tests.Context; - public class RequestContextFactoryTests { - [Fact] - public void When_Creating_A_Request_Context() + [Test] + public async Task When_Creating_A_Request_Context() { //arrange var requestContextFactory = new InMemoryRequestContextFactory(); - //act var context = requestContextFactory.Create(); - //assert - Assert.NotNull(context); - Assert.NotNull(context.Bag); - Assert.Null(context.Policies); - Assert.Null(context.FeatureSwitches); - Assert.Null(context.Span); + await Assert.That(context).IsNotNull(); + await Assert.That(context.Bag).IsNotNull(); + await Assert.That(context.Policies).IsNull(); + await Assert.That(context.FeatureSwitches).IsNull(); + await Assert.That(context.Span).IsNull(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_configuring_a_control_bus.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_configuring_a_control_bus.cs index 6ac41e7f5a..b8cef6bb66 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_configuring_a_control_bus.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_configuring_a_control_bus.cs @@ -1,7 +1,6 @@ using System; using FakeItEasy; using Paramore.Brighter.Observability; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.ControlBus; using Paramore.Brighter.ServiceActivator.Ports.Commands; @@ -13,30 +12,20 @@ public class ControlBusBuilderTests private Dispatcher _controlBus; private readonly ControlBusReceiverBuilder _busReceiverBuilder; private readonly string _hostName = "tests"; - public ControlBusBuilderTests() { var dispatcher = A.Fake(); var bus = new InternalBus(); - - _busReceiverBuilder = (ControlBusReceiverBuilder - .With() - .Dispatcher(dispatcher) - .ProducerRegistryFactory(new InMemoryProducerRegistryFactory(bus, - [ - new Publication{Topic = new RoutingKey("MyTopic"), RequestType = typeof(ConfigurationCommand)} - ], InstrumentationOptions.All)) - .ChannelFactory(new InMemoryChannelFactory(bus, TimeProvider.System)) as ControlBusReceiverBuilder)!; + _busReceiverBuilder = (ControlBusReceiverBuilder.With().Dispatcher(dispatcher).ProducerRegistryFactory(new InMemoryProducerRegistryFactory(bus, [new Publication { Topic = new RoutingKey("MyTopic"), RequestType = typeof(ConfigurationCommand) }], InstrumentationOptions.All)).ChannelFactory(new InMemoryChannelFactory(bus, TimeProvider.System)) as ControlBusReceiverBuilder)!; } - [Fact] - public void When_configuring_a_control_bus() + [Test] + public async Task When_configuring_a_control_bus() { _controlBus = _busReceiverBuilder.Build(_hostName); - - Assert.Contains(_controlBus.Subscriptions, cn => cn.Name == $"{_hostName}.{ControlBusReceiverBuilder.CONFIGURATION}"); - Assert.Contains(_controlBus.Subscriptions, cn => cn.Name == $"{_hostName}.{ControlBusReceiverBuilder.HEARTBEAT}"); - Assert.NotNull(_controlBus.CommandProcessor); + await Assert.That(_controlBus.Subscriptions).Contains(cn => cn.Name == $"{_hostName}.{ControlBusReceiverBuilder.CONFIGURATION}"); + await Assert.That(_controlBus.Subscriptions).Contains(cn => cn.Name == $"{_hostName}.{ControlBusReceiverBuilder.HEARTBEAT}"); + await Assert.That(_controlBus.CommandProcessor).IsNotNull(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_creating_a_control_bus_sender.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_creating_a_control_bus_sender.cs index bbc8fd63ed..91664df783 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_creating_a_control_bus_sender.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_creating_a_control_bus_sender.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Transactions; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.ControlBus { @@ -12,27 +11,18 @@ public class ControlBusSenderFactoryTests private readonly IAmAControlBusSenderFactory _senderFactory; private readonly IAmAnOutboxSync _outbox; private readonly IAmAMessageProducerSync _gateway; - public ControlBusSenderFactoryTests() { _outbox = new InMemoryOutbox(TimeProvider.System); _gateway = new InMemoryMessageProducer(new InternalBus()); - _senderFactory = new ControlBusSenderFactory(); } - [Fact] - public void When_creating_a_control_bus_sender() + [Test] + public async Task When_creating_a_control_bus_sender() { - _sender = _senderFactory.Create( - _outbox, - new ProducerRegistry(new Dictionary - { - {new RoutingKey("MyTopic"), _gateway}, - }), - tracer: new BrighterTracer()); - - Assert.NotNull(_sender); + _sender = _senderFactory.Create(_outbox, new ProducerRegistry(new Dictionary { { new RoutingKey("MyTopic"), _gateway }, }), tracer: new BrighterTracer()); + await Assert.That(_sender).IsNotNull(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_configuration_command_from_a_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_configuration_command_from_a_message.cs index 4ae95bf043..0e0ddf0551 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_configuration_command_from_a_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_configuration_command_from_a_message.cs @@ -1,33 +1,28 @@ -using Xunit; using Paramore.Brighter.ServiceActivator.Ports; using Paramore.Brighter.ServiceActivator.Ports.Commands; namespace Paramore.Brighter.Core.Tests.ControlBus { - public class ConfigurationCommandMessageMapperTests + public class ConfigurationCommandMessageMapperTests { private readonly IAmAMessageMapper _mapper; private readonly Message _message; private ConfigurationCommand _command; - public ConfigurationCommandMessageMapperTests() { _mapper = new ConfigurationCommandMessageMapper(); - var command = new ConfigurationCommand(ConfigurationCommandType.CM_STARTALL, "getallthethings"); - _message = _mapper.MapToMessage(command, new Publication(){Topic = new RoutingKey("myTopic")}); + _message = _mapper.MapToMessage(command, new Publication() { Topic = new RoutingKey("myTopic") }); } - [Fact] - public void When_mapping_from_a_configuration_command_from_a_message() + [Test] + public async Task When_mapping_from_a_configuration_command_from_a_message() { _command = _mapper.MapToRequest(_message); - // Should rehydrate the command type - Assert.Equal(ConfigurationCommandType.CM_STARTALL, _command.Type); + await Assert.That(_command.Type).IsEqualTo(ConfigurationCommandType.CM_STARTALL); // Should rehydrate the connection name - Assert.Equal(new SubscriptionName("getallthethings"), _command.SubscriptionName); - + await Assert.That(_command.SubscriptionName).IsEqualTo(new SubscriptionName("getallthethings")); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_reply_to_a_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_reply_to_a_message.cs index 69a100973a..5036c379ed 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_reply_to_a_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_reply_to_a_message.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using System; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Mappers; @@ -14,47 +13,39 @@ public class HeartbeatReplyToMessageMapperTests private const string TOPIC = "test.topic"; private readonly string _correlationId = Guid.NewGuid().ToString(); private readonly Publication _publication; - public HeartbeatReplyToMessageMapperTests() { _mapper = new HeartbeatReplyCommandMessageMapper(); _request = new HeartbeatReply("Test.Hostname", new ReplyAddress(TOPIC, _correlationId)); - var firstConsumer = new RunningConsumer(new ConsumerName("Test.Consumer1"), ConsumerState.Open); _request.Consumers.Add(firstConsumer); - - var secondConsumer = new RunningConsumer(new ConsumerName("More.Consumers2"),ConsumerState.Shut ); + var secondConsumer = new RunningConsumer(new ConsumerName("More.Consumers2"), ConsumerState.Shut); _request.Consumers.Add(secondConsumer); - - _publication = new Publication { Topic = new RoutingKey(TOPIC) }; + _publication = new Publication + { + Topic = new RoutingKey(TOPIC) + }; } - [Fact] - public void When_mapping_from_a_heartbeat_reply_to_a_message() + [Test] + public async Task When_mapping_from_a_heartbeat_reply_to_a_message() { _message = _mapper.MapToMessage(_request, _publication); - //Should put the reply to as the topic - Assert.Equal(new RoutingKey(TOPIC), _message.Header.Topic); - + await Assert.That(_message.Header.Topic).IsEqualTo(new RoutingKey(TOPIC)); //Should put the correlation_id in the header - Assert.Equal(_correlationId, _message.Header.CorrelationId); - + await Assert.That(_message.Header.CorrelationId.Value).IsEqualTo(_correlationId); // Should put the correlation_id in the reply - Assert.Equal(_correlationId, _request.CorrelationId.ToString()); - + await Assert.That(_request.CorrelationId.ToString()).IsEqualTo(_correlationId); // Reply correlation id should be set to the sender's address correlation id - Assert.Equal(_request.CorrelationId, Reply.SenderCorrelationIdOrDefault(_request.SendersAddress)); - + await Assert.That(Reply.SenderCorrelationIdOrDefault(_request.SendersAddress)).IsEqualTo(_request.CorrelationId); //Should put the connections into the body - Assert.Contains("\"consumerName\":\"Test.Consumer1\"", _message.Body.Value); - Assert.Contains("\"state\":\"Open", _message.Body.Value); - Assert.Contains("\"consumerName\":\"More.Consumers2\"", _message.Body.Value); - Assert.Contains("\"state\":\"Shut", _message.Body.Value); - - + await Assert.That(_message.Body.Value).Contains("\"consumerName\":\"Test.Consumer1\""); + await Assert.That(_message.Body.Value).Contains("\"state\":\"Open"); + await Assert.That(_message.Body.Value).Contains("\"consumerName\":\"More.Consumers2\""); + await Assert.That(_message.Body.Value).Contains("\"state\":\"Shut"); //Should put the hostname in the message body - Assert.Contains("\"hostName\":\"Test.Hostname\"", _message.Body.Value); + await Assert.That(_message.Body.Value).Contains("\"hostName\":\"Test.Hostname\""); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_request_to_a_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_request_to_a_message.cs index 472d894f82..c557d24154 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_request_to_a_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_heartbeat_request_to_a_message.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using System; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Mappers; @@ -13,29 +12,28 @@ public class HearbeatRequestToMessageMapperTests private const string TOPIC = "test.topic"; private readonly string _correlationId = Guid.NewGuid().ToString(); private readonly Publication _publication; - public HearbeatRequestToMessageMapperTests() { _mapper = new HeartbeatRequestCommandMessageMapper(); - _request = new HeartbeatRequest(new ReplyAddress(TOPIC, _correlationId)); - - _publication = new Publication { Topic = new RoutingKey(TOPIC) }; + _publication = new Publication + { + Topic = new RoutingKey(TOPIC) + }; } - [Fact] - public void When_mapping_from_a_heartbeat_request_to_a_message() + [Test] + public async Task When_mapping_from_a_heartbeat_request_to_a_message() { _message = _mapper.MapToMessage(_request, _publication); - //Should serialize the message_type to the header - Assert.Equal(MessageType.MT_COMMAND, _message.Header.MessageType); + await Assert.That(_message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); //Should serialize the message_id to the message body - Assert.Contains($"\"id\":\"{_request.Id}\"", _message.Body.Value); + await Assert.That(_message.Body.Value).Contains($"\"id\":\"{_request.Id}\""); //Should serialize the topic to the message body - Assert.Equal(TOPIC, _message.Header.ReplyTo); + await Assert.That(_message.Header.ReplyTo?.Value).IsEqualTo(TOPIC); //Should serialize the correlation_id to the message body - Assert.Equal(_correlationId, _message.Header.CorrelationId); + await Assert.That(_message.Header.CorrelationId.Value).IsEqualTo(_correlationId); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_reply.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_reply.cs index e0ac3610ee..438bef30d2 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_reply.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using System; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Mappers; @@ -14,36 +13,30 @@ public class HeartbeatMessageToReplyTests private const string MESSAGE_BODY = "{\r\n \"HostName\": \"Test.Hostname\",\r\n \"Consumers\": [\r\n {\r\n \"ConsumerName\": \"Test.Subscription\",\r\n \"State\": 1\r\n },\r\n {\r\n \"ConsumerName\": \"More.Consumers\",\r\n \"State\": 0\r\n }\r\n ]\r\n}"; private readonly RoutingKey _routingKey = new("test.topic"); private readonly string _correlationId = Guid.NewGuid().ToString(); - public HeartbeatMessageToReplyTests() { _mapper = new HeartbeatReplyCommandMessageMapper(); - var header = new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND, - timeStamp: DateTime.UtcNow, correlationId:_correlationId - ); + var header = new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow, correlationId: _correlationId); var body = new MessageBody(MESSAGE_BODY); _message = new Message(header, body); } - [Fact] - public void When_mapping_from_a_message_to_a_heartbeat_reply() + [Test] + public async Task When_mapping_from_a_message_to_a_heartbeat_reply() { _request = _mapper.MapToRequest(_message); - // Should set the sender address topic - Assert.Equal(_routingKey, _request.SendersAddress.Topic); + await Assert.That(_request.SendersAddress.Topic).IsEqualTo(_routingKey); // Should set the sender correlation_id - Assert.Equal(_correlationId, _request.SendersAddress.CorrelationId); - + await Assert.That(_request.SendersAddress.CorrelationId.Value).IsEqualTo(_correlationId); // Reply should have the same correlation id as the original message - Assert.NotEqual(Reply.SenderCorrelationIdOrDefault(_request.SendersAddress), Id.Empty); - Assert.Equal(_request.CorrelationId, Reply.SenderCorrelationIdOrDefault(_request.SendersAddress)); - + await Assert.That(Id.Empty).IsNotEqualTo(Reply.SenderCorrelationIdOrDefault(_request.SendersAddress)); + await Assert.That(Reply.SenderCorrelationIdOrDefault(_request.SendersAddress)).IsEqualTo(_request.CorrelationId); // Should set the hostName - Assert.Equal("Test.Hostname", _request.HostName); + await Assert.That(_request.HostName).IsEqualTo("Test.Hostname"); // Should contain the consumers - Assert.Contains(_request.Consumers, rc => rc.ConsumerName == "Test.Subscription" && rc.State == ConsumerState.Open); - Assert.Contains(_request.Consumers, rc => rc.ConsumerName == "More.Consumers" && rc.State == ConsumerState.Shut); + await Assert.That(_request.Consumers).Contains(rc => rc.ConsumerName == "Test.Subscription" && rc.State == ConsumerState.Open); + await Assert.That(_request.Consumers).Contains(rc => rc.ConsumerName == "More.Consumers" && rc.State == ConsumerState.Shut); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_request.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_request.cs index f2f26a3db2..6a38b577b0 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_request.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_from_a_message_to_a_heartbeat_request.cs @@ -1,5 +1,4 @@ using System; -using Xunit; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Mappers; @@ -13,36 +12,25 @@ public class HeartbeatMessageToRequestTests private const string TOPIC = "test.topic"; private readonly string _correlationId = Guid.NewGuid().ToString(); private readonly string _commandId = Guid.NewGuid().ToString(); - public HeartbeatMessageToRequestTests() { _mapper = new HeartbeatRequestCommandMessageMapper(); - var messageHeader = new MessageHeader( - Guid.NewGuid().ToString(), - new("Heartbeat"), - MessageType.MT_COMMAND, - timeStamp: DateTime.UtcNow, - correlationId:_correlationId, - replyTo:new RoutingKey(TOPIC)); - + var messageHeader = new MessageHeader(Guid.NewGuid().ToString(), new("Heartbeat"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow, correlationId: _correlationId, replyTo: new RoutingKey(TOPIC)); var body = String.Format("\"Id\": \"{0}\"", _commandId); var messageBody = new MessageBody("{" + body + "}"); _message = new Message(messageHeader, messageBody); } - [Fact] - public void When_mapping_from_a_message_to_a_heartbeat_request() + [Test] + public async Task When_mapping_from_a_message_to_a_heartbeat_request() { _request = _mapper.MapToRequest(_message); - - // Should put the message reply topic into the address - Assert.Equal(new RoutingKey(TOPIC), _request.ReplyAddress.Topic); + await Assert.That(_request.ReplyAddress.Topic.Value).IsEqualTo(TOPIC); // Should put the message correlation id into the address - Assert.Equal(_correlationId, _request.ReplyAddress.CorrelationId); + await Assert.That(_request.ReplyAddress.CorrelationId.Value).IsEqualTo(_correlationId); // Should set the id of the request - Assert.Equal(_commandId, _request.Id); - + await Assert.That(_request.Id.Value).IsEqualTo(_commandId); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_to_a_wire_message_from_a_configuration_command.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_to_a_wire_message_from_a_configuration_command.cs index 8f4fe364a6..fa0dab950e 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_to_a_wire_message_from_a_configuration_command.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_mapping_to_a_wire_message_from_a_configuration_command.cs @@ -1,4 +1,3 @@ -using Xunit; using Paramore.Brighter.ServiceActivator.Ports; using Paramore.Brighter.ServiceActivator.Ports.Commands; @@ -10,31 +9,28 @@ public class ConfigurationCommandToMessageMapperTests private Message _message; private readonly ConfigurationCommand _command; private readonly Publication _publication; - public ConfigurationCommandToMessageMapperTests() { _mapper = new ConfigurationCommandMessageMapper(); - _command = new ConfigurationCommand(ConfigurationCommandType.CM_STARTALL, new SubscriptionName("getallthethings")); - - _publication = new Publication { Topic = new RoutingKey("ConfigurationCommand") }; + _publication = new Publication + { + Topic = new RoutingKey("ConfigurationCommand") + }; } - - [Fact] - public void When_mapping_to_a_wire_message_from_a_configuration_command() + [Test] + public async Task When_mapping_to_a_wire_message_from_a_configuration_command() { _message = _mapper.MapToMessage(_command, _publication); - // Should serialize the command type to the message body - Assert.Contains("\"type\":\"CM_STARTALL", _message.Body.Value); + await Assert.That(_message.Body.Value).Contains("\"type\":\"CM_STARTALL"); // Should serialize the message type to the header - Assert.Equal(MessageType.MT_COMMAND, _message.Header.MessageType); + await Assert.That(_message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); // Should serialize the connection name to the message body - Assert.Contains("\"subscriptionName\":\"getallthethings\"", _message.Body.Value); + await Assert.That(_message.Body.Value).Contains("\"subscriptionName\":\"getallthethings\""); // Should serialize the message id to the message body - Assert.Contains($"\"id\":\"{_command.Id.Value}\"", _message.Body.Value); - + await Assert.That(_message.Body.Value).Contains($"\"id\":\"{_command.Id.Value}\""); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_start_message_for_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_start_message_for_a_connection.cs index d3fd10319d..90be4b687b 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_start_message_for_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_start_message_for_a_connection.cs @@ -19,11 +19,8 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using FakeItEasy; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Handlers; @@ -36,7 +33,6 @@ public class ConfigurationCommandStartTests private readonly ConfigurationCommandHandler _configurationCommandHandler; private readonly ConfigurationCommand _configurationCommand; private readonly IDispatcher _dispatcher; - public ConfigurationCommandStartTests() { _dispatcher = A.Fake(); @@ -44,13 +40,12 @@ public ConfigurationCommandStartTests() _configurationCommand = new ConfigurationCommand(ConfigurationCommandType.CM_STARTCHANNEL, new SubscriptionName(SubscriptionName)); } - [Fact] - public void When_receiving_a_start_message_for_a_connection() + [Test] + public async Task When_receiving_a_start_message_for_a_connection() { _configurationCommandHandler.Handle(_configurationCommand); - //_should_call_stop_for_the_given_connection A.CallTo(() => _dispatcher.Shut(new SubscriptionName(SubscriptionName))); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_stop_message_for_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_stop_message_for_a_connection.cs index 6a0d358d3b..6bdc62ce79 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_stop_message_for_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_a_stop_message_for_a_connection.cs @@ -1,5 +1,4 @@ using FakeItEasy; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Handlers; @@ -12,7 +11,6 @@ public class ConfigurationCommandStopTests private readonly ConfigurationCommandHandler _configurationCommandHandler; private readonly ConfigurationCommand _configurationCommand; private readonly IDispatcher _dispatcher; - public ConfigurationCommandStopTests() { _dispatcher = A.Fake(); @@ -20,13 +18,12 @@ public ConfigurationCommandStopTests() _configurationCommand = new ConfigurationCommand(ConfigurationCommandType.CM_STOPCHANNEL, new SubscriptionName(SUBSCRIPTION_NAME)); } - [Fact] - public void When_receiving_a_stop_message_for_a_connection() + [Test] + public async Task When_receiving_a_stop_message_for_a_connection() { _configurationCommandHandler.Handle(_configurationCommand); - //_should_call_stop_for_the_given_connection - A.CallTo(() => _dispatcher.Shut( new SubscriptionName(SUBSCRIPTION_NAME))); + A.CallTo(() => _dispatcher.Shut(new SubscriptionName(SUBSCRIPTION_NAME))); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_start_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_start_message.cs index 4595ada73c..bcc5569c6a 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_start_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_start_message.cs @@ -19,11 +19,8 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using FakeItEasy; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Handlers; @@ -35,7 +32,6 @@ public class ConfigurationCommandAllStartTests private readonly ConfigurationCommandHandler _configurationCommandHandler; private readonly ConfigurationCommand _configurationCommand; private readonly IDispatcher _dispatcher; - public ConfigurationCommandAllStartTests() { _dispatcher = A.Fake(); @@ -43,13 +39,12 @@ public ConfigurationCommandAllStartTests() _configurationCommand = new ConfigurationCommand(ConfigurationCommandType.CM_STARTALL, ""); } - [Fact] - public void When_receiving_an_all_start_message() + [Test] + public async Task When_receiving_an_all_start_message() { _configurationCommandHandler.Handle(_configurationCommand); - //_should_call_receive_on_the_dispatcher A.CallTo(() => _dispatcher.Receive()).MustHaveHappened(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_stop_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_stop_message.cs index d58607b705..ba9b388c3f 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_stop_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_receiving_an_all_stop_message.cs @@ -19,11 +19,8 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using FakeItEasy; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Handlers; @@ -35,7 +32,6 @@ public class ConfigurationCommandAllStopTests private readonly ConfigurationCommandHandler _configurationCommandHandler; private readonly ConfigurationCommand _configurationCommand; private readonly IDispatcher _dispatcher; - public ConfigurationCommandAllStopTests() { _dispatcher = A.Fake(); @@ -43,13 +39,12 @@ public ConfigurationCommandAllStopTests() _configurationCommand = new ConfigurationCommand(ConfigurationCommandType.CM_STOPALL, ""); } - [Fact] - public void When_receiving_an_all_stop_message() + [Test] + public async Task When_receiving_an_all_stop_message() { _configurationCommandHandler.Handle(_configurationCommand); - //_should_call_end_on_the_dispatcher A.CallTo(() => _dispatcher.End()).MustHaveHappened(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_recieving_a_heartbeat_message.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_recieving_a_heartbeat_message.cs index ab3b785727..b8865a9d8b 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_recieving_a_heartbeat_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_recieving_a_heartbeat_message.cs @@ -1,10 +1,8 @@ -using System; +using System; using System.Collections.Generic; -using System.Reflection; using FakeItEasy; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Ports.Commands; using Paramore.Brighter.ServiceActivator.Ports.Handlers; @@ -21,46 +19,38 @@ public class HeartbeatMessageTests private readonly HeartbeatRequestCommandHandler _handler; private readonly HeartbeatRequest _heartbeatRequest; private readonly string _hostName; - public HeartbeatMessageTests() { var dispatcher = A.Fake(); var firstConsumer = A.Fake(); var secondConsumer = A.Fake(); - A.CallTo(() => firstConsumer.Name).Returns(new ConsumerName(TEST_FIRST_CONNECTION_NAME)); A.CallTo(() => firstConsumer.State).Returns(ConsumerState.Open); - A.CallTo(() => secondConsumer.Name).Returns(new ConsumerName(TEST_SECOND_CONNECTION_NAME)); A.CallTo(() => secondConsumer.State).Returns(ConsumerState.Shut); - - A.CallTo(() => dispatcher.Consumers).Returns(new List {firstConsumer, secondConsumer}); - - var hostName = new HostName($"{Environment.MachineName}.{Assembly.GetEntryAssembly()?.FullName}"); + A.CallTo(() => dispatcher.Consumers).Returns(new List { firstConsumer, secondConsumer }); + var hostName = new HostName($"{Environment.MachineName}.{System.Reflection.Assembly.GetEntryAssembly()?.FullName}"); A.CallTo(() => dispatcher.HostName).Returns(hostName); _hostName = hostName; - _heartbeatRequest = new HeartbeatRequest(new ReplyAddress(TEST_ROUTING_KEY, _correlationId)); _handler = new HeartbeatRequestCommandHandler(_spyCommandProcessor, dispatcher); } - [Fact] - public void When_recieving_a_heartbeat_message() + [Test] + public async Task When_recieving_a_heartbeat_message() { _handler.Handle(_heartbeatRequest); - // Should post back a heartbeat response - Assert.True(_spyCommandProcessor.WasCalled(CommandType.Post)); + await Assert.That(_spyCommandProcessor.WasCalled(CommandType.Post)).IsTrue(); // Should have diagnostic information in the response var heartbeatEvent = _spyCommandProcessor.Observe(); - Assert.Equal(_hostName, heartbeatEvent.HostName); - Assert.Equal(new RoutingKey(TEST_ROUTING_KEY), heartbeatEvent.SendersAddress.Topic); - Assert.Equal(_correlationId, heartbeatEvent.SendersAddress.CorrelationId); - Assert.Equal(TEST_FIRST_CONNECTION_NAME, heartbeatEvent.Consumers[0].ConsumerName.ToString()); - Assert.Equal(ConsumerState.Open, heartbeatEvent.Consumers[0].State); - Assert.Equal(TEST_SECOND_CONNECTION_NAME, heartbeatEvent.Consumers[1].ConsumerName.ToString()); - Assert.Equal(ConsumerState.Shut, heartbeatEvent.Consumers[1].State); - + await Assert.That(heartbeatEvent.HostName).IsEqualTo(_hostName); + await Assert.That(heartbeatEvent.SendersAddress.Topic).IsEqualTo(new RoutingKey(TEST_ROUTING_KEY)); + await Assert.That(heartbeatEvent.SendersAddress.CorrelationId.Value).IsEqualTo(_correlationId); + await Assert.That(heartbeatEvent.Consumers[0].ConsumerName.ToString()).IsEqualTo(TEST_FIRST_CONNECTION_NAME); + await Assert.That(heartbeatEvent.Consumers[0].State).IsEqualTo(ConsumerState.Open); + await Assert.That(heartbeatEvent.Consumers[1].ConsumerName.ToString()).IsEqualTo(TEST_SECOND_CONNECTION_NAME); + await Assert.That(heartbeatEvent.Consumers[1].State).IsEqualTo(ConsumerState.Shut); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_we_build_a_control_bus_we_can_send_configuration_messages_to_it.cs b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_we_build_a_control_bus_we_can_send_configuration_messages_to_it.cs index 92960241d3..65f95f0f54 100644 --- a/tests/Paramore.Brighter.Core.Tests/ControlBus/When_we_build_a_control_bus_we_can_send_configuration_messages_to_it.cs +++ b/tests/Paramore.Brighter.Core.Tests/ControlBus/When_we_build_a_control_bus_we_can_send_configuration_messages_to_it.cs @@ -1,9 +1,7 @@ using System; -using System.Reflection; using FakeItEasy; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.ControlBus; using Paramore.Brighter.ServiceActivator.Ports.Commands; @@ -16,38 +14,24 @@ public class ControlBusTests private readonly Dispatcher _controlBus; private readonly ConfigurationCommand _configurationCommand; private Exception _exception; - public ControlBusTests() { - var topic = new RoutingKey(Environment.MachineName + Assembly.GetEntryAssembly()?.GetName()); + var topic = new RoutingKey(Environment.MachineName + System.Reflection.Assembly.GetEntryAssembly()?.GetName()); _dispatcher = A.Fake(); var bus = new InternalBus(); - - ControlBusReceiverBuilder busReceiverBuilder = (ControlBusReceiverBuilder) ControlBusReceiverBuilder - .With() - .Dispatcher(_dispatcher) - .ProducerRegistryFactory(new InMemoryProducerRegistryFactory( - bus, - [ - new Publication{Topic = topic, RequestType = typeof(ConfigurationCommand)} - ], InstrumentationOptions.All)) - .ChannelFactory(new InMemoryChannelFactory(bus, TimeProvider.System)); - + ControlBusReceiverBuilder busReceiverBuilder = (ControlBusReceiverBuilder)ControlBusReceiverBuilder.With().Dispatcher(_dispatcher).ProducerRegistryFactory(new InMemoryProducerRegistryFactory(bus, [new Publication { Topic = topic, RequestType = typeof(ConfigurationCommand) }], InstrumentationOptions.All)).ChannelFactory(new InMemoryChannelFactory(bus, TimeProvider.System)); _controlBus = busReceiverBuilder.Build("tests"); - _configurationCommand = new ConfigurationCommand(ConfigurationCommandType.CM_STARTALL, ""); - } - [Fact] - public void When_we_build_a_control_bus_we_can_send_configuration_messages_to_it() + [Test] + public async Task When_we_build_a_control_bus_we_can_send_configuration_messages_to_it() { _exception = Catch.Exception(() => _controlBus.CommandProcessor.Send(_configurationCommand)); - //Should not raise exceptions for missing handlers - Assert.Null(_exception); + await Assert.That(_exception).IsNull(); //Should call the dispatcher to start it A.CallTo(() => _dispatcher.Receive()).MustHaveHappened(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_succeeds_should_not_defer_message.cs b/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_succeeds_should_not_defer_message.cs index 0d0a360fe2..1d847a6a99 100644 --- a/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_succeeds_should_not_defer_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_succeeds_should_not_defer_message.cs @@ -19,16 +19,13 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Defer.TestDoubles; using Paramore.Brighter.Defer.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Defer { @@ -36,13 +33,11 @@ public class When_async_handler_succeeds_should_not_defer_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_async_handler_succeeds_should_not_defer_message() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { if (type == typeof(MySucceedingDeferHandlerAsync)) @@ -51,28 +46,21 @@ public When_async_handler_succeeds_should_not_defer_message() return new DeferMessageOnErrorHandlerAsync(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MySucceedingDeferHandlerAsync.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task It_should_complete_without_throwing() { //Act - var exception = await Record.ExceptionAsync(() => _commandProcessor.SendAsync(_command)); + Exception? exception = null; + try { await _commandProcessor.SendAsync(_command); } + catch (Exception e) { exception = e; } //Assert - Assert.Null(exception); // No exception thrown - Assert.True(MySucceedingDeferHandlerAsync.HandlerCalled); // Handler was invoked + await Assert.That(exception).IsNull(); // No exception thrown + await Assert.That(MySucceedingDeferHandlerAsync.HandlerCalled).IsTrue(); // Handler was invoked } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_throws_exception_should_defer_message.cs b/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_throws_exception_should_defer_message.cs index ae5dee1798..ab26bb367b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_throws_exception_should_defer_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Defer/When_async_handler_throws_exception_should_defer_message.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Actions; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Defer.TestDoubles; using Paramore.Brighter.Defer.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Defer { @@ -37,13 +34,11 @@ public class When_async_handler_throws_exception_should_defer_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_async_handler_throws_exception_should_defer_message() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { if (type == typeof(MyFailingDeferHandlerAsync)) @@ -52,31 +47,21 @@ public When_async_handler_throws_exception_should_defer_message() return new DeferMessageOnErrorHandlerAsync(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingDeferHandlerAsync.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task It_should_throw_DeferMessageAction_with_original_exception_and_delay() { //Act - var exception = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_command)); - + var exception = await Assert.That(() => _commandProcessor.SendAsync(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingDeferHandlerAsync.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingDeferHandlerAsync.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingDeferHandlerAsync.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message - Assert.Equal(TimeSpan.FromMilliseconds(5000), exception.Delay); // Delay from attribute flows through + await Assert.That(MyFailingDeferHandlerAsync.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingDeferHandlerAsync.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingDeferHandlerAsync.EXCEPTION_MESSAGE); // Inner has same message + await Assert.That(exception.Delay).IsEqualTo(TimeSpan.FromMilliseconds(5000)); // Delay from attribute flows through } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Defer/When_getting_handler_type_from_defer_message_on_error_attribute.cs b/tests/Paramore.Brighter.Core.Tests/Defer/When_getting_handler_type_from_defer_message_on_error_attribute.cs index 99e4a7b8d0..2f9ada6fa8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Defer/When_getting_handler_type_from_defer_message_on_error_attribute.cs +++ b/tests/Paramore.Brighter.Core.Tests/Defer/When_getting_handler_type_from_defer_message_on_error_attribute.cs @@ -19,51 +19,44 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Paramore.Brighter.Defer.Attributes; using Paramore.Brighter.Defer.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Defer { public class When_getting_handler_type_from_defer_message_on_error_attribute { - [Fact] - public void It_should_return_correct_sync_handler_configuration() + [Test] + public async Task It_should_return_correct_sync_handler_configuration() { //Arrange var attribute = new DeferMessageOnErrorAttribute(step: 1, delayMilliseconds: 5000); - //Act var handlerType = attribute.GetHandlerType(); var initializerParams = attribute.InitializerParams(); - //Assert - Assert.Equal(typeof(DeferMessageOnErrorHandler<>), handlerType); // Returns the correct handler type - Assert.Equal(HandlerTiming.Before, attribute.Timing); // Must wrap subsequent handlers - Assert.Equal(1, attribute.Step); // Preserves the specified step - Assert.Single(initializerParams); // Has one initializer parameter - Assert.Equal(5000, initializerParams[0]); // Delay value flows through + await Assert.That(handlerType).IsEqualTo(typeof(DeferMessageOnErrorHandler<>)); // Returns the correct handler type + await Assert.That(attribute.Timing).IsEqualTo(HandlerTiming.Before); // Must wrap subsequent handlers + await Assert.That(attribute.Step).IsEqualTo(1); // Preserves the specified step + await Assert.That(initializerParams).HasSingleItem(); // Has one initializer parameter + await Assert.That(initializerParams[0]).IsEqualTo(5000); // Delay value flows through } - [Fact] - public void It_should_return_correct_async_handler_configuration() + [Test] + public async Task It_should_return_correct_async_handler_configuration() { //Arrange var attribute = new DeferMessageOnErrorAsyncAttribute(step: 2, delayMilliseconds: 3000); - //Act var handlerType = attribute.GetHandlerType(); var initializerParams = attribute.InitializerParams(); - //Assert - Assert.Equal(typeof(DeferMessageOnErrorHandlerAsync<>), handlerType); // Returns the correct async handler type - Assert.Equal(HandlerTiming.Before, attribute.Timing); // Must wrap subsequent handlers - Assert.Equal(2, attribute.Step); // Preserves the specified step - Assert.Single(initializerParams); // Has one initializer parameter - Assert.Equal(3000, initializerParams[0]); // Delay value flows through + await Assert.That(handlerType).IsEqualTo(typeof(DeferMessageOnErrorHandlerAsync<>)); // Returns the correct async handler type + await Assert.That(attribute.Timing).IsEqualTo(HandlerTiming.Before); // Must wrap subsequent handlers + await Assert.That(attribute.Step).IsEqualTo(2); // Preserves the specified step + await Assert.That(initializerParams).HasSingleItem(); // Has one initializer parameter + await Assert.That(initializerParams[0]).IsEqualTo(3000); // Delay value flows through } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_succeeds_should_not_defer_message.cs b/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_succeeds_should_not_defer_message.cs index 492ac1a7f4..f7c2deccb7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_succeeds_should_not_defer_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_succeeds_should_not_defer_message.cs @@ -19,15 +19,12 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Defer.TestDoubles; using Paramore.Brighter.Defer.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Defer { @@ -35,13 +32,11 @@ public class When_handler_succeeds_should_not_defer_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_handler_succeeds_should_not_defer_message() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MySucceedingDeferHandler)) @@ -50,28 +45,21 @@ public When_handler_succeeds_should_not_defer_message() return new DeferMessageOnErrorHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MySucceedingDeferHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_complete_without_throwing() + [Test] + public async Task It_should_complete_without_throwing() { //Act - var exception = Record.Exception(() => _commandProcessor.Send(_command)); + Exception? exception = null; + try { _commandProcessor.Send(_command); } + catch (Exception e) { exception = e; } //Assert - Assert.Null(exception); // No exception thrown - Assert.True(MySucceedingDeferHandler.HandlerCalled); // Handler was invoked + await Assert.That(exception).IsNull(); // No exception thrown + await Assert.That(MySucceedingDeferHandler.HandlerCalled).IsTrue(); // Handler was invoked } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_throws_exception_should_defer_message.cs b/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_throws_exception_should_defer_message.cs index 9bc017b8f8..3aa99abb1d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_throws_exception_should_defer_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Defer/When_handler_throws_exception_should_defer_message.cs @@ -19,16 +19,13 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Actions; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Defer.TestDoubles; using Paramore.Brighter.Defer.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Defer { @@ -36,13 +33,11 @@ public class When_handler_throws_exception_should_defer_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_handler_throws_exception_should_defer_message() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MyFailingDeferHandler)) @@ -51,31 +46,21 @@ public When_handler_throws_exception_should_defer_message() return new DeferMessageOnErrorHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingDeferHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_throw_DeferMessageAction_with_original_exception_and_delay() + [Test] + public async Task It_should_throw_DeferMessageAction_with_original_exception_and_delay() { //Act - var exception = Assert.Throws(() => _commandProcessor.Send(_command)); - + var exception = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingDeferHandler.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingDeferHandler.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingDeferHandler.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message - Assert.Equal(TimeSpan.FromMilliseconds(5000), exception.Delay); // Delay from attribute flows through + await Assert.That(MyFailingDeferHandler.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingDeferHandler.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingDeferHandler.EXCEPTION_MESSAGE); // Inner has same message + await Assert.That(exception.Delay).IsEqualTo(TimeSpan.FromMilliseconds(5000)); // Delay from attribute flows through } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/DontAck/When_async_handler_throws_exception_should_dont_ack_message.cs b/tests/Paramore.Brighter.Core.Tests/DontAck/When_async_handler_throws_exception_should_dont_ack_message.cs index 83e0d533e9..d0392a0287 100644 --- a/tests/Paramore.Brighter.Core.Tests/DontAck/When_async_handler_throws_exception_should_dont_ack_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/DontAck/When_async_handler_throws_exception_should_dont_ack_message.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Actions; @@ -29,21 +27,18 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.DontAck.TestDoubles; using Paramore.Brighter.DontAck.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.DontAck { - public class When_async_handler_throws_exception_should_dont_ack_message : IDisposable + public class When_async_handler_throws_exception_should_dont_ack_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_async_handler_throws_exception_should_dont_ack_message() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { if (type == typeof(MyFailingDontAckHandlerAsync)) @@ -52,35 +47,26 @@ public When_async_handler_throws_exception_should_dont_ack_message() return new DontAckOnErrorHandlerAsync(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingDontAckHandlerAsync.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task It_should_throw_DontAckAction_with_original_exception() { //Act - var exception = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_command)); - + var exception = await Assert.That(() => _commandProcessor.SendAsync(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingDontAckHandlerAsync.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingDontAckHandlerAsync.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingDontAckHandlerAsync.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message + await Assert.That(MyFailingDontAckHandlerAsync.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingDontAckHandlerAsync.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingDontAckHandlerAsync.EXCEPTION_MESSAGE); // Inner has same message } + [After(Test)] public void Dispose() { CommandProcessor.ClearServiceBus(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/DontAck/When_handler_throws_exception_should_dont_ack_message.cs b/tests/Paramore.Brighter.Core.Tests/DontAck/When_handler_throws_exception_should_dont_ack_message.cs index 1264ed575f..980b8fd8e9 100644 --- a/tests/Paramore.Brighter.Core.Tests/DontAck/When_handler_throws_exception_should_dont_ack_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/DontAck/When_handler_throws_exception_should_dont_ack_message.cs @@ -19,30 +19,25 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Actions; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.DontAck.TestDoubles; using Paramore.Brighter.DontAck.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.DontAck { - public class When_handler_throws_exception_should_dont_ack_message : IDisposable + public class When_handler_throws_exception_should_dont_ack_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_handler_throws_exception_should_dont_ack_message() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MyFailingDontAckHandler)) @@ -51,35 +46,26 @@ public When_handler_throws_exception_should_dont_ack_message() return new DontAckOnErrorHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingDontAckHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_throw_DontAckAction_with_original_exception() + [Test] + public async Task It_should_throw_DontAckAction_with_original_exception() { //Act - var exception = Assert.Throws(() => _commandProcessor.Send(_command)); - + var exception = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingDontAckHandler.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingDontAckHandler.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingDontAckHandler.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message + await Assert.That(MyFailingDontAckHandler.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingDontAckHandler.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingDontAckHandler.EXCEPTION_MESSAGE); // Inner has same message } + [After(Test)] public void Dispose() { CommandProcessor.ClearServiceBus(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_A_Fallback_Is_Broken_Ciruit_Only.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_A_Fallback_Is_Broken_Ciruit_Only.cs index 9319a8ce4d..a22860287f 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_A_Fallback_Is_Broken_Ciruit_Only.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_A_Fallback_Is_Broken_Ciruit_Only.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -15,36 +14,28 @@ public class FallbackHandlerBrokenCircuitTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception _exception; - public FallbackHandlerBrokenCircuitTests() { var registry = new SubscriberRegistry(); registry.Register(); var policyRegistry = new PolicyRegistry(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - MyFailsWithFallbackDivideByZeroHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_A_Fallback_Is_Broken_Circuit_Only() + [Test] + public async Task When_A_Fallback_Is_Broken_Circuit_Only() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //Should send the command to the command handler MyFailsWithUnsupportedExceptionForFallback.ShouldReceive(_myCommand); // Should bubble out the exception - Assert.NotNull(_exception); + await Assert.That(_exception).IsNotNull(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_A_Broken_Circuit_Exception_Can_Fallback.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_A_Broken_Circuit_Exception_Can_Fallback.cs index 7d8a3deaf2..5b0ed2f9e3 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_A_Broken_Circuit_Exception_Can_Fallback.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_A_Broken_Circuit_Exception_Can_Fallback.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,20 +12,17 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -37,31 +34,24 @@ public class FallbackHandlerBrokenCircuitOnErrorTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); - public FallbackHandlerBrokenCircuitOnErrorTests() { var registry = new SubscriberRegistry(); registry.Register(); var policyRegistry = new PolicyRegistry(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyFailsWithFallbackDivideByZeroHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Raising_A_Broken_Circuit_Exception_Can_Fallback() + [Test] + public async Task When_Raising_A_Broken_Circuit_Exception_Can_Fallback() { _commandProcessor.Send(_myCommand); - //_should_send_the_command_to_the_command_handler MyFailsWithFallbackBrokenCircuitHandler.ShouldReceive(_myCommand); //_should_call_the_fallback_chain @@ -70,4 +60,4 @@ public void When_Raising_A_Broken_Circuit_Exception_Can_Fallback() MyFailsWithFallbackBrokenCircuitHandler.ShouldSetException(_myCommand); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Can_Fallback.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Can_Fallback.cs index 0cc140eb7a..1130066f95 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Can_Fallback.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Can_Fallback.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,20 +12,17 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -37,30 +34,24 @@ public class FallbackHandlerOnExceptionTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); - public FallbackHandlerOnExceptionTests() { var registry = new SubscriberRegistry(); registry.Register(); var policyRegistry = new PolicyRegistry(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyFailsWithFallbackDivideByZeroHandler.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Raising_An_Exception_Can_Fallback() + [Test] + public async Task When_Raising_An_Exception_Can_Fallback() { _commandProcessor.Send(_myCommand); - //_should_send_the_command_to_the_command_handler MyFailsWithFallbackDivideByZeroHandler.ShouldReceive(_myCommand); //_should_call_the_fallback_chain @@ -69,4 +60,4 @@ public void When_Raising_An_Exception_Can_Fallback() MyFailsWithFallbackDivideByZeroHandler.ShouldSetException(_myCommand); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Run_Fallback_Chain.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Run_Fallback_Chain.cs index 2fae1bf89b..a9f4e795ac 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Run_Fallback_Chain.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Raising_An_Exception_Run_Fallback_Chain.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,20 +12,17 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -38,32 +35,25 @@ public class FallbackHandlerPipelineRunOnExceptionTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); - public FallbackHandlerPipelineRunOnExceptionTests() { var registry = new SubscriberRegistry(); registry.Register(); var policyRegistry = new PolicyRegistry(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyFailsWithFallbackMultipleHandlers.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Raising_An_Exception_Run_Fallback_Chain() + [Test] + public async Task When_Raising_An_Exception_Run_Fallback_Chain() { _commandProcessor.Send(_myCommand); - //_should_send_the_command_to_the_command_handler MyFailsWithFallbackMultipleHandlers.ShouldReceive(_myCommand); //_should_call_the_fallback_chain @@ -72,4 +62,4 @@ public void When_Raising_An_Exception_Run_Fallback_Chain() MyFailsWithFallbackMultipleHandlers.ShouldSetException(_myCommand); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry.cs index d82d9a248f..7b7d209e98 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -16,38 +15,31 @@ public class CommandProcessorMissingPolicyFromRegistryTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception _exception; - public CommandProcessorMissingPolicyFromRegistryTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailPolicyHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() + [Test] + public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); //Should give the name of the missing policy - Assert.Contains("The given key 'MyDivideByZeroPolicy' was not present in the dictionary.", innerException.Message); + await Assert.That(innerException.Message).Contains("The given key 'MyDivideByZeroPolicy' was not present in the dictionary."); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async.cs index ceb87bc8b2..391be355c0 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -17,35 +16,29 @@ public class CommandProcessorMissingPolicyFromRegistryAsyncTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorMissingPolicyFromRegistryAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailPolicyHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] + [Test] public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry.cs index c36044c016..ceb1c741be 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -10,41 +9,33 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorMissingResiliencePipelineFromRegistryTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorMissingResiliencePipelineFromRegistryTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailResiliencePipelineHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() + [Test] + public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry_Async.cs index 64faf1fabb..65311ae853 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_ResiliencePipeline_Is_Not_In_The_Registry_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -11,40 +10,33 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorMissingResiliencePipelineFromRegistryAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorMissingResiliencePipelineFromRegistryAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailResiliencePipelineHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] + [Test] public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry.cs index 8ea15766e4..523c81a024 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -10,43 +9,35 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorMissingTypeResiliencePipelineFromRegistryTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorMissingTypeResiliencePipelineFromRegistryTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailTypeResiliencePipelineHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() + [Test] + public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); //Should give the name of the missing policy - Assert.Contains("Unable to find a generic resilience pipeline of 'MyCommand' associated with the key 'MyDivideByZeroPolicy'. Please ensure that either the generic resilience pipeline or the generic builder is registered.", innerException.Message); + await Assert.That(innerException.Message).Contains("Unable to find a generic resilience pipeline of 'MyCommand' associated with the key 'MyDivideByZeroPolicy'. Please ensure that either the generic resilience pipeline or the generic builder is registered."); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry_Async.cs index 50049fbcfd..8656f5b54b 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_And_The_TypeResiliencePipeline_Is_Not_In_The_Registry_Async.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; @@ -11,40 +10,33 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorMissingTypeResiliencePipelineFromRegistryAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private Exception? _exception; - public CommandProcessorMissingTypeResiliencePipelineFromRegistryAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - MyDoesNotFailTypeResiliencePipelineHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] + [Test] public async Task When_Sending_A_Command_And_The_Policy_Is_Not_In_The_Registry_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //Should throw an exception - Assert.IsType(_exception); + await Assert.That(_exception).IsTypeOf(); var innerException = _exception.InnerException; - Assert.NotNull(innerException); - Assert.IsType(innerException); + await Assert.That(innerException).IsNotNull(); + await Assert.That(innerException).IsTypeOf(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Multiple_Policy_Checks.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Multiple_Policy_Checks.cs index d0c19cb0ff..b4276b3f4e 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Multiple_Policy_Checks.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Multiple_Policy_Checks.cs @@ -1,4 +1,4 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests { @@ -15,54 +14,35 @@ public class CommandProcessorWithMultipleExceptionPoliciesNothingThrowTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithMultipleExceptionPoliciesNothingThrowTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions() - { - HandlerLifetime = ServiceLifetime.Transient - }); - - + container.AddSingleton(new BrighterOptions() { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var policyRegistry = new PolicyRegistry(); - - var retryPolicy = Policy - .Handle() - .WaitAndRetry([TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3)], (exception, timeSpan) => - { - _retryCount++; - }); - - var breakerPolicy = Policy.Handle() - .CircuitBreaker(1, TimeSpan.FromMilliseconds(500)); - + var retryPolicy = Policy.Handle().WaitAndRetry([TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3)], (exception, timeSpan) => + { + _retryCount++; + }); + var breakerPolicy = Policy.Handle().CircuitBreaker(1, TimeSpan.FromMilliseconds(500)); policyRegistry.Add("MyDivideByZeroRetryPolicy", retryPolicy); policyRegistry.Add("MyDivideByZeroBreakerPolicy", breakerPolicy); - MyDoesNotFailMultiplePoliciesHandler.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Sending_A_Command_That_Passes_Multiple_Policy_Checks() + [Test] + public async Task When_Sending_A_Command_That_Passes_Multiple_Policy_Checks() { _commandProcessor.Send(_myCommand); - // Should send the command to the command handler - Assert.True(MyDoesNotFailMultiplePoliciesHandler.ShouldReceive(_myCommand)); + await Assert.That(MyDoesNotFailMultiplePoliciesHandler.ShouldReceive(_myCommand)).IsTrue(); // Should not retry - Assert.Equal(0, _retryCount); + await Assert.That(_retryCount).IsEqualTo(0); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Policy_Check.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Policy_Check.cs index 090f1259e2..801e17f587 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Policy_Check.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_Policy_Check.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -15,49 +14,34 @@ public class CommandProcessorWithExceptionPolicyNothingThrowTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithExceptionPolicyNothingThrowTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var policyRegistry = new PolicyRegistry(); - - var policy = Policy - .Handle() - .WaitAndRetry([ - TimeSpan.FromSeconds(1), - TimeSpan.FromSeconds(2), - TimeSpan.FromSeconds(3) - ], (exception, timeSpan) => - { - _retryCount++; - }); + var policy = Policy.Handle().WaitAndRetry([TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3)], (exception, timeSpan) => + { + _retryCount++; + }); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyDoesNotFailPolicyHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Passes_Policy_Check() + [Test] + public async Task When_Sending_A_Command_That_Passes_Policy_Check() { _commandProcessor.Send(_myCommand); - // Should send the command to the command handler - Assert.True(MyDoesNotFailPolicyHandler.Shouldreceive(_myCommand)); + await Assert.That(MyDoesNotFailPolicyHandler.Shouldreceive(_myCommand)).IsTrue(); // Should not retry - Assert.Equal(0, _retryCount); + await Assert.That(_retryCount).IsEqualTo(0); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_ResiliencePipeline_Check.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_ResiliencePipeline_Check.cs index bb8650f749..c73f1bf531 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_ResiliencePipeline_Check.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_ResiliencePipeline_Check.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -11,52 +10,38 @@ using Polly.Retry; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithExceptionResiliencePipelineNothingThrowTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithExceptionResiliencePipelineNothingThrowTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder.AddRetry(new RetryStrategyOptions - { - BackoffType = DelayBackoffType.Linear, - Delay = TimeSpan.FromSeconds(1), - OnRetry = _ => - { - _retryCount++; - return new ValueTask(); - } - })); - + resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddRetry(new RetryStrategyOptions { BackoffType = DelayBackoffType.Linear, Delay = TimeSpan.FromSeconds(1), OnRetry = _ => + { + _retryCount++; + return new ValueTask(); + } })); MyDoesNotFailResiliencePipelineHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Passes_Policy_Check() + [Test] + public async Task When_Sending_A_Command_That_Passes_Policy_Check() { _commandProcessor.Send(_myCommand); - // Should send the command to the command handler - Assert.True(MyDoesNotFailResiliencePipelineHandler.Shouldreceive(_myCommand)); + await Assert.That(MyDoesNotFailResiliencePipelineHandler.Shouldreceive(_myCommand)).IsTrue(); // Should not retry - Assert.Equal(0, _retryCount); + await Assert.That(_retryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_TypeResiliencePipeline_Check.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_TypeResiliencePipeline_Check.cs index 30675bff30..bb3931a260 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_TypeResiliencePipeline_Check.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Passes_TypeResiliencePipeline_Check.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -11,52 +10,38 @@ using Polly.Retry; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithExceptionTypeResiliencePipelineNothingThrowTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithExceptionTypeResiliencePipelineNothingThrowTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder.AddRetry(new RetryStrategyOptions - { - BackoffType = DelayBackoffType.Linear, - Delay = TimeSpan.FromSeconds(1), - OnRetry = _ => - { - _retryCount++; - return new ValueTask(); - } - })); - + resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddRetry(new RetryStrategyOptions { BackoffType = DelayBackoffType.Linear, Delay = TimeSpan.FromSeconds(1), OnRetry = _ => + { + _retryCount++; + return new ValueTask(); + } })); MyDoesNotFailTypeResiliencePipelineHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Passes_Policy_Check() + [Test] + public async Task When_Sending_A_Command_That_Passes_Policy_Check() { _commandProcessor.Send(_myCommand); - // Should send the command to the command handler - Assert.True(MyDoesNotFailTypeResiliencePipelineHandler.Shouldreceive(_myCommand)); + await Assert.That(MyDoesNotFailTypeResiliencePipelineHandler.Shouldreceive(_myCommand)).IsTrue(); // Should not retry - Assert.Equal(0, _retryCount); + await Assert.That(_retryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs index 3d572c65ee..75e0d18d4f 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.CircuitBreaker; @@ -19,53 +18,39 @@ public class CommandProcessorWithCircuitBreakerTests private Exception _thirdException; private Exception _firstException; private Exception _secondException; - public CommandProcessorWithCircuitBreakerTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var policyRegistry = new PolicyRegistry(); - - var policy = Policy - .Handle() - .CircuitBreaker(2, TimeSpan.FromMinutes(1)); - + var policy = Policy.Handle().CircuitBreaker(2, TimeSpan.FromMinutes(1)); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandler.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit() + [Test] + public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit() { //First two should be caught, and increment the count _firstException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); _secondException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); //this one should tell us that the circuit is broken _thirdException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - - // Should send the command to the command handler - Assert.True(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)); + await Assert.That(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should break the circuit after two fails - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs index 9324f7c871..ce32eb5e37 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.CircuitBreaker; @@ -20,36 +19,24 @@ public class CommandProcessorWithCircuitBreakerAsyncTests private Exception? _thirdException; private Exception? _firstException; private Exception? _secondException; - public CommandProcessorWithCircuitBreakerAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var policyRegistry = new PolicyRegistry(); - - var policy = Policy - .Handle() - .CircuitBreakerAsync(2, TimeSpan.FromMinutes(1)); - + var policy = Policy.Handle().CircuitBreakerAsync(2, TimeSpan.FromMinutes(1)); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] + [Test] public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit_Async() { //First two should be caught, and increment the count @@ -57,16 +44,14 @@ public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit _secondException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); //this one should tell us that the circuit is broken _thirdException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - - // Should send the command to the command handler - Assert.True(MyFailsWithDivideByZeroHandlerAsync.ShouldReceive(_myCommand)); + await Assert.That(MyFailsWithDivideByZeroHandlerAsync.ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should break the circuit after two fails - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs index a229d04c1a..77ea12c2f6 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.CircuitBreaker; @@ -11,7 +10,6 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithCircuitBreakerAndResiliencePipelineTests { private readonly CommandProcessor _commandProcessor; @@ -19,53 +17,37 @@ public class CommandProcessorWithCircuitBreakerAndResiliencePipelineTests private Exception _thirdException; private Exception _firstException; private Exception _secondException; - public CommandProcessorWithCircuitBreakerAndResiliencePipelineTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipeline = new ResiliencePipelineRegistry(); - resiliencePipeline.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder - .AddCircuitBreaker(new CircuitBreakerStrategyOptions - { - MinimumThroughput = 2, - BreakDuration = TimeSpan.FromMinutes(1) - })); - - + resiliencePipeline.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddCircuitBreaker(new CircuitBreakerStrategyOptions { MinimumThroughput = 2, BreakDuration = TimeSpan.FromMinutes(1) })); MyFailsWithDivideByZeroWithResiliencePipelineHandler.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), resiliencePipeline, new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipeline, new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit() + [Test] + public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit() { //First two should be caught, and increment the count _firstException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); _secondException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); //this one should tell us that the circuit is broken _thirdException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); - - // Should send the command to the command handler - Assert.True(MyFailsWithDivideByZeroWithResiliencePipelineHandler.ShouldReceive(_myCommand)); + await Assert.That(MyFailsWithDivideByZeroWithResiliencePipelineHandler.ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should break the circuit after two fails - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit.cs index 7ba336c61c..99e2bbe67a 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit.cs @@ -1,4 +1,4 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; @@ -8,11 +8,10 @@ using Polly; using Polly.CircuitBreaker; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { - public class CommandProcessorWithBothRetryAndCircuitBreaker + public class CommandProcessorWithBothRetryAndCircuitBreaker { private readonly CommandProcessor _commandProcessor; private Exception _thirdException; @@ -20,80 +19,48 @@ public class CommandProcessorWithBothRetryAndCircuitBreaker private Exception _secondException; private int _retryCount; private Polly.Context _context; - public CommandProcessorWithBothRetryAndCircuitBreaker() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions() - { - HandlerLifetime = ServiceLifetime.Transient - }); - - + container.AddSingleton(new BrighterOptions() { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var policyRegistry = new PolicyRegistry(); - - var retryPolicy = Policy - .Handle() - .WaitAndRetry([ - TimeSpan.FromMilliseconds(10), - TimeSpan.FromMilliseconds(20), - TimeSpan.FromMilliseconds(30) - ], - (exception, timeSpan) => - _retryCount++ - ); - - var breakerPolicy = Policy.Handle() - .CircuitBreaker( - exceptionsAllowedBeforeBreaking: 2, - durationOfBreak: TimeSpan.FromSeconds(30), - onBreak: (exception, timespan, context) => - { - }, - onReset: context => _context = context - ); - + var retryPolicy = Policy.Handle().WaitAndRetry([TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20), TimeSpan.FromMilliseconds(30)], (exception, timeSpan) => _retryCount++); + var breakerPolicy = Policy.Handle().CircuitBreaker(exceptionsAllowedBeforeBreaking: 2, durationOfBreak: TimeSpan.FromSeconds(30), onBreak: (exception, timespan, context) => + { + }, onReset: context => _context = context); policyRegistry.Add("MyDivideByZeroRetryPolicy", retryPolicy); policyRegistry.Add("MyDivideByZeroBreakerPolicy", breakerPolicy); - - MyMultiplePoliciesFailsWithDivideByZeroHandler.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit() + [Test] + public async Task When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit() { // First two should be caught, and increment the count _firstException = Catch.Exception(() => _commandProcessor.Send(new MyCommand())); // Should have retried three times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); _retryCount = 0; _secondException = Catch.Exception(() => _commandProcessor.Send(new MyCommand())); // Should have retried three times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); _retryCount = 0; - // This one should tell us that the circuit is broken _thirdException = Catch.Exception(() => _commandProcessor.Send(new MyCommand())); // Should not retry - Assert.Equal(0, _retryCount); - + await Assert.That(_retryCount).IsEqualTo(0); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should bubble up the circuit breaker exception - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit_Async.cs index deed518a67..d574ae9a65 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit_Async.cs @@ -8,11 +8,10 @@ using Polly; using Polly.CircuitBreaker; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { - public class CommandProcessorWithBothRetryAndCircuitBreakerAsync + public class CommandProcessorWithBothRetryAndCircuitBreakerAsync { private readonly CommandProcessor _commandProcessor; private Exception? _thirdException; @@ -20,80 +19,48 @@ public class CommandProcessorWithBothRetryAndCircuitBreakerAsync private Exception? _secondException; private int _retryCount; private Polly.Context _context; - public CommandProcessorWithBothRetryAndCircuitBreakerAsync() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions() - { - HandlerLifetime = ServiceLifetime.Transient - }); - - + container.AddSingleton(new BrighterOptions() { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var policyRegistry = new PolicyRegistry(); - - var retryPolicy = Policy - .Handle() - .WaitAndRetryAsync([ - TimeSpan.FromMilliseconds(10), - TimeSpan.FromMilliseconds(20), - TimeSpan.FromMilliseconds(30) - ], - (exception, timeSpan) => - _retryCount++ - ); - - var breakerPolicy = Policy.Handle() - .CircuitBreakerAsync( - exceptionsAllowedBeforeBreaking: 2, - durationOfBreak: TimeSpan.FromSeconds(30), - onBreak: (exception, timespan, context) => - { - }, - onReset: context => _context = context - ); - + var retryPolicy = Policy.Handle().WaitAndRetryAsync([TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20), TimeSpan.FromMilliseconds(30)], (exception, timeSpan) => _retryCount++); + var breakerPolicy = Policy.Handle().CircuitBreakerAsync(exceptionsAllowedBeforeBreaking: 2, durationOfBreak: TimeSpan.FromSeconds(30), onBreak: (exception, timespan, context) => + { + }, onReset: context => _context = context); policyRegistry.Add("MyDivideByZeroRetryPolicyAsync", retryPolicy); policyRegistry.Add("MyDivideByZeroBreakerPolicyAsync", breakerPolicy); - - MyMultiplePoliciesFailsWithDivideByZeroHandlerAsync.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Sending_A_Command_That_Retries_Then_Repeatedly_Fails_Breaks_The_Circuit() { // First two should be caught, and increment the count _firstException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(new MyCommand())); // Should have retried three times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); _retryCount = 0; _secondException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(new MyCommand())); // Should have retried three times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); _retryCount = 0; - // This one should tell us that the circuit is broken _thirdException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(new MyCommand())); // Should not retry - Assert.Equal(0, _retryCount); - + await Assert.That(_retryCount).IsEqualTo(0); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should bubble up the circuit breaker exception - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs index 3bf49075be..0cdf42650c 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -16,51 +15,31 @@ public class CommandProcessorWithRetryPolicyTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithRetryPolicyTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var policyRegistry = new PolicyRegistry(); - - var policy = Policy - .Handle() - .WaitAndRetry([ - TimeSpan.FromMilliseconds(10), - TimeSpan.FromMilliseconds(20), - TimeSpan.FromMilliseconds(30) - ], - (exception, timeSpan) => - _retryCount++ - ); - + var policy = Policy.Handle().WaitAndRetry([TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20), TimeSpan.FromMilliseconds(30)], (exception, timeSpan) => _retryCount++); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandler.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] - public void When_Sending_A_Command_That_Should_Retry_Failure() + [Test] + public async Task When_Sending_A_Command_That_Should_Retry_Failure() { Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //_should_send_the_command_to_the_command_handler - Assert.True(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)); + await Assert.That(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)).IsTrue(); //_should_retry_three_times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure_Async.cs index 17ea873045..f3dab1edcd 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure_Async.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -12,63 +11,46 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { - public class CommandProcessorWithRetryPolicyAsyncTests : IDisposable + public class CommandProcessorWithRetryPolicyAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; private ServiceProvider _provider; - public CommandProcessorWithRetryPolicyAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); var handlerFactory = new ServiceProviderHandlerFactory(_provider); - var policyRegistry = new PolicyRegistry(); - - var policy = Policy - .Handle() - .WaitAndRetryAsync([ - TimeSpan.FromMilliseconds(10), - TimeSpan.FromMilliseconds(20), - TimeSpan.FromMilliseconds(30) - ], - (exception, timeSpan) => - _retryCount++ - ); - + var policy = Policy.Handle().WaitAndRetryAsync([TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20), TimeSpan.FromMilliseconds(30)], (exception, timeSpan) => _retryCount++); policyRegistry.Add("MyDivideByZeroPolicy", policy); - _provider.GetService().ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact] + [Test] public async Task When_Sending_A_Command_That_Should_Retry_Failure_Async() { await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - //_should_send_the_command_to_the_command_handler var zeroHandlerAsync = _provider.GetService(); - Assert.True(zeroHandlerAsync!.ShouldReceive(_myCommand)); + await Assert.That(zeroHandlerAsync!.ShouldReceive(_myCommand)).IsTrue(); //_should_retry_three_times - Assert.Equal(3, _retryCount); + await Assert.That(_retryCount).IsEqualTo(3); } + [After(Test)] public void Dispose() { _provider?.Dispose(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_ResiliencePipeline_Check.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_ResiliencePipeline_Check.cs index e9720d2b6c..2706540a6c 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_ResiliencePipeline_Check.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_ResiliencePipeline_Check.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -11,52 +10,38 @@ using Polly.Retry; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithExceptionResiliencePipelineNothingThrowAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithExceptionResiliencePipelineNothingThrowAsyncTests() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder.AddRetry(new RetryStrategyOptions - { - BackoffType = DelayBackoffType.Linear, - Delay = TimeSpan.FromSeconds(1), - OnRetry = _ => - { - _retryCount++; - return new ValueTask(); - } - })); - + resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddRetry(new RetryStrategyOptions { BackoffType = DelayBackoffType.Linear, Delay = TimeSpan.FromSeconds(1), OnRetry = _ => + { + _retryCount++; + return new ValueTask(); + } })); MyDoesNotFailResiliencePipelineHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Sending_An_Async_Command_That_Passes_ResiliencePipeline_Check() { //Act await _commandProcessor.SendAsync(_myCommand); - //Assert - Assert.True(MyDoesNotFailResiliencePipelineHandlerAsync.Shouldreceive(_myCommand)); - Assert.Equal(0, _retryCount); + await Assert.That(MyDoesNotFailResiliencePipelineHandlerAsync.Shouldreceive(_myCommand)).IsTrue(); + await Assert.That(_retryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_TypeResiliencePipeline_Check.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_TypeResiliencePipeline_Check.cs index 88c120ab80..24adf0650e 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_TypeResiliencePipeline_Check.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Passes_TypeResiliencePipeline_Check.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -11,52 +10,38 @@ using Polly.Retry; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithExceptionTypeResiliencePipelineNothingThrowAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; - public CommandProcessorWithExceptionTypeResiliencePipelineNothingThrowAsyncTests() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder.AddRetry(new RetryStrategyOptions - { - BackoffType = DelayBackoffType.Linear, - Delay = TimeSpan.FromSeconds(1), - OnRetry = _ => - { - _retryCount++; - return new ValueTask(); - } - })); - + resiliencePipelineRegistry.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddRetry(new RetryStrategyOptions { BackoffType = DelayBackoffType.Linear, Delay = TimeSpan.FromSeconds(1), OnRetry = _ => + { + _retryCount++; + return new ValueTask(); + } })); MyDoesNotFailTypeResiliencePipelineHandlerAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Sending_An_Async_Command_That_Passes_TypeResiliencePipeline_Check() { //Act await _commandProcessor.SendAsync(_myCommand); - //Assert - Assert.True(MyDoesNotFailTypeResiliencePipelineHandlerAsync.Shouldreceive(_myCommand)); - Assert.Equal(0, _retryCount); + await Assert.That(MyDoesNotFailTypeResiliencePipelineHandlerAsync.Shouldreceive(_myCommand)).IsTrue(); + await Assert.That(_retryCount).IsEqualTo(0); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs index 1d0198941c..590a9a4d45 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_An_Async_Command_That_Repeatedely_Fails_Break_The_Circuit_With_ResiliencePipeline.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.CircuitBreaker; @@ -12,7 +11,6 @@ using Paramore.Brighter.Extensions.DependencyInjection; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithCircuitBreakerAndResiliencePipelineAsyncTests { private readonly CommandProcessor _commandProcessor; @@ -20,35 +18,22 @@ public class CommandProcessorWithCircuitBreakerAndResiliencePipelineAsyncTests private Exception _thirdException; private Exception _firstException; private Exception _secondException; - public CommandProcessorWithCircuitBreakerAndResiliencePipelineAsyncTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipeline = new ResiliencePipelineRegistry(); - resiliencePipeline.TryAddBuilder("MyDivideByZeroPolicy", - (builder, _) => builder - .AddCircuitBreaker(new CircuitBreakerStrategyOptions - { - MinimumThroughput = 2, - BreakDuration = TimeSpan.FromMinutes(1) - })); - + resiliencePipeline.TryAddBuilder("MyDivideByZeroPolicy", (builder, _) => builder.AddCircuitBreaker(new CircuitBreakerStrategyOptions { MinimumThroughput = 2, BreakDuration = TimeSpan.FromMinutes(1) })); MyFailsWithDivideByZeroWithResiliencePipelineHandlerAsync.ReceivedCommand = false; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), resiliencePipeline, new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipeline, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Sending_An_Async_Command_That_Repeatedly_Fails_Break_The_Circuit() { //First two should be caught, and increment the count @@ -56,14 +41,13 @@ public async Task When_Sending_An_Async_Command_That_Repeatedly_Fails_Break_The_ _secondException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); //this one should tell us that the circuit is broken _thirdException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); - // Should send the command to the command handler - Assert.True(MyFailsWithDivideByZeroWithResiliencePipelineHandlerAsync.ShouldReceive(_myCommand)); + await Assert.That(MyFailsWithDivideByZeroWithResiliencePipelineHandlerAsync.ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception - Assert.IsType(_firstException); + await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception - Assert.IsType(_secondException); + await Assert.That(_secondException).IsTypeOf(); // Should break the circuit after two fails - Assert.IsType(_thirdException); + await Assert.That(_thirdException).IsTypeOf(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_Different_Async_Commands_That_Share_A_ResiliencePipeline.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_Different_Async_Commands_That_Share_A_ResiliencePipeline.cs index 0700ec3481..e3978b7982 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_Different_Async_Commands_That_Share_A_ResiliencePipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_Different_Async_Commands_That_Share_A_ResiliencePipeline.cs @@ -2,7 +2,6 @@ using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles; -using Xunit; using Paramore.Brighter.Policies.Handlers; using Polly; using Polly.Registry; @@ -11,53 +10,39 @@ using Polly.Retry; namespace Paramore.Brighter.Core.Tests.ExceptionPolicy; - public class CommandProcessorWithSharedResiliencePipelineAsyncTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private readonly MyOtherCommand _myOtherCommand = new MyOtherCommand(); - public CommandProcessorWithSharedResiliencePipelineAsyncTests() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.TryAddBuilder("SharedRetryPolicy", - (builder, _) => builder.AddRetry(new RetryStrategyOptions - { - BackoffType = DelayBackoffType.Linear, - Delay = TimeSpan.FromSeconds(1), - MaxRetryAttempts = 1 - })); - + resiliencePipelineRegistry.TryAddBuilder("SharedRetryPolicy", (builder, _) => builder.AddRetry(new RetryStrategyOptions { BackoffType = DelayBackoffType.Linear, Delay = TimeSpan.FromSeconds(1), MaxRetryAttempts = 1 })); MyCommandHandlerWithSharedPipelineAsync.ReceivedCommand = false; MyOtherCommandHandlerWithSharedPipelineAsync.ReceivedCommand = false; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Sending_Different_Async_Commands_That_Share_A_ResiliencePipeline() { //Act await _commandProcessor.SendAsync(_myCommand); await _commandProcessor.SendAsync(_myOtherCommand); - //Assert - Assert.True(MyCommandHandlerWithSharedPipelineAsync.ReceivedCommand); - Assert.True(MyOtherCommandHandlerWithSharedPipelineAsync.ReceivedCommand); + await Assert.That(MyCommandHandlerWithSharedPipelineAsync.ReceivedCommand).IsTrue(); + await Assert.That(MyOtherCommandHandlerWithSharedPipelineAsync.ReceivedCommand).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_Off.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_Off.cs index 83ea55d509..4afa5315be 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_Off.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_Off.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.FeatureSwitch.Providers; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -16,58 +15,37 @@ public class CommandProcessorWithFeatureSwitchOffByConfigInPipelineTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; private readonly ServiceProvider _provider; - public CommandProcessorWithFeatureSwitchOffByConfigInPipelineTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - - IAmAFeatureSwitchRegistry featureSwitchRegistry = FluentConfigRegistryBuilder - .With() - .StatusOf().Is(FeatureSwitchStatus.Off) - .StatusOf().Is(FeatureSwitchStatus.Off) - .Build(); - + IAmAFeatureSwitchRegistry featureSwitchRegistry = FluentConfigRegistryBuilder.With().StatusOf().Is(FeatureSwitchStatus.Off).StatusOf().Is(FeatureSwitchStatus.Off).Build(); var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .ConfigureFeatureSwitches(featureSwitchRegistry) - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().ConfigureFeatureSwitches(featureSwitchRegistry).Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_By_Fluent_Config() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_By_Fluent_Config() { _commandProcessor.Send(_myCommand); - - Assert.False(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); } - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_By_Fluent_Config() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.False(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_On.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_On.cs index 9b2a16f76f..a28b1dd8c7 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_On.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Config_On.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.FeatureSwitch.Providers; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -16,58 +15,37 @@ public class CommandProcessorWithFeatureSwitchOnByConfigInPipelineTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; readonly ServiceProvider _provider; - public CommandProcessorWithFeatureSwitchOnByConfigInPipelineTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - - IAmAFeatureSwitchRegistry fluentConfig = FluentConfigRegistryBuilder - .With() - .StatusOf().Is(FeatureSwitchStatus.On) - .StatusOf().Is(FeatureSwitchStatus.On) - .Build(); - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .ConfigureFeatureSwitches(fluentConfig) - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + IAmAFeatureSwitchRegistry fluentConfig = FluentConfigRegistryBuilder.With().StatusOf().Is(FeatureSwitchStatus.On).StatusOf().Is(FeatureSwitchStatus.On).Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().ConfigureFeatureSwitches(fluentConfig).Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_On_By_Fluent_Config() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_On_By_Fluent_Config() { _commandProcessor.Send(_myCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } - - [Fact] + + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Is_On_By_Fluent_Config() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_Exception.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_Exception.cs index 38a9e90efd..4e95ab8b00 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_Exception.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_Exception.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; @@ -6,7 +6,6 @@ using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -16,57 +15,38 @@ public class FeatureSwitchByConfigMissingConfigStrategyExceptionTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; private readonly ServiceProvider _provider; private Exception _exception; - public FeatureSwitchByConfigMissingConfigStrategyExceptionTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - IAmAFeatureSwitchRegistry featureSwitchRegistry = new FakeConfigRegistry(); - featureSwitchRegistry.MissingConfigStrategy = MissingConfigStrategy.Exception; + _commandProcessor = CommandProcessorBuilder.StartNew().ConfigureFeatureSwitches(featureSwitchRegistry).Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); + } - _commandProcessor = CommandProcessorBuilder - .StartNew() - .ConfigureFeatureSwitches(featureSwitchRegistry) - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); - } - - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_Exception() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_Exception() { _exception = Catch.Exception(() => _commandProcessor.Send(_myCommand)); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains($"Handler of type {nameof(MyFeatureSwitchedConfigHandler)} does not have a Feature Switch configuration!"); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); + } - Assert.IsType(_exception); - Assert.NotNull(_exception); - Assert.Contains($"Handler of type {nameof(MyFeatureSwitchedConfigHandler)} does not have a Feature Switch configuration!", _exception.Message); - - Assert.False(_provider.GetService()!.DidReceive()); - - } - - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_Exception() { try @@ -77,14 +57,11 @@ public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_S { _exception = e; } - - - Assert.IsType(_exception); - Assert.NotNull(_exception); - Assert.Contains($"Handler of type {nameof(MyFeatureSwitchedConfigHandlerAsync)} does not have a Feature Switch configuration!", _exception.Message); - - Assert.False(_provider.GetService()!.DidReceive()); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception).IsNotNull(); + await Assert.That(_exception.Message).Contains($"Handler of type {nameof(MyFeatureSwitchedConfigHandlerAsync)} does not have a Feature Switch configuration!"); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOff.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOff.cs index 0ca7c41946..dbadbc0ea6 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOff.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOff.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; using Paramore.Brighter.FeatureSwitch; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -15,57 +14,40 @@ public class FeatureSwitchByConfigMissingConfigStrategySilentOffTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; private readonly IServiceProvider _provider; - public FeatureSwitchByConfigMissingConfigStrategySilentOffTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - IAmAFeatureSwitchRegistry featureSwitchRegistry = new FakeConfigRegistry { MissingConfigStrategy = MissingConfigStrategy.SilentOff }; - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .ConfigureFeatureSwitches(featureSwitchRegistry) - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); - } + _commandProcessor = CommandProcessorBuilder.StartNew().ConfigureFeatureSwitches(featureSwitchRegistry).Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); + } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOff() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOff() { _commandProcessor.Send(_myCommand); - - Assert.False(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); } - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOff() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.False(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOn.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOn.cs index 2e8b13820a..061e4ce7c1 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOn.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Missing_Config_SilentOn.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; using Paramore.Brighter.FeatureSwitch; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -16,57 +15,39 @@ public class FeatureSwitchByConfigMissingConfigStrategySilentOnTests private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); private readonly ServiceProvider _provider; - - private readonly CommandProcessor _commandProcessor; - + private readonly CommandProcessor _commandProcessor; public FeatureSwitchByConfigMissingConfigStrategySilentOnTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - IAmAFeatureSwitchRegistry featureSwitchRegistry = new FakeConfigRegistry { MissingConfigStrategy = MissingConfigStrategy.SilentOn }; - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .ConfigureFeatureSwitches(featureSwitchRegistry) - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().ConfigureFeatureSwitches(featureSwitchRegistry).Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOn() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOn() { _commandProcessor.Send(_myCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Has_No_Config_And_Strategy_Is_SilentOn() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off.cs index f08e9025f0..0c720e427c 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -14,49 +13,34 @@ public class CommandProcessorWithFeatureSwitchOffInPipelineTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; - public CommandProcessorWithFeatureSwitchOffInPipelineTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); ServiceProviderHandlerFactory handlerFactory = new(container.BuildServiceProvider()); - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off() { _commandProcessor.Send(_myCommand); - - Assert.False(MyFeatureSwitchedOffHandler.DidReceive()); + await Assert.That(MyFeatureSwitchedOffHandler.DidReceive()).IsFalse(); } - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Is_Off() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.False(MyFeatureSwitchedOffHandlerAsync.DidReceive()); + await Assert.That(MyFeatureSwitchedOffHandlerAsync.DidReceive()).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck.cs index ec08cf2d8d..454b1ed99e 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Actions; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -30,56 +28,42 @@ THE SOFTWARE. */ using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; using Microsoft.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.FeatureSwitch { - [Collection("CommandProcessor")] - public class CommandProcessorWithFeatureSwitchOffDontAckInPipelineTests : IDisposable + [NotInParallel("CommandProcessor")] + public class CommandProcessorWithFeatureSwitchOffDontAckInPipelineTests { private readonly MyCommand _myCommand = new(); private readonly CommandProcessor _commandProcessor; - public CommandProcessorWithFeatureSwitchOffDontAckInPipelineTests() { //Arrange SubscriberRegistry registry = new(); registry.Register(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddTransient>(); container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - ServiceProviderHandlerFactory handlerFactory = new(container.BuildServiceProvider()); - MyFeatureSwitchedOffDontAckHandler.CommandReceived = false; - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_With_DontAck() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_With_DontAck() { //Act - var exception = Assert.Throws(() => _commandProcessor.Send(_myCommand)); - + var exception = await Assert.That(() => _commandProcessor.Send(_myCommand)).ThrowsExactly(); //Assert - Assert.False(MyFeatureSwitchedOffDontAckHandler.DidReceive()); // Target handler was NOT called - Assert.Contains(nameof(MyFeatureSwitchedOffDontAckHandler), exception.Message); // Message contains the handler type name + await Assert.That(MyFeatureSwitchedOffDontAckHandler.DidReceive()).IsFalse(); // Target handler was NOT called + await Assert.That(exception.Message).Contains(nameof(MyFeatureSwitchedOffDontAckHandler)); // Message contains the handler type name } + [After(Test)] public void Dispose() { CommandProcessor.ClearServiceBus(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck_Async.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck_Async.cs index aa4a5b6701..6c386a026d 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_Off_With_DontAck_Async.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Actions; @@ -30,56 +28,42 @@ THE SOFTWARE. */ using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; using Microsoft.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.FeatureSwitch { - [Collection("CommandProcessor")] - public class CommandProcessorWithFeatureSwitchOffDontAckAsyncInPipelineTests : IDisposable + [NotInParallel("CommandProcessor")] + public class CommandProcessorWithFeatureSwitchOffDontAckAsyncInPipelineTests { private readonly MyCommandAsync _myAsyncCommand = new(); private readonly CommandProcessor _commandProcessor; - public CommandProcessorWithFeatureSwitchOffDontAckAsyncInPipelineTests() { //Arrange SubscriberRegistry registry = new(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddTransient>(); container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - ServiceProviderHandlerFactory handlerFactory = new(container.BuildServiceProvider()); - MyFeatureSwitchedOffDontAckHandlerAsync.CommandReceived = false; - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] + [Test] public async Task When_Sending_An_Async_Command_To_The_Processor_When_A_Feature_Switch_Is_Off_With_DontAck() { //Act - var exception = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_myAsyncCommand)); - + var exception = await Assert.That(() => _commandProcessor.SendAsync(_myAsyncCommand)).ThrowsExactly(); //Assert - Assert.False(MyFeatureSwitchedOffDontAckHandlerAsync.DidReceive()); // Target handler was NOT called - Assert.Contains(nameof(MyFeatureSwitchedOffDontAckHandlerAsync), exception.Message); // Message contains the handler type name + await Assert.That(MyFeatureSwitchedOffDontAckHandlerAsync.DidReceive()).IsFalse(); // Target handler was NOT called + await Assert.That(exception.Message).Contains(nameof(MyFeatureSwitchedOffDontAckHandlerAsync)); // Message contains the handler type name } + [After(Test)] public void Dispose() { CommandProcessor.ClearServiceBus(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_On.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_On.cs index 89dc62970f..0a34dc422f 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_On.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_A_Handler_Is_Feature_Switch_On.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -14,49 +13,34 @@ public class CommandProcessorWithFeatureSwitchOnInPipelineTests { private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); - private readonly CommandProcessor _commandProcessor; - public CommandProcessorWithFeatureSwitchOnInPipelineTests() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); ServiceProviderHandlerFactory handlerFactory = new(container.BuildServiceProvider()); - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(TimeProvider.System), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_On() + [Test] + public async Task When_Sending_A_Command_To_The_Processor_When_A_Feature_Switch_Is_On() { _commandProcessor.Send(_myCommand); - - Assert.True(MyFeatureSwitchedOnHandler.DidReceive(_myCommand)); + await Assert.That(MyFeatureSwitchedOnHandler.DidReceive(_myCommand)).IsTrue(); } - [Fact] + [Test] public async Task When_Sending_A_Async_Command_To_The_Processor_When_A_Feature_Switch_Is_On() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.True(MyFeatureSwitchedOnHandlerAsync.DidReceive()); + await Assert.That(MyFeatureSwitchedOnHandlerAsync.DidReceive()).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_No_Feature_Switch_Config.cs b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_No_Feature_Switch_Config.cs index b58abf714a..34e7d2ee84 100644 --- a/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_No_Feature_Switch_Config.cs +++ b/tests/Paramore.Brighter.Core.Tests/FeatureSwitch/When_No_Feature_Switch_Config.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.FeatureSwitch.TestDoubles; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.FeatureSwitch.Handlers; using Paramore.Brighter.Observability; @@ -15,50 +14,35 @@ public class CommandProcessorWithNullFeatureSwitchConfig private readonly MyCommand _myCommand = new(); private readonly MyCommandAsync _myAsyncCommand = new(); private readonly ServiceProvider _provider; - private readonly CommandProcessor _commandProcessor; - public CommandProcessorWithNullFeatureSwitchConfig() { SubscriberRegistry registry = new(); registry.Register(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddSingleton(); container.AddSingleton(); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); _provider = container.BuildServiceProvider(); ServiceProviderHandlerFactory handlerFactory = new(_provider); - - _commandProcessor = CommandProcessorBuilder - .StartNew() - .Handlers(new HandlerConfiguration(registry, handlerFactory)) - .DefaultResilience() - .NoExternalBus() - .ConfigureInstrumentation(new BrighterTracer(), InstrumentationOptions.All) - .RequestContextFactory(new InMemoryRequestContextFactory()) - .RequestSchedulerFactory(new InMemorySchedulerFactory()) - .Build(); + _commandProcessor = CommandProcessorBuilder.StartNew().Handlers(new HandlerConfiguration(registry, handlerFactory)).DefaultResilience().NoExternalBus().ConfigureInstrumentation(new BrighterTracer(), InstrumentationOptions.All).RequestContextFactory(new InMemoryRequestContextFactory()).RequestSchedulerFactory(new InMemorySchedulerFactory()).Build(); } - [Fact] - public void When_a_sending_a_command_to_the_processor_when_null_feature_switch_config() + [Test] + public async Task When_a_sending_a_command_to_the_processor_when_null_feature_switch_config() { _commandProcessor.Send(_myCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } - [Fact] + [Test] public async Task When_a_sending_a_async_command_to_the_processor_when_null_feature_switch_config() { await _commandProcessor.SendAsync(_myAsyncCommand); - - Assert.True(_provider.GetService()!.DidReceive()); + await Assert.That(_provider.GetService()!.DidReceive()).IsTrue(); } - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs b/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs index 50facc4109..d0de128913 100644 --- a/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs @@ -1,135 +1,163 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.JsonMapper.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessageMappers; -using Xunit; namespace Paramore.Brighter.Core.Tests.JsonMapper; - public class JsonMessageMapperTests { - [Fact] - public void When_mapping_command_to_message() + [Test] + public async Task When_mapping_command_to_message() { var mapper = new JsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = mapper.MapToMessage(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); var body = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(command.Value, body.Value); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Value).IsEqualTo(command.Value); } - [Fact] + [Test] public async Task When_mapping_command_to_message_async() { var mapper = new JsonMessageMapper(); - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = await mapper.MapToMessageAsync(command, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json), message.Header.ContentType); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, command.Id); - Assert.NotNull(message.Body); - + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(command.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); var body = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(command.Value, body.Value); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Value).IsEqualTo(command.Value); } - [Fact] - public void When_mapping_event_to_message() + [Test] + public async Task When_mapping_event_to_message() { var mapper = new JsonMessageMapper(); - var @event = new MyEvent { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var @event = new MyEvent + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = mapper.MapToMessage(@event, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json), message.Header.ContentType); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, @event.Id); - Assert.NotNull(message.Body); - + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(@event.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); var body = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(@event.Value, body.Value); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Value).IsEqualTo(@event.Value); } - [Fact] + [Test] public async Task When_mapping_event_to_message_async() { var mapper = new JsonMessageMapper(); - var @event = new MyEvent { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; + var @event = new MyEvent + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; var message = await mapper.MapToMessageAsync(@event, publication); - - Assert.NotNull(message); - Assert.Equal(new ContentType(MediaTypeNames.Application.Json), message.Header.ContentType); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); - Assert.Equal(publication.Topic, message.Header.Topic); - Assert.Equal(message.Id, @event.Id); - Assert.NotNull(message.Body); - + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); + await Assert.That(message.Header.Topic).IsEqualTo(publication.Topic); + await Assert.That(@event.Id).IsEqualTo(message.Id); + await Assert.That(message.Body).IsNotNull(); var body = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(body); - Assert.Equal(@event.Value, body.Value); + await Assert.That(body).IsNotNull(); + await Assert.That(body.Value).IsEqualTo(@event.Value); } - [Fact] - public void When_mapping_request_to_message_should_throw_ArgumentNullException() + [Test] + public async Task When_mapping_request_to_message_should_throw_ArgumentNullException() { var mapper = new JsonMessageMapper(); - var request = new MyRequest { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - - Assert.Throws(() => mapper.MapToMessage(request, publication)); + var request = new MyRequest + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; + await Assert.That(() => mapper.MapToMessage(request, publication)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_mapping_request_to_message_should_throw_ArgumentNullException_async() { var mapper = new JsonMessageMapper(); - var request = new MyRequest { Value = Guid.NewGuid().ToString() }; - var publication = new Publication { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - - await Assert.ThrowsAsync(() => mapper.MapToMessageAsync(request, publication)); + var request = new MyRequest + { + Value = Guid.NewGuid().ToString() + }; + var publication = new Publication + { + Topic = new RoutingKey(Guid.NewGuid().ToString()) + }; + await Assert.That(() => mapper.MapToMessageAsync(request, publication)).ThrowsExactly(); } - [Fact] - public void When_mapping_message_to_command() + [Test] + public async Task When_mapping_message_to_command() { - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; var mapper = new JsonMessageMapper(); - var request = mapper.MapToRequest(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(command)))); - Assert.NotNull(request); - Assert.Equal(command.Value, request.Value); + await Assert.That(request).IsNotNull(); + await Assert.That(request.Value).IsEqualTo(command.Value); } - - [Fact] - public async Task When_mapping_message_to_command_async () + + [Test] + public async Task When_mapping_message_to_command_async() { - var command = new MyCommand { Value = Guid.NewGuid().ToString() }; + var command = new MyCommand + { + Value = Guid.NewGuid().ToString() + }; var mapper = new JsonMessageMapper(); - var request = await mapper.MapToRequestAsync(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(command)))); - Assert.NotNull(request); - Assert.Equal(command.Value, request.Value); + await Assert.That(request).IsNotNull(); + await Assert.That(request.Value).IsEqualTo(command.Value); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Locking/When_Lock_Is_Called_It_Can_Only_Be_Obtained_Once.cs b/tests/Paramore.Brighter.Core.Tests/Locking/When_Lock_Is_Called_It_Can_Only_Be_Obtained_Once.cs index a6a9fdbcc6..03ca81ca4c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Locking/When_Lock_Is_Called_It_Can_Only_Be_Obtained_Once.cs +++ b/tests/Paramore.Brighter.Core.Tests/Locking/When_Lock_Is_Called_It_Can_Only_Be_Obtained_Once.cs @@ -1,39 +1,31 @@ using System; using System.Threading; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Core.Tests.Locking; - public class InMemoryLockingProviderTests { private IDistributedLock _locking = new InMemoryLock(); - - - [Fact] + [Test] public async Task WhenLockIsCalled_ItCanOnlyBeObtainedOnce() { var resourceName = $"TestLock-{Guid.NewGuid()}"; - var firstLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - var secondLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - - Assert.NotNull(firstLock); - Assert.Null(secondLock); + var secondLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); + await Assert.That(firstLock).IsNotNull(); + await Assert.That(secondLock).IsNull(); } - - [Fact] + + [Test] public async Task GivenAnInMemoryLockingProvider_WhenReleaseLockIsCalled_ItCanOnlyBeLockedAgain() { var resourceName = $"TestLock-{Guid.NewGuid()}"; - var firstLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); await _locking.ReleaseLockAsync(resourceName, firstLock, CancellationToken.None); - var secondLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - var thirdLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - - Assert.NotNull(firstLock); - Assert.NotNull(secondLock); - Assert.Null(thirdLock); + var secondLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); + var thirdLock = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); + await Assert.That(firstLock).IsNotNull(); + await Assert.That(secondLock).IsNotNull(); + await Assert.That(thirdLock).IsNull(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs index 4230a6fbc7..a58e9817b9 100644 --- a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Logging.TestDoubles; @@ -8,49 +9,30 @@ using Polly.Registry; using Serilog; using Serilog.Sinks.TestCorrelator; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Logging { public class CommandProcessorWithLoggingInPipelineTests { - private readonly ITestOutputHelper _output; - - public CommandProcessorWithLoggingInPipelineTests(ITestOutputHelper output) - { - _output = output; - } - //TODO: Because we use a global logger with Serilog, this won't run in parallel - //[Fact] - public void When_A_Request_Logger_Is_In_The_Pipeline() + //[Test] + public async Task When_A_Request_Logger_Is_In_The_Pipeline() { Log.Logger = new LoggerConfiguration().MinimumLevel.Information().WriteTo.TestCorrelator().CreateLogger(); using var context = TestCorrelator.CreateContext(); var myCommand = new MyCommand(); - var registry = new SubscriberRegistry(); registry.Register>(); - var requestLogger = new RequestLoggingHandler(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(typeof(RequestLoggingHandler), provider => requestLogger); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var commandProcessor = new CommandProcessor(registry, handlerFactory: handlerFactory, - new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory()); - - + var commandProcessor = new CommandProcessor(registry, handlerFactory: handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); commandProcessor.Send(myCommand); - var logEvents = TestCorrelator.GetLogEventsFromContextId(context.Id); - Assert.Contains(logEvents, x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")); - Assert.Equal($"\"{typeof(MyCommand)}\"", logEvents.First(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")).Properties["1"].ToString()); + await Assert.That(logEvents).Contains(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")); + await Assert.That(logEvents.First(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")).Properties["1"].ToString()).IsEqualTo($"\"{typeof(MyCommand)}\""); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline_Async.cs b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline_Async.cs index c0847c061a..05ef66f890 100644 --- a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -9,48 +9,29 @@ using Polly.Registry; using Serilog; using Serilog.Sinks.TestCorrelator; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Logging { public class CommandProcessorWithLoggingInPipelineAsyncTests { - - private readonly ITestOutputHelper _output; - - public CommandProcessorWithLoggingInPipelineAsyncTests(ITestOutputHelper output) - { - _output = output; - } - //TODO: Because we use a global logger with Serilog, this won't run in parallel - //[Fact] + //[Test] public async Task When_A_Request_Logger_Is_In_The_Pipeline_Async() { Log.Logger = new LoggerConfiguration().MinimumLevel.Information().WriteTo.TestCorrelator().CreateLogger(); using var context = TestCorrelator.CreateContext(); var myCommand = new MyCommand(); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(typeof(RequestLoggingHandlerAsync<>), typeof(RequestLoggingHandlerAsync<>)); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - var commandProcessor = new CommandProcessor(registry, handlerFactory, - new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory()); - + var commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); await commandProcessor.SendAsync(myCommand); - - var logEvents = TestCorrelator.GetLogEventsFromContextId(context.Id); - Assert.Contains(logEvents, x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")); - Assert.Equal($"\"{typeof(MyCommand)}\"", logEvents.First(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")).Properties["1"].ToString()); + await Assert.That(logEvents).Contains(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")); + await Assert.That(logEvents.First(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")).Properties["1"].ToString()).IsEqualTo($"\"{typeof(MyCommand)}\""); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established_async.cs index 9cd554bada..3d1f79473f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -19,56 +18,40 @@ public class MessagePumpRetryCommandOnConnectionFailureTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpRetryCommandOnConnectionFailureTestsAsync() { _commandProcessor = new SpyCommandProcessor(); - var channel = new FailingChannelAsync( - new ChannelName(ChannelName), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2) + var channel = new FailingChannelAsync(new ChannelName(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2) { NumberOfRetries = 1 }; - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(500), RequeueCount = -1 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(500), + RequeueCount = -1 }; - var command = new MyCommand(); - //two command, will be received when subscription restored - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)) - ); + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - //end the pump var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Channel_Failure_Exception_Is_Thrown_For_Command_Should_Retry_Until_Connection_Re_established() + [Test] + public async Task When_A_Channel_Failure_Exception_Is_Thrown_For_Command_Should_Retry_Until_Connection_Re_established() { _messagePump.Run(); - //Should send the message via the command processor - Assert.Equal(2, _commandProcessor.Commands.Count); - Assert.Equal(CommandType.SendAsync, _commandProcessor.Commands[0]); - Assert.Equal(CommandType.SendAsync, _commandProcessor.Commands[1]); + await Assert.That(_commandProcessor.Commands.Count).IsEqualTo(2); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.SendAsync); + await Assert.That(_commandProcessor.Commands[1]).IsEqualTo(CommandType.SendAsync); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established_async.cs index 5908fc22e7..950cbc1f68 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -18,60 +17,40 @@ public class MessagePumpRetryEventConnectionFailureTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpRetryEventConnectionFailureTestsAsync() { _commandProcessor = new SpyCommandProcessor(); - var channel = new FailingChannelAsync( - new ChannelName("myChannel"), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2) + var channel = new FailingChannelAsync(new ChannelName("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2) { NumberOfRetries = 1 }; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(500), RequeueCount = -1 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(500), + RequeueCount = -1 }; - var @event = new MyEvent(); - //Two events will be received when channel fixed - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - //Quit the message pump var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Channel_Failure_Exception_Is_Thrown_For_Event_Should_Retry_Until_Connection_Re_established() + [Test] + public async Task When_A_Channel_Failure_Exception_Is_Thrown_For_Event_Should_Retry_Until_Connection_Re_established() { _messagePump.Run(); - //Should publish the message via the command processor - Assert.Equal(2, _commandProcessor.Commands.Count); - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[1]); - + await Assert.That(_commandProcessor.Commands.Count).IsEqualTo(2); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); + await Assert.That(_commandProcessor.Commands[1]).IsEqualTo(CommandType.PublishAsync); } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs index fce27512a1..936f43314a 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Testing; using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -44,45 +41,32 @@ public class MessagePumpCommandProcessingDeferMessageActionTestsAsync private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpCommandProcessingDeferMessageActionTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); - - _channel = new ChannelAsync(new(ChannelName),_routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All) - .BuildWrapPipeline() - .WrapAsync(new MyCommand(), new RequestContext(), new Publication{Topic = _routingKey}) - .Result; + var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; _bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs index fb493fc9d5..4870f0ce8d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Threading; @@ -32,7 +30,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Testing; using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -41,8 +38,7 @@ public class MessagePumpCommandProcessingDeferMessageActionWithDelayTestsAsync private const string Topic = "MyCommand"; private const string ChannelName = "myChannel"; private readonly RoutingKey _routingKey = new(Topic); - - [Fact] + [Test] public async Task When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_that_delay() { //Arrange @@ -50,59 +46,40 @@ public async Task When_a_command_handler_throws_a_defer_message_with_delay_Then_ var timeProvider = new FakeTimeProvider(); var consumer = new InMemoryMessageConsumer(_routingKey, bus, timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); var spyChannel = new SpyChannelAsync(new ChannelName(ChannelName), _routingKey, consumer); - var commandProcessor = new SpyRequeueWithDelayCommandProcessor(delayMilliseconds: 5000); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var messagePump = new ServiceActivator.Proactor( - commandProcessor, - (message) => typeof(MyCommand), - messageMapperRegistry, - null, - new InMemoryRequestContextFactory(), - spyChannel) + var messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, null, new InMemoryRequestContextFactory(), spyChannel) { Channel = spyChannel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 5, RequeueDelay = TimeSpan.FromMilliseconds(100) // Subscription default — should NOT be used when DeferMessageAction has a delay }; - - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All) - .BuildWrapPipeline() - .WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }) - .Result; + var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; bus.Enqueue(msg); - //Act var task = Task.Factory.StartNew(() => messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); spyChannel.Enqueue(quitMessage); - await Task.WhenAll(task); - //Assert - Assert.NotEmpty(spyChannel.RequeueDelays); // At least one requeue occurred - Assert.Equal(TimeSpan.FromMilliseconds(5000), spyChannel.RequeueDelays[0]); // Delay from DeferMessageAction, not subscription RequeueDelay (100ms) + await Assert.That(spyChannel.RequeueDelays).IsNotEmpty(); // At least one requeue occurred + await Assert.That(spyChannel.RequeueDelays[0]).IsEqualTo(TimeSpan.FromMilliseconds(5000)); // Delay from DeferMessageAction, not subscription RequeueDelay (100ms) } /// /// Spy channel that captures the delay passed to RequeueAsync for test verification. /// - private class SpyChannelAsync : Brighter.ChannelAsync + private class SpyChannelAsync : Paramore.Brighter.ChannelAsync, Paramore.Brighter.IAmAChannelAsync, Paramore.Brighter.IAmAChannel, System.IDisposable, System.IAsyncDisposable { public List RequeueDelays { get; } = []; - public SpyChannelAsync(ChannelName channelName, RoutingKey routingKey, IAmAMessageConsumerAsync consumer) - : base(channelName, routingKey, consumer) { } + public SpyChannelAsync(ChannelName channelName, RoutingKey routingKey, IAmAMessageConsumerAsync consumer) : base(channelName, routingKey, consumer) + { + } public override Task RequeueAsync(Message message, TimeSpan? timeOut = null, CancellationToken cancellationToken = default) { @@ -112,4 +89,4 @@ public override Task RequeueAsync(Message message, TimeSpan? timeOut = nul } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs index fd42cf3c2b..da73ff563f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Serilog.Events; using Serilog.Sinks.TestCorrelator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,57 +19,38 @@ public class MessagePumpCommandProcessingExceptionTestsAsync private readonly int _requeueCount = 5; private readonly RoutingKey _routingKey = new("MyCommand"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpCommandProcessingExceptionTestsAsync() { SpyExceptionCommandProcessor commandProcessor = new(); - InternalBus bus = new(); - - _channel = new ChannelAsync(new("myChannel"),_routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _channel = new ChannelAsync(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel - ) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All) - .BuildWrapPipeline() - .WrapAsync(new MyCommand(), new RequestContext(), new Publication{Topic = _routingKey}) - .Result; + var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async() { using (TestCorrelator.CreateContext()) { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("")); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - var logEvents = TestCorrelator.GetLogEventsFromCurrentContext(); - Assert.Contains(logEvents, x => x.Level == LogEventLevel.Error); - Assert.Equal( - "MessagePump: Failed to dispatch message '{Id}' from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}", - logEvents.First(x => x.Level == LogEventLevel.Error).MessageTemplate.Text); + await Assert.That(logEvents).Contains(x => x.Level == LogEventLevel.Error); + await Assert.That(logEvents.First(x => x.Level == LogEventLevel.Error).MessageTemplate.Text).IsEqualTo("MessagePump: Failed to dispatch message '{Id}' from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs index e3a987b36a..a8deba99f5 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs @@ -7,7 +7,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,28 +19,13 @@ public class MessagePumpCommandDontAckActionNackTestsAsync private readonly IAmAMessagePump _messagePump; private readonly ChannelAsync _channel; private readonly SpyDontAckCommandProcessor _commandProcessor; - public MessagePumpCommandDontAckActionNackTestsAsync() { _commandProcessor = new SpyDontAckCommandProcessor(); - _channel = new ChannelAsync( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor( - _commandProcessor, - (message) => typeof(MyCommand), - messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), - new InMemoryRequestContextFactory(), - _channel) + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -49,40 +33,30 @@ public MessagePumpCommandDontAckActionNackTestsAsync() UnacceptableMessageLimit = -1, DontAckDelay = TimeSpan.FromMilliseconds(100) }; - // Arrange: enqueue one command message to the bus (not channel) // so InMemoryMessageConsumer.Receive locks it in _lockedMessages, // enabling nack to re-enqueue it back to the bus - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options))); _bus.Enqueue(message); } - [Fact] + [Test] public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message_Async() { // Act: run pump in background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - // Wait for handler to process the message (DontAckAction thrown) var handled = _commandProcessor.WaitForHandle(5000); - Assert.True(handled, "Handler should have been called"); - + await Assert.That(handled).IsTrue(); // Send quit to stop the pump after DontAckAction processing _channel.Enqueue(MessageFactory.CreateQuitMessage(_routingKey)); - await Task.WhenAll(task); - // Assert: handler was called - Assert.True(_commandProcessor.SendCount >= 1); - + await Assert.That(_commandProcessor.SendCount >= 1).IsTrue(); // Assert: pump continued running and processed the quit message - Assert.Equal(MessagePumpStatus.MP_STOPPED, _messagePump.Status); - + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_STOPPED); // Assert: message was nacked (re-enqueued to bus, available for redelivery) - Assert.NotEmpty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs index 283b572b76..fcd1df59f0 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs @@ -7,7 +7,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,28 +19,13 @@ public class MessagePumpCommandDontAckActionTestsAsync private readonly IAmAMessagePump _messagePump; private readonly SpyDontAckCommandProcessor _commandProcessor; private readonly ChannelAsync _channel; - public MessagePumpCommandDontAckActionTestsAsync() { _commandProcessor = new SpyDontAckCommandProcessor(); - _channel = new ChannelAsync( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor( - _commandProcessor, - (message) => typeof(MyCommand), - messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), - new InMemoryRequestContextFactory(), - _channel) + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -49,27 +33,21 @@ public MessagePumpCommandDontAckActionTestsAsync() UnacceptableMessageLimit = 0, DontAckDelay = TimeSpan.Zero }; - // Arrange: enqueue the message to the BUS (not the channel's internal queue) // so that InMemoryMessageConsumer.Receive locks it in _lockedMessages. // This is essential for testing ack/no-ack behavior via the ack timeout mechanism. - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options))); _bus.Enqueue(message); } - [Fact] + [Test] public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge_Async() { // Act: run the pump in the background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - // Wait for the handler to be invoked (first delivery) - Assert.True(_commandProcessor.WaitForHandle(), "Handler was not invoked within timeout"); - Assert.Equal(1, _commandProcessor.SendCount); - + await Assert.That(_commandProcessor.WaitForHandle()).IsTrue(); + await Assert.That(_commandProcessor.SendCount).IsEqualTo(1); // Advance time past the ack timeout to trigger requeue of unacknowledged messages. // The message was received via InMemoryMessageConsumer.Receive which locks it in _lockedMessages. // If the message was NOT acknowledged (DontAckAction handler with continue), @@ -77,20 +55,15 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge_As // If the message WAS acknowledged (generic Exception handler without continue), // it was removed from _lockedMessages and no requeue occurs. _timeProvider.Advance(TimeSpan.FromSeconds(2)); - // Wait for the handler to be invoked again (re-delivery of unacknowledged message) - Assert.True(_commandProcessor.WaitForHandle(), "Re-delivery did not occur - message may have been acknowledged"); - + await Assert.That(_commandProcessor.WaitForHandle()).IsTrue(); // Assert: handler was called at least twice (original delivery + re-delivery) // This proves the message was NOT acknowledged by the DontAckAction handler - Assert.True(_commandProcessor.SendCount >= 2, - $"Expected at least 2 sends (original + re-delivery), but got {_commandProcessor.SendCount}"); - + await Assert.That(_commandProcessor.SendCount >= 2).IsTrue(); // Clean up: send quit so pump can exit _channel.Enqueue(MessageFactory.CreateQuitMessage(_routingKey)); - // Let the pump finish await Task.WhenAll(task); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs index bbca8eec56..5d738eed04 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,12 +6,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - - public class MessageDispatcherRoutingAsyncTests : IDisposable + public class MessageDispatcherRoutingAsyncTests { private const string ChannelName = "myChannel"; private const string Topic = "myTopic"; @@ -20,65 +18,46 @@ public class MessageDispatcherRoutingAsyncTests : IDisposable private readonly RoutingKey _routingKey = new(Topic); private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherRoutingAsyncTests() { _commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync()) - ); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName(ChannelName), - routingKey: _routingKey, - messagePumpType: MessagePumpType.Proactor - ); - - _dispatcher = new Dispatcher( - _commandProcessor, - new List { subscription }, - null, - messageMapperRegistry, - requestContextFactory: new InMemoryRequestContextFactory() - ); - - var @event = new MyEvent {Data = 4}; + var subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName(ChannelName), routingKey: _routingKey, messagePumpType: MessagePumpType.Proactor); + _dispatcher = new Dispatcher(_commandProcessor, new List { subscription }, null, messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); + var @event = new MyEvent + { + Data = 4 + }; var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new() { Topic = _routingKey }).Result; - _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - } + #pragma warning disable xUnit1031 - - [Fact] + [Test] public async Task When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler_async() { await Task.Delay(5000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await _dispatcher.End(); - - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.NotNull(_commandProcessor.Observe()); - Assert.Contains(CommandType.PublishAsync, _commandProcessor.Commands); - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_commandProcessor.Observe()).IsNotNull(); + await Assert.That(_commandProcessor.Commands).Contains(CommandType.PublishAsync); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } - + + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs index cc50026ec2..51ff28661f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -6,75 +6,56 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class DispatcherAddNewConnectionTestsAsync : IDisposable + public class DispatcherAddNewConnectionTestsAsync { private readonly Dispatcher _dispatcher; private readonly Subscription _newSubscription; private readonly InternalBus _bus; private readonly RoutingKey _routingKey = new("MyEvent"); private readonly RoutingKey _routingKeyTwo = new("OtherEvent"); - public DispatcherAddNewConnectionTestsAsync() { _bus = new InternalBus(); - IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - Subscription subscription = new Subscription( - new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), - messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey - ); - - _newSubscription = new Subscription( - new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), - channelName: new ChannelName("fakeChannelTwo"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKeyTwo); + Subscription subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); + _newSubscription = new Subscription(new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannelTwo"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKeyTwo); _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync() - .MapToMessageAsync(@event, new Publication{Topic = _routingKey}) - .GetAwaiter() - .GetResult(); + var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }).GetAwaiter().GetResult(); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Has_A_New_Connection_Added_While_Running() { _dispatcher.Open(_newSubscription); - var @event = new MyEvent(); - var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication{Topic = _routingKeyTwo}); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKeyTwo }); _bus.Enqueue(message); - await Task.Delay(1000); - - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Equal(2, _dispatcher.Consumers.Count()); - Assert.Equal(2, _dispatcher.Subscriptions.Count()); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers.Count()).IsEqualTo(2); + await Assert.That(_dispatcher.Subscriptions.Count()).IsEqualTo(2); } + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs index d8d7e958e2..1ccec8b456 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,11 +6,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessageDispatcherResetConnectionAsync : IDisposable + public class MessageDispatcherResetConnectionAsync { private readonly Dispatcher _dispatcher; private readonly Subscription _subscription; @@ -18,70 +17,53 @@ public class MessageDispatcherResetConnectionAsync : IDisposable private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new("myTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherResetConnectionAsync() { IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); - - _publication = new Publication{Topic = _subscription.RoutingKey, RequestType = typeof(MyEvent)}; - - _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistryAsync:messageMapperRegistry); - + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); + _publication = new Publication + { + Topic = _subscription.RoutingKey, + RequestType = typeof(MyEvent) + }; + _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistryAsync: messageMapperRegistry); var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync() - .MapToMessageAsync(@event, _publication) - .GetAwaiter() - .GetResult(); - + var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication).GetAwaiter().GetResult(); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); Task.Delay(1000).Wait(); _dispatcher.Shut(_subscription); - } - + #pragma warning disable xUnit1031 - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Restarts_A_Connection() { _dispatcher.Open(_subscription); - var @event = new MyEvent(); var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication); _bus.Enqueue(message); - await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await _dispatcher.End(); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } + + [After(Test)] #pragma warning restore xUnit1031 - public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs index f4d05a3ee4..e10f5403a1 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -7,11 +7,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class DispatcherRestartConnectionTestsAsync : IDisposable + public class DispatcherRestartConnectionTestsAsync { private const string ChannelName = "fakeChannel"; private readonly Dispatcher _dispatcher; @@ -20,83 +19,57 @@ public class DispatcherRestartConnectionTestsAsync : IDisposable private readonly ChannelName _channelName = new(ChannelName); private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); - + private readonly Subscription _subscription; + private readonly Subscription _newSubscription; public DispatcherRestartConnectionTestsAsync() { IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync (); - - Subscription subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: _channelName, - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); - - Subscription newSubscription = new Subscription( - new SubscriptionName("newTest"), - noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: _channelName, - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); - - _publication = new Publication{Topic = subscription.RoutingKey}; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription, newSubscription }, - messageMapperRegistryAsync: messageMapperRegistry) - ; - + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: _channelName, messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); + _newSubscription = new Subscription(new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: _channelName, messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); + _publication = new Publication + { + Topic = _subscription.RoutingKey + }; + _dispatcher = new Dispatcher(commandProcessor, new List { _subscription, _newSubscription }, messageMapperRegistryAsync: messageMapperRegistry); var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync() - .MapToMessageAsync(@event, _publication ) - .GetAwaiter() - .GetResult(); - + var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication).GetAwaiter().GetResult(); _bus.Enqueue(message); + } - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); Task.Delay(250).Wait(); - _dispatcher.Shut(subscription.Name); - _dispatcher.Shut(newSubscription.Name); + _dispatcher.Shut(_subscription.Name); + _dispatcher.Shut(_newSubscription.Name); Task.Delay(1000).Wait(); - Assert.Empty(_dispatcher.Consumers); - + await Assert.That(_dispatcher.Consumers).IsEmpty(); } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Restarts_A_Connection_After_All_Connections_Have_Stopped() { _dispatcher.Open(new SubscriptionName("newTest")); var @event = new MyEvent(); var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication); _bus.Enqueue(message); - await Task.Delay(1000); _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Single(_dispatcher.Consumers); - Assert.Equal(2, _dispatcher.Subscriptions.Count()); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers).HasSingleItem(); + await Assert.That(_dispatcher.Subscriptions.Count()).IsEqualTo(2); } + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs index 55c3ffae9e..bd628450ea 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,11 +6,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessageDispatcherShutConnectionTests : IDisposable + public class MessageDispatcherShutConnectionTests { private const string Topic = "fakekey"; private const string ChannelName = "fakeChannel"; @@ -18,57 +17,43 @@ public class MessageDispatcherShutConnectionTests : IDisposable private readonly Subscription _subscription; private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherShutConnectionTests() { InternalBus bus = new(); - IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 3, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(bus, _timeProvider), - channelName: new ChannelName(ChannelName), - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(bus, _timeProvider), channelName: new ChannelName(ChannelName), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication{ Topic = _subscription.RoutingKey}) - .GetAwaiter() - .GetResult(); - + var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _subscription.RoutingKey }).GetAwaiter().GetResult(); for (var i = 0; i < 6; i++) bus.Enqueue(message); - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + } + + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Shuts_A_Connection() { await Task.Delay(1000); _dispatcher.Shut(_subscription); await _dispatcher.End(); - - Assert.DoesNotContain(_dispatcher.Consumers, consumer => consumer.Name == _subscription.Name && consumer.State == ConsumerState.Open); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.Empty(_dispatcher.Consumers); + await Assert.That(_dispatcher.Consumers).DoesNotContain(consumer => consumer.Name == _subscription.Name && consumer.State == ConsumerState.Open); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_dispatcher.Consumers).IsEmpty(); } - + + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs index dc7fa0d90e..67af230d41 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -9,11 +9,10 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessageDispatcherMultipleConnectionTestsAsync : IDisposable + public class MessageDispatcherMultipleConnectionTestsAsync { private readonly Dispatcher _dispatcher; private int _numberOfConsumers; @@ -21,85 +20,52 @@ public class MessageDispatcherMultipleConnectionTestsAsync : IDisposable private readonly FakeTimeProvider _timeProvider = new(); private readonly RoutingKey _commandRoutingKey = new("myCommand"); private readonly RoutingKey _eventRoutingKey = new("myEvent"); - public MessageDispatcherMultipleConnectionTestsAsync() { var commandProcessor = new SpyCommandProcessor(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new ServiceProviderMapperFactoryAsync(container.BuildServiceProvider()) - ); + var messageMapperRegistry = new MessageMapperRegistry(null, new ServiceProviderMapperFactoryAsync(container.BuildServiceProvider())); messageMapperRegistry.RegisterAsync(); messageMapperRegistry.RegisterAsync(); - - var myEventConnection = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - messagePumpType: MessagePumpType.Proactor, - channelName: new ChannelName("fakeEventChannel"), - routingKey: _eventRoutingKey - ); - var myCommandConnection = new Subscription( - new SubscriptionName("anothertest"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("fakeCommandChannel"), - messagePumpType: MessagePumpType.Proactor, - routingKey: _commandRoutingKey - ); + var myEventConnection = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), messagePumpType: MessagePumpType.Proactor, channelName: new ChannelName("fakeEventChannel"), routingKey: _eventRoutingKey); + var myCommandConnection = new Subscription(new SubscriptionName("anothertest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("fakeCommandChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _commandRoutingKey); _dispatcher = new Dispatcher(commandProcessor, new List { myEventConnection, myCommandConnection }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var eventMessage = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication{Topic = _eventRoutingKey}) - .GetAwaiter() - .GetResult(); - + var eventMessage = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _eventRoutingKey }).GetAwaiter().GetResult(); _bus.Enqueue(eventMessage); - var command = new MyCommand(); - var commandMessage = new MyCommandMessageMapperAsync().MapToMessageAsync(command, new Publication{Topic = _commandRoutingKey}) - .GetAwaiter() - .GetResult(); - + var commandMessage = new MyCommandMessageMapperAsync().MapToMessageAsync(command, new Publication { Topic = _commandRoutingKey }).GetAwaiter().GetResult(); _bus.Enqueue(commandMessage); - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); - _dispatcher.Receive(); } + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); + _dispatcher.Receive(); + } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers() { await Task.Delay(1000); - _numberOfConsumers = _dispatcher.Consumers.Count(); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await _dispatcher.End(); - - Assert.Empty(_bus.Stream(_eventRoutingKey)); - Assert.Empty(_bus.Stream(_commandRoutingKey)); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.Empty(_dispatcher.Consumers); - Assert.Equal(2, _numberOfConsumers); + await Assert.That(_bus.Stream(_eventRoutingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_commandRoutingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_dispatcher.Consumers).IsEmpty(); + await Assert.That(_numberOfConsumers).IsEqualTo(2); } - + + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } - } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs index e11a0e0cff..6212111aa4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -6,65 +6,47 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessageDispatcherMultiplePerformerTestsAsync { private const string Topic = "myTopic"; private const string ChannelName = "myChannel"; private readonly Dispatcher _dispatcher; private readonly InternalBus _bus; - public MessageDispatcherMultiplePerformerTestsAsync() { var routingKey = new RoutingKey(Topic); _bus = new InternalBus(); var consumer = new InMemoryMessageConsumer(routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)); - - IAmAChannelSync channel = new Channel(new (ChannelName), new(Topic), consumer, 6); + IAmAChannelSync channel = new Channel(new(ChannelName), new(Topic), consumer, 6); IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var connection = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 3, - timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), - channelName: new ChannelName("fakeChannel"), - messagePumpType: MessagePumpType.Proactor, - routingKey: routingKey - ); + var connection = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: routingKey); _dispatcher = new Dispatcher(commandProcessor, new List { connection }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication{Topic = connection.RoutingKey}) - .GetAwaiter() - .GetResult(); - + var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = connection.RoutingKey }).GetAwaiter().GetResult(); for (var i = 0; i < 6; i++) channel.Enqueue(message); - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + } + + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } - [Fact] + [Test] public async Task WhenAMessageDispatcherStartsMultiplePerformers() { - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Equal(3, _dispatcher.Consumers.Count()); - - await _dispatcher.End(); - - Assert.Empty(_bus.Stream(new RoutingKey(Topic))); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers.Count()).IsEqualTo(3); + await _dispatcher.End(); + await Assert.That(_bus.Stream(new RoutingKey(Topic))).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached_async.cs index 6201bb5af9..5f8813b060 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached_async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,23 +12,20 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -39,50 +36,34 @@ public class MessagePumpUnacceptableMessageLimitTestsAsync private readonly InternalBus _bus = new(); private readonly IAmAMessagePump _messagePump; private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpUnacceptableMessageLimitTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); - var channel = new ChannelAsync( - new (Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2 - ); - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new FailingEventMessageMapperAsync())); + var channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new FailingEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3, UnacceptableMessageLimit = 3 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3 }; - - var unmappableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }") - ); - + var unmappableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }")); channel.Enqueue(unmappableMessage); channel.Enqueue(unmappableMessage); channel.Enqueue(unmappableMessage); - } - [Fact] + [Test] public async Task When_A_Message_Fails_To_Be_Mapped_To_A_Request_And_The_Unacceptable_Message_Limit_Is_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await Task.WhenAll(new[] { task }); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: How do we assert channel closure? Observability? + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: How do we assert channel closure? Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_async.cs index 3ab241b46a..35c180363e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_fails_to_be_mapped_to_a_request_async.cs @@ -1,14 +1,12 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessagePumpFailingMessageTranslationTestsAsync { private const string ChannelName = "myChannel"; @@ -17,43 +15,31 @@ public class MessagePumpFailingMessageTranslationTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly ChannelAsync _channel; - public MessagePumpFailingMessageTranslationTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); - _channel = new ChannelAsync( - new(ChannelName), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new FailingEventMessageMapperAsync())); + _channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new FailingEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3, UnacceptableMessageLimit = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3 }; - var unmappableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }")); - _channel.Enqueue(unmappableMessage); - } - [Fact] + [Test] public async Task When_A_Message_Fails_To_Be_Mapped_To_A_Request_Should_Ack() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _channel.Stop(_routingKey); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_is_dispatched_it_should_reach_a_handler_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_is_dispatched_it_should_reach_a_handler_async.cs index e9a3779251..5c0fba8f4c 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_is_dispatched_it_should_reach_a_handler_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_is_dispatched_it_should_reach_a_handler_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Text.Json; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { - public class MessagePumpDispatchAsyncTests + public class MessagePumpDispatchAsyncTests { private const string ChannelName = "myChannel"; private readonly RoutingKey _routingKey = new("MyTopic"); @@ -16,51 +15,35 @@ public class MessagePumpDispatchAsyncTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly MyEvent _myEvent = new MyEvent(); - public MessagePumpDispatchAsyncTests() { var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyEventHandlerAsyncWithContinuation()); - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); - - PipelineBuilder.ClearPipelineCache(); - + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; - + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent))); channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_a_message_is_dispatched_it_should_reach_a_handler_async() + [Test] + public async Task When_a_message_is_dispatched_it_should_reach_a_handler_async() { _messagePump.Run(); - - Assert.True(MyEventHandlerAsyncWithContinuation.ShouldReceive(_myEvent)); - Assert.Equal(2, MyEventHandlerAsyncWithContinuation.MonitorValue); + await Assert.That(MyEventHandlerAsyncWithContinuation.ShouldReceive(_myEvent)).IsTrue(); + await Assert.That(MyEventHandlerAsyncWithContinuation.MonitorValue).IsEqualTo(2); //NOTE: We may want to run the continuation on the captured context, so as not to create a new thread, which means this test would //change once we fix the pump to exhibit that behavior\ - Assert.NotEqual(MyEventHandlerAsyncWithContinuation.WorkThreadId, MyEventHandlerAsyncWithContinuation.ContinuationThreadId); - + await Assert.That(MyEventHandlerAsyncWithContinuation.ContinuationThreadId).IsNotEqualTo(MyEventHandlerAsyncWithContinuation.WorkThreadId); } } - } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_mapper_throws_invalid_message_action_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_mapper_throws_invalid_message_action_async.cs index 054c5adeab..cbf6556a08 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_mapper_throws_invalid_message_action_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_mapper_throws_invalid_message_action_async.cs @@ -8,10 +8,8 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class MessageDispatchInvalidMessageActionAsyncTests { private readonly RoutingKey _routingKey = new("myTopic"); @@ -19,63 +17,30 @@ public class MessageDispatchInvalidMessageActionAsyncTests private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private Dispatcher _dispatcher; - public MessageDispatchInvalidMessageActionAsyncTests() { // Arrange: Set up a message mapper that throws InvalidMessageAction on deserialization failure var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => new MyRejectedEventHandler(), - (type) => throw new ConfigurationException() - ); - + var handlerFactory = new SimpleHandlerFactory((type) => new MyRejectedEventHandler(), (type) => throw new ConfigurationException()); // Use a mapper that throws InvalidMessageAction to simulate deserialization failure var mapperFactory = new SimpleMessageMapperFactoryAsync((r) => new MyInvalidMessageMapper()); var messageMapperRegistry = new MessageMapperRegistry(null, mapperFactory, null, null); messageMapperRegistry.RegisterAsync(); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); resiliencePipelineRegistry.AddBrighterDefault(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - var subscription = new InMemorySubscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); - + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + var subscription = new InMemorySubscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); subscription.InvalidMessageRoutingKey = _invalidMessageRoutingKey; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription }, - messageMapperRegistryAsync: messageMapperRegistry, - requestContextFactory: new InMemoryRequestContextFactory() - ); - + _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistryAsync: messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); // Act: Send a message that will fail deserialization var @event = new MyRejectedEvent(Id.Random()); - var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKey}); + var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); - _dispatcher.Receive(); } - [Fact] + [Test] public async Task When_a_message_mapper_throws_invalid_message_action() { // Wait for the message to be processed (moved to invalid message topic) before stopping @@ -87,16 +52,13 @@ public async Task When_a_message_mapper_throws_invalid_message_action() } await _dispatcher.End(); - // Assert: The message should be removed from the source queue - Assert.Empty(_bus.Stream(_routingKey)); - + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); // Assert: The message should appear in the invalid message channel - Assert.NotEmpty(_bus.Stream(_invalidMessageRoutingKey)); + await Assert.That(_bus.Stream(_invalidMessageRoutingKey)).IsNotEmpty(); var message = _bus.Dequeue(_invalidMessageRoutingKey); - // Assert: The message should include rejection metadata var rejectionReason = $"Message rejected reason: {RejectionReason.Unacceptable} Description: Failed to deserialize message"; - Assert.Equal(rejectionReason, message.Header.Bag[Message.RejectionReasonHeaderName]); + await Assert.That(message.Header.Bag[Message.RejectionReasonHeaderName]).IsEqualTo(rejectionReason); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs index 357fe70418..ce910ea494 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,51 +19,37 @@ public class MessagePumpCommandRequeueCountThresholdTestsAsync private readonly IAmAMessagePump _messagePump; private readonly ChannelAsync _channel; private readonly SpyRequeueCommandProcessor _commandProcessor; - public MessagePumpCommandRequeueCountThresholdTestsAsync() { _commandProcessor = new SpyRequeueCommandProcessor(); - _channel = new ChannelAsync(new(Channel) ,_routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 }; - - var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options)) - ); + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options))); _bus.Enqueue(message1); _bus.Enqueue(message2); - } - [Fact] + [Test] public async Task When_A_Requeue_Count_Threshold_For_Commands_Has_Been_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey("MyTopic")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Equal(CommandType.SendAsync, _commandProcessor.Commands[0]); - Assert.Equal(6, _commandProcessor.SendCount); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: How can we observe that the channel has been closed? Observability? + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.SendAsync); + await Assert.That(_commandProcessor.SendCount).IsEqualTo(6); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: How can we observe that the channel has been closed? Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs index 3015f431c5..0e86c76588 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,53 +19,37 @@ public class MessagePumpEventRequeueCountThresholdTestsAsync private readonly IAmAMessagePump _messagePump; private readonly ChannelAsync _channel; private readonly SpyRequeueCommandProcessor _commandProcessor; - public MessagePumpEventRequeueCountThresholdTestsAsync() { _commandProcessor = new SpyRequeueCommandProcessor(); _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); _bus.Enqueue(message1); _bus.Enqueue(message2); - } - [Fact] + [Test] public async Task When_A_Requeue_Count_Threshold_For_Events_Has_Been_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); - Assert.Equal(6, _commandProcessor.PublishCount); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: How do we assert that the channel was closed? Observability? + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); + await Assert.That(_commandProcessor.PublishCount).IsEqualTo(6); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: How do we assert that the channel was closed? Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_command_exception_is_thrown.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_command_exception_is_thrown.cs index 2ef20b3731..5af85bbe24 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_command_exception_is_thrown.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_command_exception_is_thrown.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -20,48 +19,32 @@ public class MessagePumpCommandRequeueTestsAsync private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public MessagePumpCommandRequeueTestsAsync() { _commandProcessor = new SpyRequeueCommandProcessor(); ChannelAsync channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = -1 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)) - ); - - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)) - ); - + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = -1 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - var quitMessage = new Message( - new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("") - ); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Requeue_Of_Command_Exception_Is_Thrown() + [Test] + public async Task When_A_Requeue_Of_Command_Exception_Is_Thrown() { _messagePump.Run(); - - Assert.Equal(CommandType.SendAsync, _commandProcessor.Commands[0]); - Assert.Equal(2, _bus.Stream(_routingKey).Count()); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.SendAsync); + await Assert.That(_bus.Stream(_routingKey).Count()).IsEqualTo(2); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_event_exception_is_thrown.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_event_exception_is_thrown.cs index 738398df2a..8beaa2d876 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_event_exception_is_thrown.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_requeue_of_event_exception_is_thrown.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -19,56 +18,36 @@ public class MessagePumpEventRequeueTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpEventRequeueTestsAsync() { _commandProcessor = new SpyRequeueCommandProcessor(); - ChannelAsync channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2 - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + ChannelAsync channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = -1 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = -1 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey("MyTopic")); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Requeue_Of_Event_Exception_Is_Thrown() + [Test] + public async Task When_A_Requeue_Of_Event_Exception_Is_Thrown() { _messagePump.Run(); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - //_should_publish_the_message_via_the_command_processor - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); - + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); //_should_requeue_the_messages - Assert.Equal(2, _bus.Stream(_routingKey).Count()); - - - //TODO: How do we know that the channel has been disposed? Observability + await Assert.That(_bus.Stream(_routingKey).Count()).IsEqualTo(2); + //TODO: How do we know that the channel has been disposed? Observability } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge_async.cs index b65ee3cff0..e1890a0f84 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge_async.cs @@ -7,7 +7,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -19,28 +18,13 @@ public class MessagePumpEventDontAckAggregateExceptionTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyDontAckCommandProcessor _commandProcessor; - public MessagePumpEventDontAckAggregateExceptionTestsAsync() { _commandProcessor = new SpyDontAckCommandProcessor(); - var channel = new ChannelAsync( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor( - _commandProcessor, - (message) => typeof(MyEvent), - messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), - new InMemoryRequestContextFactory(), - channel) + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -48,38 +32,30 @@ public MessagePumpEventDontAckAggregateExceptionTestsAsync() UnacceptableMessageLimit = 2, DontAckDelay = TimeSpan.Zero }; - // Arrange: enqueue two event messages (both will trigger AggregateException wrapping DontAckAction via PublishAsync) for (int i = 0; i < 2; i++) { - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(new MyEvent(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(new MyEvent(), JsonSerialisationOptions.Options))); channel.Enqueue(message); } } - [Fact] - public void When_Aggregate_Exception_Containing_DontAck_Action_Should_Not_Acknowledge_Async() + [Test] + public async Task When_Aggregate_Exception_Containing_DontAck_Action_Should_Not_Acknowledge_Async() { // Act _messagePump.Run(); - // Assert: handler was called for both messages via PublishAsync (event path) - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); - Assert.Equal(2, _commandProcessor.PublishCount); - + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); + await Assert.That(_commandProcessor.PublishCount).IsEqualTo(2); // Assert: pump continued running after the first AggregateException containing DontAckAction // (it processed the second event, proving it didn't crash or stop on the first) - // Assert: unacceptable message count was incremented // The pump exited because the count reached the limit of 2, // which only happens if IncrementUnacceptableMessageCount was called for each DontAckAction - Assert.Equal(MessagePumpStatus.MP_LIMIT_EXCEEDED, _messagePump.Status); - + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_LIMIT_EXCEEDED); // Assert: messages were nacked (re-enqueued to bus, available for redelivery) - Assert.NotEmpty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs index a697077f10..2a6a40be7d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,10 +7,8 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class MessageDispatchRejectMessageExceptionTestsAsync { private readonly RoutingKey _routingKey = new("myTopic"); @@ -18,77 +16,36 @@ public class MessageDispatchRejectMessageExceptionTestsAsync private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private Dispatcher _dispatcher; - public MessageDispatchRejectMessageExceptionTestsAsync() { var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.RegisterAsync(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => throw new ConfigurationException(), - (type) => new MyRejectedEventHandlerAsync() - ); - + var handlerFactory = new SimpleHandlerFactory((type) => throw new ConfigurationException(), (type) => new MyRejectedEventHandlerAsync()); var mapperFactory = new SimpleMessageMapperFactoryAsync((r) => new MyRejectedEventHandlerMessageMapperAsync()); var messageMapperRegistryAsync = new MessageMapperRegistry(null, mapperFactory); messageMapperRegistryAsync.RegisterAsync(); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); resiliencePipelineRegistry.AddBrighterDefault(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - var subscription = new InMemorySubscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Proactor, - routingKey: _routingKey - ); - + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + var subscription = new InMemorySubscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); subscription.DeadLetterRoutingKey = _deadLetterRoutingKey; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription }, - null, - messageMapperRegistryAsync, - requestContextFactory: new InMemoryRequestContextFactory() - ); - + _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, null, messageMapperRegistryAsync, requestContextFactory: new InMemoryRequestContextFactory()); var @event = new MyRejectedEvent(Id.Random()); - var message = new MyRejectedEventHandlerMessageMapperAsync() - .MapToMessageAsync(@event, new Publication{Topic = _routingKey}) - .Result; + var message = new MyRejectedEventHandlerMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }).Result; _bus.Enqueue(message); - - _dispatcher.Receive(); + _dispatcher.Receive(); } - [Fact] + [Test] public async Task When_an_event_handler_throw_a_reject_message_exception() { // Allow time for async message processing to complete before stopping await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point - await _dispatcher.End(); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_deadLetterRoutingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_deadLetterRoutingKey)).IsNotEmpty(); var message = _bus.Dequeue(_deadLetterRoutingKey); var rejectionReason = $"Message rejected reason: {RejectionReason.DeliveryError} Description: {MyRejectedEventHandlerAsync.TestOfRejectionFlow}"; - Assert.Equal(rejectionReason, message.Header.Bag[Message.RejectionReasonHeaderName]); + await Assert.That(message.Header.Bag[Message.RejectionReasonHeaderName]).IsEqualTo(rejectionReason); } - - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs index db6d3397f1..5e9583ba94 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Testing; using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -44,46 +41,33 @@ public class MessagePumpEventProcessingDeferMessageActionTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly InternalBus _bus; private readonly ChannelAsync _channel; - public MessagePumpEventProcessingDeferMessageActionTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - _channel = new ChannelAsync(new (Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All) - .BuildWrapPipeline() - .WrapAsync(new MyEvent(), new RequestContext(), new Publication{Topic = _routingKey}) - .Result; + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount + }; + var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }).Result; _channel.Enqueue(msg); - } - - [Fact] + [Test] public async Task When_an_event_handler_throws_a_defer_message_the_message_is_requeued_until_rejectedAsync() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey(Topic)); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - Assert.Empty(_bus.Stream(_routingKey)); - + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs index a5a59d9a9b..da1223a94c 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Serilog.Events; using Serilog.Sinks.TestCorrelator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -22,57 +21,38 @@ public class MessagePumpEventProcessingExceptionTestsAsync private readonly int _requeueCount = 5; private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpEventProcessingExceptionTestsAsync() { SpyExceptionCommandProcessor commandProcessor = new(); - var bus = new InternalBus(); - - _channel = new ChannelAsync(new (Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All) - .BuildWrapPipeline() - .WrapAsync(new MyEvent(), new RequestContext(), new Publication{Topic = _routingKey}) - .Result; + var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }).Result; bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async() { using (TestCorrelator.CreateContext()) { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("")); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - var logEvents = TestCorrelator.GetLogEventsFromCurrentContext(); - Assert.Contains(logEvents, x => x.Level == LogEventLevel.Error); - Assert.Equal( - "MessagePump: Failed to dispatch message {Id} from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}", - logEvents.First(x => x.Level == LogEventLevel.Error).MessageTemplate.Text); + await Assert.That(logEvents).Contains(x => x.Level == LogEventLevel.Error); + await Assert.That(logEvents.First(x => x.Level == LogEventLevel.Error).MessageTemplate.Text).IsEqualTo("MessagePump: Failed to dispatch message {Id} from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async.cs index 0822a4c486..eb3394bf1e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,10 +28,8 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class AsyncMessagePumpUnacceptableMessageTests { private const string Channel = "MyChannel"; @@ -42,53 +38,34 @@ public class AsyncMessagePumpUnacceptableMessageTests private readonly InternalBus _bus; private readonly RoutingKey _routingKey = new("MyTopic"); private readonly FakeTimeProvider _timeProvider = new FakeTimeProvider(); - public AsyncMessagePumpUnacceptableMessageTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new ChannelAsync( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 }; - var myMessage = JsonSerializer.Serialize(new MyEvent()); var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); - _bus.Enqueue(unacceptableMessage); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Is_Recieved() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message( - new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("") - ); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(new[] { task }); - //should_acknowledge_the_message - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_a_dlq.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_a_dlq.cs index b66e43c336..b22d9406a8 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_a_dlq.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_a_dlq.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,70 +28,48 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { public class AsyncMessagePumpUnacceptableMessageDeadLetterChannelTests { - private const string Channel = "MyChannel"; - private readonly IAmAMessagePump _messagePump; - private readonly ChannelAsync _channel; - private readonly InternalBus _bus; - private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly RoutingKey _deadLetterKey = new("MyDeadLetterTopic"); - private readonly FakeTimeProvider _timeProvider = new FakeTimeProvider(); - - public AsyncMessagePumpUnacceptableMessageDeadLetterChannelTests() - { - SpyRequeueCommandProcessor commandProcessor = new(); - - _bus = new InternalBus(); - - _channel = new ChannelAsync( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, deadLetterTopic: _deadLetterKey, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + private const string Channel = "MyChannel"; + private readonly IAmAMessagePump _messagePump; + private readonly ChannelAsync _channel; + private readonly InternalBus _bus; + private readonly RoutingKey _routingKey = new("MyTopic"); + private readonly RoutingKey _deadLetterKey = new("MyDeadLetterTopic"); + private readonly FakeTimeProvider _timeProvider = new FakeTimeProvider(); + public AsyncMessagePumpUnacceptableMessageDeadLetterChannelTests() { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 - }; - - var myMessage = JsonSerializer.Serialize(new MyEvent()); - var unacceptableMessage = - new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(myMessage)); - - _bus.Enqueue(unacceptableMessage); - - } - - [Fact] - public async Task When_An_Unacceptable_Message_Is_Recieved() - { - var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point - - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message( - new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("") - ); - _channel.Enqueue(quitMessage); - - await Task.WhenAll(new[] { task }); - - //should_acknowledge_the_message - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_deadLetterKey)); - } + SpyRequeueCommandProcessor commandProcessor = new(); + _bus = new InternalBus(); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, deadLetterTopic: _deadLetterKey, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 + }; + var myMessage = JsonSerializer.Serialize(new MyEvent()); + var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); + _bus.Enqueue(unacceptableMessage); + } + + [Test] + public async Task When_An_Unacceptable_Message_Is_Recieved() + { + var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); + await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point + _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); + _channel.Enqueue(quitMessage); + await Task.WhenAll(new[] { task }); + //should_acknowledge_the_message + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_deadLetterKey)).IsNotEmpty(); + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_an_imc.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_an_imc.cs index 3d81a5c4f0..d2acaf19d3 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_an_imc.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_is_recieved_async_and_there_is_an_imc.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,10 +28,8 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class AsyncMessagePumpUnacceptableMessageInvalidMessageChannelTests { private const string Channel = "MyChannel"; @@ -43,56 +39,35 @@ public class AsyncMessagePumpUnacceptableMessageInvalidMessageChannelTests private readonly RoutingKey _routingKey = new("MyTopic"); private readonly RoutingKey _invalidMessageKey = new("MyDeadLetterTopic"); private readonly FakeTimeProvider _timeProvider = new FakeTimeProvider(); - public AsyncMessagePumpUnacceptableMessageInvalidMessageChannelTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new ChannelAsync( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, invalidMessageTopic: _invalidMessageKey, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, invalidMessageTopic: _invalidMessageKey, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 }; - var myMessage = JsonSerializer.Serialize(new MyEvent()); - var unacceptableMessage = - new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(myMessage)); - + var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); _bus.Enqueue(unacceptableMessage); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Is_Recieved() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message( - new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("") - ); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(new[] { task }); - //should_acknowledge_the_message - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_invalidMessageKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_invalidMessageKey)).IsNotEmpty(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reached_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reached_async.cs index 10aed5578a..30d7d0eb6a 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reached_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reached_async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -29,71 +27,45 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class MessagePumpUnacceptableMessageLimitBreachedAsyncTests { private readonly IAmAMessagePump _messagePump; private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new("MyTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpUnacceptableMessageLimitBreachedAsyncTests() { SpyRequeueCommandProcessor commandProcessor = new(); - var channel = new ChannelAsync(new("MyChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 3); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel, - timeProvider:_timeProvider) + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel, timeProvider: _timeProvider) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3, UnacceptableMessageLimit = 3, - UnacceptableMessageLimitWindow = TimeSpan.FromMinutes(1) + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3, + UnacceptableMessageLimitWindow = TimeSpan.FromMinutes(1) }; - - var unacceptableMessage1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage3 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage4 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - + var unacceptableMessage1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage3 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage4 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); channel.Enqueue(unacceptableMessage1); channel.Enqueue(unacceptableMessage2); channel.Enqueue(unacceptableMessage3); channel.Enqueue(unacceptableMessage4); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Limit_Is_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); - - Assert.Equal(MessagePumpStatus.MP_LIMIT_EXCEEDED, _messagePump.Status); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_LIMIT_EXCEEDED); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reset_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reset_async.cs index c4263f7d2b..37c2262904 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reset_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_unacceptable_message_limit_is_reset_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -23,103 +22,48 @@ public class MessagePumpUnacceptableMessageLimitResetTestsAsync private readonly Message _unacceptableMessage3; private readonly Message _unacceptableMessage4; private readonly Message _timeAdvanceMessage; - public MessagePumpUnacceptableMessageLimitResetTestsAsync() { _bus = new InternalBus(); - - _channel = new ChannelAsync( - new(Channel), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 10 - ); - + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 10); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.RegisterAsync(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => throw new NotImplementedException(), - (type) => new MyAdvanceTimerEventHandlerAsync(_timeProvider) - ); - + var handlerFactory = new SimpleHandlerFactory((type) => throw new NotImplementedException(), (type) => new MyAdvanceTimerEventHandlerAsync(_timeProvider)); var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.AddBrighterDefault(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => throw new NotImplementedException() ), - new SimpleMessageMapperFactoryAsync(_ => new MyAdvanceTimerEventMessageMapperAsync())); + resiliencePipelineRegistry.AddBrighterDefault(); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => throw new NotImplementedException()), new SimpleMessageMapperFactoryAsync(_ => new MyAdvanceTimerEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyAdvanceTimerEvent), - messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel, - timeProvider:_timeProvider) + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyAdvanceTimerEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel, timeProvider: _timeProvider) { - Channel = _channel, - TimeOut = TimeSpan.FromMilliseconds(5000), - RequeueCount = 3, - UnacceptableMessageLimit = 3, + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3, UnacceptableMessageLimitWindow = TimeSpan.FromMinutes(1) }; - - _unacceptableMessage1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage3 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage4 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - - _timeAdvanceMessage = new MyAdvanceTimerEventMessageMapper().MapToMessage( - new MyAdvanceTimerEvent(2), - new Publication - { - Topic = _routingKey - }); - + _unacceptableMessage1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage3 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage4 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _timeAdvanceMessage = new MyAdvanceTimerEventMessageMapper().MapToMessage(new MyAdvanceTimerEvent(2), new Publication { Topic = _routingKey }); } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Limit_Is_Reached() { _channel.Enqueue(_unacceptableMessage1); _channel.Enqueue(_unacceptableMessage2); - //force the time forward, whilst in the message loop _channel.Enqueue(_timeAdvanceMessage); - //will trigger reset of unacceptable message count as window has passed _channel.Enqueue(_unacceptableMessage3); _channel.Enqueue(_unacceptableMessage4); - var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - _channel.Stop(_routingKey); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); - - Assert.Equal(MessagePumpStatus.MP_STOPPED, _messagePump.Status); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_STOPPED); } } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_channel_async_dispose_async_should_await_consumer_dispose.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_channel_async_dispose_async_should_await_consumer_dispose.cs index 1f40437a72..08e78ed2d0 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_channel_async_dispose_async_should_await_consumer_dispose.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_channel_async_dispose_async_should_await_consumer_dispose.cs @@ -1,41 +1,33 @@ using System; using System.Threading; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class AsyncChannelDisposalTests { - [Fact] + [Test] public async Task When_ChannelAsync_Is_Disposed_Async_Then_Consumer_Is_Disposed() { // Arrange var consumer = new SpyMessageConsumer(); - var channel = new ChannelAsync( - new ChannelName("test-channel"), - new RoutingKey("test.topic"), - consumer - ); - + var channel = new ChannelAsync(new ChannelName("test-channel"), new RoutingKey("test.topic"), consumer); // Act await ((IAsyncDisposable)channel).DisposeAsync(); - // Assert — consumer's DisposeAsync was actually called - Assert.True(consumer.DisposeAsyncCalled, "ChannelAsync.DisposeAsync should call DisposeAsync on the consumer"); - + await Assert.That(consumer.DisposeAsyncCalled).IsTrue(); // Assert — idempotent: second dispose does not throw - var exception = await Record.ExceptionAsync(async () => - await ((IAsyncDisposable)channel).DisposeAsync() - ); - Assert.Null(exception); + Exception? exception = null; + try { await ((IAsyncDisposable)channel).DisposeAsync(); } + catch (Exception e) { exception = e; } + + await Assert.That(exception).IsNull(); } } /// /// Minimal spy consumer that tracks whether DisposeAsync was called. /// -internal sealed class SpyMessageConsumer : IAmAMessageConsumerAsync +internal sealed class SpyMessageConsumer : Paramore.Brighter.IAmAMessageConsumerAsync, System.IAsyncDisposable { public bool DisposeAsyncCalled { get; private set; } @@ -45,21 +37,10 @@ public ValueTask DisposeAsync() return ValueTask.CompletedTask; } - public Task ReceiveAsync(TimeSpan? timeOut = null, CancellationToken cancellationToken = default) - => Task.FromResult(Array.Empty()); - - public Task AcknowledgeAsync(Message message, CancellationToken cancellationToken = default) - => Task.CompletedTask; - - public Task RejectAsync(Message message, MessageRejectionReason? reason = null, CancellationToken cancellationToken = default) - => Task.FromResult(true); - - public Task NackAsync(Message message, CancellationToken cancellationToken = default) - => Task.CompletedTask; - - public Task PurgeAsync(CancellationToken cancellationToken = default) - => Task.CompletedTask; - - public Task RequeueAsync(Message message, TimeSpan? delay = null, CancellationToken cancellationToken = default) - => Task.FromResult(true); -} + public Task ReceiveAsync(TimeSpan? timeOut = null, CancellationToken cancellationToken = default) => Task.FromResult(Array.Empty()); + public Task AcknowledgeAsync(Message message, CancellationToken cancellationToken = default) => Task.CompletedTask; + public Task RejectAsync(Message message, MessageRejectionReason? reason = null, CancellationToken cancellationToken = default) => Task.FromResult(true); + public Task NackAsync(Message message, CancellationToken cancellationToken = default) => Task.CompletedTask; + public Task PurgeAsync(CancellationToken cancellationToken = default) => Task.CompletedTask; + public Task RequeueAsync(Message message, TimeSpan? delay = null, CancellationToken cancellationToken = default) => Task.FromResult(true); +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_receives_quit_should_dispose_channel_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_receives_quit_should_dispose_channel_async.cs index e07cb43746..e2fa26001a 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_receives_quit_should_dispose_channel_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_receives_quit_should_dispose_channel_async.cs @@ -7,10 +7,8 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - public class ProactorQuitAsyncDisposalTests { private readonly RoutingKey _routingKey = new("test.topic"); @@ -18,59 +16,36 @@ public class ProactorQuitAsyncDisposalTests private readonly FakeTimeProvider _timeProvider = new(); private readonly Task _performerTask; private readonly TrackingChannelAsync _trackingChannel; - public ProactorQuitAsyncDisposalTests() { // Arrange var commandProcessor = new SpyCommandProcessor(); var consumer = new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); - _trackingChannel = new TrackingChannelAsync( - new ChannelName("test-channel"), - _routingKey, - consumer - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _trackingChannel = new TrackingChannelAsync(new ChannelName("test-channel"), _routingKey, consumer); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var messagePump = new Brighter.ServiceActivator.Proactor( - commandProcessor, - message => typeof(MyEvent), - messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), - new InMemoryRequestContextFactory(), - _trackingChannel - ); + var messagePump = new Brighter.ServiceActivator.Proactor(commandProcessor, message => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _trackingChannel); messagePump.TimeOut = TimeSpan.FromMilliseconds(5000); - // Enqueue a message followed by a quit var @event = new MyEvent(); - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); _trackingChannel.Enqueue(message); - // Act — start the performer and stop it (enqueues MT_QUIT) var performer = new Performer(_trackingChannel, messagePump); _performerTask = performer.Run(); performer.Stop(_routingKey); } - [Fact] + [Test] public async Task When_Proactor_Receives_Quit_Should_Dispose_Channel_Async() { // Assert — the performer task should complete cleanly await _performerTask.WaitAsync(TimeSpan.FromSeconds(10)); - - Assert.True(_performerTask.IsCompleted); - Assert.False(_performerTask.IsFaulted); - Assert.False(_performerTask.IsCanceled); - + await Assert.That(_performerTask.IsCompleted).IsTrue(); + await Assert.That(_performerTask.IsFaulted).IsFalse(); + await Assert.That(_performerTask.IsCanceled).IsFalse(); // Assert — the Proactor should have called DisposeAsync, not Dispose - Assert.True(_trackingChannel.DisposeAsyncCalled, "Proactor should call DisposeAsync on MT_QUIT, not Dispose"); + await Assert.That(_trackingChannel.DisposeAsyncCalled).IsTrue(); } } @@ -78,8 +53,7 @@ public async Task When_Proactor_Receives_Quit_Should_Dispose_Channel_Async() /// A ChannelAsync subclass that tracks whether DisposeAsync or Dispose was called. /// Used to verify the Proactor uses the async dispose path. /// -internal sealed class TrackingChannelAsync(ChannelName channelName, RoutingKey routingKey, IAmAMessageConsumerAsync messageConsumer) - : ChannelAsync(channelName, routingKey, messageConsumer) +internal sealed class TrackingChannelAsync(ChannelName channelName, RoutingKey routingKey, IAmAMessageConsumerAsync messageConsumer) : Paramore.Brighter.ChannelAsync(channelName, routingKey, messageConsumer), Paramore.Brighter.IAmAChannelAsync, Paramore.Brighter.IAmAChannel, System.IDisposable, System.IAsyncDisposable { public bool DisposeAsyncCalled { get; private set; } @@ -88,4 +62,4 @@ public override async ValueTask DisposeAsync() DisposeAsyncCalled = true; await base.DisposeAsync(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs index f986d7e88f..2dbc43e75e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs @@ -8,10 +8,8 @@ using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Tasks; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; - /// /// Regression test for the deadlock scenario described in issue #3684. /// A Proactor running inside BrighterAsyncContext.Run() must be able to @@ -21,48 +19,26 @@ namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor; /// public class ProactorShutdownInsideAsyncContextTests { - [Fact] - public void When_Proactor_Shuts_Down_Inside_BrighterAsyncContext_Should_Not_Deadlock() + [Test] + public async Task When_Proactor_Shuts_Down_Inside_BrighterAsyncContext_Should_Not_Deadlock() { // Arrange var routingKey = new RoutingKey("test.deadlock.topic"); var bus = new InternalBus(); var timeProvider = new FakeTimeProvider(); - var commandProcessor = new SpyCommandProcessor(); var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); - // Use a channel whose DisposeAsync does real async work (Task.Yield) // to force continuations back onto the scheduler - var channel = new AsyncContinuationChannelAsync( - new ChannelName("test-deadlock-channel"), - routingKey, - consumer - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + var channel = new AsyncContinuationChannelAsync(new ChannelName("test-deadlock-channel"), routingKey, consumer); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var messagePump = new Brighter.ServiceActivator.Proactor( - commandProcessor, - message => typeof(MyEvent), - messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), - new InMemoryRequestContextFactory(), - channel - ); + var messagePump = new Brighter.ServiceActivator.Proactor(commandProcessor, message => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel); messagePump.TimeOut = TimeSpan.FromMilliseconds(5000); - // Enqueue a message followed by a quit var @event = new MyEvent(); - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); channel.Enqueue(message); - // Act — run the entire Proactor lifecycle inside BrighterAsyncContext.Run(). // If the async dispose path uses sync-over-async (.Wait() / .GetResult()), // this will deadlock because continuations cannot be scheduled back onto the @@ -77,12 +53,11 @@ public void When_Proactor_Shuts_Down_Inside_BrighterAsyncContext_Should_Not_Dead await task; }); }); - // Assert — the performer must complete within a reasonable timeout. // A deadlock would cause this to hang indefinitely. bool finishedInTime = completed.Wait(TimeSpan.FromSeconds(30)); - Assert.True(finishedInTime, "Proactor shutdown deadlocked inside BrighterAsyncContext.Run()"); - Assert.True(channel.DisposeAsyncCalled, "Proactor should call DisposeAsync, not Dispose"); + await Assert.That(finishedInTime).IsTrue(); + await Assert.That(channel.DisposeAsyncCalled).IsTrue(); } } @@ -91,23 +66,17 @@ public void When_Proactor_Shuts_Down_Inside_BrighterAsyncContext_Should_Not_Dead /// to ensure continuations are posted back to the scheduler. This is the /// scenario that triggers a deadlock if the dispose path uses sync-over-async. /// -internal sealed class AsyncContinuationChannelAsync( - ChannelName channelName, - RoutingKey routingKey, - IAmAMessageConsumerAsync messageConsumer) - : ChannelAsync(channelName, routingKey, messageConsumer) +internal sealed class AsyncContinuationChannelAsync(ChannelName channelName, RoutingKey routingKey, IAmAMessageConsumerAsync messageConsumer) : Paramore.Brighter.ChannelAsync(channelName, routingKey, messageConsumer), Paramore.Brighter.IAmAChannelAsync, Paramore.Brighter.IAmAChannel, System.IDisposable, System.IAsyncDisposable { public bool DisposeAsyncCalled { get; private set; } public override async ValueTask DisposeAsync() { DisposeAsyncCalled = true; - // Force an async continuation — this is the key part. // If the caller is blocking synchronously on a single-threaded context, // this yield will deadlock because the continuation can't be scheduled. await Task.Yield(); - await base.DisposeAsync(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs index 8996501a9b..8a4a743131 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -14,93 +13,68 @@ public class MessagePumpToCommandProcessorDynamicMappingTestsAsync { private const string Channel = "MyChannel"; private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly InternalBus _bus = new (); + private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly ChannelAsync _channel; - public MessagePumpToCommandProcessorDynamicMappingTestsAsync() { _commandProcessor = new SpyCommandProcessor(); - _channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messagerMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(type => - type switch - { - var t when t == typeof(MyEventMessageMapperAsync) => new MyEventMessageMapperAsync(), - var t when t == typeof(MyOtherEventMessageMapperAsync) => new MyOtherEventMessageMapperAsync(), - _ => throw new ArgumentException($"No mapper registered for type {type.FullName}", nameof(type)) - })); + _channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messagerMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(type => type switch + { + var t when t == typeof(MyEventMessageMapperAsync) => new MyEventMessageMapperAsync(), + var t when t == typeof(MyOtherEventMessageMapperAsync) => new MyOtherEventMessageMapperAsync(), + _ => throw new ArgumentException($"No mapper registered for type {type.FullName}", nameof(type))})); messagerMapperRegistry.RegisterAsync(); messagerMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => - message switch - { - var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myevent") => typeof(MyEvent), - var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myotherevent") => typeof(MyOtherEvent), - _ => throw new ArgumentException($"No type mapping found for message with type {message.Header.Type}", nameof(message)), - }, - messagerMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => message switch + { + var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myevent") => typeof(MyEvent), + var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myotherevent") => typeof(MyOtherEvent), + _ => throw new ArgumentException($"No type mapping found for message with type {message.Header.Type}", nameof(message)), + }, messagerMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; } - [Fact] - public void When_Reading_A_MyOtherEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() + [Test] + public async Task When_Reading_A_MyOtherEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() { //arrange var @event = new MyEvent(); //although we send a MyEvent, we will map it dynamically to a MyOtherEvent - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myotherevent") ), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myotherevent")), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); _channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - //act _messagePump.Run(); - //assert - - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); var myOtherEvent = _commandProcessor.Observe(); - Assert.Equal(@event.Id, myOtherEvent.Id); - Assert.Equal(@event.Data, myOtherEvent.Data); + await Assert.That(myOtherEvent.Id).IsEqualTo(@event.Id); + await Assert.That(myOtherEvent.Data).IsEqualTo(@event.Data); } - - [Fact] - public void When_Reading_A_MyEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() + + [Test] + public async Task When_Reading_A_MyEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() { //arrange var @event = new MyEvent(); //we send a MyEvent, we will map it dynamically to a MyEvent - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myevent") ), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myevent")), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); _channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - //act _messagePump.Run(); - //assert - - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); var myEvent = _commandProcessor.Observe(); - Assert.Equal(@event.Id, myEvent.Id); - Assert.Equal(@event.Data, myEvent.Data); + await Assert.That(myEvent.Id).IsEqualTo(@event.Id); + await Assert.That(myEvent.Data).IsEqualTo(@event.Data); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor_async.cs index c0a604e8b8..552cd4fec8 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -19,45 +18,33 @@ public class MessagePumpToCommandProcessorTestsAsync private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly MyEvent _event; - public MessagePumpToCommandProcessorTestsAsync() { _commandProcessor = new SpyCommandProcessor(); - ChannelAsync channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - var messagerMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + ChannelAsync channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messagerMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messagerMapperRegistry.RegisterAsync(); - - _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), - messagerMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; - + _messagePump = new ServiceActivator.Proactor(_commandProcessor, (message) => typeof(MyEvent), messagerMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; _event = new MyEvent(); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_event, JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_event, JsonSerialisationOptions.Options))); channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_Reading_A_Message_From_A_Channel_Pump_Out_To_Command_Processor() + [Test] + public async Task When_Reading_A_Message_From_A_Channel_Pump_Out_To_Command_Processor() { //although run does not return a Task, it will process handler and mapper asynchronously, using our //synchronization context. Messages should retain ordering of callbacks, so our test message should be processed //before we quit _messagePump.Run(); - - Assert.Equal(CommandType.PublishAsync, _commandProcessor.Commands[0]); - Assert.Equal(_event, _commandProcessor.Observe()); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.PublishAsync); + await Assert.That(_commandProcessor.Observe()).IsEqualTo(_event); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs index 199a86010f..cd3b7dc4c6 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Proactor { @@ -18,48 +17,33 @@ public class PerformerCanStopTestsAsync private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private readonly Task _performerTask; - public PerformerCanStopTestsAsync() { SpyCommandProcessor commandProcessor = new(); - ChannelAsync channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + ChannelAsync channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - - var messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, - new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel); + var messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), channel); messagePump.Channel = channel; messagePump.TimeOut = TimeSpan.FromMilliseconds(5000); - var @event = new MyEvent(); - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); channel.Enqueue(message); - Performer performer = new(channel, messagePump); _performerTask = performer.Run(); performer.Stop(_routingKey); } - + #pragma warning disable xUnit1031 - [Fact] - public void When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() + [Test] + public async Task When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() { _performerTask.Wait(); - - Assert.True(_performerTask.IsCompleted); - Assert.False(_performerTask.IsFaulted); - Assert.False(_performerTask.IsCanceled); - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_performerTask.IsCompleted).IsTrue(); + await Assert.That(_performerTask.IsFaulted).IsFalse(); + await Assert.That(_performerTask.IsCanceled).IsFalse(); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } #pragma warning restore xUnit1031 } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established.cs index 76919e1971..7469f90cf8 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_command_should_retry_until_connection_re_established.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -19,56 +18,40 @@ public class MessagePumpRetryCommandOnConnectionFailureTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpRetryCommandOnConnectionFailureTests() { _commandProcessor = new SpyCommandProcessor(); - var channel = new FailingChannel( - new ChannelName(ChannelName), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2) + var channel = new FailingChannel(new ChannelName(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2) { NumberOfRetries = 1 }; - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(500), RequeueCount = -1 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(500), + RequeueCount = -1 }; - var command = new MyCommand(); - //two command, will be received when subscription restored - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)) - ); + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - //end the pump var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Channel_Failure_Exception_Is_Thrown_For_Command_Should_Retry_Until_Connection_Re_established() + [Test] + public async Task When_A_Channel_Failure_Exception_Is_Thrown_For_Command_Should_Retry_Until_Connection_Re_established() { _messagePump.Run(); - //Should send the message via the command processor - Assert.Equal(2, _commandProcessor.Commands.Count); - Assert.Equal(CommandType.Send, _commandProcessor.Commands[0]); - Assert.Equal(CommandType.Send, _commandProcessor.Commands[1]); + await Assert.That(_commandProcessor.Commands.Count).IsEqualTo(2); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Send); + await Assert.That(_commandProcessor.Commands[1]).IsEqualTo(CommandType.Send); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established.cs index a94dea1d0c..e523fbab94 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_channel_failure_exception_is_thrown_for_event_should_retry_until_connection_re_established.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -18,59 +17,40 @@ public class MessagePumpRetryEventConnectionFailureTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpRetryEventConnectionFailureTests() { _commandProcessor = new SpyCommandProcessor(); - var channel = new FailingChannel( - new ChannelName("myChannel"), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2) + var channel = new FailingChannel(new ChannelName("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2) { NumberOfRetries = 1 }; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(500), RequeueCount = -1 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(500), + RequeueCount = -1 }; - var @event = new MyEvent(); - //Two events will be received when channel fixed - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - //Quit the message pump var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Channel_Failure_Exception_Is_Thrown_For_Event_Should_Retry_Until_Connection_Re_established() + [Test] + public async Task When_A_Channel_Failure_Exception_Is_Thrown_For_Event_Should_Retry_Until_Connection_Re_established() { _messagePump.Run(); - //_should_publish_the_message_via_the_command_processor - Assert.Equal(2, _commandProcessor.Commands.Count); - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[1]); + await Assert.That(_commandProcessor.Commands.Count).IsEqualTo(2); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); + await Assert.That(_commandProcessor.Commands[1]).IsEqualTo(CommandType.Publish); } - } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs index 604787ffb5..5200c6b17b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -41,47 +38,32 @@ public class MessagePumpCommandProcessingDeferMessageActionTests private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new("MyCommand"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpCommandProcessingDeferMessageActionTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _channel = new Channel(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilder(messageMapperRegistry, null) - .BuildWrapPipeline() - .Wrap(new MyCommand(), new RequestContext(), new Publication{Topic = _routingKey}); - + var msg = new TransformPipelineBuilder(messageMapperRegistry, null).BuildWrapPipeline().Wrap(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }); _bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); - + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked.cs index 59d978136c..e2c5fda726 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -7,7 +7,6 @@ using Paramore.Brighter.ServiceActivator; using Serilog.Events; using Serilog.Sinks.TestCorrelator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -18,53 +17,37 @@ public class MessagePumpCommandProcessingExceptionTests private readonly int _requeueCount = 5; private readonly RoutingKey _routingKey = new("MyCommand"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpCommandProcessingExceptionTests() { SpyExceptionCommandProcessor commandProcessor = new(); - - InternalBus bus = new(); - _channel = new Channel(new("myChannel"),_routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + InternalBus bus = new(); + _channel = new Channel(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - - var msg = new TransformPipelineBuilder(messageMapperRegistry, null) - .BuildWrapPipeline() - .Wrap(new MyCommand(), new RequestContext(), new Publication{Topic = _routingKey}); - + var msg = new TransformPipelineBuilder(messageMapperRegistry, null).BuildWrapPipeline().Wrap(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }); bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_a_command_handler_throws_unhandled_exception_Then_message_is_acked() { using (TestCorrelator.CreateContext()) { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("")); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - var logEvents = TestCorrelator.GetLogEventsFromCurrentContext(); - Assert.Contains(logEvents, x => x.Level == LogEventLevel.Error && x.MessageTemplate.Text == - "MessagePump: Failed to dispatch message '{Id}' from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); + await Assert.That(logEvents).Contains(x => x.Level == LogEventLevel.Error && x.MessageTemplate.Text == "MessagePump: Failed to dispatch message '{Id}' from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs index a6174f4a58..a16251e1be 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs @@ -8,7 +8,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -21,28 +20,13 @@ public class MessagePumpCommandDontAckActionNackTests private readonly IAmAMessagePump _messagePump; private readonly Channel _channel; private readonly SpyDontAckCommandProcessor _commandProcessor; - public MessagePumpCommandDontAckActionNackTests() { _commandProcessor = new SpyDontAckCommandProcessor(); - _channel = new Channel( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + _channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor( - _commandProcessor, - (message) => typeof(MyCommand), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new InMemoryRequestContextFactory(), - _channel) + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -50,40 +34,30 @@ public MessagePumpCommandDontAckActionNackTests() UnacceptableMessageLimit = -1, DontAckDelay = TimeSpan.FromMilliseconds(100) }; - // Arrange: enqueue one command message to the bus (not channel) // so InMemoryMessageConsumer.Receive locks it in _lockedMessages, // enabling nack to re-enqueue it back to the bus - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options))); _bus.Enqueue(message); } - [Fact] + [Test] public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message() { // Act: run pump in background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - // Wait for handler to process the message (DontAckAction thrown) var handled = _commandProcessor.WaitForHandle(5000); - Assert.True(handled, "Handler should have been called"); - + await Assert.That(handled).IsTrue(); // Send quit to stop the pump after DontAckAction processing _channel.Enqueue(MessageFactory.CreateQuitMessage(_routingKey)); - await Task.WhenAll(task); - // Assert: handler was called - Assert.True(_commandProcessor.SendCount >= 1); - + await Assert.That(_commandProcessor.SendCount >= 1).IsTrue(); // Assert: pump continued running and processed the quit message - Assert.Equal(MessagePumpStatus.MP_STOPPED, _messagePump.Status); - + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_STOPPED); // Assert: message was nacked (re-enqueued to bus, available for redelivery) - Assert.NotEmpty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge.cs index 872a3a932a..0332067788 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge.cs @@ -7,7 +7,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -19,28 +18,13 @@ public class MessagePumpCommandDontAckActionTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyDontAckCommandProcessor _commandProcessor; - public MessagePumpCommandDontAckActionTests() { _commandProcessor = new SpyDontAckCommandProcessor(); - var channel = new Channel( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + var channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor( - _commandProcessor, - (message) => typeof(MyCommand), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new InMemoryRequestContextFactory(), - channel) + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -48,39 +32,31 @@ public MessagePumpCommandDontAckActionTests() UnacceptableMessageLimit = 2, DontAckDelay = TimeSpan.Zero }; - // Arrange: enqueue two command messages (both will trigger DontAckAction) // No quit message — the pump will exit via the unacceptable message limit for (int i = 0; i < 2; i++) { - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options))); channel.Enqueue(message); } } - [Fact] - public void When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge() + [Test] + public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge() { // Act _messagePump.Run(); - // Assert: handler was called for both messages - Assert.Equal(CommandType.Send, _commandProcessor.Commands[0]); - Assert.Equal(2, _commandProcessor.SendCount); - + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Send); + await Assert.That(_commandProcessor.SendCount).IsEqualTo(2); // Assert: pump continued running after the first DontAckAction // (it processed the second command, proving it didn't crash or stop on the first) - // Assert: unacceptable message count was incremented // The pump exited because the count reached the limit of 2, // which only happens if IncrementUnacceptableMessageCount was called for each DontAckAction - Assert.Equal(MessagePumpStatus.MP_LIMIT_EXCEEDED, _messagePump.Status); - + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_LIMIT_EXCEEDED); // Assert: messages were nacked to the bus (available for redelivery) - Assert.NotEmpty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs index feed2a4c16..c6d49233e7 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -6,71 +6,56 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class DispatcherAddNewConnectionTests : IDisposable + public class DispatcherAddNewConnectionTests { private readonly Dispatcher _dispatcher; private readonly Subscription _newSubscription; private readonly InternalBus _bus; private readonly RoutingKey _routingKey = new("MyEvent"); private readonly RoutingKey _routingKeyTwo = new("OtherEvent"); - public DispatcherAddNewConnectionTests() { _bus = new InternalBus(); - IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - Subscription subscription = new Subscription( - new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), - messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey - ); - - _newSubscription = new Subscription( - new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), - channelName: new ChannelName("fakeChannelTwo"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKeyTwo); + Subscription subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); + _newSubscription = new Subscription(new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannelTwo"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKeyTwo); _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKey}); + var message = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Has_A_New_Connection_Added_While_Running() { _dispatcher.Open(_newSubscription); - var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKeyTwo}); + var message = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKeyTwo }); _bus.Enqueue(message); - await Task.Delay(1000); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Equal(2, _dispatcher.Consumers.Count()); - Assert.Equal(2, _dispatcher.Subscriptions.Count()); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers.Count()).IsEqualTo(2); + await Assert.That(_dispatcher.Subscriptions.Count()).IsEqualTo(2); } + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs index b56fc3807c..f6c1d03719 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,73 +6,54 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessageDispatcherRoutingTests : IDisposable + public class MessageDispatcherRoutingTests { private readonly Dispatcher _dispatcher; private readonly SpyCommandProcessor _commandProcessor; private readonly RoutingKey _routingKey = new("myTopic"); private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherRoutingTests() { _commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - var subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - - _dispatcher = new Dispatcher( - _commandProcessor, - new List { subscription }, - messageMapperRegistry, - requestContextFactory: new InMemoryRequestContextFactory() - ); - + var subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); + _dispatcher = new Dispatcher(_commandProcessor, new List { subscription }, messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKey}); + var message = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - } #pragma warning disable xUnit1031 - [Fact] - public void When_A_Message_Dispatcher_Is_Asked_To_Connect_A_Channel_And_Handler() + [Test] + public async Task When_A_Message_Dispatcher_Is_Asked_To_Connect_A_Channel_And_Handler() { Task.Delay(1000).Wait(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.NotNull(_commandProcessor.Observe()); - Assert.Contains(_commandProcessor.Commands, ctype => ctype == CommandType.Publish); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_commandProcessor.Observe()).IsNotNull(); + await Assert.That(_commandProcessor.Commands).Contains(ctype => ctype == CommandType.Publish); } + + [After(Test)] #pragma warning restore xUnit1031 - public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs index 97d0817069..82dc75afe6 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,11 +6,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessageDispatcherResetConnection : IDisposable + public class MessageDispatcherResetConnection { private readonly Dispatcher _dispatcher; private readonly Subscription _subscription; @@ -18,66 +17,53 @@ public class MessageDispatcherResetConnection : IDisposable private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new("myTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherResetConnection() { IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - - _publication = new Publication{Topic = _subscription.RoutingKey, RequestType = typeof(MyEvent)}; - + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); + _publication = new Publication + { + Topic = _subscription.RoutingKey, + RequestType = typeof(MyEvent) + }; _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistry); - var @event = new MyEvent(); var message = new MyEventMessageMapper().MapToMessage(@event, _publication); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); Task.Delay(1000).Wait(); _dispatcher.Shut(_subscription); - } - + #pragma warning disable xUnit1031 - [Fact] - public void When_A_Message_Dispatcher_Restarts_A_Connection() + [Test] + public async Task When_A_Message_Dispatcher_Restarts_A_Connection() { _dispatcher.Open(_subscription); - var @event = new MyEvent(); var message = new MyEventMessageMapper().MapToMessage(@event, _publication); _bus.Enqueue(message); - Task.Delay(1000).Wait(); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } + + [After(Test)] #pragma warning restore xUnit1031 - public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs index 5a4d16df7c..ceea483f96 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -7,11 +7,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class DispatcherRestartConnectionTests : IDisposable + public class DispatcherRestartConnectionTests { private const string ChannelName = "fakeChannel"; private readonly Dispatcher _dispatcher; @@ -20,61 +19,38 @@ public class DispatcherRestartConnectionTests : IDisposable private readonly ChannelName _channelName = new(ChannelName); private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); - + private readonly Subscription _subscription; + private readonly Subscription _newSubscription; public DispatcherRestartConnectionTests() { IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - Subscription subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: _channelName, - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - - Subscription newSubscription = new Subscription( - new SubscriptionName("newTest"), - noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: _channelName, - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - - _publication = new Publication{Topic = subscription.RoutingKey}; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription, newSubscription }, - messageMapperRegistry) - ; - + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: _channelName, messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); + _newSubscription = new Subscription(new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: _channelName, messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); + _publication = new Publication + { + Topic = _subscription.RoutingKey + }; + _dispatcher = new Dispatcher(commandProcessor, new List { _subscription, _newSubscription }, messageMapperRegistry); var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, _publication ); - + var message = new MyEventMessageMapper().MapToMessage(@event, _publication); _bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); - + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); Task.Delay(250).Wait(); - _dispatcher.Shut(subscription.Name); - _dispatcher.Shut(newSubscription.Name); + _dispatcher.Shut(_subscription.Name); + _dispatcher.Shut(_newSubscription.Name); Task.Delay(1000).Wait(); - - Assert.Empty(_dispatcher.Consumers); - + await Assert.That(_dispatcher.Consumers).IsEmpty(); } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Restarts_A_Connection_After_All_Connections_Have_Stopped() { _dispatcher.Open(new SubscriptionName("newTest")); @@ -82,19 +58,18 @@ public async Task When_A_Message_Dispatcher_Restarts_A_Connection_After_All_Conn var message = new MyEventMessageMapper().MapToMessage(@event, _publication); _bus.Enqueue(message); await Task.Delay(500); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Single(_dispatcher.Consumers); - Assert.Equal(2, _dispatcher.Subscriptions.Count()); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers).HasSingleItem(); + await Assert.That(_dispatcher.Subscriptions.Count()).IsEqualTo(2); } + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs index d69c9d1bbb..4cb0a8dfe7 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -6,11 +6,10 @@ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessageDispatcherShutConnectionTests : IDisposable + public class MessageDispatcherShutConnectionTests { private const string Topic = "fakekey"; private const string ChannelName = "fakeChannel"; @@ -18,55 +17,43 @@ public class MessageDispatcherShutConnectionTests : IDisposable private readonly Subscription _subscription; private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); - public MessageDispatcherShutConnectionTests() { InternalBus bus = new(); - IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _subscription = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 3, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(bus, _timeProvider), - channelName: new ChannelName(ChannelName), - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(bus, _timeProvider), channelName: new ChannelName(ChannelName), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, new Publication{ Topic = _subscription.RoutingKey}); + var message = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = _subscription.RoutingKey }); for (var i = 0; i < 6; i++) bus.Enqueue(message); + } - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - } - [Fact] + [Test] public async Task When_A_Message_Dispatcher_Shuts_A_Connection() { await Task.Delay(1000); _dispatcher.Shut(_subscription); await _dispatcher.End(); - - Assert.DoesNotContain(_dispatcher.Consumers, consumer => consumer.Name == _subscription.Name && consumer.State == ConsumerState.Open); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.Empty(_dispatcher.Consumers); + await Assert.That(_dispatcher.Consumers).DoesNotContain(consumer => consumer.Name == _subscription.Name && consumer.State == ConsumerState.Open); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_dispatcher.Consumers).IsEmpty(); } - + + [After(Test)] public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs index 9bbd7701f4..0097f02476 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -9,11 +9,10 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessageDispatcherMultipleConnectionTests : IDisposable + public class MessageDispatcherMultipleConnectionTests { private readonly Dispatcher _dispatcher; private int _numberOfConsumers; @@ -21,72 +20,54 @@ public class MessageDispatcherMultipleConnectionTests : IDisposable private readonly FakeTimeProvider _timeProvider = new(); private readonly RoutingKey _commandRoutingKey = new("myCommand"); private readonly RoutingKey _eventRoutingKey = new("myEvent"); - public MessageDispatcherMultipleConnectionTests() { var commandProcessor = new SpyCommandProcessor(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); - - var messageMapperRegistry = new MessageMapperRegistry( - new ServiceProviderMapperFactory(container.BuildServiceProvider()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new ServiceProviderMapperFactory(container.BuildServiceProvider()), null); messageMapperRegistry.Register(); messageMapperRegistry.Register(); - - var myEventConnection = new Subscription( - new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: - new InMemoryChannelFactory(_bus, _timeProvider), messagePumpType: MessagePumpType.Reactor, channelName: new ChannelName("fakeEventChannel"), - routingKey: _eventRoutingKey - ); - var myCommandConnection = new Subscription( - new SubscriptionName("anothertest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("fakeCommandChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _commandRoutingKey - ); + var myEventConnection = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), messagePumpType: MessagePumpType.Reactor, channelName: new ChannelName("fakeEventChannel"), routingKey: _eventRoutingKey); + var myCommandConnection = new Subscription(new SubscriptionName("anothertest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("fakeCommandChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _commandRoutingKey); _dispatcher = new Dispatcher(commandProcessor, new List { myEventConnection, myCommandConnection }, messageMapperRegistry); - var @event = new MyEvent(); - var eventMessage = new MyEventMessageMapper().MapToMessage(@event, new Publication{Topic = _eventRoutingKey}); + var eventMessage = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = _eventRoutingKey }); _bus.Enqueue(eventMessage); - var command = new MyCommand(); - var commandMessage = new MyCommandMessageMapper().MapToMessage(command, new Publication{Topic = _commandRoutingKey}); + var commandMessage = new MyCommandMessageMapper().MapToMessage(command, new Publication { Topic = _commandRoutingKey }); _bus.Enqueue(commandMessage); - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); - _dispatcher.Receive(); } + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); + _dispatcher.Receive(); + } #pragma warning disable xUnit1031 - [Fact] - public void When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers() + [Test] + public async Task When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers() { Task.Delay(1000).Wait(); _numberOfConsumers = _dispatcher.Consumers.Count(); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); - - - Assert.Empty(_bus.Stream(_eventRoutingKey)); - Assert.Empty(_bus.Stream(_commandRoutingKey)); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); - Assert.Empty(_dispatcher.Consumers); - Assert.Equal(2, _numberOfConsumers); + await Assert.That(_bus.Stream(_eventRoutingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_commandRoutingKey)).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); + await Assert.That(_dispatcher.Consumers).IsEmpty(); + await Assert.That(_numberOfConsumers).IsEqualTo(2); } + + [After(Test)] #pragma warning restore xUnit1031 - public void Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) _dispatcher.End().Wait(); } - } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs index 562c67c129..3621100ceb 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs @@ -1,70 +1,56 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessageDispatcherMultiplePerformerTests { private const string Topic = "myTopic"; private const string ChannelName = "myChannel"; private readonly Dispatcher _dispatcher; private readonly InternalBus _bus; - public MessageDispatcherMultiplePerformerTests() { var routingKey = new RoutingKey(Topic); _bus = new InternalBus(); var consumer = new InMemoryMessageConsumer(routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)); - - IAmAChannelSync channel = new Channel(new (ChannelName), new(Topic), consumer, 6); + IAmAChannelSync channel = new Channel(new(ChannelName), new(Topic), consumer, 6); IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - var connection = new Subscription( - new SubscriptionName("test"), - noOfPerformers: 3, - timeOut: TimeSpan.FromMilliseconds(100), - channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), - channelName: new ChannelName("fakeChannel"), - messagePumpType: MessagePumpType.Reactor, - routingKey: routingKey - ); + var connection = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: routingKey); _dispatcher = new Dispatcher(commandProcessor, new List { connection }, messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapper().MapToMessage(@event, new Publication{Topic = connection.RoutingKey}); + var message = new MyEventMessageMapper().MapToMessage(@event, new Publication { Topic = connection.RoutingKey }); for (var i = 0; i < 6; i++) channel.Enqueue(message); - - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + } + + [Before(Test)] + public async Task Setup() + { + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } #pragma warning disable xUnit1031 - [Fact] - public void WhenAMessageDispatcherStartsMultiplePerformers() + [Test] + public async Task WhenAMessageDispatcherStartsMultiplePerformers() { { - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); - Assert.Equal(3, _dispatcher.Consumers.Count()); - + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); + await Assert.That(_dispatcher.Consumers.Count()).IsEqualTo(3); _dispatcher.End().Wait(); - - Assert.Empty(_bus.Stream(new RoutingKey(Topic))); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_bus.Stream(new RoutingKey(Topic))).IsEmpty(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } } #pragma warning restore xUnit1031 } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request.cs index de0ad599b9..4de70f4109 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request.cs @@ -1,14 +1,12 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { - public class MessagePumpFailingMessageTranslationTests { private const string Channel = "MyChannel"; @@ -17,46 +15,33 @@ public class MessagePumpFailingMessageTranslationTests private readonly IAmAMessagePump _messagePump; private readonly Channel _channel; private readonly InternalBus _bus = new(); - public MessagePumpFailingMessageTranslationTests() { SpyRequeueCommandProcessor commandProcessor = new(); _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new FailingEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new FailingEventMessageMapper()), null); messageMapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactory(_ => throw new NotImplementedException()); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), - messageMapperRegistry, messageTransformerFactory, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), messageMapperRegistry, messageTransformerFactory, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3, UnacceptableMessageLimit = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3 }; - - var unmappableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }") - ); - + var unmappableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }")); _bus.Enqueue(unmappableMessage); - } - [Fact] - public async Task When_A_Message_Fails_To_Be_Mapped_To_A_Request () + [Test] + public async Task When_A_Message_Fails_To_Be_Mapped_To_A_Request() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - await Task.Delay(2000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _channel.Stop(_routingKey); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached.cs index e382eb3ac7..fa7fc88db0 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_fails_to_be_mapped_to_a_request_and_the_unacceptable_message_limit_is_reached.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,23 +12,20 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -39,47 +36,35 @@ public class MessagePumpUnacceptableMessageLimitTests private readonly InternalBus _bus = new(); private readonly IAmAMessagePump _messagePump; private readonly FakeTimeProvider _timeProvider; - public MessagePumpUnacceptableMessageLimitTests() { SpyRequeueCommandProcessor commandProcessor = new(); _timeProvider = new FakeTimeProvider(); - Channel channel = new(new (Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new FailingEventMessageMapper()), - null); + Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new FailingEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyFailingMapperEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3, UnacceptableMessageLimit = 3 + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3 }; - - var unmappableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }") - ); - + var unmappableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("{ \"Id\" : \"48213ADB-A085-4AFF-A42C-CF8209350CF7\" }")); _bus.Enqueue(unmappableMessage); _bus.Enqueue(unmappableMessage); _bus.Enqueue(unmappableMessage); - } - [Fact] + [Test] public async Task When_A_Message_Fails_To_Be_Mapped_To_A_Request_And_The_Unacceptable_Message_Limit_Is_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - await Task.WhenAll(new[] { task }); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: Assert the channe shutdown somehow. Observability? + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: Assert the channe shutdown somehow. Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_is_dispatched_it_should_reach_a_handler.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_is_dispatched_it_should_reach_a_handler.cs index 664540d258..5fd2ed9742 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_is_dispatched_it_should_reach_a_handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_is_dispatched_it_should_reach_a_handler.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -6,7 +6,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -18,58 +17,32 @@ public class MessagePumpDispatchTests private readonly IAmAMessagePump _messagePump; private readonly MyEvent _myEvent = new(); private readonly IDictionary _receivedMessages = new Dictionary(); - public MessagePumpDispatchTests() { var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory()); - - PipelineBuilder.ClearPipelineCache(); - - var channel = new Channel( - new("myChannel"), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var channel = new Channel(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) }; - - var message = new Message( - new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Message_Is_Dispatched_It_Should_Reach_A_Handler() + [Test] + public async Task When_A_Message_Is_Dispatched_It_Should_Reach_A_Handler() { _messagePump.Run(); - - Assert.Contains(nameof(MyEventHandler), _receivedMessages); - Assert.Equal(_myEvent.Id, _receivedMessages[nameof(MyEventHandler)]); + await Assert.That(_receivedMessages.Keys).Contains(nameof(MyEventHandler)); + await Assert.That(_receivedMessages[nameof(MyEventHandler)]).IsEqualTo(_myEvent.Id); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_mapper_throws_invalid_message_action.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_mapper_throws_invalid_message_action.cs index e3f5abee5e..114d4d0b97 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_mapper_throws_invalid_message_action.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_mapper_throws_invalid_message_action.cs @@ -8,10 +8,8 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor; - public class MessageDispatchInvalidMessageActionTests { private readonly RoutingKey _routingKey = new("myTopic"); @@ -19,63 +17,30 @@ public class MessageDispatchInvalidMessageActionTests private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private Dispatcher _dispatcher; - public MessageDispatchInvalidMessageActionTests() { // Arrange: Set up a message mapper that throws InvalidMessageAction on deserialization failure var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => new MyRejectedEventHandler(), - (type) => throw new ConfigurationException() - ); - + var handlerFactory = new SimpleHandlerFactory((type) => new MyRejectedEventHandler(), (type) => throw new ConfigurationException()); // Use a mapper that throws InvalidMessageAction to simulate deserialization failure var mapperFactory = new SimpleMessageMapperFactory((r) => new MyInvalidMessageMapper()); var messageMapperRegistry = new MessageMapperRegistry(mapperFactory, null, null, null); messageMapperRegistry.Register(); - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); resiliencePipelineRegistry.AddBrighterDefault(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - var subscription = new InMemorySubscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + var subscription = new InMemorySubscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); subscription.InvalidMessageRoutingKey = _invalidMessageRoutingKey; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription }, - messageMapperRegistry, - requestContextFactory: new InMemoryRequestContextFactory() - ); - + _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); // Act: Send a message that will fail deserialization var @event = new MyRejectedEvent(Id.Random()); - var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKey}); + var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); - _dispatcher.Receive(); } - [Fact] + [Test] public async Task When_a_message_mapper_throws_invalid_message_action() { // Wait for the message to be processed (moved to invalid message topic) before stopping @@ -87,15 +52,12 @@ public async Task When_a_message_mapper_throws_invalid_message_action() } await _dispatcher.End(); - - Assert.Empty(_bus.Stream(_routingKey)); - + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); // Assert: The message should appear in the invalid message channel - Assert.NotEmpty(_bus.Stream(_invalidMessageRoutingKey)); + await Assert.That(_bus.Stream(_invalidMessageRoutingKey)).IsNotEmpty(); var message = _bus.Dequeue(_invalidMessageRoutingKey); - // Assert: The message should include rejection metadata var rejectionReason = $"Message rejected reason: {RejectionReason.Unacceptable} Description: Failed to deserialize message"; - Assert.Equal(rejectionReason, message.Header.Bag[Message.RejectionReasonHeaderName]); + await Assert.That(message.Header.Bag[Message.RejectionReasonHeaderName]).IsEqualTo(rejectionReason); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs index 5f72e509b3..0847707f5e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_commands_has_been_reached.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -20,49 +19,37 @@ public class MessagePumpCommandRequeueCountThresholdTests private readonly IAmAMessagePump _messagePump; private readonly Channel _channel; private readonly SpyRequeueCommandProcessor _commandProcessor; - public MessagePumpCommandRequeueCountThresholdTests() { _commandProcessor = new SpyRequeueCommandProcessor(); - _channel = new Channel(new(Channel) ,_routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); messageMapperRegistry.Register(); - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 }; - - var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options)) - ); + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize((MyCommand)new(), JsonSerialisationOptions.Options))); _bus.Enqueue(message1); _bus.Enqueue(message2); - } - [Fact] + [Test] public async Task When_A_Requeue_Count_Threshold_For_Commands_Has_Been_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey("MyTopic")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Equal(CommandType.Send, _commandProcessor.Commands[0]); - Assert.Equal(6, _commandProcessor.SendCount); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: How can we observe that the channel has been closed? Observability? + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Send); + await Assert.That(_commandProcessor.SendCount).IsEqualTo(6); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: How can we observe that the channel has been closed? Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs index a75c39770f..2d074ae8fa 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_count_threshold_for_events_has_been_reached.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -20,51 +19,37 @@ public class MessagePumpEventRequeueCountThresholdTests private readonly IAmAMessagePump _messagePump; private readonly Channel _channel; private readonly SpyRequeueCommandProcessor _commandProcessor; - public MessagePumpEventRequeueCountThresholdTests() { _commandProcessor = new SpyRequeueCommandProcessor(); _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); _bus.Enqueue(message1); _bus.Enqueue(message2); - } - [Fact] + [Test] public async Task When_A_Requeue_Count_Threshold_For_Events_Has_Been_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); - Assert.Equal(6, _commandProcessor.PublishCount); - - Assert.Empty(_bus.Stream(_routingKey)); - - //TODO: How do we assert that the channel was closed? Observability? + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); + await Assert.That(_commandProcessor.PublishCount).IsEqualTo(6); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + //TODO: How do we assert that the channel was closed? Observability? } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_command_exception_is_thrown.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_command_exception_is_thrown.cs index 276b186b7e..cd33ed6d3e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_command_exception_is_thrown.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_command_exception_is_thrown.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -20,46 +19,32 @@ public class MessagePumpCommandRequeueTests private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public MessagePumpCommandRequeueTests() { _commandProcessor = new SpyRequeueCommandProcessor(); Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), - null); - messageMapperRegistry.Register(); - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = -1 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)) - ); - - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), - new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)) - ); - + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyCommandMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = -1 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); - var quitMessage = new Message( - new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("") - ); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Requeue_Of_Command_Exception_Is_Thrown() + [Test] + public async Task When_A_Requeue_Of_Command_Exception_Is_Thrown() { _messagePump.Run(); - - Assert.Equal(CommandType.Send, _commandProcessor.Commands[0]); - Assert.Equal(2, _bus.Stream(_routingKey).Count()); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Send); + await Assert.That(_bus.Stream(_routingKey).Count()).IsEqualTo(2); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_event_exception_is_thrown.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_event_exception_is_thrown.cs index b51e06f697..95099c4a26 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_event_exception_is_thrown.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_requeue_of_event_exception_is_thrown.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text.Json; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -19,54 +18,36 @@ public class MessagePumpEventRequeueTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; - public MessagePumpEventRequeueTests() { _commandProcessor = new SpyRequeueCommandProcessor(); - Channel channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 2 - ); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 2); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = -1 }; - - var message1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - var message2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options)) - ); - + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = -1 + }; + var message1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); + var message2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize((MyEvent)new(), JsonSerialisationOptions.Options))); channel.Enqueue(message1); channel.Enqueue(message2); var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey("MyTopic")); channel.Enqueue(quitMessage); - } - [Fact] - public void When_A_Requeue_Of_Event_Exception_Is_Thrown() + [Test] + public async Task When_A_Requeue_Of_Event_Exception_Is_Thrown() { _messagePump.Run(); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - //Should publish the message via the_command_processor - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); - + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); //_should_requeue_the_messages - Assert.Equal(2, _bus.Stream(_routingKey).Count()); - - //TODO: How do we know that the channel has been disposed? Observability + await Assert.That(_bus.Stream(_routingKey).Count()).IsEqualTo(2); + //TODO: How do we know that the channel has been disposed? Observability } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge.cs index 277d184fb0..0670d9a243 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_aggregate_exception_containing_dont_ack_action_should_not_acknowledge.cs @@ -7,7 +7,6 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -19,28 +18,13 @@ public class MessagePumpEventDontAckAggregateExceptionTests private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyDontAckCommandProcessor _commandProcessor; - public MessagePumpEventDontAckAggregateExceptionTests() { _commandProcessor = new SpyDontAckCommandProcessor(); - var channel = new Channel( - new(ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + var channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor( - _commandProcessor, - (message) => typeof(MyEvent), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new InMemoryRequestContextFactory(), - channel) + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), @@ -48,38 +32,30 @@ public MessagePumpEventDontAckAggregateExceptionTests() UnacceptableMessageLimit = 2, DontAckDelay = TimeSpan.Zero }; - // Arrange: enqueue two event messages (both will trigger AggregateException wrapping DontAckAction via Publish) for (int i = 0; i < 2; i++) { - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(new MyEvent(), JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(new MyEvent(), JsonSerialisationOptions.Options))); channel.Enqueue(message); } } - [Fact] - public void When_Aggregate_Exception_Containing_DontAck_Action_Should_Not_Acknowledge() + [Test] + public async Task When_Aggregate_Exception_Containing_DontAck_Action_Should_Not_Acknowledge() { // Act _messagePump.Run(); - // Assert: handler was called for both messages via Publish (event path) - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); - Assert.Equal(2, _commandProcessor.PublishCount); - + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); + await Assert.That(_commandProcessor.PublishCount).IsEqualTo(2); // Assert: pump continued running after the first AggregateException containing DontAckAction // (it processed the second event, proving it didn't crash or stop on the first) - // Assert: unacceptable message count was incremented // The pump exited because the count reached the limit of 2, // which only happens if IncrementUnacceptableMessageCount was called for each DontAckAction - Assert.Equal(MessagePumpStatus.MP_LIMIT_EXCEEDED, _messagePump.Status); - + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_LIMIT_EXCEEDED); // Assert: messages were nacked to the bus (available for redelivery) - Assert.NotEmpty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs index c94f63bed1..8cbcaaae11 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,10 +7,8 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor; - public class MessageDispatchRejectMessageExceptionTests { private readonly RoutingKey _routingKey = new("myTopic"); @@ -18,76 +16,37 @@ public class MessageDispatchRejectMessageExceptionTests private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private Dispatcher _dispatcher; - public MessageDispatchRejectMessageExceptionTests() { MyRejectedEventHandler.Reset(); - var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => new MyRejectedEventHandler(), - (type) => throw new ConfigurationException() - ); - + var handlerFactory = new SimpleHandlerFactory((type) => new MyRejectedEventHandler(), (type) => throw new ConfigurationException()); var mapperFactory = new SimpleMessageMapperFactory((r) => new MyRejectedEventHandlerMessageMapper()); var messageMapperRegistry = new MessageMapperRegistry(mapperFactory, null, null, null); messageMapperRegistry.Register(); - - var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); resiliencePipelineRegistry.AddBrighterDefault(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - var subscription = new InMemorySubscription( - new SubscriptionName("test"), - noOfPerformers: 1, - timeOut: TimeSpan.FromMilliseconds(1000), - channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), - channelName: new ChannelName("myChannel"), - messagePumpType: MessagePumpType.Reactor, - routingKey: _routingKey - ); - + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + var subscription = new InMemorySubscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Reactor, routingKey: _routingKey); subscription.DeadLetterRoutingKey = _deadLetterRoutingKey; - - _dispatcher = new Dispatcher( - commandProcessor, - new List { subscription }, - messageMapperRegistry, - requestContextFactory: new InMemoryRequestContextFactory() - ); - + _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); var @event = new MyRejectedEvent(Id.Random()); - var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication{Topic = _routingKey}); + var message = new MyRejectedEventHandlerMessageMapper().MapToMessage(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); - _dispatcher.Receive(); } - [Fact] + [Test] public async Task When_an_event_handler_throw_a_reject_message_exception() { // Wait for the handler to be invoked before stopping - Assert.True(MyRejectedEventHandler.WaitForHandle(), "Handler was not invoked within timeout"); - + await Assert.That(MyRejectedEventHandler.WaitForHandle()).IsTrue(); await _dispatcher.End(); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_deadLetterRoutingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_deadLetterRoutingKey)).IsNotEmpty(); var message = _bus.Dequeue(_deadLetterRoutingKey); var rejectionReason = $"Message rejected reason: {RejectionReason.DeliveryError} Description: {MyRejectedEventHandlerAsync.TestOfRejectionFlow}"; - Assert.Equal(rejectionReason, message.Header.Bag[Message.RejectionReasonHeaderName]); + await Assert.That(message.Header.Bag[Message.RejectionReasonHeaderName]).IsEqualTo(rejectionReason); } - - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs index 5a6f338ded..0dbfb95dd4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -43,56 +40,36 @@ public class MessagePumpEventProcessingDeferMessageActionTests private readonly RoutingKey _routingKey; private readonly Channel _channel; private FakeTimeProvider _timeProvider = new FakeTimeProvider(); - public MessagePumpEventProcessingDeferMessageActionTests() { _routingKey = new RoutingKey(Topic); - SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new Channel( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - var transformPipelineBuilder = new TransformPipelineBuilder(messageMapperRegistry, null); - - var msg = transformPipelineBuilder.BuildWrapPipeline() - .Wrap(new MyEvent(), new RequestContext(), new Publication{Topic = _routingKey}); - + var msg = transformPipelineBuilder.BuildWrapPipeline().Wrap(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }); _bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - //allow requeue to run await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey(Topic)); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked.cs index c06674903b..c91801ad2f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -7,7 +7,6 @@ using Paramore.Brighter.ServiceActivator; using Serilog.Events; using Serilog.Sinks.TestCorrelator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -21,60 +20,40 @@ public class MessagePumpEventProcessingExceptionTests private readonly InternalBus _bus; private readonly FakeTimeProvider _timeProvider = new(); private readonly Channel _channel; - public MessagePumpEventProcessingExceptionTests() { SpyExceptionCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new Channel( - new (Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - var requestContextFactory = new InMemoryRequestContextFactory(); - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, requestContextFactory, _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, requestContextFactory, _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = _requeueCount }; - var transformPipelineBuilder = new TransformPipelineBuilder(messageMapperRegistry, null); - - var msg = transformPipelineBuilder.BuildWrapPipeline() - .Wrap(new MyEvent(), requestContextFactory.Create(), new Publication{Topic = _routingKey}); - + var msg = transformPipelineBuilder.BuildWrapPipeline().Wrap(new MyEvent(), requestContextFactory.Create(), new Publication { Topic = _routingKey }); _bus.Enqueue(msg); - } - [Fact] + [Test] public async Task When_an_event_handler_throws_unhandled_exception_Then_message_is_acked() { using (TestCorrelator.CreateContext()) { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), - new MessageBody("")); + var quitMessage = new Message(new MessageHeader(string.Empty, RoutingKey.Empty, MessageType.MT_QUIT), new MessageBody("")); _channel.Enqueue(quitMessage); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); - + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); var logEvents = TestCorrelator.GetLogEventsFromCurrentContext(); - Assert.Contains(logEvents, x => x.Level == LogEventLevel.Error && x.MessageTemplate.Text == - "MessagePump: Failed to dispatch message {Id} from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); + await Assert.That(logEvents).Contains(x => x.Level == LogEventLevel.Error && x.MessageTemplate.Text == "MessagePump: Failed to dispatch message {Id} from {ChannelName} with {RoutingKey} on thread # {ManagementThreadId}"); } } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved.cs index 9712367054..808494585d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -42,50 +39,34 @@ public class MessagePumpUnacceptableMessageTests private readonly InternalBus _bus; private readonly RoutingKey _routingKey = new("MyTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpUnacceptableMessageTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new Channel(new (Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 }; - var myMessage = JsonSerializer.Serialize(new MyEvent()); - var unacceptableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(myMessage) - ); - + var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); _channel.Enqueue(unacceptableMessage); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Is_Recieved() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(new[] { task }); - - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_dlq.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_dlq.cs index ce34ef27ed..3d37204ca8 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_dlq.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_dlq.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,10 +28,8 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor; - public class MessagePumpUnacceptableMessageDeadLetterChannelTests { private const string Channel = "MyChannel"; @@ -43,54 +39,34 @@ public class MessagePumpUnacceptableMessageDeadLetterChannelTests private readonly RoutingKey _routingKey = new("MyTopic"); private readonly RoutingKey _deadLetterKey = new("MyDeadLetterTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpUnacceptableMessageDeadLetterChannelTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new Channel( - new (Channel), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, deadLetterTopic: _deadLetterKey, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, deadLetterTopic: _deadLetterKey, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 }; - var myMessage = JsonSerializer.Serialize(new MyEvent()); - var unacceptableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(myMessage) - ); - + var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); _channel.Enqueue(unacceptableMessage); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Is_Recieved() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(new[] { task }); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_deadLetterKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_deadLetterKey)).IsNotEmpty(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_imc.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_imc.cs index ed46198f97..a353f0dfa3 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_imc.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_is_recieved_and_there_is_a_imc.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Text.Json; using System.Threading.Tasks; @@ -30,10 +28,8 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor; - public class MessagePumpUnacceptableMessageInvalidMessageChannelTests { private const string Channel = "MyChannel"; @@ -43,54 +39,34 @@ public class MessagePumpUnacceptableMessageInvalidMessageChannelTests private readonly RoutingKey _routingKey = new("MyTopic"); private readonly RoutingKey _invalidMessageKey = new("MyDeadLetterTopic"); private readonly FakeTimeProvider _timeProvider = new(); - public MessagePumpUnacceptableMessageInvalidMessageChannelTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - _channel = new Channel( - new (Channel), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, invalidMessageTopic: _invalidMessageKey, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, invalidMessageTopic: _invalidMessageKey, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = 3 + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3 }; - var myMessage = JsonSerializer.Serialize(new MyEvent()); - var unacceptableMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(myMessage) - ); - + var unacceptableMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(myMessage)); _channel.Enqueue(unacceptableMessage); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Is_Recieved() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(1000); // slopwatch:suppress SW004 - message pump runs on background thread with no sync point - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - await Task.WhenAll(new[] { task }); - - Assert.Empty(_bus.Stream(_routingKey)); - Assert.NotEmpty(_bus.Stream(_invalidMessageKey)); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_bus.Stream(_invalidMessageKey)).IsNotEmpty(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reached.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reached.cs index dd58fea533..4fb03bc13b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reached.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reached.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -16,72 +15,39 @@ public class MessagePumpUnacceptableMessageLimitBreachedTests private readonly InternalBus _bus; private readonly FakeTimeProvider _timeProvider = new(); private readonly RoutingKey _routingKey = new("MyTopic"); - public MessagePumpUnacceptableMessageLimitBreachedTests() { SpyRequeueCommandProcessor commandProcessor = new(); - _bus = new InternalBus(); - - var channel = new Channel( - new(Channel), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 3 - ); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + var channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 3); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel, - timeProvider:_timeProvider) + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), channel, timeProvider: _timeProvider) { - Channel = channel, - TimeOut = TimeSpan.FromMilliseconds(5000), - RequeueCount = 3, - UnacceptableMessageLimit = 3, + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3, UnacceptableMessageLimitWindow = TimeSpan.FromMinutes(1) }; - - var unacceptableMessage1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage3 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - var unacceptableMessage4 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - + var unacceptableMessage1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage3 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + var unacceptableMessage4 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); channel.Enqueue(unacceptableMessage1); channel.Enqueue(unacceptableMessage2); channel.Enqueue(unacceptableMessage3); channel.Enqueue(unacceptableMessage4); - } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Limit_Is_Reached() { var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - await Task.WhenAll(task); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - - Assert.Empty(_bus.Stream(_routingKey)); - - Assert.Equal(MessagePumpStatus.MP_LIMIT_EXCEEDED, _messagePump.Status); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_LIMIT_EXCEEDED); } } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reset.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reset.cs index a0c0b021e7..e4a6230e04 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reset.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_unacceptable_message_limit_is_reset.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions; @@ -6,7 +6,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -23,105 +22,48 @@ public class MessagePumpUnacceptableMessageLimitResetTests private readonly Message _unacceptableMessage3; private readonly Message _unacceptableMessage4; private readonly Message _timeAdvanceMessage; - public MessagePumpUnacceptableMessageLimitResetTests() { _bus = new InternalBus(); - - _channel = new Channel( - new(Channel), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - 10 - ); - + _channel = new Channel(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), 10); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactory( - (type) => new MyAdvanceTimerEventHandler(_timeProvider), - (type) => throw new NotImplementedException() - ); - + var handlerFactory = new SimpleHandlerFactory((type) => new MyAdvanceTimerEventHandler(_timeProvider), (type) => throw new NotImplementedException()); var resiliencePipelineRegistry = new ResiliencePipelineRegistry(); - resiliencePipelineRegistry.AddBrighterDefault(); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyAdvanceTimerEventMessageMapper()), - new SimpleMessageMapperFactoryAsync(_ => throw new NotImplementedException())); + resiliencePipelineRegistry.AddBrighterDefault(); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyAdvanceTimerEventMessageMapper()), new SimpleMessageMapperFactoryAsync(_ => throw new NotImplementedException())); messageMapperRegistry.Register(); - - var commandProcessor = new CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - resiliencePipelineRegistry, - new InMemorySchedulerFactory() - ); - - _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyAdvanceTimerEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel, - timeProvider:_timeProvider) + var commandProcessor = new CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), resiliencePipelineRegistry, new InMemorySchedulerFactory()); + _messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyAdvanceTimerEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel, timeProvider: _timeProvider) { - Channel = _channel, - TimeOut = TimeSpan.FromMilliseconds(5000), - RequeueCount = 3, - UnacceptableMessageLimit = 3, + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + RequeueCount = 3, + UnacceptableMessageLimit = 3, UnacceptableMessageLimitWindow = TimeSpan.FromMinutes(1) }; - - _unacceptableMessage1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage3 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - _unacceptableMessage4 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody("") - ); - - _timeAdvanceMessage = new MyAdvanceTimerEventMessageMapper().MapToMessage( - new MyAdvanceTimerEvent(2), - new Publication - { - Topic = _routingKey - }); - + _unacceptableMessage1 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage2 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage3 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _unacceptableMessage4 = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody("")); + _timeAdvanceMessage = new MyAdvanceTimerEventMessageMapper().MapToMessage(new MyAdvanceTimerEvent(2), new Publication { Topic = _routingKey }); } - [Fact] + [Test] public async Task When_An_Unacceptable_Message_Limit_Is_Reached() { _channel.Enqueue(_unacceptableMessage1); _channel.Enqueue(_unacceptableMessage2); - //force the time forward, whilst in the message loop _channel.Enqueue(_timeAdvanceMessage); - - //will trigger reset of unacceptable message count as window has passed _channel.Enqueue(_unacceptableMessage3); _channel.Enqueue(_unacceptableMessage4); - var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - - _channel.Stop(_routingKey); - await Task.WhenAll(task); - - Assert.Empty(_bus.Stream(_routingKey)); - - Assert.Equal(MessagePumpStatus.MP_STOPPED, _messagePump.Status); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); + await Assert.That(_messagePump.Status).IsEqualTo(MessagePumpStatus.MP_STOPPED); } } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs index 00ef17e270..0c1f108d4b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a__dynamic_message_from_a_channel_pump_out_to_command_processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -14,93 +13,68 @@ public class MessagePumpToCommandProcessorDynamicMappingTests { private const string Channel = "MyChannel"; private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly InternalBus _bus = new (); + private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly Channel _channel; - public MessagePumpToCommandProcessorDynamicMappingTests() { _commandProcessor = new SpyCommandProcessor(); - _channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messagerMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(type => - type switch - { - var t when t == typeof(MyEventMessageMapper) => new MyEventMessageMapper(), - var t when t == typeof(MyOtherEventMessageMapper) => new MyOtherEventMessageMapper(), - _ => throw new ArgumentException($"No mapper registered for type {type.FullName}", nameof(type)) - }), - null); + _channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messagerMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(type => type switch + { + var t when t == typeof(MyEventMessageMapper) => new MyEventMessageMapper(), + var t when t == typeof(MyOtherEventMessageMapper) => new MyOtherEventMessageMapper(), + _ => throw new ArgumentException($"No mapper registered for type {type.FullName}", nameof(type))}), null); messagerMapperRegistry.Register(); messagerMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => - message switch - { - var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myevent") => typeof(MyEvent), - var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myotherevent") => typeof(MyOtherEvent), - _ => throw new ArgumentException($"No type mapping found for message with type {message.Header.Type}", nameof(message)), - }, - messagerMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) - { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => message switch + { + var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myevent") => typeof(MyEvent), + var m when m.Header.Type == new CloudEventsType("io.brighter.paramore.myotherevent") => typeof(MyOtherEvent), + _ => throw new ArgumentException($"No type mapping found for message with type {message.Header.Type}", nameof(message)), + }, messagerMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; } - [Fact] - public void When_Reading_A_MyOtherEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() + [Test] + public async Task When_Reading_A_MyOtherEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() { //arrange var @event = new MyEvent(); //although we send a MyEvent, we will map it dynamically to a MyOtherEvent - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myotherevent") ), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myotherevent")), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); _channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - //act _messagePump.Run(); - //assert - - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); var myOtherEvent = _commandProcessor.Observe(); - Assert.Equal(@event.Id, myOtherEvent.Id); - Assert.Equal(@event.Data, myOtherEvent.Data); + await Assert.That(myOtherEvent.Id).IsEqualTo(@event.Id); + await Assert.That(myOtherEvent.Data).IsEqualTo(@event.Data); } - - [Fact] - public void When_Reading_A_MyEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() + + [Test] + public async Task When_Reading_A_MyEvent_Message_From_A_Channel_Pump_Out_To_Command_Processor() { //arrange var @event = new MyEvent(); //we send a MyEvent, we will map it dynamically to a MyEvent - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myevent") ), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("io.brighter.paramore.myevent")), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); _channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); _channel.Enqueue(quitMessage); - //act _messagePump.Run(); - //assert - - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); var myEvent = _commandProcessor.Observe(); - Assert.Equal(@event.Id, myEvent.Id); - Assert.Equal(@event.Data, myEvent.Data); + await Assert.That(myEvent.Id).IsEqualTo(@event.Id); + await Assert.That(myEvent.Data).IsEqualTo(@event.Data); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor.cs index e68d13165e..22651bd9e2 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_reading_a_message_from_a_channel_pump_out_to_command_processor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -6,7 +6,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -14,49 +13,35 @@ public class MessagePumpToCommandProcessorTests { private const string Channel = "MyChannel"; private readonly RoutingKey _routingKey = new("MyTopic"); - private readonly InternalBus _bus = new (); + private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private readonly IAmAMessagePump _messagePump; private readonly SpyCommandProcessor _commandProcessor; private readonly MyEvent _event; - public MessagePumpToCommandProcessorTests() { _commandProcessor = new SpyCommandProcessor(); - Channel channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messagerMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messagerMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messagerMapperRegistry.Register(); - - _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), - messagerMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) - { Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) }; - + _messagePump = new ServiceActivator.Reactor(_commandProcessor, (message) => typeof(MyEvent), messagerMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) + }; _event = new MyEvent(); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_event, JsonSerialisationOptions.Options)) - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_event, JsonSerialisationOptions.Options))); channel.Enqueue(message); var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); channel.Enqueue(quitMessage); - } - [Fact] - public void When_Reading_A_Message_From_A_Channel_Pump_Out_To_Command_Processor() + [Test] + public async Task When_Reading_A_Message_From_A_Channel_Pump_Out_To_Command_Processor() { _messagePump.Run(); - - Assert.Equal(CommandType.Publish, _commandProcessor.Commands[0]); - Assert.Equal(_event, _commandProcessor.Observe()); + await Assert.That(_commandProcessor.Commands[0]).IsEqualTo(CommandType.Publish); + await Assert.That(_commandProcessor.Observe()).IsEqualTo(_event); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs index aa9a89f7cf..640004336c 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; @@ -7,7 +7,6 @@ using Paramore.Brighter.Testing; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.ServiceActivator; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageDispatch.Reactor { @@ -19,49 +18,33 @@ public class PerformerCanStopTests private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _timeProvider = new(); private readonly Task _performerTask; - public PerformerCanStopTests() { SpyCommandProcessor commandProcessor = new(); - Channel channel = new( - new(Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), - null); + Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - var messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel); + var messagePump = new ServiceActivator.Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel); messagePump.Channel = channel; messagePump.TimeOut = TimeSpan.FromMilliseconds(5000); - var @event = new MyEvent(); - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options)) - ); + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); channel.Enqueue(message); - Performer performer = new(channel, messagePump); _performerTask = performer.Run(); performer.Stop(new RoutingKey(Topic)); - } - + #pragma warning disable xUnit1031 - [Fact] - public void When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() + [Test] + public async Task When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() { _performerTask.Wait(); - - Assert.True(_performerTask.IsCompleted); - Assert.False(_performerTask.IsFaulted); - Assert.False(_performerTask.IsCanceled); - Assert.Empty(_bus.Stream(_routingKey)); + await Assert.That(_performerTask.IsCompleted).IsTrue(); + await Assert.That(_performerTask.IsFaulted).IsFalse(); + await Assert.That(_performerTask.IsCanceled).IsFalse(); + await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } #pragma warning restore xUnit1031 } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_Transform.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_Transform.cs index 5a9aed385f..9e749b2ed4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_Transform.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_Transform.cs @@ -1,43 +1,32 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class MessageUnwrapPathPipelineTests +public class MessageUnwrapPathPipelineTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageUnwrapPathPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Message_Has_A_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Message_Has_A_Transform() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - //assert - Assert.Equal("MySimpleTransform|MyTransformableCommandMessageMapper", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MySimpleTransform|MyTransformableCommandMessageMapper"); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_TransformAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_TransformAsync.cs index 6e0295a556..4e036a5a06 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_TransformAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_A_TransformAsync.cs @@ -1,45 +1,33 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncMessageUnwrapPathPipelineTests +public class AsyncMessageUnwrapPathPipelineTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageUnwrapPathPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Message_Has_A_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Message_Has_A_Transform() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - //assert - Assert.Equal("MySimpleTransformAsync|MyTransformableCommandMessageMapperAsync", TraceFilters().ToString()); - + await Assert.That(TraceFilters().ToString()).IsEqualTo("MySimpleTransformAsync|MyTransformableCommandMessageMapperAsync"); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_Transform.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_Transform.cs index eded1cda11..851a37881e 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_Transform.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_Transform.cs @@ -1,43 +1,32 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class MessageUnwrapPathNoTransformPipelineTests +public class MessageUnwrapPathNoTransformPipelineTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageUnwrapPathNoTransformPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), null); + mapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Message_Has_No_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Message_Has_No_Transform() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - //assert - Assert.Equal("MyVanillaCommandMessageMapper", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyVanillaCommandMessageMapper"); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_TransformAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_TransformAsync.cs index efc330dbc3..3c5494da95 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_TransformAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Message_Has_No_TransformAsync.cs @@ -1,44 +1,33 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncMessageUnwrapPathNoTransformPipelineTests +public class AsyncMessageUnwrapPathNoTransformPipelineTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageUnwrapPathNoTransformPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); - mapperRegistry.RegisterAsync(); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); + mapperRegistry.RegisterAsync(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => null)); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Message_Has_No_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Message_Has_No_Transform() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - //assert - Assert.Equal("MyVanillaCommandMessageMapperAsync", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyVanillaCommandMessageMapperAsync"); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_Transform.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_Transform.cs index 3c7d1c9fa1..d030bc063c 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_Transform.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_Transform.cs @@ -1,38 +1,26 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class MessageWrapPathPipelineTests +public class MessageWrapPathPipelineTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageWrapPathPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null - ); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); + mapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Request_Has_A_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Request_Has_A_Transform() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - //assert - Assert.Equal("MyTransformableCommandMessageMapper|MySimpleTransform", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapper|MySimpleTransform"); } private TransformPipelineTracer TraceFilters() @@ -41,4 +29,4 @@ private TransformPipelineTracer TraceFilters() _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_TransformAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_TransformAsync.cs index 893a36aa12..3ee8191521 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_TransformAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_A_TransformAsync.cs @@ -1,39 +1,27 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncMessageWrapPathPipelineTests +public class AsyncMessageWrapPathPipelineTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageWrapPathPipelineTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync()) - ); - mapperRegistry.RegisterAsync(); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + mapperRegistry.RegisterAsync(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Request_Has_A_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Request_Has_A_Transform() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - //assert - Assert.Equal("MyTransformableCommandMessageMapperAsync|MySimpleTransformAsync", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapperAsync|MySimpleTransformAsync"); } private TransformPipelineTracer TraceFilters() @@ -42,4 +30,4 @@ private TransformPipelineTracer TraceFilters() _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform.cs index 0cb27b1bde..2bb0ca0f8d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform.cs @@ -1,37 +1,26 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class MessageWrapPathPipelineNoTransformTests +public class MessageWrapPathPipelineNoTransformTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageWrapPathPipelineNoTransformTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), null); + mapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Request_Has_No_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Request_Has_No_Transform() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - //assert - Assert.Equal("MyVanillaCommandMessageMapper", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyVanillaCommandMessageMapper"); } private TransformPipelineTracer TraceFilters() @@ -40,4 +29,4 @@ private TransformPipelineTracer TraceFilters() _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform_Async.cs index 607c8110a4..3ff8a7d2d4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_A_Message_Mapper_Map_To_Request_Has_No_Transform_Async.cs @@ -1,38 +1,27 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncMessageWrapPathPipelineNoTransformTests +public class AsyncMessageWrapPathPipelineNoTransformTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageWrapPathPipelineNoTransformTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); - mapperRegistry.RegisterAsync(); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); + mapperRegistry.RegisterAsync(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => null)); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - } - - [Fact] - public void When_A_Message_Mapper_Map_To_Request_Has_No_Transform() + + [Test] + public async Task When_A_Message_Mapper_Map_To_Request_Has_No_Transform() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - //assert - Assert.Equal("MyVanillaCommandMessageMapperAsync", TraceFilters().ToString()); + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyVanillaCommandMessageMapperAsync"); } private TransformPipelineTracer TraceFilters() @@ -41,4 +30,4 @@ private TransformPipelineTracer TraceFilters() _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry.cs index d4c8dc670a..a2b70a57a5 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry.cs @@ -1,25 +1,18 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class TransformPipelineMissingRegistryTests +public class TransformPipelineMissingRegistryTests { - [Fact] - public void When_Creating_A_Pipeline_Builder_Without_A_Registry() + [Test] + public async Task When_Creating_A_Pipeline_Builder_Without_A_Registry() { - //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - - //act - var exception = Catch.Exception(() => new TransformPipelineBuilder(null, messageTransformerFactory)); - - //assert - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - + //arrange + var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); + //act + var exception = Catch.Exception(() => new TransformPipelineBuilder(null, messageTransformerFactory)); + //assert + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry_Async.cs index c5fb4bf80c..7370d23afe 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Pipeline_Builder_Without_A_Registry_Async.cs @@ -1,26 +1,19 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncTransformPipelineMissingRegistryTests +public class AsyncTransformPipelineMissingRegistryTests { - [Fact] - public void When_Creating_A_Pipeline_Builder_Without_A_Registry() + [Test] + public async Task When_Creating_A_Pipeline_Builder_Without_A_Registry() { - //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - - //act - var exception = Catch.Exception(() => new TransformPipelineBuilderAsync(null, messageTransformerFactory, InstrumentationOptions.All)); - - //assert - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - + //arrange + var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); + //act + var exception = Catch.Exception(() => new TransformPipelineBuilderAsync(null, messageTransformerFactory, InstrumentationOptions.All)); + //assert + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory.cs index 1433af116e..bdcce30d03 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory.cs @@ -1,57 +1,45 @@ -using System.Text.Json; +using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class TransformPipelineMissingFactoryWrapTests +public class TransformPipelineMissingFactoryWrapTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public TransformPipelineMissingFactoryWrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyTransformableCommand(); - - _publication = new Publication { Topic = new RoutingKey("MyTransformableCommand") }; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand") + }; _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, null); } - - [Fact] - public void When_Creating_A_Wrap_Without_A_Factory() + + [Test] + public async Task When_Creating_A_Wrap_Without_A_Factory() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - // If no factory we default to just them mapper - Assert.Equal("MyTransformableCommandMessageMapper", TraceFilters().ToString()); - + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapper"); //wrap should just do message mapper - var message = _transformPipeline.Wrap(_myCommand,new RequestContext(), _publication); - + var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); //we won't run a transform - Assert.Equal(false, message.Header.Bag.ContainsKey(MySimpleTransformAsync.HEADER_KEY)); + await Assert.That(message.Header.Bag.ContainsKey(MySimpleTransformAsync.HEADER_KEY)).IsEqualTo(false); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory_Async.cs index 30ac902219..23091fe314 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_A_Wrap_Without_A_Factory_Async.cs @@ -1,59 +1,48 @@ -using System.Text.Json; +using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncTransformPipelineMissingFactoryWrapTests +public class AsyncTransformPipelineMissingFactoryWrapTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public AsyncTransformPipelineMissingFactoryWrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyTransformableCommand(); - - _publication = new Publication{Topic = new RoutingKey("MyTransformableCommand"), RequestType= typeof(MyTransformableCommand)}; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand"), + RequestType = typeof(MyTransformableCommand) + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, null, InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Creating_A_Wrap_Without_A_Factory() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); - // If no factory we default to just them mapper - Assert.Equal("MyTransformableCommandMessageMapperAsync", TraceFilters().ToString()); - + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapperAsync"); //wrap should just do message mapper var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); //we won't run a transform - Assert.Equal(false, message.Header.Bag.ContainsKey(MySimpleTransformAsync.HEADER_KEY)); + await Assert.That(message.Header.Bag.ContainsKey(MySimpleTransformAsync.HEADER_KEY)).IsEqualTo(false); } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory.cs index 289145caee..f44adab01d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory.cs @@ -1,58 +1,41 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class TransformPipelineMissingFactoryUnwrapTests +public class TransformPipelineMissingFactoryUnwrapTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Message _message; - public TransformPipelineMissingFactoryUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyTransformableCommand(); - - _message = new Message( - new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, null); } - - [Fact] - public void When_Creating_An_Unwrap_Without_A_Factory() + + [Test] + public async Task When_Creating_An_Unwrap_Without_A_Factory() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - // If no factory we default to just them mapper - Assert.Equal("MyTransformableCommandMessageMapper", TraceFilters().ToString()); - + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapper"); //wrap should just do message mapper var request = _transformPipeline.Unwrap(_message, new RequestContext()); - //assert request.Value = _myCommand.Value; } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory_Async.cs index 59cc0e0fdd..efb0a302eb 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Creating_An_Unwrap_Without_A_Factory_Async.cs @@ -1,60 +1,43 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - - public class AsyncTransformPipelineMissingFactoryUnwrapTests +public class AsyncTransformPipelineMissingFactoryUnwrapTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Message _message; - public AsyncTransformPipelineMissingFactoryUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyTransformableCommand(); - - _message = new Message( - new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, null, InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Creating_An_Unwrap_Without_A_Factory() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); - // If no factory we default to just them mapper - Assert.Equal("MyTransformableCommandMessageMapperAsync", TraceFilters().ToString()); - + await Assert.That(TraceFilters().ToString()).IsEqualTo("MyTransformableCommandMessageMapperAsync"); //wrap should just do message mapper var request = await _transformPipeline.UnwrapAsync(_message, new RequestContext()); - //assert request.Value = _myCommand.Value; } - + private TransformPipelineTracer TraceFilters() { var pipelineTracer = new TransformPipelineTracer(); _transformPipeline.DescribePath(pipelineTracer); return pipelineTracer; } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs index 4a24287171..485cf434b4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs @@ -1,77 +1,94 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using Paramore.Brighter.JsonConverters; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation { - public class BagHelper + public class BagHelper { //We use a Dictionary for a header. System.Json.Text will serialize this as expected //but when deserializing it will return a a Dictionary where the object is a JsonElement //not a primitive/reference type. //The goal here is to convert back - [Fact] - public void When_deserializing_a_message_header_bag() - { - //Arrange - var header = new MessageHeader( - messageId: Guid.NewGuid().ToString(), - topic: new RoutingKey("MyTopic"), - messageType: MessageType.MT_EVENT, - timeStamp: DateTime.UtcNow, - correlationId: Guid.NewGuid().ToString() - ); - - var myGuid = Guid.NewGuid(); - var expectedBag = new Dictionary - { - {"myStringKey", "A string value"}, - {"myDateTimeKey", DateTime.UtcNow}, - {"myIntegerKey", 123}, - {"myDecimalKey", 123.56}, - {"myBooleanKeyTrue", true}, - {"myBooleanKey", false}, - {"myGuid", myGuid}, - {"myArrayKey", new int[]{1,2,3,4,}} - }; - - foreach (var key in expectedBag.Keys) - { + [Test] + public async Task When_deserializing_a_message_header_bag() + { + //Arrange + var header = new MessageHeader(messageId: Guid.NewGuid().ToString(), topic: new RoutingKey("MyTopic"), messageType: MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, correlationId: Guid.NewGuid().ToString()); + var myGuid = Guid.NewGuid(); + var expectedBag = new Dictionary + { + { + "myStringKey", + "A string value" + }, + { + "myDateTimeKey", + DateTime.UtcNow + }, + { + "myIntegerKey", + 123 + }, + { + "myDecimalKey", + 123.56 + }, + { + "myBooleanKeyTrue", + true + }, + { + "myBooleanKey", + false + }, + { + "myGuid", + myGuid + }, + { + "myArrayKey", + new int[] + { + 1, + 2, + 3, + 4, + } + } + }; + foreach (var key in expectedBag.Keys) + { header.Bag.Add(key, expectedBag[key]); - } + } - var json = JsonSerializer.Serialize(header, JsonSerialisationOptions.Options); - - //Act - MessageHeader deserializedHeader = JsonSerializer.Deserialize(json, JsonSerialisationOptions.Options); - //fix the headers to pass - - //Assert - foreach (var key in expectedBag.Keys) - { - if (key != "myArrayKey") - { - var expected = expectedBag[key]; - var actual = deserializedHeader!.Bag[key]; - - Assert.Equivalent(expected, actual); - } - if (key == "myArrayKey") - { - var expectedVals = (int[])expectedBag[key]; - var providedVals = (List)deserializedHeader.Bag[key]; - - for (int i = 0; i < 4; i++) - { - int actual = Convert.ToInt32(providedVals[i]); - int expected = expectedVals[i]; - Assert.Equal(expected, actual); - } - } - } + var json = JsonSerializer.Serialize(header, JsonSerialisationOptions.Options); + //Act + MessageHeader deserializedHeader = JsonSerializer.Deserialize(json, JsonSerialisationOptions.Options); + //fix the headers to pass + //Assert + foreach (var key in expectedBag.Keys) + { + if (key != "myArrayKey") + { + var expected = expectedBag[key]; + var actual = deserializedHeader!.Bag[key]; + await Assert.That(actual).IsEquivalentTo(expected); + } - } + if (key == "myArrayKey") + { + var expectedVals = (int[])expectedBag[key]; + var providedVals = (List)deserializedHeader.Bag[key]; + for (int i = 0; i < 4; i++) + { + int actual = Convert.ToInt32(providedVals[i]); + int expected = expectedVals[i]; + await Assert.That(actual).IsEqualTo(expected); + } + } + } + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs index 81e2666cab..c42c07fab3 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net; using System.Net.Mime; @@ -6,250 +6,206 @@ using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.JsonConverters; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - -public class MessageValueSerializationTests +public class MessageValueSerializationTests { - - - [Fact] - public void When_I_serialise_a_vanilla_payload_as_a_utf8_string() + [Test] + public async Task When_I_serialise_a_vanilla_payload_as_a_utf8_string() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); var contentType = new ContentType(MediaTypeNames.Application.Json); - var serBody = new MessageBody(body, contentType, characterEncoding: CharacterEncoding.UTF8); - //act var serBodyValue = serBody.Value; - var desBody = new MessageBody(serBodyValue, contentType, characterEncoding: CharacterEncoding.UTF8); - //assert - Assert.Equal(CharacterEncoding.UTF8, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.UTF8, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - Assert.Equal(desBody.Value, serBody.Value); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Value).IsEqualTo(desBody.Value); } - - [Fact] - public void When_I_serialise_a_vanilla_payload_as_a_base64_string() + + [Test] + public async Task When_I_serialise_a_vanilla_payload_as_a_base64_string() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); var contentType = new ContentType(MediaTypeNames.Application.Json); - var serBody = new MessageBody(body, contentType, characterEncoding: CharacterEncoding.UTF8); - //act var serBodyValue = serBody.ToCharacterEncodedString(CharacterEncoding.Base64); - var desBody = new MessageBody(serBodyValue, contentType, characterEncoding: CharacterEncoding.Base64); - //assert - Assert.Equal(CharacterEncoding.UTF8, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.Base64, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - Assert.Equal(desBody.ToCharacterEncodedString(CharacterEncoding.UTF8), serBody.Value); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Value).IsEqualTo(desBody.ToCharacterEncodedString(CharacterEncoding.UTF8)); } - - [Fact] - public void When_I_serialise_a_raw_payload_as_binary() + + [Test] + public async Task When_I_serialise_a_raw_payload_as_binary() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); var contentType = new ContentType(MediaTypeNames.Application.Octet); - var serBody = new MessageBody(Encoding.UTF8.GetBytes(body), contentType, characterEncoding: CharacterEncoding.Raw); - //act var desBody = new MessageBody(serBody.Bytes, contentType, characterEncoding: CharacterEncoding.Raw); - //assert - Assert.Equal(CharacterEncoding.Raw, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.Raw, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); } - - [Fact] - public void When_I_serialise_a_raw_payload_as_a_base64_string() + + [Test] + public async Task When_I_serialise_a_raw_payload_as_a_base64_string() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); var contentType = new ContentType(MediaTypeNames.Application.Octet); - var serBody = new MessageBody(Encoding.UTF8.GetBytes(body), contentType, characterEncoding: CharacterEncoding.Raw); - //act //Ask for the bytes as a base 64 string - var bodyAsString = serBody.ToCharacterEncodedString(CharacterEncoding.Base64); - + var bodyAsString = serBody.ToCharacterEncodedString(CharacterEncoding.Base64); var desBody = new MessageBody(serBody.Bytes, contentType, characterEncoding: CharacterEncoding.Base64); - //assert - Assert.Equal(CharacterEncoding.Raw, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.Base64, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); } - - [Fact] - public void When_I_try_to_serialise_a_raw_payload_as_a_string() + + [Test] + public async Task When_I_try_to_serialise_a_raw_payload_as_a_string() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); var contentType = new ContentType(MediaTypeNames.Application.Octet); - var serBody = new MessageBody(Encoding.UTF8.GetBytes(body), contentType, characterEncoding: CharacterEncoding.Raw); - //act //If we are raw, we get the bytes as a base64 encoded string var bodyAsString = serBody.Value; - var desBody = new MessageBody(bodyAsString, contentType, characterEncoding: CharacterEncoding.Base64); - //assert - Assert.Equal(CharacterEncoding.Raw, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.Base64, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); } - - - [Fact] - public void When_I_serialise_a_kafka_payload_as_binary() + + [Test] + public async Task When_I_serialise_a_kafka_payload_as_binary() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var id = 1234; //Emulate Kafka SerDes that puts header bytes into the payload var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); - var magicByte = new byte[] { 0 }; + var magicByte = new byte[] + { + 0 + }; var schemaId = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(id)); var payload = magicByte.Concat(schemaId).ToArray(); var serdesBody = payload.Concat(Encoding.ASCII.GetBytes(body)).ToArray(); var contentType = new ContentType(MediaTypeNames.Application.Octet); - var serBody = new MessageBody(serdesBody, contentType, characterEncoding: CharacterEncoding.Raw); - //act //Ask for the value back as a Base64 encoded string var bodyAsString = serBody.ToCharacterEncodedString(CharacterEncoding.Base64); - //will be base64 encoded when read back var desBody = new MessageBody(bodyAsString, contentType, characterEncoding: CharacterEncoding.Base64); var retrievedSchemaId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(desBody.Bytes.Skip(1).Take(4).ToArray())); - //assert - Assert.Equal(CharacterEncoding.Raw, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.Base64, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - Assert.Equal(id, retrievedSchemaId); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(retrievedSchemaId).IsEqualTo(id); } - - [Fact] - public void When_I_serialise_a_utf8_kafka_payload_as_bytes() + + [Test] + public async Task When_I_serialise_a_utf8_kafka_payload_as_bytes() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var id = 1234; //Emulate Kafka SerDes that puts header bytes into the payload var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); - var magicByte = new byte[] { 0 }; + var magicByte = new byte[] + { + 0 + }; var schemaId = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(id)); var payload = magicByte.Concat(schemaId).ToArray(); var serdesBody = payload.Concat(Encoding.ASCII.GetBytes(body)).ToArray(); var contentType = new ContentType(MediaTypeNames.Application.Json); - var serBody = new MessageBody(serdesBody, contentType, characterEncoding: CharacterEncoding.UTF8); - //act - var bodyAsBytes = serBody.Bytes; //Transfer as bytes - + var bodyAsBytes = serBody.Bytes; //Transfer as bytes var desBody = new MessageBody(bodyAsBytes, contentType, characterEncoding: CharacterEncoding.UTF8); var retrievedSchemaId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(desBody.Bytes.Skip(1).Take(4).ToArray())); - //assert - Assert.Equal(CharacterEncoding.UTF8, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.UTF8, desBody.CharacterEncoding); - Assert.Equal(desBody.Bytes, serBody.Bytes); - Assert.Equal(desBody.Value, serBody.Value); - Assert.Equal(id, retrievedSchemaId); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Value).IsEqualTo(desBody.Value); + await Assert.That(retrievedSchemaId).IsEqualTo(id); } - - [Fact] - public void When_I_try_to_serialise_a_utf8_kafka_payload_as_a_utf8_string() + + [Test] + public async Task When_I_try_to_serialise_a_utf8_kafka_payload_as_a_utf8_string() { //arrange var request = new MyTransformableCommand { Value = "Hello World" }; - var id = 1234; //Emulate Kafka SerDes that puts header bytes into the payload var body = JsonSerializer.Serialize(request, JsonSerialisationOptions.Options); - var magicByte = new byte[] { 0 }; + var magicByte = new byte[] + { + 0 + }; var schemaId = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(id)); var payload = magicByte.Concat(schemaId).ToArray(); var serdesBody = payload.Concat(Encoding.ASCII.GetBytes(body)).ToArray(); var contentType = new ContentType(MediaTypeNames.Application.Json); - var serBody = new MessageBody(serdesBody, contentType, characterEncoding: CharacterEncoding.UTF8); - //act - var bodyAsBytes = serBody.Value; //Transfer as utf8 string fails for Kafka - + var bodyAsBytes = serBody.Value; //Transfer as utf8 string fails for Kafka var desBody = new MessageBody(bodyAsBytes, contentType, characterEncoding: CharacterEncoding.UTF8); var retrievedSchemaId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(desBody.Bytes.Skip(1).Take(4).ToArray())); - //assert - Assert.Equal(CharacterEncoding.UTF8, serBody.CharacterEncoding); - Assert.Equal(CharacterEncoding.UTF8, desBody.CharacterEncoding); - + await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); + await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); //Note the issue here, that the UTF conversion means that we do not get back the same bytes - Assert.NotEqual(desBody.Bytes, serBody.Bytes); - + await Assert.That(serBody.Bytes).IsNotEqualTo(desBody.Bytes); } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper.cs index 67227ff94a..2d7c50c2ea 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper.cs @@ -1,49 +1,32 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageUnwrapRequestTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly Message _message; - public MessageUnwrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null - ); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - _message = new Message( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Unwrapping_A_Message_Mapper() + + [Test] + public async Task When_Unwrapping_A_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var request = _transformPipeline.Unwrap(_message, new RequestContext()); - //assert - Assert.Equal(MySimpleTransformAsync.TRANSFORM_VALUE, request.Value); + await Assert.That(request.Value).IsEqualTo(MySimpleTransformAsync.TRANSFORM_VALUE); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_MapperAsync.cs index f8de6a010e..aa9ab73ae4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_MapperAsync.cs @@ -1,51 +1,34 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageUnwrapRequestTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly Message _message; - public AsyncMessageUnwrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync()) - ); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - - _message = new Message( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] + + [Test] public async Task When_Unwrapping_A_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var request = await _transformPipeline.UnwrapAsync(_message, new RequestContext()); - //assert - Assert.Equal(MySimpleTransformAsync.TRANSFORM_VALUE, request.Value); + await Assert.That(request.Value).IsEqualTo(MySimpleTransformAsync.TRANSFORM_VALUE); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs index 330012e95e..5c060ce376 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs @@ -1,45 +1,30 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageUnwrapRequestMissingTransformTests { private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageUnwrapRequestMissingTransformTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - Message message = new( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + Message message = new(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory() + + [Test] + public async Task When_Unwrapping_A_Message_Mapper_But_Not_In_Transform_Factory() { //act - var exception = Catch.Exception(() => _pipelineBuilder.BuildUnwrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); + var exception = Catch.Exception(() => _pipelineBuilder.BuildUnwrapPipeline()); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_With_Parameters.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_With_Parameters.cs index 459e967a46..5433599c68 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_With_Parameters.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Message_Mapper_With_Parameters.cs @@ -1,46 +1,32 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageUnwrapRequestWithAttributesTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly Message _message; - public MessageUnwrapRequestWithAttributesTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyParameterizedTransformMessageMapper()), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyParameterizedTransformMessageMapper()), null); + mapperRegistry.Register(); var myCommand = new MyTransformableCommand(); myCommand.Value = "Hello World"; - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MyParameterizedTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - _message = new Message( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); + _message = new Message(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); } - - [Fact] - public void When_Wrapping_A_Message_Mapper_With_Attributes() + + [Test] + public async Task When_Wrapping_A_Message_Mapper_With_Attributes() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var request = _transformPipeline.Unwrap(_message, new RequestContext()); - //assert - Assert.Equal("I am a parameterized template: Hello World", request.Value); + await Assert.That(request.Value).IsEqualTo("I am a parameterized template: Hello World"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_Mapper.cs index 893c24e722..3a5fcdbc19 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_Mapper.cs @@ -1,49 +1,33 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class VanillaMessageUnwrapRequestTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Message _message; - public VanillaMessageUnwrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - _message = new Message( - new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Unwrapping_A_Vanilla_Message_Mapper() + + [Test] + public async Task When_Unwrapping_A_Vanilla_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var request = _transformPipeline.Unwrap(_message, new RequestContext()); - //assert request.Value = _myCommand.Value; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_MapperAsync.cs index 80ed742308..3839373aa3 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_A_Vanilla_Message_MapperAsync.cs @@ -1,51 +1,35 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncVanillaMessageUnwrapRequestTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Message _message; - public AsyncVanillaMessageUnwrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => null)); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - - _message = new Message( - new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + _message = new Message(new MessageHeader(_myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); _message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] + + [Test] public async Task When_Unwrapping_A_Vanilla_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline(); var request = await _transformPipeline.UnwrapAsync(_message, new RequestContext()); - //assert request.Value = _myCommand.Value; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null.cs index 17f27c7d9a..fc884aeeb5 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null.cs @@ -1,47 +1,32 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageUnwrapRequestFailingMapperFactoryTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageUnwrapRequestFailingMapperFactoryTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null), null); mapperRegistry.Register(); - MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - Message message = new( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + Message message = new(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Wrapping_But_Factory_Fails() + + [Test] + public async Task When_Wrapping_But_Factory_Fails() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null_Async.cs index 05a1360bda..e491ab8835 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_Factory_Returns_Null_Async.cs @@ -1,49 +1,33 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageUnwrapRequestFailingMapperFactoryTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageUnwrapRequestFailingMapperFactoryTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => null) - ); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => null)); mapperRegistry.RegisterAsync(); - MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - - Message message = new( - new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + Message message = new(new MessageHeader(myCommand.Id, new("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Wrapping_But_Factory_Fails() + + [Test] + public async Task When_Wrapping_But_Factory_Fails() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_Mapper.cs index 95f119c95e..673deb06ec 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_Mapper.cs @@ -1,46 +1,31 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageUnwrapRequestMissingMapperTests { private UnwrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageUnwrapRequestMissingMapperTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); - - Message message = new( - new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + Message message = new(new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Wrapping_But_No_Registered_Mapper() + + [Test] + public async Task When_Wrapping_But_No_Registered_Mapper() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_MapperAsync.cs index 47557cd3f6..e0ef145d90 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Unwrapping_But_No_Registered_MapperAsync.cs @@ -1,47 +1,32 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageUnwrapRequestMissingMapperTests { private UnwrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageUnwrapRequestMissingMapperTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); MyTransformableCommand myCommand = new(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); - - Message message = new( - new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), - new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General))) - ); - + Message message = new(new MessageHeader(myCommand.Id, new RoutingKey("transform.event"), MessageType.MT_COMMAND, timeStamp: DateTime.UtcNow), new MessageBody(JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)))); message.Header.Bag[MySimpleTransformAsync.HEADER_KEY] = MySimpleTransformAsync.TRANSFORM_VALUE; } - - [Fact] - public void When_Wrapping_But_No_Registered_Mapper() + + [Test] + public async Task When_Wrapping_But_No_Registered_Mapper() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildUnwrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper.cs index 0593f1e3d6..3708ac3bbb 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper.cs @@ -1,44 +1,35 @@ -using System.Text.Json; +using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageWrapRequestTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public MessageWrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); + mapperRegistry.Register(); _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MySimpleTransform())); - - _publication = new Publication { Topic = new RoutingKey("MyTransformableCommand") }; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand") + }; _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - - [Fact] - public void When_Wrapping_A_Message_Mapper() + + [Test] + public async Task When_Wrapping_A_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - Assert.Equal(MySimpleTransformAsync.TRANSFORM_VALUE, message.Header.Bag[MySimpleTransformAsync.HEADER_KEY]); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); + await Assert.That(message.Header.Bag[MySimpleTransformAsync.HEADER_KEY]).IsEqualTo(MySimpleTransformAsync.TRANSFORM_VALUE); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_MapperAsync.cs index 39a5f1a090..376e150cab 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_MapperAsync.cs @@ -1,46 +1,38 @@ -using System.Text.Json; +using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageWrapRequestTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public AsyncMessageWrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); - mapperRegistry.RegisterAsync(); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + mapperRegistry.RegisterAsync(); _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - - _publication = new Publication{Topic = new RoutingKey("MyTransformableCommand"), RequestType= typeof(MyTransformableCommand)}; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand"), + RequestType = typeof(MyTransformableCommand) + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Wrapping_A_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - Assert.Equal(MySimpleTransformAsync.TRANSFORM_VALUE, message.Header.Bag[MySimpleTransformAsync.HEADER_KEY]); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); + await Assert.That(message.Header.Bag[MySimpleTransformAsync.HEADER_KEY]).IsEqualTo(MySimpleTransformAsync.TRANSFORM_VALUE); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs index 4598f3707e..cd3118d543 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory.cs @@ -1,35 +1,25 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageWrapRequestMissingTransformTests { private readonly TransformPipelineBuilder _pipelineBuilder; - public MessageWrapRequestMissingTransformTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - - [Fact] - public void When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory() + + [Test] + public async Task When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory() { //act var exception = Catch.Exception(() => _pipelineBuilder.BuildWrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory_Async.cs index da12d72cee..d663a43842 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory_Async.cs @@ -1,36 +1,26 @@ -using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; +using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageWrapRequestMissingTransformTests { private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageWrapRequestMissingTransformTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.Register(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => null)); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] - public void When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory() + + [Test] + public async Task When_Wrapping_A_Message_Mapper_But_Not_In_Transform_Factory() { //act var exception = Catch.Exception(() => _pipelineBuilder.BuildWrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters.cs index 594815e060..dbbc9796cc 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters.cs @@ -1,45 +1,35 @@ -using System.Text.Json; +using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageWrapRequestWithAttributesTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public MessageWrapRequestWithAttributesTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyParameterizedTransformMessageMapper()), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyParameterizedTransformMessageMapper()), null); + mapperRegistry.Register(); _myCommand = new MyTransformableCommand(); - - _publication = new Publication { Topic = new RoutingKey("transform.event") }; - + _publication = new Publication + { + Topic = new RoutingKey("transform.event") + }; var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => new MyParameterizedTransform())); - _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - - [Fact] - public void When_Wrapping_A_Message_Mapper_With_Attributes() + + [Test] + public async Task When_Wrapping_A_Message_Mapper_With_Attributes() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - Assert.Equal("I am a format indicator {0}", message.Header.Bag[MyParameterizedTransformAsync.HEADER_KEY]); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); + await Assert.That(message.Header.Bag[MyParameterizedTransformAsync.HEADER_KEY]).IsEqualTo("I am a format indicator {0}"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters_Async.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters_Async.cs index 0c40c7fd36..d8666b7b34 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Message_Mapper_With_Parameters_Async.cs @@ -1,50 +1,38 @@ -using System.Text.Json; +using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageWrapRequestWithAttributesTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public AsyncMessageWrapRequestWithAttributesTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyParameterizedTransformMessageMapperAsync()) - ); - mapperRegistry.RegisterAsync(); - + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyParameterizedTransformMessageMapperAsync())); + mapperRegistry.RegisterAsync(); _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MyParameterizedTransformAsync())); - _publication = new Publication { - Topic = new RoutingKey("MyTransformableCommand"), RequestType = typeof(MyTransformableCommand) + Topic = new RoutingKey("MyTransformableCommand"), + RequestType = typeof(MyTransformableCommand) }; - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Wrapping_A_Message_Mapper_With_Attributes() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); - Assert.Equal("I am a format indicator {0}", message.Header.Bag[MyParameterizedTransformAsync.HEADER_KEY]); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); + await Assert.That(message.Header.Bag[MyParameterizedTransformAsync.HEADER_KEY]).IsEqualTo("I am a format indicator {0}"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_Mapper.cs index 28af2798a2..c60160bbfa 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_Mapper.cs @@ -1,43 +1,34 @@ -using System.Text.Json; +using System.Text.Json; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class VanillaMessageWrapRequestTests { private WrapPipeline _transformPipeline; private readonly TransformPipelineBuilder _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public VanillaMessageWrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyVanillaCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactory((_ => null)); - - _publication = new Publication { Topic = new RoutingKey("MyTransformableCommand") }; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand") + }; _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - - [Fact] - public void When_Wrapping_A_Vanilla_Message_Mapper() + + [Test] + public async Task When_Wrapping_A_Vanilla_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_MapperAsync.cs index 218f11d241..c1527b8a92 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_A_Vanilla_Message_MapperAsync.cs @@ -1,45 +1,37 @@ -using System.Text.Json; +using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncVanillaMessageWrapRequestTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; private readonly MyTransformableCommand _myCommand; private readonly Publication _publication; - public AsyncVanillaMessageWrapRequestTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyVanillaCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyTransformableCommand(); - var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => null)); - - _publication = new Publication{Topic = new RoutingKey("MyTransformableCommand"), RequestType = typeof(MyTransformableCommand)}; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand"), + RequestType = typeof(MyTransformableCommand) + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Wrapping_A_Vanilla_Message_Mapper() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); - //assert - Assert.Equal(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString(), message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(JsonSerializer.Serialize(_myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)).ToString()); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_Mapper.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_Mapper.cs index 5ae561163b..ba4e6744e2 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_Mapper.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_Mapper.cs @@ -1,38 +1,29 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageWrapRequestMissingMapperTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public MessageWrapRequestMissingMapperTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null), null); + mapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] - public void When_Wrapping_But_No_Registered_Mapper() + + [Test] + public async Task When_Wrapping_But_No_Registered_Mapper() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildWrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_MapperAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_MapperAsync.cs index 12df00937a..698f708678 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_MapperAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_But_No_Registered_MapperAsync.cs @@ -1,38 +1,29 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageWrapRequestMissingMapperTests { private WrapPipelineAsync _transformPipeline; private readonly TransformPipelineBuilderAsync _pipelineBuilder; - public AsyncMessageWrapRequestMissingMapperTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null), - null); - mapperRegistry.Register(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null), null); + mapperRegistry.Register(); var messageTransformerFactory = new SimpleMessageTransformerFactoryAsync((_ => new MySimpleTransformAsync())); - _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - - [Fact] - public void When_Wrapping_But_No_Registered_Mapper() + + [Test] + public async Task When_Wrapping_But_No_Registered_Mapper() { //act var exception = Catch.Exception(() => _transformPipeline = _pipelineBuilder.BuildWrapPipeline()); - Assert.NotNull(exception); - Assert.True((exception) is ConfigurationException); - Assert.True((exception.InnerException) is InvalidOperationException); + await Assert.That(exception).IsNotNull(); + await Assert.That((exception) is ConfigurationException).IsTrue(); + await Assert.That((exception.InnerException) is InvalidOperationException).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_Pipeline.cs index 31b87e6cc3..e1cecd9432 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_Pipeline.cs @@ -1,9 +1,7 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class MessageWrapCleanupTests { private WrapPipeline _transformPipeline; @@ -11,38 +9,31 @@ public class MessageWrapCleanupTests private readonly MyTransformableCommand _myCommand; public static string s_released; private readonly Publication _publication; - public MessageWrapCleanupTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), - null); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyTransformableCommandMessageMapper()), null); mapperRegistry.Register(); - _myCommand = new MyTransformableCommand(); - - _publication = new Publication { Topic = new RoutingKey("MyTransformableCommand") }; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand") + }; _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, new MyReleaseTrackingTransformFactory()); } - - [Fact] - public void When_Wrapping_Clean_Up_The_Pipeline() + + [Test] + public async Task When_Wrapping_Clean_Up_The_Pipeline() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); _transformPipeline.Dispose(); - //assert - Assert.Equal("|MySimpleTransform", s_released); - + await Assert.That(s_released).IsEqualTo("|MySimpleTransform"); } - - private sealed class MyReleaseTrackingTransformFactory : IAmAMessageTransformerFactory + + private sealed class MyReleaseTrackingTransformFactory : Paramore.Brighter.IAmAMessageTransformerFactory { public IAmAMessageTransform Create(Type transformerType) { @@ -53,9 +44,7 @@ public void Release(IAmAMessageTransform transformer) { var disposable = transformer as IDisposable; disposable?.Dispose(); - s_released += "|" + transformer.GetType().Name; } } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_PipelineAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_PipelineAsync.cs index 951ed83022..414ba04d64 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_PipelineAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Wrapping_Clean_Up_The_PipelineAsync.cs @@ -1,11 +1,9 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.MessageSerialisation.Test_Doubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessageSerialisation; - public class AsyncMessageWrapCleanupTests { private WrapPipelineAsync _transformPipeline; @@ -13,38 +11,32 @@ public class AsyncMessageWrapCleanupTests private readonly MyTransformableCommand _myCommand; public static string s_released; private readonly Publication _publication; - public AsyncMessageWrapCleanupTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); + var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyTransformableCommandMessageMapperAsync())); mapperRegistry.RegisterAsync(); - _myCommand = new MyTransformableCommand(); - - _publication = new Publication{Topic = new RoutingKey("MyTransformableCommand"), RequestType= typeof(MyTransformableCommand)}; - + _publication = new Publication + { + Topic = new RoutingKey("MyTransformableCommand"), + RequestType = typeof(MyTransformableCommand) + }; _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, new MyReleaseTrackingTransformFactoryAsync(), InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Wrapping_Clean_Up_The_Pipeline() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); _transformPipeline.Dispose(); - //assert - Assert.Equal("|MySimpleTransformAsync", s_released); - + await Assert.That(s_released).IsEqualTo("|MySimpleTransformAsync"); } - - private sealed class MyReleaseTrackingTransformFactoryAsync : IAmAMessageTransformerFactoryAsync + + private sealed class MyReleaseTrackingTransformFactoryAsync : Paramore.Brighter.IAmAMessageTransformerFactoryAsync { public IAmAMessageTransformAsync Create(Type transformerType) { @@ -55,9 +47,7 @@ public void Release(IAmAMessageTransformAsync transformer) { var disposable = transformer as IDisposable; disposable?.Dispose(); - s_released += "|" + transformer.GetType().Name; } } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_A_Stop_Message_Is_Added_To_A_Channel.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_A_Stop_Message_Is_Added_To_A_Channel.cs index ac6a48a043..6cdfa1efc9 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_A_Stop_Message_Is_Added_To_A_Channel.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_A_Stop_Message_Is_Added_To_A_Channel.cs @@ -19,11 +19,8 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -33,30 +30,22 @@ public class ChannelStopTests private const string ChannelName = "myChannel"; private readonly IAmAChannelSync _channel; private readonly InternalBus _bus; - public ChannelStopTests() { _bus = new InternalBus(); - IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(_routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)); - - _channel = new Channel(new(ChannelName),_routingKey, gateway); - - Message sentMessage = new( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("a test body")); - + IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(_routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)); + _channel = new Channel(new(ChannelName), _routingKey, gateway); + Message sentMessage = new(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("a test body")); _bus.Enqueue(sentMessage); - _channel.Stop(_routingKey); } - [Fact] - public void When_A_Stop_Message_Is_Added_To_A_Channel() + [Test] + public async Task When_A_Stop_Message_Is_Added_To_A_Channel() { var stopMessage = _channel.Receive(TimeSpan.FromMilliseconds(1000)); - Assert.Equal(MessageType.MT_QUIT, stopMessage.Header.MessageType); - - Assert.Single(_bus.Stream(new RoutingKey(_routingKey))); + await Assert.That(stopMessage.Header.MessageType).IsEqualTo(MessageType.MT_QUIT); + await Assert.That(_bus.Stream(new RoutingKey(_routingKey))).HasSingleItem(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Acknowledge_Is_Called_On_A_Channel.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Acknowledge_Is_Called_On_A_Channel.cs index 57f2e2547d..493ecb6fe5 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Acknowledge_Is_Called_On_A_Channel.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Acknowledge_Is_Called_On_A_Channel.cs @@ -19,12 +19,9 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -35,28 +32,20 @@ public class ChannelAcknowledgeTests private readonly FakeTimeProvider _fakeTimeProvider = new(); private readonly RoutingKey Topic = new("myTopic"); private const string ChannelName = "myChannel"; - public ChannelAcknowledgeTests() { - IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(new RoutingKey(Topic), _bus, _fakeTimeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); - - _channel = new Channel(new (ChannelName), new(Topic), gateway); - - var sentMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), Topic, MessageType.MT_EVENT), - new MessageBody("a test body")); - + IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(new RoutingKey(Topic), _bus, _fakeTimeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); + _channel = new Channel(new(ChannelName), new(Topic), gateway); + var sentMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), Topic, MessageType.MT_EVENT), new MessageBody("a test body")); _bus.Enqueue(sentMessage); } - [Fact] - public void When_Acknowledge_Is_Called_On_A_Channel_Should_Be_Removed() + [Test] + public async Task When_Acknowledge_Is_Called_On_A_Channel_Should_Be_Removed() { var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(1000)); _channel.Acknowledge(receivedMessage); - _fakeTimeProvider.Advance(TimeSpan.FromSeconds(2)); //allow for message to timeout if not acked - } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs index fb8ed6af3b..6770d7531b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs @@ -1,16 +1,13 @@ -using System.Linq; +using System.Linq; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway; - public class CombinedProducerRegistryTests { - [Fact] - public void When_constructing_a_combined_producer_registry() + [Test] + public async Task When_constructing_a_combined_producer_registry() { var bus = new InternalBus(); - var firstProducers = new[] { new Publication @@ -25,17 +22,14 @@ public void When_constructing_a_combined_producer_registry() Topic = new RoutingKey("SecondTopic") } }; - var firstProducerFactory = new InMemoryMessageProducerFactory(bus, firstProducers, InstrumentationOptions.All); var secondProducerFactory = new InMemoryMessageProducerFactory(bus, secondProducers, InstrumentationOptions.All); - var combinedRegistryFactory = new CombinedProducerRegistryFactory(firstProducerFactory, secondProducerFactory); var producerRegistry = combinedRegistryFactory.Create(); - // Producer registry should contain producers for both topics var producers = producerRegistry.Producers.ToList(); - Assert.Equal(2, producers.Count); - Assert.Equal(1, producers.Count(x => x.Publication.Topic == "FirstTopic")); - Assert.Equal(1, producers.Count(x => x.Publication.Topic == "SecondTopic")); + await Assert.That(producers.Count).IsEqualTo(2); + await Assert.That(producers.Count(x => x.Publication.Topic == "FirstTopic")).IsEqualTo(1); + await Assert.That(producers.Count(x => x.Publication.Topic == "SecondTopic")).IsEqualTo(1); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_ProducerRegistry_With_Empty_Dictionary.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_ProducerRegistry_With_Empty_Dictionary.cs index 1743489bd2..a141525650 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_ProducerRegistry_With_Empty_Dictionary.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_ProducerRegistry_With_Empty_Dictionary.cs @@ -1,5 +1,4 @@ #region License - /* The MIT License (MIT) Copyright © 2025 Jakub Syty jakub.nekro@gmail.com @@ -20,83 +19,70 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -# endregion - +#endregion using System.Collections.Generic; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway; - public class EmptyProducerRegistryTests { - [Fact] - public void When_constructing_producer_registry_with_empty_dictionary() + [Test] + public async Task When_constructing_producer_registry_with_empty_dictionary() { // Arrange var emptyProducers = new Dictionary(); - // Act var registry = new ProducerRegistry(emptyProducers); - // Assert - Assert.NotNull(registry); - Assert.Empty(registry.Producers); - Assert.Empty(registry.ProducersSync); - Assert.Empty(registry.ProducersAsync); + await Assert.That(registry).IsNotNull(); + await Assert.That(registry.Producers).IsEmpty(); + await Assert.That(registry.ProducersSync).IsEmpty(); + await Assert.That(registry.ProducersAsync).IsEmpty(); } - [Fact] - public void When_constructing_producer_registry_with_null_dictionary() + [Test] + public async Task When_constructing_producer_registry_with_null_dictionary() { // Arrange Dictionary? nullProducers = null; - // Act var registry = new ProducerRegistry(nullProducers); - // Assert - Assert.NotNull(registry); - Assert.Empty(registry.Producers); - Assert.Empty(registry.ProducersSync); - Assert.Empty(registry.ProducersAsync); + await Assert.That(registry).IsNotNull(); + await Assert.That(registry.Producers).IsEmpty(); + await Assert.That(registry.ProducersSync).IsEmpty(); + await Assert.That(registry.ProducersAsync).IsEmpty(); } - [Fact] - public void When_looking_up_producer_in_empty_registry_throws() + [Test] + public async Task When_looking_up_producer_in_empty_registry_throws() { // Arrange var emptyProducers = new Dictionary(); var registry = new ProducerRegistry(emptyProducers); var topic = new RoutingKey("test-topic"); - // Act & Assert - var exception = Assert.Throws(() => - registry.LookupBy(topic)); - Assert.Contains("No producers found in the registry", exception.Message); + var exception = await Assert.That(() => registry.LookupBy(topic)).ThrowsExactly(); + await Assert.That(exception.Message).Contains("No producers found in the registry"); } - [Fact] - public void When_closing_empty_producer_registry_succeeds() + [Test] + public async Task When_closing_empty_producer_registry_succeeds() { // Arrange var emptyProducers = new Dictionary(); var registry = new ProducerRegistry(emptyProducers); - // Act & Assert (should not throw) registry.CloseAll(); - Assert.Empty(registry.Producers); + await Assert.That(registry.Producers).IsEmpty(); } - [Fact] - public void When_disposing_empty_producer_registry_succeeds() + [Test] + public async Task When_disposing_empty_producer_registry_succeeds() { // Arrange var emptyProducers = new Dictionary(); var registry = new ProducerRegistry(emptyProducers); - // Act & Assert (should not throw) registry.Dispose(); } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Listening_To_Messages_On_A_Channel.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Listening_To_Messages_On_A_Channel.cs index 9c37236950..2d2a9e2039 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Listening_To_Messages_On_A_Channel.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Listening_To_Messages_On_A_Channel.cs @@ -19,12 +19,9 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -36,29 +33,21 @@ public class ChannelMessageReceiveTests private readonly InternalBus _bus = new(); private readonly FakeTimeProvider _fakeTimeProvider = new(); private readonly Message _sentMessage; - public ChannelMessageReceiveTests() { IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus, _fakeTimeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); - - _channel = new Channel(new(ChannelName),new(_routingKey), gateway); - - _sentMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("a test body")); - + _channel = new Channel(new(ChannelName), new(_routingKey), gateway); + _sentMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("a test body")); _bus.Enqueue(_sentMessage); } - - [Fact] - public void When_Listening_To_Messages_On_A_Channel() + [Test] + public async Task When_Listening_To_Messages_On_A_Channel() { var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(1000)); _channel.Acknowledge(receivedMessage); - - Assert.NotNull(receivedMessage); - Assert.Equal(_sentMessage, receivedMessage); + await Assert.That(receivedMessage).IsNotNull(); + await Assert.That(receivedMessage).IsEqualTo(_sentMessage); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_No_Acknowledge_Is_Called_On_A_Channel.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_No_Acknowledge_Is_Called_On_A_Channel.cs index 4633f43a45..b54ee41e6f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_No_Acknowledge_Is_Called_On_A_Channel.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_No_Acknowledge_Is_Called_On_A_Channel.cs @@ -19,12 +19,9 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -35,30 +32,21 @@ public class ChannelNackTests private readonly FakeTimeProvider _timeProvider = new(); private readonly RoutingKey _routingKey = new("myTopic"); private const string ChannelName = "myChannel"; - public ChannelNackTests() { IAmAMessageConsumerSync gateway = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); - _channel = new Channel(new(ChannelName), _routingKey, gateway); - - var sentMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("a test body")); - + var sentMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("a test body")); _bus.Enqueue(sentMessage); } - - [Fact] - public void When_No_Acknowledge_Is_Called_On_A_Channel() + [Test] + public async Task When_No_Acknowledge_Is_Called_On_A_Channel() { var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(1000)); _channel.Reject(receivedMessage); - _timeProvider.Advance(TimeSpan.FromSeconds(2)); //allow for message to timeout if not rejected - - Assert.Empty(_bus.Stream(new RoutingKey(_routingKey))); + await Assert.That(_bus.Stream(new RoutingKey(_routingKey))).IsEmpty(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Requeuing_A_Message_With_No_Delay.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Requeuing_A_Message_With_No_Delay.cs index 6bb2f16fea..f4f2510f8f 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Requeuing_A_Message_With_No_Delay.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Requeuing_A_Message_With_No_Delay.cs @@ -19,12 +19,9 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -34,29 +31,21 @@ public class ChannelRequeueWithoutDelayTest private readonly RoutingKey _routingKey = new("myTopic"); private const string ChannelName = "myChannel"; private readonly InternalBus _bus = new(); - public ChannelRequeueWithoutDelayTest() { - var consumer = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus, new FakeTimeProvider(), ackTimeout: TimeSpan.FromMilliseconds(1000)); - - _channel = new Channel(new(ChannelName),new (_routingKey), consumer); - - var sentMessage = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("a test body")); - + var consumer = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus, new FakeTimeProvider(), ackTimeout: TimeSpan.FromMilliseconds(1000)); + _channel = new Channel(new(ChannelName), new(_routingKey), consumer); + var sentMessage = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("a test body")); _bus.Enqueue(sentMessage); } - - [Fact] - public void When_Requeuing_A_Message_With_No_Delay() + [Test] + public async Task When_Requeuing_A_Message_With_No_Delay() { var requeueMessage = _channel.Receive(TimeSpan.FromMilliseconds(1000)); _channel.Requeue(requeueMessage); - - Assert.Single(_bus.Stream(new RoutingKey(_routingKey)) ?? []); - Assert.Contains(requeueMessage, _bus.Stream(new RoutingKey(_routingKey))); + await Assert.That(_bus.Stream(new RoutingKey(_routingKey)) ?? []).HasSingleItem(); + await Assert.That(_bus.Stream(new RoutingKey(_routingKey))).Contains(requeueMessage); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_The_Buffer_Is_Not_Empty_Read_From_That_Before_Receiving.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_The_Buffer_Is_Not_Empty_Read_From_That_Before_Receiving.cs index 6215cc75e1..d5b36488b5 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_The_Buffer_Is_Not_Empty_Read_From_That_Before_Receiving.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_The_Buffer_Is_Not_Empty_Read_From_That_Before_Receiving.cs @@ -1,6 +1,5 @@ using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway { @@ -12,80 +11,56 @@ public class BufferedChannelTests private readonly RoutingKey _routingKey = new("MyTopic"); private const string Channel = "MyChannel"; private readonly InternalBus _bus = new(); - public BufferedChannelTests() { - _gateway = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus,new FakeTimeProvider(), ackTimeout: TimeSpan.FromMilliseconds(1000)); - _channel = new Channel(new (Channel), new (_routingKey), _gateway, BufferLimit); + _gateway = new InMemoryMessageConsumer(new RoutingKey(_routingKey), _bus, new FakeTimeProvider(), ackTimeout: TimeSpan.FromMilliseconds(1000)); + _channel = new Channel(new(Channel), new(_routingKey), _gateway, BufferLimit); } - [Fact] - public void When_the_buffer_is_not_empty_read_from_that_before_receiving() + [Test] + public async Task When_the_buffer_is_not_empty_read_from_that_before_receiving() { //arrange - var messageOne = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("FirstMessage")); - - var messageTwo = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("SecondMessage")); - + var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("FirstMessage")); + var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("SecondMessage")); //put BufferLimit messages on the channel first _channel.Enqueue(messageOne, messageTwo); - - var messageThree = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("ThirdMessage")); - + var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("ThirdMessage")); //put a message on the bus, to pull once the buffer is empty _bus.Enqueue(messageThree); - //act var msgOne = _channel.Receive(TimeSpan.FromMilliseconds(10)); var msgTwo = _channel.Receive(TimeSpan.FromMilliseconds(10)); var msgThree = _channel.Receive(TimeSpan.FromMilliseconds(10)); - //assert - Assert.Equal(messageOne.Id, msgOne.Id); - Assert.Equal(messageTwo.Id, msgTwo.Id); - Assert.Equal(messageThree.Id, msgThree.Id); - } + await Assert.That(msgOne.Id).IsEqualTo(messageOne.Id); + await Assert.That(msgTwo.Id).IsEqualTo(messageTwo.Id); + await Assert.That(msgThree.Id).IsEqualTo(messageThree.Id); + } - [Fact] - public void When_the_buffer_is_replenished_allow_up_to_the_maximum_number_of_new_elements_to_enqueue() + [Test] + public async Task When_the_buffer_is_replenished_allow_up_to_the_maximum_number_of_new_elements_to_enqueue() { //put BufferLimit messages on the queue first - var messageOne = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("FirstMessage")); - - var messageTwo = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("SecondMessage")); - - var messageThree = new Message( - new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), - new MessageBody("ThirdMessage")); - + var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("FirstMessage")); + var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("SecondMessage")); + var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_EVENT), new MessageBody("ThirdMessage")); // This should be fine - _channel.Enqueue(messageOne, messageTwo, messageThree); - - //This should throw an exception - Assert.Throws(() => _channel.Enqueue(messageThree)); - + _channel.Enqueue(messageOne, messageTwo, messageThree); + //This should throw an exception + await Assert.That(() => _channel.Enqueue(messageThree)).ThrowsExactly(); } - [Fact] - public void When_we_try_to_create_with_too_small_a_buffer() + [Test] + public async Task When_we_try_to_create_with_too_small_a_buffer() { - Assert.Throws(() => new Channel(new(Channel), new (_routingKey), _gateway, 0)); + await Assert.That(() => new Channel(new(Channel), new(_routingKey), _gateway, 0)).ThrowsExactly(); } - [Fact] - public void When_we_try_to_create_with_too_large_a_buffer() + [Test] + public async Task When_we_try_to_create_with_too_large_a_buffer() { - Assert.Throws(() => new Channel(new(Channel), new (_routingKey), _gateway, 11)); + await Assert.That(() => new Channel(new(Channel), new(_routingKey), _gateway, 11)).ThrowsExactly(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_combined_channel_factory_propagates_scheduler.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_combined_channel_factory_propagates_scheduler.cs index 89734c1163..132698db18 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_combined_channel_factory_propagates_scheduler.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_combined_channel_factory_propagates_scheduler.cs @@ -19,89 +19,80 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #endregion - using System; using System.Threading; using System.Threading.Tasks; using FakeItEasy; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway; - public class CombinedChannelFactorySchedulerTests { - [Fact] - public void Should_propagate_scheduler_to_inner_factories() + [Test] + public async Task Should_propagate_scheduler_to_inner_factories() { // Arrange var factory1 = new SchedulerAwareMockFactory(); var factory2 = new SchedulerAwareMockFactory(); var combined = new CombinedChannelFactory([factory1, factory2]); var scheduler = A.Fake(); - // Act ((IAmAChannelFactoryWithScheduler)combined).Scheduler = scheduler; - // Assert - Assert.Same(scheduler, factory1.Scheduler); - Assert.Same(scheduler, factory2.Scheduler); + await Assert.That(factory1.Scheduler).IsSameReferenceAs(scheduler); + await Assert.That(factory2.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_first_inner_factory() + [Test] + public async Task Should_read_scheduler_from_first_inner_factory() { // Arrange var scheduler = A.Fake(); - var factory1 = new SchedulerAwareMockFactory { Scheduler = scheduler }; + var factory1 = new SchedulerAwareMockFactory + { + Scheduler = scheduler + }; var factory2 = new SchedulerAwareMockFactory(); var combined = new CombinedChannelFactory([factory1, factory2]); - // Act var result = ((IAmAChannelFactoryWithScheduler)combined).Scheduler; - // Assert - Assert.Same(scheduler, result); + await Assert.That(result).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_skip_inner_factories_that_do_not_implement_scheduler_interface() + [Test] + public async Task Should_skip_inner_factories_that_do_not_implement_scheduler_interface() { // Arrange var plainFactory = new PlainMockFactory(); var schedulerFactory = new SchedulerAwareMockFactory(); var combined = new CombinedChannelFactory([plainFactory, schedulerFactory]); var scheduler = A.Fake(); - // Act ((IAmAChannelFactoryWithScheduler)combined).Scheduler = scheduler; - // Assert — only the scheduler-aware factory gets the scheduler - Assert.Same(scheduler, schedulerFactory.Scheduler); + await Assert.That(schedulerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_implement_scheduler_interface() + [Test] + public async Task Should_implement_scheduler_interface() { var combined = new CombinedChannelFactory([]); - - Assert.IsAssignableFrom(combined); + await Assert.That(combined).IsAssignableTo(); } - private class SchedulerAwareMockFactory : IAmAChannelFactory, IAmAChannelFactoryWithScheduler + private class SchedulerAwareMockFactory : Paramore.Brighter.IAmAChannelFactory, Paramore.Brighter.IAmAChannelFactoryWithScheduler { public IAmAMessageScheduler? Scheduler { get; set; } public IAmAChannelSync CreateSyncChannel(Subscription subscription) => A.Fake(); public IAmAChannelAsync CreateAsyncChannel(Subscription subscription) => A.Fake(); - public Task CreateAsyncChannelAsync(Subscription subscription, CancellationToken ct = default) - => Task.FromResult(A.Fake()); + public Task CreateAsyncChannelAsync(Subscription subscription, CancellationToken ct = default) => Task.FromResult(A.Fake()); } private class PlainMockFactory : IAmAChannelFactory { public IAmAChannelSync CreateSyncChannel(Subscription subscription) => A.Fake(); public IAmAChannelAsync CreateAsyncChannel(Subscription subscription) => A.Fake(); - public Task CreateAsyncChannelAsync(Subscription subscription, CancellationToken ct = default) - => Task.FromResult(A.Fake()); + public Task CreateAsyncChannelAsync(Subscription subscription, CancellationToken ct = default) => Task.FromResult(A.Fake()); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs index 464acd2dd0..4207a122c2 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs @@ -1,101 +1,64 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using FakeItEasy; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway; - public class CombinedChannelFactoryTest { - [Fact] - public void When_constructing_a_sync_channel_with_combined_factory() + [Test] + public async Task When_constructing_a_sync_channel_with_combined_factory() { - var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory1 = new MockChannelFactory(sub1); - - var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory2 = new MockChannel2Factory(sub2); - - var channelFactory = new CombinedChannelFactory( - [factory1, factory2] - ); - + var channelFactory = new CombinedChannelFactory([factory1, factory2]); var channel = channelFactory.CreateSyncChannel(sub1); - Assert.NotNull(channel); - Assert.Equal(factory1.ChannelSync, channel); - - + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory1.ChannelSync); channel = channelFactory.CreateSyncChannel(sub2); - Assert.NotNull(channel); - Assert.Equal(factory2.ChannelSync, channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory2.ChannelSync); } - [Fact] - public void When_constructing_a_async_channel_with_combined_factory() + [Test] + public async Task When_constructing_a_async_channel_with_combined_factory() { - var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory1 = new MockChannelFactory(sub1); - - var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory2 = new MockChannel2Factory(sub2); - - var channelFactory = new CombinedChannelFactory( - [factory1, factory2] - ); - + var channelFactory = new CombinedChannelFactory([factory1, factory2]); var channel = channelFactory.CreateAsyncChannel(sub1); - Assert.NotNull(channel); - Assert.Equal(factory1.ChannelAsync, channel); - - + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory1.ChannelAsync); channel = channelFactory.CreateAsyncChannel(sub2); - Assert.NotNull(channel); - Assert.Equal(factory2.ChannelAsync, channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory2.ChannelAsync); } - [Fact] + [Test] public async Task When_constructing_a_async_channel_with_combined_factory_async() { - var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub1 = new MockSubscription(typeof(MockChannelFactory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory1 = new MockChannelFactory(sub1); - - var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), - messagePumpType: MessagePumpType.Proactor); + var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory2 = new MockChannel2Factory(sub2); - - var channelFactory = new CombinedChannelFactory( - [factory1, factory2] - ); - + var channelFactory = new CombinedChannelFactory([factory1, factory2]); var channel = await channelFactory.CreateAsyncChannelAsync(sub1); - Assert.NotNull(channel); - Assert.Equal(factory1.ChannelAsync, channel); - + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory1.ChannelAsync); channel = await channelFactory.CreateAsyncChannelAsync(sub2); - Assert.NotNull(channel); - Assert.Equal(factory2.ChannelAsync, channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsEqualTo(factory2.ChannelAsync); } - public class MockSubscription : Subscription + public class MockSubscription : Paramore.Brighter.Subscription { public override Type ChannelFactoryType { get; } - public MockSubscription( - Type channelFactoryType, SubscriptionName? name = null, ChannelName? channelName = null, - RoutingKey? routingKey = null, Type? dataType = null, Func? getRequestType = null, - int bufferSize = 1, int noOfPerformers = 1, TimeSpan? timeOut = null, int requeueCount = -1, TimeSpan? requeueDelay = null, - int unacceptableMessageLimit = 0, MessagePumpType messagePumpType = MessagePumpType.Unknown, - IAmAChannelFactory? channelFactory = null, OnMissingChannel makeChannels = OnMissingChannel.Create, - TimeSpan? emptyChannelDelay = null, TimeSpan? channelFailureDelay = null) : base(name, - channelName, routingKey, dataType, getRequestType, bufferSize, noOfPerformers, timeOut, requeueCount, requeueDelay, - unacceptableMessageLimit, messagePumpType, channelFactory, makeChannels, emptyChannelDelay, - channelFailureDelay) + public MockSubscription(Type channelFactoryType, SubscriptionName? name = null, ChannelName? channelName = null, RoutingKey? routingKey = null, Type? dataType = null, Func? getRequestType = null, int bufferSize = 1, int noOfPerformers = 1, TimeSpan? timeOut = null, int requeueCount = -1, TimeSpan? requeueDelay = null, int unacceptableMessageLimit = 0, MessagePumpType messagePumpType = MessagePumpType.Unknown, IAmAChannelFactory? channelFactory = null, OnMissingChannel makeChannels = OnMissingChannel.Create, TimeSpan? emptyChannelDelay = null, TimeSpan? channelFailureDelay = null) : base(name, channelName, routingKey, dataType, getRequestType, bufferSize, noOfPerformers, timeOut, requeueCount, requeueDelay, unacceptableMessageLimit, messagePumpType, channelFactory, makeChannels, emptyChannelDelay, channelFailureDelay) { ChannelFactoryType = channelFactoryType; } @@ -105,7 +68,6 @@ public class MockChannelFactory : IAmAChannelFactory { public IAmAChannelSync ChannelSync { get; } public IAmAChannelAsync ChannelAsync { get; } - public Subscription Subscription { get; } public MockChannelFactory(Subscription subscription) @@ -150,7 +112,6 @@ public class MockChannel2Factory : IAmAChannelFactory { public IAmAChannelSync ChannelSync { get; } public IAmAChannelAsync ChannelAsync { get; } - public Subscription Subscription { get; } public MockChannel2Factory(Subscription subscription) @@ -190,4 +151,4 @@ public Task CreateAsyncChannelAsync(Subscription subscription, throw new Exception(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_stale_shutdown_handler_fires_should_not_dispose_replacement_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_stale_shutdown_handler_fires_should_not_dispose_replacement_connection.cs index 145c8c41e3..a080d7e3d4 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_stale_shutdown_handler_fires_should_not_dispose_replacement_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_stale_shutdown_handler_fires_should_not_dispose_replacement_connection.cs @@ -2,10 +2,8 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Core.Tests.MessagingGateway; - /// /// Regression test for issue #4024 — connection pool race condition. /// @@ -21,25 +19,21 @@ namespace Paramore.Brighter.Core.Tests.MessagingGateway; /// public class ConnectionPoolReferenceEqualityGuardTests { - [Fact] - public void When_Stale_Handler_Fires_Should_Not_Dispose_Replacement_Connection() + [Test] + public async Task When_Stale_Handler_Fires_Should_Not_Dispose_Replacement_Connection() { // Arrange — simulate the pool with two connections sharing the same key var pool = new Dictionary(); const string connectionId = "guest.guest.localhost.5672./"; - var oldConnection = new FakeConnection("old"); var newConnection = new FakeConnection("new"); - // First connection is added, then replaced pool[connectionId] = new FakePooledConnection(oldConnection); pool[connectionId] = new FakePooledConnection(newConnection); - // Act — simulate the old connection's shutdown handler firing // This is the exact pattern from RmqMessageGatewayConnectionPool.ShutdownHandler object sender = oldConnection; // the shutdown event sender is the OLD connection - if (pool.TryGetValue(connectionId, out var pooled) - && ReferenceEquals(pooled.Connection, sender)) + if (pool.TryGetValue(connectionId, out var pooled) && ReferenceEquals(pooled.Connection, sender)) { // This block should NOT execute because sender is the old connection pooled.Connection.SimulateDispose(); @@ -47,57 +41,49 @@ public void When_Stale_Handler_Fires_Should_Not_Dispose_Replacement_Connection() } // Assert — the new connection should still be in the pool and not disposed - Assert.True(pool.ContainsKey(connectionId), "New connection should still be in the pool"); - Assert.False(newConnection.IsDisposed, "New connection should not have been disposed by stale handler"); - Assert.False(oldConnection.IsDisposed, "Old connection should not have been disposed (guard prevented it)"); + await Assert.That(pool.ContainsKey(connectionId)).IsTrue(); + await Assert.That(newConnection.IsDisposed).IsFalse(); + await Assert.That(oldConnection.IsDisposed).IsFalse(); } - [Fact] - public void When_Current_Connection_Shuts_Down_Should_Remove_From_Pool() + [Test] + public async Task When_Current_Connection_Shuts_Down_Should_Remove_From_Pool() { // Arrange — the handler fires for the connection that IS currently in the pool var pool = new Dictionary(); const string connectionId = "guest.guest.localhost.5672./"; - var currentConnection = new FakeConnection("current"); pool[connectionId] = new FakePooledConnection(currentConnection); - // Act — shutdown handler fires for the current connection object sender = currentConnection; - if (pool.TryGetValue(connectionId, out var pooled) - && ReferenceEquals(pooled.Connection, sender)) + if (pool.TryGetValue(connectionId, out var pooled) && ReferenceEquals(pooled.Connection, sender)) { pooled.Connection.SimulateDispose(); pool.Remove(connectionId); } // Assert — the connection should be removed and disposed - Assert.False(pool.ContainsKey(connectionId), "Connection should be removed from pool"); - Assert.True(currentConnection.IsDisposed, "Current connection should be disposed"); + await Assert.That(pool.ContainsKey(connectionId)).IsFalse(); + await Assert.That(currentConnection.IsDisposed).IsTrue(); } - [Fact] + [Test] public async Task When_Stale_Async_Handler_Fires_Should_Not_Dispose_Replacement_Connection() { // Arrange — same pattern but with SemaphoreSlim (matching the async pool) var pool = new Dictionary(); var semaphore = new SemaphoreSlim(1, 1); const string connectionId = "guest.guest.localhost.5672./"; - var oldConnection = new FakeConnection("old"); var newConnection = new FakeConnection("new"); - pool[connectionId] = new FakePooledConnection(oldConnection); pool[connectionId] = new FakePooledConnection(newConnection); - // Act — simulate the async shutdown handler object sender = oldConnection; - await semaphore.WaitAsync(CancellationToken.None); try { - if (pool.TryGetValue(connectionId, out var pooled) - && ReferenceEquals(pooled.Connection, sender)) + if (pool.TryGetValue(connectionId, out var pooled) && ReferenceEquals(pooled.Connection, sender)) { pooled.Connection.SimulateDispose(); pool.Remove(connectionId); @@ -109,8 +95,8 @@ public async Task When_Stale_Async_Handler_Fires_Should_Not_Dispose_Replacement_ } // Assert - Assert.True(pool.ContainsKey(connectionId)); - Assert.False(newConnection.IsDisposed); + await Assert.That(pool.ContainsKey(connectionId)).IsTrue(); + await Assert.That(newConnection.IsDisposed).IsFalse(); } private sealed class FakeConnection(string name) @@ -119,9 +105,8 @@ private sealed class FakeConnection(string name) public bool IsDisposed { get; private set; } public void SimulateDispose() => IsDisposed = true; - public override string ToString() => $"FakeConnection({Name})"; } private sealed record FakePooledConnection(FakeConnection Connection); -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler.cs b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler.cs index 20f7d67536..a3fedba459 100644 --- a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,20 +12,17 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Monitoring.TestDoubles; -using Xunit; using Paramore.Brighter.Monitoring.Configuration; using Paramore.Brighter.Monitoring.Events; using Paramore.Brighter.Monitoring.Handlers; @@ -37,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Monitoring { - [Trait("Category", "Monitoring")] + [Property("Category", "Monitoring")] public class MonitorHandlerPipelineTests { private readonly MyCommand _command; @@ -47,66 +44,56 @@ public class MonitorHandlerPipelineTests private readonly string _originalRequestAsJson; private MonitorEvent _beforeEvent; private MonitorEvent _afterEvent; - public MonitorHandlerPipelineTests() { _controlBusSender = new SpyControlBusSender(); var registry = new SubscriberRegistry(); - registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddSingleton(_controlBusSender); container.AddSingleton(new MonitorConfiguration { IsMonitoringEnabled = true, InstanceName = "UnitTests" }); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); _command = new MyCommand(); - _originalRequestAsJson = JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options); - _at = DateTime.UtcNow.AddMilliseconds(-500); } - [Fact] - public void When_Monitoring_Is_On_For_A_Handler() + [Test] + public async Task When_Monitoring_Is_On_For_A_Handler() { _commandProcessor.Send(_command); _beforeEvent = _controlBusSender.Observe(); _afterEvent = _controlBusSender.Observe(); - //_should_have_an_instance_name_before - Assert.Equal("UnitTests", _beforeEvent.InstanceName); + await Assert.That(_beforeEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_event_type_to_the_control_bus_before - Assert.Equal(MonitorEventType.EnterHandler, _beforeEvent.EventType); + await Assert.That(_beforeEvent.EventType).IsEqualTo(MonitorEventType.EnterHandler); //_should_post_the_handler_fullname_to_the_control_bus_before - Assert.Equal(typeof(MyMonitoredHandler).AssemblyQualifiedName, _beforeEvent.HandlerFullAssemblyName); + await Assert.That(_beforeEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandler).AssemblyQualifiedName); //_should_post_the_handler_name_to_the_control_bus_before - Assert.Equal(typeof(MyMonitoredHandler).FullName, _beforeEvent.HandlerName); + await Assert.That(_beforeEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandler).FullName); //_should_include_the_underlying_request_details_before - Assert.Equal(_originalRequestAsJson, _beforeEvent.RequestBody); + await Assert.That(_beforeEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //_should_post_the_time_of_the_request_before - Assert.True((_beforeEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_beforeEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))); + await Assert.That((_beforeEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_beforeEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))).IsTrue(); //_should_elapsed_before_as_zero - Assert.Equal(0, _beforeEvent.TimeElapsedMs); + await Assert.That(_beforeEvent.TimeElapsedMs).IsEqualTo(0); //_should_have_an_instance_name_after - Assert.Equal("UnitTests", _afterEvent.InstanceName); + await Assert.That(_afterEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_handler_fullname_to_the_control_bus_after - Assert.Equal(MonitorEventType.ExitHandler, _afterEvent.EventType); + await Assert.That(_afterEvent.EventType).IsEqualTo(MonitorEventType.ExitHandler); //_should_post_the_handler_fullname_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandler).AssemblyQualifiedName, _afterEvent.HandlerFullAssemblyName); + await Assert.That(_afterEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandler).AssemblyQualifiedName); //_should_post_the_handler_name_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandler).FullName, _afterEvent.HandlerName); + await Assert.That(_afterEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandler).FullName); //_should_include_the_underlying_request_details_after - Assert.Equal(_originalRequestAsJson, _afterEvent.RequestBody); + await Assert.That(_afterEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //should_post_the_time_of_the_request_after - Assert.True((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())); + await Assert.That((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler_Async.cs b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler_Async.cs index b3aa967c64..2cab35d430 100644 --- a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_Is_On_For_A_Handler_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,21 +12,18 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Monitoring.TestDoubles; -using Xunit; using Paramore.Brighter.Monitoring.Configuration; using Paramore.Brighter.Monitoring.Events; using Paramore.Brighter.Monitoring.Handlers; @@ -38,7 +35,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Monitoring { - [Trait("Category", "Monitoring")] + [Property("Category", "Monitoring")] public class MonitorHandlerPipelineAsyncTests { private readonly MyCommand _command; @@ -48,63 +45,54 @@ public class MonitorHandlerPipelineAsyncTests private readonly string _originalRequestAsJson; private MonitorEvent _beforeEvent; private MonitorEvent _afterEvent; - public MonitorHandlerPipelineAsyncTests() { _controlBusSender = new SpyControlBusSender(); var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddSingleton(_controlBusSender); container.AddSingleton(new MonitorConfiguration { IsMonitoringEnabled = true, InstanceName = "UnitTests" }); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); _command = new MyCommand(); - _originalRequestAsJson = JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options); - _at = DateTime.UtcNow.AddMilliseconds(-500); } - [Fact] + [Test] public async Task When_Monitoring_Is_on_For_A_Handler_Async() { await _commandProcessor.SendAsync(_command); _beforeEvent = _controlBusSender.Observe(); _afterEvent = _controlBusSender.Observe(); - //_should_have_an_instance_name_before - Assert.Equal("UnitTests", _beforeEvent.InstanceName); + await Assert.That(_beforeEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_event_type_to_the_control_bus_before - Assert.Equal(MonitorEventType.EnterHandler, _beforeEvent.EventType); + await Assert.That(_beforeEvent.EventType).IsEqualTo(MonitorEventType.EnterHandler); //_should_post_the_handler_fullname_to_the_control_bus_before - Assert.Equal(typeof(MyMonitoredHandlerAsync).AssemblyQualifiedName, _beforeEvent.HandlerFullAssemblyName); + await Assert.That(_beforeEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandlerAsync).AssemblyQualifiedName); //_should_post_the_handler_name_to_the_control_bus_before - Assert.Equal(typeof(MyMonitoredHandlerAsync).FullName, _beforeEvent.HandlerName); + await Assert.That(_beforeEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandlerAsync).FullName); //_should_include_the_underlying_request_details_before - Assert.Equal(_originalRequestAsJson, _beforeEvent.RequestBody); + await Assert.That(_beforeEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //should_post_the_time_of_the_request_before - Assert.True((_beforeEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_beforeEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))); + await Assert.That((_beforeEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_beforeEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))).IsTrue(); //_should_have_an_instance_name_after - Assert.Equal("UnitTests", _afterEvent.InstanceName); + await Assert.That(_afterEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_event_type_to_the_control_bus_after - Assert.Equal(MonitorEventType.ExitHandler, _afterEvent.EventType); + await Assert.That(_afterEvent.EventType).IsEqualTo(MonitorEventType.ExitHandler); //_should_post_the_handler_fullname_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandlerAsync).AssemblyQualifiedName, _afterEvent.HandlerFullAssemblyName); + await Assert.That(_afterEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandlerAsync).AssemblyQualifiedName); //_should_post_the_handler_name_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandlerAsync).FullName, _afterEvent.HandlerName); + await Assert.That(_afterEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandlerAsync).FullName); //_should_include_the_underlying_request_details_after - Assert.Equal(_originalRequestAsJson, _afterEvent.RequestBody); + await Assert.That(_afterEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //should_post_the_time_of_the_request_after - Assert.True((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())); + await Assert.That((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions.cs b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions.cs index 545e56ef62..3fd13ea886 100644 --- a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Monitoring.TestDoubles; @@ -32,11 +30,10 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.Monitoring { - [Trait("Category", "Monitoring")] + [Property("Category", "Monitoring")] public class MonitorHandlerTests { private readonly MyCommand _command; @@ -45,51 +42,43 @@ public class MonitorHandlerTests private readonly CommandProcessor _commandProcessor; private MonitorEvent _afterEvent; private readonly DateTime _at; - public MonitorHandlerTests() { _controlBusSender = new SpyControlBusSender(); var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddSingleton(_controlBusSender); container.AddSingleton(new MonitorConfiguration { IsMonitoringEnabled = true, InstanceName = "UnitTests" }); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); _command = new MyCommand(); - _at = DateTime.UtcNow.AddMilliseconds(-500); } - [Fact] - public void When_Monitoring_We_Should_Record_But_Rethrow_Exceptions() + [Test] + public async Task When_Monitoring_We_Should_Record_But_Rethrow_Exceptions() { _thrownException = Catch.Exception(() => _commandProcessor.Send(_command)); _controlBusSender.Observe(); //pop but don't inspect before. _afterEvent = _controlBusSender.Observe(); - //_should_pass_through_the_exception_not_swallow - Assert.NotNull(_thrownException); + await Assert.That(_thrownException).IsNotNull(); //_should_monitor_the_exception - Assert.True((_afterEvent.Exception) is Exception); + await Assert.That((_afterEvent.Exception) is Exception).IsTrue(); //_should_surface_the_error_message - Assert.Contains("monitored", _afterEvent.Exception.Message); + await Assert.That(_afterEvent.Exception.Message).Contains("monitored"); //_should_have_an_instance_name_after - Assert.Equal("UnitTests", _afterEvent.InstanceName); + await Assert.That(_afterEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_handler_fullname_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandler).FullName, _afterEvent.HandlerName); + await Assert.That(_afterEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandler).FullName); //_should_post_the_handler_name_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandler).AssemblyQualifiedName, _afterEvent.HandlerFullAssemblyName); + await Assert.That(_afterEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandler).AssemblyQualifiedName); //should_post_the_time_of_the_request_after - Assert.True((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())); + await Assert.That((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions_Async.cs b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions_Async.cs index f129d8e7ab..a0fccf326b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Monitoring_We_Should_Record_But_Rethrow_Exceptions_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,21 +12,18 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Monitoring.TestDoubles; -using Xunit; using Paramore.Brighter.Monitoring.Configuration; using Paramore.Brighter.Monitoring.Events; using Paramore.Brighter.Monitoring.Handlers; @@ -39,7 +36,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Monitoring { - [Trait("Category", "Monitoring")] + [Property("Category", "Monitoring")] public class MonitorHandlerMustObserveButRethrowTests { private readonly MyCommand _command; @@ -49,55 +46,46 @@ public class MonitorHandlerMustObserveButRethrowTests private readonly DateTime _at; private MonitorEvent _afterEvent; private Exception? _exception; - public MonitorHandlerMustObserveButRethrowTests() { _controlBusSender = new SpyControlBusSender(); var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); container.AddSingleton(_controlBusSender); container.AddSingleton(new MonitorConfiguration { IsMonitoringEnabled = true, InstanceName = "UnitTests" }); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); _command = new MyCommand(); - _originalRequestAsJson = JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options); - _at = DateTime.UtcNow.AddMilliseconds(-500); } - [Fact] + [Test] public async Task When_Monitoring_We_Should_Record_But_Rethrow_Exceptions_Async() { _exception = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_command)); _controlBusSender.Observe(); _afterEvent = _controlBusSender.Observe(); - - //_should_pass_through_the_exception_not_swallow - Assert.NotNull(_exception); + //_should_pass_through_the_exception_not_swallow + await Assert.That(_exception).IsNotNull(); //_should_monitor_the_exception - Assert.True((_afterEvent.Exception) is Exception); + await Assert.That((_afterEvent.Exception) is Exception).IsTrue(); //_should_surface_the_error_message - Assert.Contains("monitored", _afterEvent.Exception.Message); + await Assert.That(_afterEvent.Exception.Message).Contains("monitored"); //_should_have_an_instance_name_after - Assert.Equal("UnitTests", _afterEvent.InstanceName); + await Assert.That(_afterEvent.InstanceName).IsEqualTo("UnitTests"); //_should_post_the_handler_fullname_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandlerThatThrowsAsync).AssemblyQualifiedName, _afterEvent.HandlerFullAssemblyName); + await Assert.That(_afterEvent.HandlerFullAssemblyName).IsEqualTo(typeof(MyMonitoredHandlerThatThrowsAsync).AssemblyQualifiedName); //_should_post_the_handler_name_to_the_control_bus_after - Assert.Equal(typeof(MyMonitoredHandlerThatThrowsAsync).FullName, _afterEvent.HandlerName); + await Assert.That(_afterEvent.HandlerName).IsEqualTo(typeof(MyMonitoredHandlerThatThrowsAsync).FullName); //_should_include_the_underlying_request_details_after - Assert.Equal(_originalRequestAsJson, _afterEvent.RequestBody); + await Assert.That(_afterEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //should_post_the_time_of_the_request_after - Assert.True((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())); + await Assert.That((_afterEvent.EventTime.ToUniversalTime()) > (_at.ToUniversalTime())).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Serializing_A_Monitoring_Event.cs b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Serializing_A_Monitoring_Event.cs index f59f29c281..a0828e84fb 100644 --- a/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Serializing_A_Monitoring_Event.cs +++ b/tests/Paramore.Brighter.Core.Tests/Monitoring/When_Serializing_A_Monitoring_Event.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,19 +12,16 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; -using Xunit; using Paramore.Brighter.Monitoring.Events; using Paramore.Brighter.Monitoring.Mappers; using System.Text.Json; @@ -32,8 +29,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Monitoring { - [Trait("Category", "Monitoring")] - public class MonitorEventMessageMapperTests + [Property("Category", "Monitoring")] + public class MonitorEventMessageMapperTests { private const string InstanceName = "Paramore.Tests"; private const string HandlerFullAssemblyName = "Paramore.Dummy.Handler, with some Assembly information"; @@ -44,40 +41,34 @@ public class MonitorEventMessageMapperTests private readonly string _originalRequestAsJson; private static int _elapsedMilliseconds; private static DateTime _at; - public MonitorEventMessageMapperTests() { _at = DateTime.UtcNow.AddMilliseconds(-500); - _monitorEventMessageMapper = new MonitorEventMessageMapper(); - _originalRequestAsJson = JsonSerializer.Serialize(new MyCommand(), JsonSerialisationOptions.Options); _elapsedMilliseconds = 34; - var @event = new MonitorEvent(InstanceName, MonitorEventType.EnterHandler, HandlerName, HandlerFullAssemblyName, _originalRequestAsJson, _at, _elapsedMilliseconds); - _message = _monitorEventMessageMapper.MapToMessage(@event, new Publication{Topic = new RoutingKey("paramore.monitoring.event")}); - } + _message = _monitorEventMessageMapper.MapToMessage(@event, new Publication { Topic = new RoutingKey("paramore.monitoring.event") }); + } - [Fact] - public void When_Serializing_A_Monitoring_Event() + [Test] + public async Task When_Serializing_A_Monitoring_Event() { _monitorEvent = _monitorEventMessageMapper.MapToRequest(_message); - //Should have the correct instance name - Assert.Equal(InstanceName, _monitorEvent.InstanceName); + await Assert.That(_monitorEvent.InstanceName).IsEqualTo(InstanceName); //Should have the correct handler name - Assert.Equal(HandlerName, _monitorEvent.HandlerName); + await Assert.That(_monitorEvent.HandlerName).IsEqualTo(HandlerName); //Should have the correct handler full assembly name - Assert.Equal(HandlerFullAssemblyName, _monitorEvent.HandlerFullAssemblyName); + await Assert.That(_monitorEvent.HandlerFullAssemblyName).IsEqualTo(HandlerFullAssemblyName); //Should have the correct monitor type - Assert.Equal(MonitorEventType.EnterHandler, _monitorEvent.EventType); + await Assert.That(_monitorEvent.EventType).IsEqualTo(MonitorEventType.EnterHandler); //Should have the original request as json - Assert.Equal(_originalRequestAsJson, _monitorEvent.RequestBody); + await Assert.That(_monitorEvent.RequestBody).IsEqualTo(_originalRequestAsJson); //Should have the correct event time - Assert.True((_monitorEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_monitorEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))); + await Assert.That((_monitorEvent.EventTime.ToUniversalTime()) >= ((_at.ToUniversalTime()) - (TimeSpan.FromSeconds(1))) && (_monitorEvent.EventTime.ToUniversalTime()) <= ((_at.ToUniversalTime()) + (TimeSpan.FromSeconds(1)))).IsTrue(); //Should have the correct time elapsed - Assert.Equal(_elapsedMilliseconds, _monitorEvent.TimeElapsedMs); + await Assert.That(_monitorEvent.TimeElapsedMs).IsEqualTo(_elapsedMilliseconds); } - - } -} + } +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_custom_template_should_use_template.cs b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_custom_template_should_use_template.cs index a91b42203d..fbc6706dfa 100644 --- a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_custom_template_should_use_template.cs +++ b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_custom_template_should_use_template.cs @@ -1,45 +1,16 @@ -#region Licence -/* The MIT License (MIT) -Copyright © 2025 Ian Cooper - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. */ - -#endregion - -using Xunit; - namespace Paramore.Brighter.Core.Tests.NamingConventions; - public class DeadLetterNamingConventionCustomTemplateTests { - [Fact] - public void When_creating_dead_letter_name_with_custom_template_should_use_template() + [Test] + public async Task When_creating_dead_letter_name_with_custom_template_should_use_template() { //Arrange var customTemplate = "failed-{0}"; var convention = new DeadLetterNamingConvention(customTemplate); var dataTopic = new RoutingKey("orders"); - //Act var deadLetterRoutingKey = convention.MakeChannelName(dataTopic); - //Assert - Assert.Equal("failed-orders", deadLetterRoutingKey.Value); + await Assert.That(deadLetterRoutingKey.Value).IsEqualTo("failed-orders"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_default_template_should_append_dlq.cs b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_default_template_should_append_dlq.cs index dae264cc52..b155cc9ddf 100644 --- a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_default_template_should_append_dlq.cs +++ b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_dead_letter_name_with_default_template_should_append_dlq.cs @@ -1,20 +1,15 @@ -using Xunit; - namespace Paramore.Brighter.Core.Tests.NamingConventions; - public class DeadLetterNamingConventionDefaultTemplateTests { - [Fact] - public void When_creating_dead_letter_name_with_default_template_should_append_dlq() + [Test] + public async Task When_creating_dead_letter_name_with_default_template_should_append_dlq() { //Arrange var convention = new DeadLetterNamingConvention(); var dataTopic = new RoutingKey("orders"); - //Act var deadLetterRoutingKey = convention.MakeChannelName(dataTopic); - //Assert - Assert.Equal("orders.dlq", deadLetterRoutingKey.Value); + await Assert.That(deadLetterRoutingKey.Value).IsEqualTo("orders.dlq"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_custom_template_should_use_template.cs b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_custom_template_should_use_template.cs index 12f7fcbe9e..1e3c85b5ae 100644 --- a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_custom_template_should_use_template.cs +++ b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_custom_template_should_use_template.cs @@ -1,45 +1,16 @@ -#region Licence -/* The MIT License (MIT) -Copyright © 2025 Ian Cooper - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. */ - -#endregion - -using Xunit; - namespace Paramore.Brighter.Core.Tests.NamingConventions; - public class InvalidMessageNamingConventionCustomTemplateTests { - [Fact] - public void When_creating_invalid_message_name_with_custom_template_should_use_template() + [Test] + public async Task When_creating_invalid_message_name_with_custom_template_should_use_template() { //Arrange var customTemplate = "bad-{0}"; var convention = new InvalidMessageNamingConvention(customTemplate); var dataTopic = new RoutingKey("orders"); - //Act var invalidMessageRoutingKey = convention.MakeChannelName(dataTopic); - //Assert - Assert.Equal("bad-orders", invalidMessageRoutingKey.Value); + await Assert.That(invalidMessageRoutingKey.Value).IsEqualTo("bad-orders"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_default_template_should_append_invalid.cs b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_default_template_should_append_invalid.cs index ffa876c6e8..04c6e6bdd4 100644 --- a/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_default_template_should_append_invalid.cs +++ b/tests/Paramore.Brighter.Core.Tests/NamingConventions/When_creating_invalid_message_name_with_default_template_should_append_invalid.cs @@ -1,44 +1,15 @@ -#region Licence -/* The MIT License (MIT) -Copyright © 2025 Ian Cooper - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. */ - -#endregion - -using Xunit; - namespace Paramore.Brighter.Core.Tests.NamingConventions; - public class InvalidMessageNamingConventionDefaultTemplateTests { - [Fact] - public void When_creating_invalid_message_name_with_default_template_should_append_invalid() + [Test] + public async Task When_creating_invalid_message_name_with_default_template_should_append_invalid() { //Arrange var convention = new InvalidMessageNamingConvention(); var dataTopic = new RoutingKey("orders"); - //Act var invalidMessageRoutingKey = convention.MakeChannelName(dataTopic); - //Assert - Assert.Equal("orders.invalid", invalidMessageRoutingKey.Value); + await Assert.That(invalidMessageRoutingKey.Value).IsEqualTo("orders.invalid"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs index f9de40cf8f..3ae8799961 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -12,14 +12,12 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Archive; - public class ExternalServiceBusArchiveObservabilityTests { private readonly List _exportedActivities = new(); - private readonly OutboxProducerMediator _bus; + private readonly OutboxProducerMediator _bus; private readonly Publication _publication; private readonly FakeTimeProvider _timeProvider; private RoutingKey _routingKey = new("MyEvent"); @@ -27,24 +25,14 @@ public class ExternalServiceBusArchiveObservabilityTests private readonly TracerProvider _traceProvider; private const double TOLERANCE = 0.000000001; private readonly BrighterTracer _tracer; - public ExternalServiceBusArchiveObservabilityTests() { IAmABus internalBus = new InternalBus(); _timeProvider = new FakeTimeProvider(); _tracer = new BrighterTracer(_timeProvider); - var builder = Sdk.CreateTracerProviderBuilder(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var type = new CloudEventsType("io.goparamore.brighter.myevent"); - _publication = new Publication { Source = new Uri("http://localhost"), @@ -52,124 +40,86 @@ public ExternalServiceBusArchiveObservabilityTests() Topic = _routingKey, Type = type, }; - var producer = new InMemoryMessageProducer(internalBus, _publication); - - var producerRegistry = - new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, type), producer } }); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, type), producer } }); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = _tracer }; - - _bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - _tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox, - timeProvider:_timeProvider); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = _tracer + }; + _bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), _tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox, timeProvider: _timeProvider); } - [Theory] - [InlineData(InstrumentationOptions.RequestInformation)] - [InlineData(InstrumentationOptions.None)] - [InlineData(InstrumentationOptions.All)] - public void When_archiving_from_the_outbox(InstrumentationOptions instrumentationOptions) + [Test] + [Arguments(InstrumentationOptions.RequestInformation)] + [Arguments(InstrumentationOptions.None)] + [Arguments(InstrumentationOptions.All)] + public async Task When_archiving_from_the_outbox(InstrumentationOptions instrumentationOptions) { var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //add and clear message var myEvent = new MyEvent(); var myMessage = new MyEventMessageMapper().MapToMessage(myEvent, _publication); - _bus.AddToOutbox(myMessage, context); + _bus.AddToOutbox(myMessage, context); _bus.ClearOutbox([myMessage.Id], context); - //we should have an entry in the outbox - Assert.Equal(1, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(1); //allow time to pass - _timeProvider.Advance(TimeSpan.FromSeconds(300)); - + _timeProvider.Advance(TimeSpan.FromSeconds(300)); //archive var dispatchedSince = TimeSpan.FromSeconds(100); var archiveProvider = new InMemoryArchiveProvider(); - - var archiver = new OutboxArchiver(_outbox, archiveProvider, tracer: _tracer, - instrumentationOptions: instrumentationOptions); + var archiver = new OutboxArchiver(_outbox, archiveProvider, tracer: _tracer, instrumentationOptions: instrumentationOptions); archiver.Archive(dispatchedSince, context); - //should be no messages in the outbox - Assert.Equal(0, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(0); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //We should have exported matching activities - Assert.Equal(9, _exportedActivities.Count); - - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(9); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be an archive create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ArchiveMessages} {CommandProcessorSpanOperation.Archive.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //check for outstanding messages span - var osCheckActivity = _exportedActivities.SingleOrDefault(a => - a.DisplayName == $"{BoxDbOperation.DispatchedMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(osCheckActivity); - Assert.Equal(createActivity.Id, osCheckActivity?.ParentId); - + var osCheckActivity = _exportedActivities.SingleOrDefault(a => a.DisplayName == $"{BoxDbOperation.DispatchedMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(osCheckActivity).IsNotNull(); + await Assert.That(osCheckActivity?.ParentId).IsEqualTo(createActivity.Id); //check for delete messages span - var deleteActivity = _exportedActivities.SingleOrDefault(a => - a.DisplayName == $"{BoxDbOperation.Delete.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(deleteActivity); - Assert.Equal(createActivity.Id, deleteActivity?.ParentId); - + var deleteActivity = _exportedActivities.SingleOrDefault(a => a.DisplayName == $"{BoxDbOperation.Delete.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(deleteActivity).IsNotNull(); + await Assert.That(deleteActivity?.ParentId).IsEqualTo(createActivity.Id); //check the tags for the create span - if(instrumentationOptions == InstrumentationOptions.None) - Assert.Empty(createActivity.Tags); + if (instrumentationOptions == InstrumentationOptions.None) + await Assert.That(createActivity.Tags).IsEmpty(); if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.ArchiveAge && - Math.Abs(Convert.ToDouble(t.Value) - dispatchedSince.TotalMilliseconds) < TOLERANCE); - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.Operation && - (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.MessagingOperationType && - (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ArchiveAge && Math.Abs(Convert.ToDouble(t.Value) - dispatchedSince.TotalMilliseconds) < TOLERANCE); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.Operation && (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); } else { - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.ArchiveAge); - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.Operation); - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessagingOperationName); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.ArchiveAge); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.Operation); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.MessagingOperationName); } - //check the tags for the outstanding messages span - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.DispatchedMessages.ToSpanName())); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.DispatchedMessages.ToSpanName())).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); //check the tags for the delete messages span - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Delete.ToSpanName())); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Delete.ToSpanName())).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs index a815fe6353..975930ae74 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -13,15 +13,13 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; -// ReSharper disable ExplicitCallerInfoArgument +// ReSharper disable ExplicitCallerInfoArgument namespace Paramore.Brighter.Core.Tests.Observability.Archive; - public class AsyncExternalServiceBusArchiveObservabilityTests { private readonly List _exportedActivities = new(); - private readonly OutboxProducerMediator _bus; + private readonly OutboxProducerMediator _bus; private readonly Publication _publication; private readonly FakeTimeProvider _timeProvider; private readonly RoutingKey _routingKey = new("MyEvent"); @@ -29,22 +27,13 @@ public class AsyncExternalServiceBusArchiveObservabilityTests private readonly TracerProvider _traceProvider; private const double TOLERANCE = 0.000000001; private readonly BrighterTracer _tracer; - public AsyncExternalServiceBusArchiveObservabilityTests() { IAmABus internalBus = new InternalBus(); _timeProvider = new FakeTimeProvider(); _tracer = new BrighterTracer(_timeProvider); - var builder = Sdk.CreateTracerProviderBuilder(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var type = new CloudEventsType("io.goparamore.brighter.myevent"); _publication = new Publication { @@ -53,124 +42,86 @@ public AsyncExternalServiceBusArchiveObservabilityTests() Topic = _routingKey, Type = type, }; - var producer = new InMemoryMessageProducer(internalBus, _publication); - - var producerRegistry = - new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, type), producer } }); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, type), producer } }); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _outbox = new InMemoryOutbox(_timeProvider) { Tracer = _tracer }; - - _bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - _tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox, - timeProvider:_timeProvider); + _outbox = new InMemoryOutbox(_timeProvider) + { + Tracer = _tracer + }; + _bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), _tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox, timeProvider: _timeProvider); } - [Theory] - [InlineData(InstrumentationOptions.RequestInformation)] - [InlineData(InstrumentationOptions.None)] - [InlineData(InstrumentationOptions.All)] + [Test] + [Arguments(InstrumentationOptions.RequestInformation)] + [Arguments(InstrumentationOptions.None)] + [Arguments(InstrumentationOptions.All)] public async Task When_archiving_from_the_outbox(InstrumentationOptions instrumentationOptions) { var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //add and clear message var myEvent = new MyEvent(); var myMessage = new MyEventMessageMapper().MapToMessage(myEvent, _publication); - await _bus.AddToOutboxAsync(myMessage, context); - await _bus.ClearOutboxAsync([myMessage.Id], context); - + await _bus.AddToOutboxAsync(myMessage, context); + await _bus.ClearOutboxAsync([myMessage.Id], context); //we should have an entry in the outbox - Assert.Equal(1, _outbox.EntryCount); - + await Assert.That(_outbox.EntryCount).IsEqualTo(1); //allow time to pass - _timeProvider.Advance(TimeSpan.FromSeconds(300)); - + _timeProvider.Advance(TimeSpan.FromSeconds(300)); //archive var dispatchedSince = TimeSpan.FromSeconds(100); var archiveProvider = new InMemoryArchiveProvider(); - - var archiver = new OutboxArchiver(_outbox, archiveProvider, tracer: _tracer, - instrumentationOptions: instrumentationOptions); + var archiver = new OutboxArchiver(_outbox, archiveProvider, tracer: _tracer, instrumentationOptions: instrumentationOptions); await archiver.ArchiveAsync(dispatchedSince, context); - - //should be no messages in the outbox - Assert.Equal(0, _outbox.EntryCount); - + //should be no messages in the outbox + await Assert.That(_outbox.EntryCount).IsEqualTo(0); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //We should have exported matching activities - Assert.Equal(9, _exportedActivities.Count); - - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(9); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be an archive create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ArchiveMessages} {CommandProcessorSpanOperation.Archive.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //check for outstanding messages span - var osCheckActivity = _exportedActivities.SingleOrDefault(a => - a.DisplayName == $"{BoxDbOperation.DispatchedMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(osCheckActivity); - Assert.Equal(createActivity.Id, osCheckActivity?.ParentId); - + var osCheckActivity = _exportedActivities.SingleOrDefault(a => a.DisplayName == $"{BoxDbOperation.DispatchedMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(osCheckActivity).IsNotNull(); + await Assert.That(osCheckActivity?.ParentId).IsEqualTo(createActivity.Id); //check for delete messages span - var deleteActivity = _exportedActivities.SingleOrDefault(a => - a.DisplayName == $"{BoxDbOperation.Delete.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(deleteActivity); - Assert.Equal(createActivity.Id, deleteActivity?.ParentId); - + var deleteActivity = _exportedActivities.SingleOrDefault(a => a.DisplayName == $"{BoxDbOperation.Delete.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(deleteActivity).IsNotNull(); + await Assert.That(deleteActivity?.ParentId).IsEqualTo(createActivity.Id); //check the tags for the create span - if(instrumentationOptions == InstrumentationOptions.None) - Assert.Empty(createActivity.Tags); - + if (instrumentationOptions == InstrumentationOptions.None) + await Assert.That(createActivity.Tags).IsEmpty(); if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.ArchiveAge && - Math.Abs(Convert.ToDouble(t.Value) - dispatchedSince.TotalMilliseconds) < TOLERANCE); - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.Operation && - (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); - Assert.Contains(createActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.MessagingOperationType && - (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ArchiveAge && Math.Abs(Convert.ToDouble(t.Value) - dispatchedSince.TotalMilliseconds) < TOLERANCE); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.Operation && (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && (string)t.Value == CommandProcessorSpanOperation.Archive.ToSpanName()); } else { - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.ArchiveAge); - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.Operation); - Assert.DoesNotContain(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessagingOperationName); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.ArchiveAge); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.Operation); + await Assert.That(createActivity.TagObjects).DoesNotContain(t => t.Key == BrighterSemanticConventions.MessagingOperationName); } //check the tags for the outstanding messages span - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.DispatchedMessages.ToSpanName())); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.DispatchedMessages.ToSpanName())).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(osCheckActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); //check the tags for the delete messages span - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Delete.ToSpanName())); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Delete.ToSpanName())).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(deleteActivity?.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported.cs index 1dca4f20df..81d88533c1 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -13,11 +13,9 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] +[NotInParallel("Observability")] public class CommandProcessorClearObservabilityTests { private readonly List _exportedActivities; @@ -25,265 +23,181 @@ public class CommandProcessorClearObservabilityTests private readonly InternalBus _internalBus = new(); private readonly FakeTimeProvider _timeProvider; private readonly RoutingKey _routingKey; - private readonly Uri publicationSource = new Uri("http://localhost"); private CloudEventsType? _publicationType; - public CommandProcessorClearObservabilityTests() { _routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _timeProvider = new FakeTimeProvider(); } - [Theory] - [InlineData(InstrumentationOptions.All)] - [InlineData(InstrumentationOptions.None)] - public void When_Clearing_A_Message_A_Span_Is_Exported(InstrumentationOptions options) + [Test] + [Arguments(InstrumentationOptions.All)] + [Arguments(InstrumentationOptions.None)] + public async Task When_Clearing_A_Message_A_Span_Is_Exported(InstrumentationOptions options) { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; + var context = new RequestContext + { + Span = parentActivity + }; var commandProcessor = CreateCommandProcessor(options); - //act var messageId = commandProcessor.DepositPost(@event, context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; commandProcessor.ClearOutbox([messageId], context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(8, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(8); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a create span for the batch - var createActivity = _exportedActivities.Single(a => - a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); var events = createActivity.Events.ToList(); - //retrieving the message batch should be an event var message = _internalBus.Stream(new RoutingKey("MyEvent")).Single(); var getEvent = events.Single(e => e.Name == BoxDbOperation.Get.ToSpanName()); - if (options == InstrumentationOptions.None) - Assert.Empty(getEvent.Tags); - + await Assert.That(getEvent.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.RequestBody)) - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageBody && a.Value as string == message.Body.Value); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageBody && a.Value as string == message.Body.Value); if (options.HasFlag(InstrumentationOptions.Brighter)) { - Assert.Contains(getEvent.Tags, a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.OutboxType && a.Value as string == "sync"); + await Assert.That(getEvent.Tags).Contains(a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.OutboxType && a.Value as string == "sync"); } if (options.HasFlag(InstrumentationOptions.Messaging)) { - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageId && a.Value as string == message.Id.Value); - Assert.Contains(getEvent.Tags, - a => a.Key == BrighterSemanticConventions.MessagingDestination && a.Value?.ToString() == message.Header.Topic.Value); - Assert.Contains(getEvent.Tags, - a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); - Assert.Contains(getEvent.Tags, - a => a.Key == BrighterSemanticConventions.MessageType && a.Value as string == message.Header.MessageType.ToString()); - Assert.Contains(getEvent.Tags, - a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && a.Value as string == message.Header.PartitionKey.Value); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageId && a.Value as string == message.Id.Value); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestination && a.Value?.ToString() == message.Header.Topic.Value); + await Assert.That(getEvent.Tags).Contains(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageType && a.Value as string == message.Header.MessageType.ToString()); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && a.Value as string == message.Header.PartitionKey.Value); } //there should be a clear span for each message id - var clearActivity = _exportedActivities.Single(a => - a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - Assert.NotNull(clearActivity); + var clearActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); + await Assert.That(clearActivity).IsNotNull(); if (options == InstrumentationOptions.None) - Assert.Empty(createActivity.Tags); + await Assert.That(createActivity.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(clearActivity.Tags, t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); - Assert.Contains(clearActivity.Tags, t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "clear" }); - Assert.Contains(clearActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageId && t.Value == messageId); + await Assert.That(clearActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); + await Assert.That(clearActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "clear" }); + await Assert.That(clearActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value == messageId); } else { - Assert.DoesNotContain(clearActivity.Tags, t => t.Key == BrighterSemanticConventions.Operation); - Assert.DoesNotContain(clearActivity.Tags, t => t.Key == BrighterSemanticConventions.MessagingOperationType); - Assert.DoesNotContain(clearActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageId); + await Assert.That(clearActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.Operation); + await Assert.That(clearActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.MessagingOperationType); + await Assert.That(clearActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.MessageId); } if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { //there should be a span in the Db for retrieving the message - var outBoxActivity = _exportedActivities.Single(a => - a.DisplayName == $"{BoxDbOperation.Get.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Get.ToSpanName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); + var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.Get.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Get.ToSpanName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); } //there should be a span for publishing the message via the producer var producerActivity = _exportedActivities.Single(a => a.DisplayName == $"{"MyEvent"} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.Equal(clearActivity.Id, producerActivity.ParentId); - Assert.Equal(ActivityKind.Producer, producerActivity.Kind); - + await Assert.That(producerActivity.ParentId).IsEqualTo(clearActivity.Id); + await Assert.That(producerActivity.Kind).IsEqualTo(ActivityKind.Producer); if (options == InstrumentationOptions.None) - Assert.Empty(producerActivity.Tags); - + await Assert.That(producerActivity.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.RequestBody)) - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); - + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); if (options.HasFlag(InstrumentationOptions.Messaging)) { - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); - Assert.Contains(producerActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); - Assert.Contains(producerActivity.TagObjects, - t => t is { Value: not null, Key: BrighterSemanticConventions.MessagingDestination } && t.Value.ToString() == "MyEvent"); - Assert.Contains(producerActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); - Assert.Contains(producerActivity.TagObjects, - t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); - Assert.Contains(producerActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); + await Assert.That(producerActivity.TagObjects).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessagingDestination } && t.Value.ToString() == "MyEvent"); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); } if (options.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(producerActivity.TagObjects, - t => t.Key == BrighterSemanticConventions.MessagingOperationType && - t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeMessageId && (string)t.Value == message.Id.Value); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeSource && (Uri)t.Value == publicationSource); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeVersion && (string)t.Value == "1.0"); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeSubject && (string)t.Value == null); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeType && (string)t.Value == _publicationType); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeMessageId && (string)t.Value == message.Id.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeSource && (Uri)t.Value == publicationSource); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeVersion && (string)t.Value == "1.0"); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeSubject && (string)t.Value == null); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeType && (string)t.Value == _publicationType); } //there should be an event in the producer for producing the message var produceEvent = producerActivity.Events.Single(e => e.Name == $"{"MyEvent"} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - if (options == InstrumentationOptions.None) - Assert.Empty(produceEvent.Tags); - + await Assert.That(produceEvent.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.RequestBody)) - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessageBody && (string)t.Value == message.Body.Value); - + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageBody && (string)t.Value == message.Body.Value); if (options.HasFlag(InstrumentationOptions.Messaging)) { - Assert.Contains(produceEvent.Tags, - t => t.Key == BrighterSemanticConventions.MessagingOperationType && (string)t.Value == CommandProcessorSpanOperation.Publish.ToSpanName()); - Assert.Contains(produceEvent.Tags, - t => t.Key == BrighterSemanticConventions.MessagingSystem && (string)t.Value == MessagingSystem.InternalBus.ToMessagingSystemName()); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)t.Value == "MyEvent"); - Assert.Contains(produceEvent.Tags, - t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)t.Value == message.Header.PartitionKey.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessageId && (string)t.Value == message.Id.Value); - Assert.Contains(produceEvent.Tags, - t => t.Key == BrighterSemanticConventions.MessageType && (string)t.Value == message.Header.MessageType.ToString()); - Assert.Contains(produceEvent.Tags, - t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); - Assert.Contains(produceEvent.Tags, - t => t.Key == BrighterSemanticConventions.ConversationId && (string)t.Value == message.Header.CorrelationId.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && (string)t.Value == CommandProcessorSpanOperation.Publish.ToSpanName()); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingSystem && (string)t.Value == MessagingSystem.InternalBus.ToMessagingSystemName()); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)t.Value == "MyEvent"); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)t.Value == message.Header.PartitionKey.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageId && (string)t.Value == message.Id.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageType && (string)t.Value == message.Header.MessageType.ToString()); + await Assert.That(produceEvent.Tags).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.ConversationId && (string)t.Value == message.Header.CorrelationId.Value); } if (options.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeMessageId && (string)t.Value == message.Id.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeSource && (Uri)t.Value == publicationSource); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeVersion && (string)t.Value == "1.0"); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeSubject && (string)t.Value == null); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeType && (string)t.Value == _publicationType); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeMessageId && (string)t.Value == message.Id.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeSource && (Uri)t.Value == publicationSource); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeVersion && (string)t.Value == "1.0"); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeSubject && (string)t.Value == null); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeType && (string)t.Value == _publicationType); } if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { //There should be a span event to mark as dispatched - var markAsDispatchedActivity = _exportedActivities.Single(a => - a.DisplayName == $"{BoxDbOperation.MarkDispatched.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Contains(markAsDispatchedActivity.Tags, - t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.MarkDispatched.ToSpanName()); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); + var markAsDispatchedActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.MarkDispatched.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.MarkDispatched.ToSpanName()); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); } } private Brighter.CommandProcessor CreateCommandProcessor(InstrumentationOptions instrumentationOptions) { _publicationType = new CloudEventsType("io.goparamore.brighter.myevent"); - - var messageProducer = new InMemoryMessageProducer( - _internalBus, - new Publication - { - Source = publicationSource, RequestType = typeof(MyEvent), Topic = _routingKey, Type = _publicationType, - }, - instrumentationOptions - ); - - + var messageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Source = publicationSource, RequestType = typeof(MyEvent), Topic = _routingKey, Type = _publicationType, }, instrumentationOptions); var registry = new SubscriberRegistry(); - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry { { Brighter.CommandProcessor.RETRYPOLICY, retryPolicy } }; - + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy + } + }; var tracer = new BrighterTracer(_timeProvider); InMemoryOutbox outbox = new(_timeProvider); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, _publicationType), messageProducer } }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1, - instrumentationOptions: instrumentationOptions - ); - - return new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions - ); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1, instrumentationOptions: instrumentationOptions); + return new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported_Async.cs index b1a86083b0..a6d8952f6a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_A_Span_Is_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,12 +14,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] -public class AsyncCommandProcessorClearObservabilityTests +[NotInParallel("Observability")] +public class AsyncCommandProcessorClearObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; @@ -27,180 +25,122 @@ public class AsyncCommandProcessorClearObservabilityTests private readonly RoutingKey _topic = new("MyCommand"); private readonly InMemoryMessageProducer _messageProducer; private readonly InternalBus _internalBus = new(); - public AsyncCommandProcessorClearObservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy + } + }; + var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + InMemoryOutbox outbox = new(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var type = new CloudEventsType("io.goparamore.brighter.myevent"); - _messageProducer = new InMemoryMessageProducer(_internalBus, - new Publication - { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = _topic, - Type = type, - }); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - {new ProducerKey(_topic, type), _messageProducer} - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + _messageProducer = new InMemoryMessageProducer(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = _topic, Type = type, }); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_topic, type), _messageProducer } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Clearing_A_Message_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act var messageId = await _commandProcessor.DepositPostAsync(@event, context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; await _commandProcessor.ClearOutboxAsync([messageId], context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(8, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(8); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - Assert.Contains(createActivity.Tags, t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(createActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); var events = createActivity.Events.ToList(); - //retrieving the message should be an event on the batch var message = _internalBus.Stream(new RoutingKey(_topic)).Single(); var getEvent = events.Single(e => e.Name == BoxDbOperation.Get.ToSpanName()); - Assert.Contains(getEvent.Tags, a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.OutboxType && a.Value as string == "async"); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageId && a.Value as string == message.Id.Value); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestination && a.Value?.ToString() == message.Header.Topic.ToString()); - Assert.Contains(getEvent.Tags, a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageBody && a.Value as string == message.Body.Value); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageType && a.Value as string == message.Header.MessageType.ToString()); - Assert.Contains(getEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && a.Value as string == message.Header.PartitionKey.Value); - + await Assert.That(getEvent.Tags).Contains(a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.OutboxType && a.Value as string == "async"); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageId && a.Value as string == message.Id.Value); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestination && a.Value?.ToString() == message.Header.Topic.ToString()); + await Assert.That(getEvent.Tags).Contains(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageBody && a.Value as string == message.Body.Value); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageType && a.Value as string == message.Header.MessageType.ToString()); + await Assert.That(getEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && a.Value as string == message.Header.PartitionKey.Value); //there should be a clear span for each message id var clearActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - Assert.NotNull(clearActivity); - Assert.Contains(clearActivity.Tags, t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); - Assert.Contains(clearActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageId && t.Value == messageId.Value); - + await Assert.That(clearActivity).IsNotNull(); + await Assert.That(clearActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.Operation, Value: "clear" }); + await Assert.That(clearActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value == messageId.Value); //there should be a span in the Db for retrieving the message var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.Get.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Get.ToSpanName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); - + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Get.ToSpanName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); //there should be a span for publishing the message via the producer var producerActivity = _exportedActivities.Single(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.Equal(clearActivity.Id, producerActivity.ParentId); - Assert.Equal(ActivityKind.Producer, producerActivity.Kind); - - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessagingOperationType && t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); - Assert.Contains(producerActivity.TagObjects, t => t is { Value: not null, Key: BrighterSemanticConventions.MessagingDestination } && t.Value.ToString() == _topic.Value); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); - Assert.Contains(producerActivity.TagObjects, t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); - - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value as string == message.Id.Value); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeSource && t.Value as Uri == _messageProducer.Publication.Source); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeVersion && t.Value as string == "1.0"); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeSubject && t.Value as string == _messageProducer.Publication.Subject); - Assert.Contains(producerActivity.TagObjects, t => t.Key == BrighterSemanticConventions.CeType && t.Value as string == _messageProducer.Publication.Type); - + await Assert.That(producerActivity.ParentId).IsEqualTo(clearActivity.Id); + await Assert.That(producerActivity.Kind).IsEqualTo(ActivityKind.Producer); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); + await Assert.That(producerActivity.TagObjects).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessagingDestination } && t.Value.ToString() == _topic.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value as string == message.Id.Value); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeSource && t.Value as Uri == _messageProducer.Publication.Source); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeVersion && t.Value as string == "1.0"); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeSubject && t.Value as string == _messageProducer.Publication.Subject); + await Assert.That(producerActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.CeType && t.Value as string == _messageProducer.Publication.Type); //there should be an event in the producer for producing the message - var produceEvent = producerActivity.Events.Single(e => e.Name ==$"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessagingOperationType && t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessagingSystem && t.Value as string == MessagingSystem.InternalBus.ToMessagingSystemName()); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value?.ToString() == _topic.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); - Assert.Contains(produceEvent.Tags, t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); - - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value as string == message.Id.Value); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeSource && t.Value as Uri == _messageProducer.Publication.Source); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeVersion && t.Value as string == "1.0"); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeSubject && t.Value as string == _messageProducer.Publication.Subject); - Assert.Contains(produceEvent.Tags, t => t.Key == BrighterSemanticConventions.CeType && t.Value as string == _messageProducer.Publication.Type); - + var produceEvent = producerActivity.Events.Single(e => e.Name == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingOperationType && t.Value as string == CommandProcessorSpanOperation.Publish.ToSpanName()); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingSystem && t.Value as string == MessagingSystem.InternalBus.ToMessagingSystemName()); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value?.ToString() == _topic.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value as string == message.Header.PartitionKey.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value as string == message.Id.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageType && t.Value as string == message.Header.MessageType.ToString()); + await Assert.That(produceEvent.Tags).Contains(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)t.Value == message.Body.Bytes.Length); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageBody && t.Value as string == message.Body.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.ConversationId && t.Value as string == message.Header.CorrelationId.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value as string == message.Id.Value); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeSource && t.Value as Uri == _messageProducer.Publication.Source); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeVersion && t.Value as string == "1.0"); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeSubject && t.Value as string == _messageProducer.Publication.Subject); + await Assert.That(produceEvent.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeType && t.Value as string == _messageProducer.Publication.Type); //There should be a span event to mark as dispatched var markAsDispatchedActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.MarkDispatched.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.MarkDispatched.ToSpanName()); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(markAsDispatchedActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); - + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.MarkDispatched.ToSpanName()); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(markAsDispatchedActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs index 1bebe8b107..399969f116 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,12 +14,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -public class MessageDispatchPropogateContextTests +public class MessageDispatchPropogateContextTests { private readonly List _exportedActivities = []; private readonly TracerProvider _traceProvider; @@ -27,113 +25,62 @@ public class MessageDispatchPropogateContextTests private readonly Brighter.CommandProcessor _commandProcessor; private readonly RoutingKey _routingKey; private readonly OutboxProducerMediator _mediator; - public MessageDispatchPropogateContextTests() { _routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - var cloudEventsType = new CloudEventsType("io.goparamore.brighter.myevent"); - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = _routingKey, - Type = cloudEventsType, + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy } - ); - - var producerRegistry = new ProducerRegistry(new Dictionary + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) { - {new ProducerKey(_routingKey, cloudEventsType), messageProducer} - }); - - _mediator = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - _mediator, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); - + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + var cloudEventsType = new CloudEventsType("io.goparamore.brighter.myevent"); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = _routingKey, Type = cloudEventsType, }); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, cloudEventsType), messageProducer } }); + _mediator = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), _mediator, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Producing_A_Message_Should_Propagate_Context() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessageDispatchPropogateContextTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act var messageId = _commandProcessor.DepositPost(@event, context); - //reset the parent span as deposit and clear are siblings Baggage.SetBaggage("key", "value"); Baggage.SetBaggage("key2", "value2"); - context.Span = parentActivity; _commandProcessor.ClearOutbox([messageId], context); - - await Task.Delay(3000); //allow bulk clear to run -- can make test fragile - + await Task.Delay(3000); //allow bulk clear to run -- can make test fragile parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert var messages = _internalBus.Stream(_routingKey); var message = messages.FirstOrDefault(m => m.Id == messageId); - Assert.NotNull(message); - Assert.NotNull(message.Header.TraceParent); - + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.TraceParent).IsNotNull(); //? What is tracestate - Assert.Equal("key=value,key2=value2", message.Header.Baggage.ToString()); + await Assert.That(message.Header.Baggage.ToString()).IsEqualTo("key=value,key2=value2"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs index 5ec264fe71..a7788a662c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,12 +14,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -public class AsyncMessageDispatchPropogateContextTests +public class AsyncMessageDispatchPropogateContextTests { private readonly List _exportedActivities = []; private readonly TracerProvider _traceProvider; @@ -27,82 +25,37 @@ public class AsyncMessageDispatchPropogateContextTests private readonly Brighter.CommandProcessor _commandProcessor; private readonly RoutingKey _routingKey; private readonly OutboxProducerMediator _mediator; - public AsyncMessageDispatchPropogateContextTests() { _routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - - var type = new CloudEventsType("io.goparamore.brighter.myevent"); - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = _routingKey, - Type = type, + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy } - ); - - var producerRegistry = new ProducerRegistry(new Dictionary + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) { - {new ProducerKey(_routingKey, type) , messageProducer} - }); - - _mediator = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - _mediator, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); - + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + var type = new CloudEventsType("io.goparamore.brighter.myevent"); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = _routingKey, Type = type, }); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(_routingKey, type), messageProducer } }); + _mediator = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), _mediator, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Producing_A_Message_Should_Propagate_Context() { //arrange @@ -110,37 +63,28 @@ public async Task When_Producing_A_Message_Should_Propagate_Context() var traceStateString = parentActivity.TraceStateString ?? ""; traceStateString += "test=value"; parentActivity.TraceStateString = traceStateString; - Baggage.SetBaggage("key", "value"); Baggage.SetBaggage("key2", "value2"); - - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act var messageId = await _commandProcessor.DepositPostAsync(@event, context); - //reset the parent span as deposit and clear are siblings context.Span = parentActivity; - await _commandProcessor.ClearOutboxAsync([messageId], context); - - await Task.Delay(3000); //allow bulk clear to run -- can make test fragile - + await Task.Delay(3000); //allow bulk clear to run -- can make test fragile parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert var messages = _internalBus.Stream(_routingKey); var message = messages.FirstOrDefault(m => m.Id == messageId); - Assert.NotNull(message); - Assert.NotNull(message.Header.TraceParent); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.TraceParent).IsNotNull(); //? What is tracestate - Assert.Equal(traceStateString, message.Header.TraceState); - Assert.Equal("key=value,key2=value2", message.Header.Baggage.ToString()); - + await Assert.That(message.Header.TraceState?.Value).IsEqualTo(traceStateString); + await Assert.That(message.Header.Baggage.ToString()).IsEqualTo("key=value,key2=value2"); } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multipile_Messages_Spans_Are_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multipile_Messages_Spans_Are_Exported_Async.cs index 1519275754..701a6d6d67 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multipile_Messages_Spans_Are_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multipile_Messages_Spans_Are_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,137 +14,81 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] -public class AsyncCommandProcessorMultipleClearObservabilityTests +[NotInParallel("Observability")] +public class AsyncCommandProcessorMultipleClearObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly string _topic; private readonly InternalBus _internalBus = new(); - public AsyncCommandProcessorMultipleClearObservabilityTests() { _topic = "MyCommand"; - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy + } + }; + var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + InMemoryOutbox outbox = new(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var routingKey = new RoutingKey(_topic); - var type = new CloudEventsType("io.goparamore.brighter.myevent"); - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication - { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = routingKey, - Type = type, - } - ); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - {new ProducerKey(routingKey, type), messageProducer} - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = routingKey, Type = type, }); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(routingKey, type), messageProducer } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - - [Fact] + + [Test] public async Task When_Clearing_A_Message_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act var messageIds = await _commandProcessor.DepositPostAsync([eventOne, eventTwo, eventThree], context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; await _commandProcessor.ClearOutboxAsync(messageIds, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(19, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(19); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - + await Assert.That(createActivity).IsNotNull(); //there should be a clear span for each message id var clearActivity = _exportedActivities.Where(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - Assert.Equal(3, clearActivity.Count()); - + await Assert.That(clearActivity.Count()).IsEqualTo(3); //there should be a span in the Db for retrieving the batch of messages var outBoxActivity = _exportedActivities.Where(a => a.DisplayName == $"{BoxDbOperation.Get.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Single(outBoxActivity); - + await Assert.That(outBoxActivity).HasSingleItem(); //there should be a span for publishing the message via the producer var producerActivity = _exportedActivities.Where(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.Equal(3, producerActivity.Count()); - + await Assert.That(producerActivity.Count()).IsEqualTo(3); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multiple_Messages_Spans_Are_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multiple_Messages_Spans_Are_Exported.cs index 9cfc96192c..8cd043bbc3 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multiple_Messages_Spans_Are_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Multiple_Messages_Spans_Are_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -13,135 +13,79 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] -public class CommandProcessorMultipleClearObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorMultipleClearObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly InternalBus _internalBus = new(); - public CommandProcessorMultipleClearObservabilityTests() { var routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - - var cloudEventsType = new CloudEventsType("io.goparamore.brighter.myevent"); - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = routingKey, - Type = cloudEventsType, + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy } - ); - - var producerRegistry = new ProducerRegistry(new Dictionary + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) { - {new ProducerKey(routingKey, cloudEventsType), messageProducer} - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + var cloudEventsType = new CloudEventsType("io.goparamore.brighter.myevent"); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = routingKey, Type = cloudEventsType, }); + var producerRegistry = new ProducerRegistry(new Dictionary { { new ProducerKey(routingKey, cloudEventsType), messageProducer } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - - [Fact] - public void When_Clearing_A_Message_A_Span_Is_Exported() + + [Test] + public async Task When_Clearing_A_Message_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act var messageIds = _commandProcessor.DepositPost([eventOne, eventTwo, eventThree], context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; _commandProcessor.ClearOutbox(messageIds, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(19, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(19); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - + await Assert.That(createActivity).IsNotNull(); //there should be a clear span for each message id var clearActivity = _exportedActivities.Where(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - Assert.Equal(3, clearActivity.Count()); - + await Assert.That(clearActivity.Count()).IsEqualTo(3); //there should be a span in the Db for retrieving the batch of messages var outBoxActivity = _exportedActivities.Where(a => a.DisplayName == $"{BoxDbOperation.Get.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.Single(outBoxActivity); - + await Assert.That(outBoxActivity).HasSingleItem(); //there should be a span for publishing the message via the producer var producerActivity = _exportedActivities.Where(a => a.DisplayName == $"{"MyEvent"} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.Equal(3, producerActivity.Count()); + await Assert.That(producerActivity.Count()).IsEqualTo(3); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported.cs index 21d3b9f989..b297562c3b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -15,12 +15,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] -public class CommandProcessorClearOutstandingObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorClearOutstandingObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; @@ -28,155 +26,94 @@ public class CommandProcessorClearOutstandingObservabilityTests private readonly string _topic; private readonly InternalBus _internalBus = new(); private readonly IAmAnOutboxProducerMediator _mediator; - public CommandProcessorClearOutstandingObservabilityTests() { _topic = "MyEvent"; - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy + } + }; + var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); + InMemoryOutbox outbox = new(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - var routingKey = new RoutingKey(_topic); - - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication - { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = routingKey, - Type = new CloudEventsType("io.goparamore.brighter.myevent"), - }); - - var producerRegistry = new ProducerRegistry(new Dictionary - { - {routingKey, messageProducer} - }); - - _mediator = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - _mediator, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = routingKey, Type = new CloudEventsType("io.goparamore.brighter.myevent"), }); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer } }); + _mediator = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), _mediator, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - - [Fact(Skip = "This test is fragile due to background processing")] - //[Fact] + + [Test, Skip("This test is fragile due to background processing")] + //[Test] public async Task When_Clearing_Outstanding_Messages_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.DepositPost([eventOne, eventTwo, eventThree], context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; await _mediator.ClearOutstandingFromOutboxAsync(3, TimeSpan.Zero, false, context); - - await Task.Delay(3000); //allow bulk clear to run -- can make test fragile - + await Task.Delay(3000); //allow bulk clear to run -- can make test fragile parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert //_exportedActivities.Count.Should().Be(18); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - + await Assert.That(createActivity).IsNotNull(); //there should be a clear span for the batch of messages var clearActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - //retrieving the messages should be an event var events = clearActivity.Events.ToList(); var messages = _internalBus.Stream(new RoutingKey(_topic)).ToArray(); - var depositEvents = events.Where(e => e.Name == BoxDbOperation.OutStandingMessages.ToSpanName()).ToArray(); - Assert.Equal(messages.Length, depositEvents.Length); - + await Assert.That(depositEvents.Length).IsEqualTo(messages.Length); foreach (var message in messages) { var depositEvent = depositEvents.Single(e => e.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id)); - Assert.Contains(depositEvent.Tags, a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "sync"); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestination && (string)a.Value == message.Header.Topic); - Assert.Contains(depositEvent.Tags, a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString()); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header)); + await Assert.That(depositEvent.Tags).Contains(a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "sync"); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestination && (string)a.Value == message.Header.Topic); + await Assert.That(depositEvent.Tags).Contains(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString()); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header)); } //there should be a span in the Db for retrieving the message - var outBoxActivity = _exportedActivities - .Single(a => - a.DisplayName == $"{BoxDbOperation.OutStandingMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}" - ); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.OutStandingMessages.ToSpanName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); - + var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.OutStandingMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.OutStandingMessages.ToSpanName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); //there should be a span for publishing the message via the producer - var producerActivity = _exportedActivities - .Single(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - + var producerActivity = _exportedActivities.Single(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); var producerEvents = producerActivity.Events.ToArray(); - Assert.Equal(3, producerEvents.Length); + await Assert.That(producerEvents.Length).IsEqualTo(3); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported_Bulk.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported_Bulk.cs index cc43cda55a..9313c1e866 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported_Bulk.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_Outstanding_Messages_Spans_Are_Exported_Bulk.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -15,12 +15,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; - -[Collection("Observability")] -public class AsyncCommandProcessorBulkClearOutstandingObservabilityTests +[NotInParallel("Observability")] +public class AsyncCommandProcessorBulkClearOutstandingObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; @@ -28,154 +26,94 @@ public class AsyncCommandProcessorBulkClearOutstandingObservabilityTests private readonly string _topic; private readonly InternalBus _internalBus = new(); private readonly IAmAnOutboxProducerMediator _mediator; - public AsyncCommandProcessorBulkClearOutstandingObservabilityTests() { _topic = "MyEvent"; - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - - var routingKey = new RoutingKey(_topic); - InMemoryMessageProducer messageProducer = new(_internalBus, - new Publication + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { { - Source = new Uri("http://localhost"), - RequestType = typeof(MyEvent), - Topic = routingKey, - Type = new CloudEventsType("io.goparamore.brighter.myevent") + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy } - ); - - var producerRegistry = new ProducerRegistry(new Dictionary + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) { - {routingKey, messageProducer} - }); - - _mediator = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - _mediator, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + var routingKey = new RoutingKey(_topic); + InMemoryMessageProducer messageProducer = new(_internalBus, new Publication { Source = new Uri("http://localhost"), RequestType = typeof(MyEvent), Topic = routingKey, Type = new CloudEventsType("io.goparamore.brighter.myevent") }); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, messageProducer } }); + _mediator = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), _mediator, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - - [Fact(Skip = "This test is fragile due to background processing")] - //[Fact] + + [Test, Skip("This test is fragile due to background processing")] + //[Test] public async Task When_Clearing_Outstanding_Messages_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.DepositPostAsync([eventOne, eventTwo, eventThree], context); - //reset the parent span as deposit and clear are siblings - context.Span = parentActivity; await _mediator.ClearOutstandingFromOutboxAsync(3, TimeSpan.Zero, useBulk: true, requestContext: context); - - await Task.Delay(3000); //allow bulk clear to run -- can make test fragile - + await Task.Delay(3000); //allow bulk clear to run -- can make test fragile parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert //_exportedActivities.Count.Should().Be(18); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); //there should be a create span for the batch var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - + await Assert.That(createActivity).IsNotNull(); //there should be a clear span for the batch of messages var clearActivity = _exportedActivities.Single(a => a.DisplayName == $"{BrighterSemanticConventions.ClearMessages} {CommandProcessorSpanOperation.Clear.ToSpanName()}"); - //retrieving the messages should be an event var events = clearActivity.Events.ToList(); var messages = _internalBus.Stream(new RoutingKey(_topic)).ToArray(); - var depositEvents = events.Where(e => e.Name == BoxDbOperation.OutStandingMessages.ToSpanName()).ToArray(); - Assert.Equal(messages.Length, depositEvents.Length); - + await Assert.That(depositEvents.Length).IsEqualTo(messages.Length); foreach (var message in messages) { var depositEvent = depositEvents.Single(e => e.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id)); - Assert.Contains(depositEvent.Tags, a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "async"); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestination && (string)a.Value == message.Header.Topic); - Assert.Contains(depositEvent.Tags, a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString()); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey); - Assert.Contains(depositEvent.Tags, a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header)); + await Assert.That(depositEvent.Tags).Contains(a => a.Value != null && a.Key == BrighterSemanticConventions.OutboxSharedTransaction && (bool)a.Value == false); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "async"); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestination && (string)a.Value == message.Header.Topic); + await Assert.That(depositEvent.Tags).Contains(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString()); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey); + await Assert.That(depositEvent.Tags).Contains(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header)); } - //there should be a span in the Db for retrieving the message - var outBoxActivity = _exportedActivities - .Single(a => - a.DisplayName == $"{BoxDbOperation.OutStandingMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}" - ); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.OutStandingMessages.ToSpanName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); - Assert.Contains(outBoxActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); + //there should be a span in the Db for retrieving the message + var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.OutStandingMessages.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.OutStandingMessages.ToSpanName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName()); + await Assert.That(outBoxActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); //there should be a span for publishing the message via the producer - var producerActivity = _exportedActivities - .Single(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - + var producerActivity = _exportedActivities.Single(a => a.DisplayName == $"{_topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); var producerEvents = producerActivity.Events.ToArray(); - Assert.Equal(3, producerEvents.Length); + await Assert.That(producerEvents.Length).IsEqualTo(3); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs index d9d2d51795..3074c1df65 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -15,138 +15,92 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyEvent = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyEvent; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Deposit; - -[Collection("Observability")] -public class CommandProcessorDepositObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorDepositObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly InMemoryOutbox _outbox; - public CommandProcessorDepositObservabilityTests() { var routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry { { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent)}) + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy } - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent) }) } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] - public void When_Depositing_A_Request_A_Span_Is_Exported() + [Test] + public async Task When_Depositing_A_Request_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.DepositPost(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var depositActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Deposit.ToSpanName()}"); - Assert.NotNull(depositActivity); - Assert.Equal(parentActivity?.Id, depositActivity.ParentId); - - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "deposit" })); - + await Assert.That(depositActivity).IsNotNull(); + await Assert.That(depositActivity.ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "deposit" })).IsTrue(); var events = depositActivity.Events.ToList(); - Assert.Equal(2, events.Count); - + await Assert.That(events.Count).IsEqualTo(2); //mapping a message should be an event var mapperEvent = events.Single(e => e.Name == $"{nameof(MyEventMessageMapper)}"); - Assert.True(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapper))); - Assert.True(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "sync")); - + await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapper))).IsTrue(); + await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "sync")).IsTrue(); //depositing a message should be an event var message = _outbox.OutstandingMessages(TimeSpan.Zero, context).Single(); var depositEvent = events.Single(e => e.Name == BoxDbOperation.Add.ToSpanName()); - Assert.True(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "sync" )); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id )); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)a.Value == message.Header.Topic)); - Assert.True(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString())); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header))); - + await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "sync")).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)a.Value == message.Header.Topic)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString())).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header))).IsTrue(); //-- there should be a span for the outbox itself to use for its call; even in-memory here; should use for the span name var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName())); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName())).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs index 05f18504a5..78ef9d23a9 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -16,139 +16,92 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyEvent = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyEvent; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Deposit; - -[Collection("Observability")] -public class AsyncCommandProcessorDepositObservabilityTests +[NotInParallel("Observability")] +public class AsyncCommandProcessorDepositObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly InMemoryOutbox _outbox; - public AsyncCommandProcessorDepositObservabilityTests() { var routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - _outbox = new InMemoryOutbox(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync()) - ); - messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry { { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent)}) + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy } - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - _outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + _outbox = new InMemoryOutbox(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent) }) } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), _outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Depositing_A_Request_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.DepositPostAsync(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var depositActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Deposit.ToSpanName()}"); - Assert.NotNull(depositActivity); - Assert.Equal(parentActivity?.Id, depositActivity.ParentId); - - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "deposit" })); - + await Assert.That(depositActivity).IsNotNull(); + await Assert.That(depositActivity.ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "deposit" })).IsTrue(); var events = depositActivity.Events.ToList(); - Assert.Equal(2, events.Count); - + await Assert.That(events.Count).IsEqualTo(2); //mapping a message should be an event var mapperEvent = events.Single(e => e.Name == $"{nameof(MyEventMessageMapperAsync)}"); - Assert.True(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapperAsync))); - Assert.True(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "async")); - + await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapperAsync))).IsTrue(); + await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "async")).IsTrue(); //depositing a message should be an event var message = _outbox.OutstandingMessages(TimeSpan.Zero, context).Single(); var depositEvent = events.Single(e => e.Name == BoxDbOperation.Add.ToSpanName()); - Assert.True(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "async" )); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id )); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)a.Value == message.Header.Topic)); - Assert.True(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString())); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey)); - Assert.True(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header))); - + await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "async")).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageId && (string)a.Value == message.Id)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestination && (RoutingKey)a.Value == message.Header.Topic)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.MessageBodySize } && (int)a.Value == message.Body.Bytes.Length)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageBody && (string)a.Value == message.Body.Value)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageType && (string)a.Value == message.Header.MessageType.ToString())).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)a.Value == message.Header.PartitionKey)).IsTrue(); + await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MessageHeaders && (string)a.Value == JsonSerializer.Serialize(message.Header))).IsTrue(); //-- there should be a span for the outbox itself to use for its call; even in-memory here; should use for the span name var outBoxActivity = _exportedActivities.Single(a => a.DisplayName == $"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName())); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())); - Assert.True(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)); - + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName())).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable)).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.Brighter.ToDbName())).IsTrue(); + await Assert.That(outBoxActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported.cs index 4d071bac44..2ed387da5c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -15,126 +15,84 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyEvent = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyEvent; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Deposit; - -[Collection("Observability")] +[NotInParallel("Observability")] public class CommandProcessorMultipleDepositObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; - public CommandProcessorMultipleDepositObservabilityTests() { var routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - var producerRegistry = new ProducerRegistry(new Dictionary + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry { { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent)}) + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy } - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory((_) => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent) }) } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] - public void When_Depositing_A_Request_A_Span_Is_Exported() + [Test] + public async Task When_Depositing_A_Request_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - var events = new[] {eventOne, eventTwo, eventThree}; - - var context = new RequestContext { Span = parentActivity }; - + var events = new[] + { + eventOne, + eventTwo, + eventThree + }; + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.DepositPost(events, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(8, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - + await Assert.That(_exportedActivities.Count).IsEqualTo(8); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); //first there should be a create activity for the bulk deposit var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //Then we should see three activities for each of the deposits var depositActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Deposit.ToSpanName()}").ToList(); - Assert.Equal(3, depositActivities.Count); - - for(int i = 0; i < 3; i++) + await Assert.That(depositActivities.Count).IsEqualTo(3); + for (int i = 0; i < 3; i++) { var depositActivity = depositActivities.ElementAt(i); - Assert.Equal(createActivity.Id, depositActivity.ParentId); - - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == events[i].Id)); - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(events[i], JsonSerialisationOptions.Options))); + await Assert.That(depositActivity.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == events[i].Id)).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(events[i], JsonSerialisationOptions.Options))).IsTrue(); } - - //TODO: When we deposit multiple we do a bulk write to the Outbox, so we should expect to see a bulk operation at the Db level - // and not an individual operation - + //TODO: When we deposit multiple we do a bulk write to the Outbox, so we should expect to see a bulk operation at the Db level + // and not an individual operation } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported_Async.cs index 7076c23539..edeb2e0599 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_Multiple_Requests_Spans_Are_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -16,126 +16,84 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; using MyEvent = Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles.MyEvent; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Deposit; - -[Collection("Observability")] +[NotInParallel("Observability")] public class AsyncCommandProcessorMultipleDepositObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; - public AsyncCommandProcessorMultipleDepositObservabilityTests() { var routingKey = new RoutingKey("MyEvent"); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var registry = new SubscriberRegistry(); - - var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - InMemoryOutbox outbox = new(timeProvider){Tracer = tracer}; - - var messageMapperRegistry = new MessageMapperRegistry( - null, - new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - - var producerRegistry = new ProducerRegistry(new Dictionary + var handlerFactory = new PostCommandTests.EmptyHandlerFactorySync(); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry { { - routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent)}) + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy } - }); - - IAmAnOutboxProducerMediator bus = new OutboxProducerMediator( - producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), - messageMapperRegistry, - new EmptyMessageTransformerFactory(), - new EmptyMessageTransformerFactoryAsync(), - tracer, - new FindPublicationByPublicationTopicOrRequestType(), - outbox, - maxOutStandingMessages: -1 - ); - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - bus, - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + }; + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + InMemoryOutbox outbox = new(timeProvider) + { + Tracer = tracer + }; + var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); + messageMapperRegistry.RegisterAsync(); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyEvent) }) } }); + IAmAnOutboxProducerMediator bus = new OutboxProducerMediator(producerRegistry, new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), tracer, new FindPublicationByPublicationTopicOrRequestType(), outbox, maxOutStandingMessages: -1); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), bus, new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Depositing_A_Request_A_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var eventOne = new MyEvent(); var eventTwo = new MyEvent(); var eventThree = new MyEvent(); - var events = new[] {eventOne, eventTwo, eventThree}; - - var context = new RequestContext { Span = parentActivity }; - + var events = new[] + { + eventOne, + eventTwo, + eventThree + }; + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.DepositPostAsync(events, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(8, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - + await Assert.That(_exportedActivities.Count).IsEqualTo(8); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); //first there should be a create activity for the bulk deposit var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //Then we should see three activities for each of the deposits var depositActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Deposit.ToSpanName()}").ToList(); - Assert.Equal(3, depositActivities.Count); - - for(int i = 0; i < 3; i++) + await Assert.That(depositActivities.Count).IsEqualTo(3); + for (int i = 0; i < 3; i++) { var depositActivity = depositActivities.ElementAt(i); - Assert.Equal(createActivity.Id, depositActivity.ParentId); - - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == events[i].Id)); - Assert.True(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(events[i], JsonSerialisationOptions.Options))); + await Assert.That(depositActivity.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == events[i].Id)).IsTrue(); + await Assert.That(depositActivity.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(events[i], JsonSerialisationOptions.Options))).IsTrue(); } - - //TODO: When we deposit multiple we do a bulk write to the Outbox, so we should expect to see a bulk operation at the Db level - // and not an individual operation - + //TODO: When we deposit multiple we do a bulk write to the Outbox, so we should expect to see a bulk operation at the Db level + // and not an individual operation } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs index 03bca93acb..5402200b56 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -11,35 +11,23 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Publish; - -[Collection("Observability")] -public class CommandProcessorPublishObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorPublishObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; - public CommandProcessorPublishObservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.Register(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { switch (type.Name) @@ -52,81 +40,64 @@ public CommandProcessorPublishObservabilityTests() throw new ArgumentOutOfRangeException(nameof(type.Name), type.Name, null); } }); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy + } + }; + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] - public void When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are_Exported() + [Test] + public async Task When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.Publish(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(4, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(4); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandler))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); var activityEvent = first.Events.Single(e => e.Name == nameof(MyEventHandler) || e.Name == nameof(MyOtherEventHandler)); - Assert.True(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == activityEvent.Name)); - Assert.True(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(activityEvent.Tags.Any(t => t.Value != null && t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == activityEvent.Name)).IsTrue(); + await Assert.That(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(activityEvent.Tags.Any(t => t.Value != null && t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandler))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); activityEvent = second.Events.Single(e => e.Name == nameof(MyEventHandler) || e.Name == nameof(MyOtherEventHandler)); - Assert.True(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == activityEvent.Name)); - Assert.True(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(activityEvent.Tags.Any(t => t.Value != null && t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == activityEvent.Name)).IsTrue(); + await Assert.That(activityEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(activityEvent.Tags.Any(t => t.Value != null && t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); @@ -135,64 +106,53 @@ public void When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are_Expor */ } - [Fact] - public void When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_Are_Exported() + [Test] + public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); var context = new RequestContext(); Activity.Current = parentActivity; - //act _commandProcessor.Publish(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(4, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(4); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandler))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, first.Events.Count()); - Assert.Equal(nameof(MyEventHandler), first.Events.First().Name); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandler))); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(first.Events.Count()).IsEqualTo(1); + await Assert.That(first.Events.First().Name).IsEqualTo(nameof(MyEventHandler)); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandler))).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandler))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, second.Events.Count()); - Assert.Equal(nameof(MyOtherEventHandler), second.Events.First().Name); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandler))); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(second.Events.Count()).IsEqualTo(1); + await Assert.That(second.Events.First().Name).IsEqualTo(nameof(MyOtherEventHandler)); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandler))).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); @@ -201,66 +161,55 @@ public void When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_A */ } - [Fact] - public void When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() + [Test] + public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange var @event = new MyEvent(); var context = new RequestContext(); - //act _commandProcessor.Publish(@event, context); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Null(createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsNull(); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandler))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, first.Events.Count()); - Assert.Equal(nameof(MyEventHandler), first.Events.First().Name); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandler))); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(first.Events.Count()).IsEqualTo(1); + await Assert.That(first.Events.First().Name).IsEqualTo(nameof(MyEventHandler)); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandler))).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandler))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, second.Events.Count()); - Assert.Equal(nameof(MyOtherEventHandler), second.Events.First().Name); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandler))); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(second.Events.Count()).IsEqualTo(1); + await Assert.That(second.Events.First().Name).IsEqualTo(nameof(MyOtherEventHandler)); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandler))).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); second.Links.Count().Should().Be(1); second.Links.Single().Context.Should().Be(first.Context); - */ + */ } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs index f4260079b3..2b6aee2f8c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -12,34 +12,22 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Publish; - -public class AsyncCommandProcessorPublishObservabilityTests +public class AsyncCommandProcessorPublishObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; - public AsyncCommandProcessorPublishObservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { switch (type.Name) @@ -52,83 +40,66 @@ public AsyncCommandProcessorPublishObservabilityTests() throw new ArgumentOutOfRangeException(nameof(type.Name), type.Name, null); } }); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy + } + }; + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); - var context = new RequestContext { Span = parentActivity }; - + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.PublishAsync(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(4, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(4); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandlerAsync))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, first.Events.Count()); - Assert.Equal(nameof(MyEventHandlerAsync), first.Events.First().Name); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(first.Events.Count()).IsEqualTo(1); + await Assert.That(first.Events.First().Name).IsEqualTo(nameof(MyEventHandlerAsync)); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandlerAsync))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, second.Events.Count()); - Assert.Equal(nameof(MyOtherEventHandlerAsync), second.Events.First().Name); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(second.Events.Count()).IsEqualTo(1); + await Assert.That(second.Events.First().Name).IsEqualTo(nameof(MyOtherEventHandlerAsync)); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); @@ -137,64 +108,53 @@ public async Task When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are */ } - [Fact] + [Test] public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_Are_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - var @event = new MyEvent(); var context = new RequestContext(); Activity.Current = parentActivity; - //act await _commandProcessor.PublishAsync(@event, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(4, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(4); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Equal(parentActivity?.Id, createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsEqualTo(parentActivity?.Id); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandlerAsync))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, first.Events.Count()); - Assert.Equal(nameof(MyEventHandlerAsync), first.Events.First().Name); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(first.Events.Count()).IsEqualTo(1); + await Assert.That(first.Events.First().Name).IsEqualTo(nameof(MyEventHandlerAsync)); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandlerAsync))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, second.Events.Count()); - Assert.Equal(nameof(MyOtherEventHandlerAsync), second.Events.First().Name); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(second.Events.Count()).IsEqualTo(1); + await Assert.That(second.Events.First().Name).IsEqualTo(nameof(MyOtherEventHandlerAsync)); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); @@ -203,66 +163,55 @@ public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_S */ } - [Fact] + [Test] public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange var @event = new MyEvent(); var context = new RequestContext(); - //act await _commandProcessor.PublishAsync(@event, context); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var createActivity = _exportedActivities.Single(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Create.ToSpanName()}"); - Assert.NotNull(createActivity); - Assert.Null(createActivity.ParentId); - + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity.ParentId).IsNull(); //parent span and child spans for each publish operation - Assert.Equal(2, _exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsEqualTo(2); var publishActivities = _exportedActivities.Where(a => a.DisplayName == $"{nameof(MyEvent)} {CommandProcessorSpanOperation.Publish.ToSpanName()}").ToList(); - //--first publish var first = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyEventHandlerAsync))); - Assert.Equal(createActivity.Id, first.ParentId); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, first.Events.Count()); - Assert.Equal(nameof(MyEventHandlerAsync), first.Events.First().Name); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - + await Assert.That(first.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(first.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(first.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(first.Events.Count()).IsEqualTo(1); + await Assert.That(first.Events.First().Name).IsEqualTo(nameof(MyEventHandlerAsync)); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyEventHandlerAsync))).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(first.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); //--second publish var second = publishActivities.First(activity => activity.Events.Any(e => e.Name == nameof(MyOtherEventHandlerAsync))); - Assert.Equal(createActivity.Id, second.ParentId); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })); - Assert.True(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))); - Assert.True(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(1, second.Events.Count()); - Assert.Equal(nameof(MyOtherEventHandlerAsync), second.Events.First().Name); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released - /* + await Assert.That(second.ParentId).IsEqualTo(createActivity.Id); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == @event.Id)).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyEvent) })).IsTrue(); + await Assert.That(second.Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(@event, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(second.Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(second.Events.Count()).IsEqualTo(1); + await Assert.That(second.Events.First().Name).IsEqualTo(nameof(MyOtherEventHandlerAsync)); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyOtherEventHandlerAsync))).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(second.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + //TODO: Needs adding when https://github.com/dotnet/runtime/pull/101381 is released + /* //--check the links first.Links.Count().Should().Be(1); first.Links.Single().Context.Should().Be(second.Context); second.Links.Count().Should().Be(1); second.Links.Single().Context.Should().Be(first.Context); - */ + */ } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported.cs index d6e6bc55ae..998f46bd51 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,177 +14,143 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Scheduler; - -[Collection("Observability")] -public class CommandProcessorSchedulerObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorSchedulerObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly FakeTimeProvider _timeProvider; - public CommandProcessorSchedulerObservabilityTests() { - PipelineBuilder.ClearPipelineCache(); - _timeProvider = new FakeTimeProvider(DateTimeOffset.Now); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.Register(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactory(_ => new MyCommandHandler(new Dictionary()), _ => new FireSchedulerRequestHandler(_commandProcessor!)); - - var policyRegistry = new PolicyRegistry + var policyRegistry = new PolicyRegistry { - {Brighter.CommandProcessor.RETRYPOLICY, Policy.Handle().Retry()}, - {Brighter.CommandProcessor.RETRYPOLICYASYNC, Policy.Handle().RetryAsync()}, - + { + Brighter.CommandProcessor.RETRYPOLICY, + Policy.Handle().Retry() + }, + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + Policy.Handle().RetryAsync() + }, }; - - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory{TimeProvider = _timeProvider}, - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory { TimeProvider = _timeProvider }, tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] - public void When_Scheduling_A_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported() + [Test] + public async Task When_Scheduling_A_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{ Value = "My Test String" }; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.Send(TimeSpan.FromSeconds(1), command, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")); - Assert.Equal(parentActivity?.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })); - Assert.Equal(0, _exportedActivities.First().Events.Count()); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(0); _exportedActivities.Clear(); - parentActivity?.Start(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - parentActivity?.Stop(); _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(MyCommandHandler), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })); - Assert.True(_exportedActivities[1].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))); - Assert.True(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(FireSchedulerRequestHandler), _exportedActivities[1].Events.First().Name); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandler)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Name).IsEqualTo(nameof(FireSchedulerRequestHandler)); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] - public void When_Scheduling_A_Publish_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported() + + [Test] + public async Task When_Scheduling_A_Publish_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{ Value = "My Test String" }; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act _commandProcessor.Publish(TimeSpan.FromSeconds(1), command, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")); - Assert.Equal(parentActivity?.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })); - Assert.Equal(0, _exportedActivities.First().Events.Count()); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(0); _exportedActivities.Clear(); - parentActivity?.Start(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - parentActivity?.Stop(); _traceProvider.ForceFlush(); - - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(nameof(MyCommandHandler), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })); - Assert.True(_exportedActivities[2].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))); - Assert.True(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(FireSchedulerRequestHandler), _exportedActivities[2].Events.First().Name); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandler)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Name).IsEqualTo(nameof(FireSchedulerRequestHandler)); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported_Async.cs index 46ff28597e..4cd54ea869 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Scheduler/When_Scheduling_A_Request_A_Span_Is_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -15,40 +15,25 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Scheduler; - -[Collection("Observability")] -public class CommandProcessorSchedulerObservabilityAsyncTests +[NotInParallel("Observability")] +public class CommandProcessorSchedulerObservabilityAsyncTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; private readonly FakeTimeProvider _timeProvider; - public CommandProcessorSchedulerObservabilityAsyncTests() { - PipelineBuilder.ClearPipelineCache(); - _timeProvider = new FakeTimeProvider(DateTimeOffset.Now); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactory(_ => null!, type => { if (type == typeof(FireSchedulerRequestHandler)) @@ -58,142 +43,119 @@ public CommandProcessorSchedulerObservabilityAsyncTests() return new MyCommandHandlerAsync(new Dictionary()); }); - - var policyRegistry = new PolicyRegistry + var policyRegistry = new PolicyRegistry { - {Brighter.CommandProcessor.RETRYPOLICYASYNC, Policy.Handle().RetryAsync()}, - + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + Policy.Handle().RetryAsync() + }, }; - - - _commandProcessor = new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory{TimeProvider = _timeProvider}, - tracer: tracer, - instrumentationOptions: InstrumentationOptions.All - ); + _commandProcessor = new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory { TimeProvider = _timeProvider }, tracer: tracer, instrumentationOptions: InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_Scheduling_A_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported_Async() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{ Value = "My Test String" }; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.SendAsync(TimeSpan.FromSeconds(1), command, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")); - Assert.Equal(parentActivity?.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })); - Assert.Equal(0, _exportedActivities.First().Events.Count()); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(0); _exportedActivities.Clear(); - parentActivity?.Start(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - parentActivity?.Stop(); _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(MyCommandHandlerAsync), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })); - Assert.True(_exportedActivities[1].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))); - Assert.True(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(FireSchedulerRequestHandler), _exportedActivities[1].Events.First().Name); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandlerAsync)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))).IsTrue(); + await Assert.That(_exportedActivities[1].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Name).IsEqualTo(nameof(FireSchedulerRequestHandler)); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities[1].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] + + [Test] public async Task When_Scheduling_A_Publish_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported_Async() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{ Value = "My Test String" }; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act await _commandProcessor.PublishAsync(TimeSpan.FromSeconds(1), command, context); - parentActivity?.Stop(); - _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")); - Assert.Equal(parentActivity?.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })); - Assert.Equal(0, _exportedActivities.First().Events.Count()); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Scheduler.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "scheduler" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(0); _exportedActivities.Clear(); - parentActivity?.Start(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - parentActivity?.Stop(); _traceProvider.ForceFlush(); - - Assert.Equal(3, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })); - - Assert.Equal(nameof(MyCommandHandlerAsync), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); - - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.True(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })); - Assert.True(_exportedActivities[2].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))); - Assert.True(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(nameof(FireSchedulerRequestHandler), _exportedActivities[2].Events.First().Name); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Publish.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "publish" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandlerAsync)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(FireSchedulerRequest)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(FireSchedulerRequest) })).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && !string.IsNullOrEmpty(t.Value))).IsTrue(); + await Assert.That(_exportedActivities[2].Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Name).IsEqualTo(nameof(FireSchedulerRequestHandler)); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(FireSchedulerRequestHandler))).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities[2].Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } -} - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs index d965fb7353..4a97732064 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -11,175 +11,147 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Send; - -[Collection("Observability")] -public class CommandProcessorSendObservabilityTests +[NotInParallel("Observability")] +public class CommandProcessorSendObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; - public CommandProcessorSendObservabilityTests() { - PipelineBuilder.ClearPipelineCache(); - var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); } - - [Theory] - [InlineData(InstrumentationOptions.All)] - [InlineData(InstrumentationOptions.None)] - [InlineData(InstrumentationOptions.RequestBody)] - [InlineData(InstrumentationOptions.RequestContext)] - [InlineData(InstrumentationOptions.RequestInformation)] - public void When_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported(InstrumentationOptions instrumentationOptions) + [Test] + [Arguments(InstrumentationOptions.All)] + [Arguments(InstrumentationOptions.None)] + [Arguments(InstrumentationOptions.RequestBody)] + [Arguments(InstrumentationOptions.RequestContext)] + [Arguments(InstrumentationOptions.RequestInformation)] + public async Task When_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported(InstrumentationOptions instrumentationOptions) { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{Value = "My Test String"}; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act CreateCommandProcessor(instrumentationOptions).Send(command, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); var firstActivity = _exportedActivities.First(); - - Assert.Equal(parentActivity?.Id, firstActivity.ParentId); - if(instrumentationOptions == InstrumentationOptions.None) - Assert.Empty(firstActivity.Tags); + await Assert.That(firstActivity.ParentId).IsEqualTo(parentActivity?.Id); + if (instrumentationOptions == InstrumentationOptions.None) + await Assert.That(firstActivity.Tags).IsEmpty(); if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id); - Assert.Contains(firstActivity.Tags, t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) }); - Assert.Contains(firstActivity.Tags, t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" }); + await Assert.That(firstActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id); + await Assert.That(firstActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) }); + await Assert.That(firstActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" }); } else { - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestId); - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestType); - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.Operation); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestId); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestType); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.Operation); } - - if(instrumentationOptions.HasFlag(InstrumentationOptions.RequestBody)) - Assert.Contains(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); + + if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestBody)) + await Assert.That(firstActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); else - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestBody); - - - Assert.Equal(1, firstActivity.Events.Count()); - Assert.Equal(nameof(MyCommandHandler), firstActivity.Events.First().Name); - Assert.True(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))); - Assert.True(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestBody); + await Assert.That(firstActivity.Events.Count()).IsEqualTo(1); + await Assert.That(firstActivity.Events.First().Name).IsEqualTo(nameof(MyCommandHandler)); + await Assert.That(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))).IsTrue(); + await Assert.That(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(firstActivity.Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] - public void When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Span_Is_Exported() + + [Test] + public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{Value = "My Test String"}; + var command = new MyCommand + { + Value = "My Test String" + }; var context = new RequestContext(); Activity.Current = parentActivity; - //act CreateCommandProcessor(InstrumentationOptions.All).Send(command, context); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.Equal(parentActivity?.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(1, _exportedActivities.First().Events.Count()); - Assert.Equal(nameof(MyCommandHandler), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity?.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(1); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandler)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] - public void When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() + + [Test] + public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange - var command = new MyCommand{Value = "My Test String"}; + var command = new MyCommand + { + Value = "My Test String" + }; var context = new RequestContext(); - //act CreateCommandProcessor(InstrumentationOptions.All).Send(command, context); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(1, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.Null(_exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(1, _exportedActivities.First().Events.Count()); - Assert.Equal(nameof(MyCommandHandler), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(1); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsNull(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(1); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandler)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandler))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } private IAmACommandProcessor CreateCommandProcessor(InstrumentationOptions instrumentationOptions) { BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyCommandHandler(new Dictionary())); - - var retryPolicy = Policy - .Handle() - .Retry(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICY, retryPolicy}}; - - - return new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions - ); + var retryPolicy = Policy.Handle().Retry(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICY, + retryPolicy + } + }; + return new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs index adc496eafa..69a634c4a7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -13,178 +13,152 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Send; - -[Collection("Observability")] -public class AsyncCommandProcessorSendObservabilityTests +[NotInParallel("Observability")] +public class AsyncCommandProcessorSendObservabilityTests { private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Brighter.CommandProcessor _commandProcessor; - public AsyncCommandProcessorSendObservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _commandProcessor = CreateCommandProcessor(InstrumentationOptions.All); } - [Theory] - [InlineData(InstrumentationOptions.All)] - [InlineData(InstrumentationOptions.None)] - [InlineData(InstrumentationOptions.RequestBody)] - [InlineData(InstrumentationOptions.RequestContext)] - [InlineData(InstrumentationOptions.RequestInformation)] + [Test] + [Arguments(InstrumentationOptions.All)] + [Arguments(InstrumentationOptions.None)] + [Arguments(InstrumentationOptions.RequestBody)] + [Arguments(InstrumentationOptions.RequestContext)] + [Arguments(InstrumentationOptions.RequestInformation)] public async Task When_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Exported(InstrumentationOptions instrumentationOptions) { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{Value = "My Test String"}; - var context = new RequestContext { Span = parentActivity }; - + var command = new MyCommand + { + Value = "My Test String" + }; + var context = new RequestContext + { + Span = parentActivity + }; //act await CreateCommandProcessor(instrumentationOptions).SendAsync(command, context, true); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); var firstActivity = _exportedActivities.First(); - if(instrumentationOptions == InstrumentationOptions.None) - Assert.Empty(firstActivity.Tags); + if (instrumentationOptions == InstrumentationOptions.None) + await Assert.That(firstActivity.Tags).IsEmpty(); if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestInformation)) { - Assert.Contains(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id); - Assert.Contains(firstActivity.Tags, t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) }); - Assert.Contains(firstActivity.Tags, t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" }); - Assert.Contains(firstActivity.Tags, t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "send" }); + await Assert.That(firstActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id); + await Assert.That(firstActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) }); + await Assert.That(firstActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" }); + await Assert.That(firstActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "send" }); } else { - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestId); - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestType); - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.Operation); - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.MessagingOperationType); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestId); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestType); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.Operation); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.MessagingOperationType); } - - if(instrumentationOptions.HasFlag(InstrumentationOptions.RequestBody)) - Assert.Contains(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); + + if (instrumentationOptions.HasFlag(InstrumentationOptions.RequestBody)) + await Assert.That(firstActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); else - Assert.DoesNotContain(firstActivity.Tags, t => t.Key == BrighterSemanticConventions.RequestBody); - - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.Equal(parentActivity.Id, _exportedActivities.First().ParentId); - - Assert.Equal(1, _exportedActivities.First().Events.Count()); - Assert.Equal(nameof(MyCommandHandlerAsync), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(firstActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.RequestBody); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity.Id); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(1); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandlerAsync)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] + + [Test] public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Span_Is_Exported() { //arrange var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - - var command = new MyCommand{Value = "My Test String"}; + var command = new MyCommand + { + Value = "My Test String" + }; var context = new RequestContext(); Activity.Current = parentActivity; - //act await _commandProcessor.SendAsync(command, context, true, new CancellationToken()); parentActivity?.Stop(); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.Equal(parentActivity.Id, _exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(1, _exportedActivities.First().Events.Count()); - Assert.Equal(nameof(MyCommandHandlerAsync), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsEqualTo(parentActivity.Id); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(1); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandlerAsync)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } - - [Fact] + + [Test] public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange - var command = new MyCommand{Value = "My Test String"}; + var command = new MyCommand + { + Value = "My Test String" + }; var context = new RequestContext(); - //act await _commandProcessor.SendAsync(command, context, true, new CancellationToken()); - _traceProvider.ForceFlush(); - //assert - Assert.Equal(1, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - Assert.True(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")); - Assert.Null(_exportedActivities.First().ParentId); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })); - Assert.True(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))); - Assert.True(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })); - - Assert.Equal(1, _exportedActivities.First().Events.Count()); - Assert.Equal(nameof(MyCommandHandlerAsync), _exportedActivities.First().Events.First().Name); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")); - Assert.True(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)); + await Assert.That(_exportedActivities.Count).IsEqualTo(1); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + await Assert.That(_exportedActivities.Any(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}")).IsTrue(); + await Assert.That(_exportedActivities.First().ParentId).IsNull(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestId && t.Value == command.Id)).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.RequestType, Value: nameof(MyCommand) })).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t.Key == BrighterSemanticConventions.RequestBody && t.Value == JsonSerializer.Serialize(command, JsonSerialisationOptions.Options))).IsTrue(); + await Assert.That(_exportedActivities.First().Tags.Any(t => t is { Key: BrighterSemanticConventions.Operation, Value: "send" })).IsTrue(); + await Assert.That(_exportedActivities.First().Events.Count()).IsEqualTo(1); + await Assert.That(_exportedActivities.First().Events.First().Name).IsEqualTo(nameof(MyCommandHandlerAsync)); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerName && (string)t.Value == nameof(MyCommandHandlerAsync))).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.HandlerType && (string)t.Value == "async")).IsTrue(); + await Assert.That(_exportedActivities.First().Events.First().Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value)).IsTrue(); } private Brighter.CommandProcessor CreateCommandProcessor(InstrumentationOptions options) { BrighterTracer tracer = new(); - - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var receivedMessages = new Dictionary(); var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(receivedMessages)); - - var retryPolicy = Policy - .Handle() - .RetryAsync(); - - var policyRegistry = new PolicyRegistry {{Brighter.CommandProcessor.RETRYPOLICYASYNC, retryPolicy}}; - - - return new Brighter.CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - policyRegistry, - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: options - ); + var retryPolicy = Policy.Handle().RetryAsync(); + var policyRegistry = new PolicyRegistry + { + { + Brighter.CommandProcessor.RETRYPOLICYASYNC, + retryPolicy + } + }; + return new Brighter.CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: options); } - -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs index 1585a182a0..31c790a7b4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -6,10 +6,8 @@ using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Common; - public class BrighterSemanticConventionsDbSpanTests { private const string DbStatement = "INSERT INTO outbox (id, topic, message_id, message_body, message_type, time_to_live, created_at_utc) VALUES (@id, @topic, @message_id, @message_body, @message_type, @time_to_live, @created_at_utc)"; @@ -17,129 +15,95 @@ public class BrighterSemanticConventionsDbSpanTests private readonly TracerProvider _traceProvider; private readonly Activity _parentActivity; private readonly BrighterTracer _tracer; - public BrighterSemanticConventionsDbSpanTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _tracer = new BrighterTracer(); - _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterSemanticConventionsDbSpanTests"); + _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterSemanticConventionsDbSpanTests"); } - - [Theory] - [InlineData(InstrumentationOptions.All)] - [InlineData(InstrumentationOptions.DatabaseInformation)] - [InlineData(InstrumentationOptions.None)] - public void When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions(InstrumentationOptions options) + + [Test] + [Arguments(InstrumentationOptions.All)] + [Arguments(InstrumentationOptions.DatabaseInformation)] + [Arguments(InstrumentationOptions.None)] + public async Task When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions(InstrumentationOptions options) { //arrange - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("MyTopic"), MessageType.MT_COMMAND), - new MessageBody("test content") - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("MyTopic"), MessageType.MT_COMMAND), new MessageBody("test content")); //act var dbInstanceId = Guid.NewGuid().ToString(); - var childActivity = _tracer.CreateDbSpan( - new BoxSpanInfo( - dbSystem: DbSystem.MySql, - dbName: InMemoryAttributes.OutboxDbName, - dbOperation: BoxDbOperation.Add, - dbTable: InMemoryAttributes.DbTable, - serverPort:3306, - dbInstanceId: dbInstanceId, - dbStatement: DbStatement, - dbUser: "sa", - networkPeerAddress: "10.1.2.80", - networkPeerPort: 3306, - serverAddress: "http://localhost:3306" - ), - _parentActivity, - options: options - ); - + var childActivity = _tracer.CreateDbSpan(new BoxSpanInfo(dbSystem: DbSystem.MySql, dbName: InMemoryAttributes.OutboxDbName, dbOperation: BoxDbOperation.Add, dbTable: InMemoryAttributes.DbTable, serverPort: 3306, dbInstanceId: dbInstanceId, dbStatement: DbStatement, dbUser: "sa", networkPeerAddress: "10.1.2.80", networkPeerPort: 3306, serverAddress: "http://localhost:3306"), _parentActivity, options: options); childActivity.Stop(); _parentActivity.Stop(); - var flushed = _traceProvider.ForceFlush(); - - //assert - Assert.True(flushed); - + await Assert.That(flushed).IsTrue(); //check the created activity - Assert.Equal(_parentActivity.Id, childActivity.ParentId); - Assert.Equal($"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}", childActivity.DisplayName); - if(options == InstrumentationOptions.None) - Assert.Empty(childActivity.Tags); + await Assert.That(childActivity.ParentId).IsEqualTo(_parentActivity.Id); + await Assert.That(childActivity.DisplayName).IsEqualTo($"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + if (options == InstrumentationOptions.None) + await Assert.That(childActivity.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.MySql.ToDbName()); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); - Assert.Contains(childActivity.TagObjects, t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); - Assert.Contains(childActivity.TagObjects, t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); - + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.MySql.ToDbName()); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); + await Assert.That(childActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); + await Assert.That(childActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); } else { - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbStatement); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbUser); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerPort); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerPort); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbInstanceId); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbName); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbOperation); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbTable); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbSystem); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbStatement); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbUser); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerAddress); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerPort); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerPort); } //check via the exporter as well - Assert.Equal(2, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == BrighterSemanticConventions.SourceName); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == BrighterSemanticConventions.SourceName); var childSpan = _exportedActivities.First(a => a.DisplayName == $"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(childSpan); - + await Assert.That(childSpan).IsNotNull(); if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.MySql.ToDbName()); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); - Assert.Contains(childSpan.TagObjects, t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); - Assert.Contains(childSpan.TagObjects, t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == DbSystem.MySql.ToDbName()); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); + await Assert.That(childSpan.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); + await Assert.That(childSpan.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); } else { - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbOperation); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbTable); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbSystem); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbStatement); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbUser); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerPort); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerPort); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbInstanceId); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbOperation); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbTable); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbSystem); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbStatement); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbUser); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerAddress); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerPort); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerPort); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs index b2692aadaf..b7c4bc6603 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -6,10 +6,8 @@ using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Common; - public class BrighterSemanticConventionsDbSpanWithCustomNameTests { private const string DbStatement = "INSERT INTO outbox (id, topic, message_id, message_body, message_type, time_to_live, created_at_utc) VALUES (@id, @topic, @message_id, @message_body, @message_type, @time_to_live, @created_at_utc)"; @@ -17,130 +15,96 @@ public class BrighterSemanticConventionsDbSpanWithCustomNameTests private readonly TracerProvider _traceProvider; private readonly Activity _parentActivity; private readonly BrighterTracer _tracer; - public BrighterSemanticConventionsDbSpanWithCustomNameTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _tracer = new BrighterTracer(); - _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterSemanticConventionsDbSpanTests"); + _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterSemanticConventionsDbSpanTests"); } - - [Theory] - [InlineData(InstrumentationOptions.All)] - [InlineData(InstrumentationOptions.DatabaseInformation)] - [InlineData(InstrumentationOptions.None)] - public void When_Creating_A_Db_Span_With_Custom_Name_Add_Brighter_Semantic_Conventions(InstrumentationOptions options) + + [Test] + [Arguments(InstrumentationOptions.All)] + [Arguments(InstrumentationOptions.DatabaseInformation)] + [Arguments(InstrumentationOptions.None)] + public async Task When_Creating_A_Db_Span_With_Custom_Name_Add_Brighter_Semantic_Conventions(InstrumentationOptions options) { //arrange const string databaseSystemName = "some-datatabase"; - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), new("MyTopic"), MessageType.MT_COMMAND), - new MessageBody("test content") - ); - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("MyTopic"), MessageType.MT_COMMAND), new MessageBody("test content")); //act var dbInstanceId = Guid.NewGuid().ToString(); - var childActivity = _tracer.CreateDbSpan( - new BoxSpanInfo( - dbSystemName: databaseSystemName, - dbName: InMemoryAttributes.OutboxDbName, - dbOperation: BoxDbOperation.Add, - dbTable: InMemoryAttributes.DbTable, - serverPort:3306, - dbInstanceId: dbInstanceId, - dbStatement: DbStatement, - dbUser: "sa", - networkPeerAddress: "10.1.2.80", - networkPeerPort: 3306, - serverAddress: "http://localhost:3306" - ), - _parentActivity, - options: options - ); - + var childActivity = _tracer.CreateDbSpan(new BoxSpanInfo(dbSystemName: databaseSystemName, dbName: InMemoryAttributes.OutboxDbName, dbOperation: BoxDbOperation.Add, dbTable: InMemoryAttributes.DbTable, serverPort: 3306, dbInstanceId: dbInstanceId, dbStatement: DbStatement, dbUser: "sa", networkPeerAddress: "10.1.2.80", networkPeerPort: 3306, serverAddress: "http://localhost:3306"), _parentActivity, options: options); childActivity.Stop(); _parentActivity.Stop(); - var flushed = _traceProvider.ForceFlush(); - - //assert - Assert.True(flushed); - + await Assert.That(flushed).IsTrue(); //check the created activity - Assert.Equal(_parentActivity.Id, childActivity.ParentId); - Assert.Equal($"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}", childActivity.DisplayName); - if(options == InstrumentationOptions.None) - Assert.Empty(childActivity.Tags); + await Assert.That(childActivity.ParentId).IsEqualTo(_parentActivity.Id); + await Assert.That(childActivity.DisplayName).IsEqualTo($"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); + if (options == InstrumentationOptions.None) + await Assert.That(childActivity.Tags).IsEmpty(); if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == databaseSystemName); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); - Assert.Contains(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); - Assert.Contains(childActivity.TagObjects, t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); - Assert.Contains(childActivity.TagObjects, t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); - + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbName && t.Value == InMemoryAttributes.OutboxDbName); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == databaseSystemName); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); + await Assert.That(childActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); + await Assert.That(childActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); + await Assert.That(childActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); } else { - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbName); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbOperation); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbTable); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbSystem); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbStatement); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.DbUser); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerPort); - Assert.DoesNotContain(childActivity.Tags, t => t.Key == BrighterSemanticConventions.ServerPort); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbInstanceId); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbName); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbOperation); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbTable); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbSystem); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbStatement); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbUser); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerAddress); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerPort); + await Assert.That(childActivity.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerPort); } //check via the exporter as well - Assert.Equal(2, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == BrighterSemanticConventions.SourceName); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == BrighterSemanticConventions.SourceName); var childSpan = _exportedActivities.First(a => a.DisplayName == $"{BoxDbOperation.Add.ToSpanName()} {InMemoryAttributes.OutboxDbName} {InMemoryAttributes.DbTable}"); - Assert.NotNull(childSpan); - + await Assert.That(childSpan).IsNotNull(); if (options.HasFlag(InstrumentationOptions.DatabaseInformation)) { - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == databaseSystemName); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); - Assert.Contains(childSpan.TagObjects, t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); - Assert.Contains(childSpan.TagObjects, t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbInstanceId && t.Value == dbInstanceId); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbOperation && t.Value == BoxDbOperation.Add.ToSpanName()); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbTable && t.Value == InMemoryAttributes.DbTable); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbSystem && t.Value == databaseSystemName); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbStatement && t.Value == DbStatement); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.DbUser && t.Value == "sa"); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress && t.Value == "10.1.2.80"); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.ServerAddress && t.Value == "http://localhost:3306"); + await Assert.That(childSpan.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.ServerPort && (int)t.Value == 3306); + await Assert.That(childSpan.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.NetworkPeerPort && (int)t.Value == 3306); } else { - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbInstanceId); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbOperation); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbTable); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbSystem); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbStatement); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.DbUser); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerAddress); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.ServerPort); - Assert.DoesNotContain(childSpan.Tags, t => t.Key == BrighterSemanticConventions.NetworkPeerPort); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbInstanceId); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbOperation); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbTable); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbSystem); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbStatement); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.DbUser); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerAddress); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerAddress); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.ServerPort); + await Assert.That(childSpan.Tags).DoesNotContain(t => t.Key == BrighterSemanticConventions.NetworkPeerPort); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs index 65adc6c760..c10c68f4e0 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs @@ -1,55 +1,44 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using OpenTelemetry; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Common; - -public class BrighterSemanticConventionsEventTests +public class BrighterSemanticConventionsEventTests { private readonly ICollection _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Activity _parentActivity; - public BrighterSemanticConventionsEventTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); BrighterTracer tracer = new(); - _parentActivity = tracer.ActivitySource.StartActivity("BrighterSemanticConventionsEventTests"); + _parentActivity = tracer.ActivitySource.StartActivity("BrighterSemanticConventionsEventTests"); } - [Fact] - public void When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions() + + [Test] + public async Task When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions() { //act BrighterTracer.WriteHandlerEvent(_parentActivity, "MyCommandHandler", false, InstrumentationOptions.All, true); - _parentActivity.Stop(); var flushed = _traceProvider.ForceFlush(); - //assert //check the created activity var childActivity = _exportedActivities.First(a => a.DisplayName == "BrighterSemanticConventionsEventTests"); - Assert.NotNull(childActivity); + await Assert.That(childActivity).IsNotNull(); var childEvent = childActivity.Events.First(e => e.Name == "MyCommandHandler"); - Assert.Contains(BrighterSemanticConventions.HandlerName, childEvent.Tags.ToDictionary()); + await Assert.That(childEvent.Tags.ToDictionary().Keys).Contains(BrighterSemanticConventions.HandlerName); var eventDictionary = childEvent.Tags.ToDictionary(pair => pair.Key, pair => pair.Value); - Assert.Equal("MyCommandHandler", eventDictionary[BrighterSemanticConventions.HandlerName]); - Assert.Contains(BrighterSemanticConventions.HandlerType, childEvent.Tags.ToDictionary()); - Assert.Equal("sync", eventDictionary[BrighterSemanticConventions.HandlerType]); - Assert.Contains(BrighterSemanticConventions.IsSink, childEvent.Tags.ToDictionary()); - Assert.Equal(true, eventDictionary[BrighterSemanticConventions.IsSink]); - + await Assert.That(eventDictionary[BrighterSemanticConventions.HandlerName]).IsEqualTo("MyCommandHandler"); + await Assert.That(childEvent.Tags.ToDictionary().Keys).Contains(BrighterSemanticConventions.HandlerType); + await Assert.That(eventDictionary[BrighterSemanticConventions.HandlerType]).IsEqualTo("sync"); + await Assert.That(childEvent.Tags.ToDictionary().Keys).Contains(BrighterSemanticConventions.IsSink); + await Assert.That(eventDictionary[BrighterSemanticConventions.IsSink]).IsEqualTo(true); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs index 7f1e4afd4d..458518fee2 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -8,67 +8,52 @@ using OpenTelemetry.Trace; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Common; - public class BrighterSemanticConventionsMessageMapperTests { private readonly ICollection _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Activity _parentActivity; private readonly BrighterTracer _tracer; - public BrighterSemanticConventionsMessageMapperTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _tracer = new BrighterTracer(); _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterSemanticConventionsMessageMapperTests"); } - - [Fact] - public void When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions() + + [Test] + public async Task When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions() { //arrange const string paritionKey = "MyPartitionKey"; var routingKey = new RoutingKey("MyTopic"); - - var message = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_COMMAND, partitionKey: paritionKey), - new MessageBody("test content") - ); - - var publication = new Publication() { Topic = routingKey }; - + var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_COMMAND, partitionKey: paritionKey), new MessageBody("test content")); + var publication = new Publication() + { + Topic = routingKey + }; //act BrighterTracer.WriteMapperEvent(message, publication, _parentActivity, "MyMessageMapper", false, InstrumentationOptions.All, true); - _parentActivity.Stop(); var flushed = _traceProvider.ForceFlush(); - //assert //check the created activity var childActivity = _exportedActivities.First(a => a.DisplayName == "BrighterSemanticConventionsMessageMapperTests"); - Assert.NotNull(childActivity); + await Assert.That(childActivity).IsNotNull(); var childEvent = childActivity.Events.First(e => e.Name == "MyMessageMapper"); - //assert - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MapperName && (string)t.Value == "MyMessageMapper")); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MapperType && (string)t.Value == "sync")); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value == true)); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value?.ToString() == "MyTopic".ToString())); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageId && (string)t.Value == message.Id.Value)); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)t.Value == paritionKey)); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageBody && (string)t.Value == message.Body.Value)); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageBodySize && (int)t.Value == message.Body.Value.Length)); - Assert.True(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageHeaders && (string)t.Value == JsonSerializer.Serialize(message.Header, JsonSerialisationOptions.Options))); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MapperName && (string)t.Value == "MyMessageMapper")).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MapperType && (string)t.Value == "sync")).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.IsSink && (bool)t.Value == true)).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value?.ToString() == "MyTopic".ToString())).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageId && (string)t.Value == message.Id.Value)).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && (string)t.Value == paritionKey)).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageBody && (string)t.Value == message.Body.Value)).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageBodySize && (int)t.Value == message.Body.Value.Length)).IsTrue(); + await Assert.That(childEvent.Tags.Any(t => t.Key == BrighterSemanticConventions.MessageHeaders && (string)t.Value == JsonSerializer.Serialize(message.Header, JsonSerialisationOptions.Options))).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs index 0b7f453517..3a297635c6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -8,84 +8,67 @@ using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.Common; - -public class BrighterTracerSpanTests : IDisposable +public class BrighterTracerSpanTests { private readonly ICollection _exportedActivities; private readonly TracerProvider _traceProvider; private readonly BrighterTracer _tracer; private readonly Activity _parentActivity; - public BrighterTracerSpanTests() { - var builder = Sdk.CreateTracerProviderBuilder(); + var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); _tracer = new BrighterTracer(); _parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); - } + } - [Fact] - public void When_Creating_A_Span_Add_Brighter_Semantic_Conventions() + [Test] + public async Task When_Creating_A_Span_Add_Brighter_Semantic_Conventions() { //arrange - var command = new MyCommand { Value = "My Test String" }; - + var command = new MyCommand + { + Value = "My Test String" + }; //act - var childActivity = _tracer.CreateSpan( - CommandProcessorSpanOperation.Send, - command, - _parentActivity, - options: InstrumentationOptions.All - ); - + var childActivity = _tracer.CreateSpan(CommandProcessorSpanOperation.Send, command, _parentActivity, options: InstrumentationOptions.All); childActivity.Stop(); _parentActivity.Stop(); - - var flushed = _traceProvider.ForceFlush(); - + var flushed = _traceProvider.ForceFlush(); //assert - Assert.True(flushed); - + await Assert.That(flushed).IsTrue(); //check the created activity - Assert.Equal(_parentActivity.Id, childActivity.ParentId); - Assert.Equal($"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}", childActivity.DisplayName); - Assert.Equal(BrighterSemanticConventions.SourceName, childActivity.Source.Name); + await Assert.That(childActivity.ParentId).IsEqualTo(_parentActivity.Id); + await Assert.That(childActivity.DisplayName).IsEqualTo($"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}"); + await Assert.That(childActivity.Source.Name).IsEqualTo(BrighterSemanticConventions.SourceName); var tagDictionary = childActivity.Tags.ToDictionary(pair => pair.Key, pair => pair.Value); - Assert.Contains(BrighterSemanticConventions.RequestId, tagDictionary.Keys); - Assert.Equal(command.Id.ToString(), tagDictionary[BrighterSemanticConventions.RequestId]); - Assert.Contains(BrighterSemanticConventions.RequestType, tagDictionary.Keys); - Assert.Equal(command.GetType().Name, tagDictionary[BrighterSemanticConventions.RequestType]); - Assert.Contains(BrighterSemanticConventions.RequestBody, tagDictionary.Keys); - Assert.Equal(System.Text.Json.JsonSerializer.Serialize(command, JsonSerialisationOptions.Options), tagDictionary[BrighterSemanticConventions.RequestBody]); - Assert.Contains(BrighterSemanticConventions.Operation, tagDictionary.Keys); - Assert.Equal(CommandProcessorSpanOperation.Send.ToSpanName(), tagDictionary[BrighterSemanticConventions.Operation]); - - + await Assert.That(tagDictionary.Keys).Contains(BrighterSemanticConventions.RequestId); + await Assert.That(tagDictionary[BrighterSemanticConventions.RequestId]).IsEqualTo(command.Id.ToString()); + await Assert.That(tagDictionary.Keys).Contains(BrighterSemanticConventions.RequestType); + await Assert.That(tagDictionary[BrighterSemanticConventions.RequestType]).IsEqualTo(command.GetType().Name); + await Assert.That(tagDictionary.Keys).Contains(BrighterSemanticConventions.RequestBody); + await Assert.That(tagDictionary[BrighterSemanticConventions.RequestBody]).IsEqualTo(System.Text.Json.JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); + await Assert.That(tagDictionary.Keys).Contains(BrighterSemanticConventions.Operation); + await Assert.That(tagDictionary[BrighterSemanticConventions.Operation]).IsEqualTo(CommandProcessorSpanOperation.Send.ToSpanName()); //check via the exporter as well - Assert.Equal(2, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == BrighterSemanticConventions.SourceName); - var childSpan = _exportedActivities.First(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}"); - Assert.NotNull(childSpan); - Assert.Equal(_parentActivity.Id, childSpan.ParentId); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.RequestId && (string)t.Value == command.Id.ToString()); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.RequestType && (string)t.Value == command.GetType().Name); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.RequestBody && (string)t.Value == System.Text.Json.JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); - Assert.Contains(childSpan.Tags, t => t.Key == BrighterSemanticConventions.Operation && (string)t.Value == CommandProcessorSpanOperation.Send.ToSpanName()); + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == BrighterSemanticConventions.SourceName); + var childSpan = _exportedActivities.First(a => a.DisplayName == $"{nameof(MyCommand)} {CommandProcessorSpanOperation.Send.ToSpanName()}"); + await Assert.That(childSpan).IsNotNull(); + await Assert.That(childSpan.ParentId).IsEqualTo(_parentActivity.Id); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestId && (string)t.Value == command.Id.ToString()); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestType && (string)t.Value == command.GetType().Name); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.RequestBody && (string)t.Value == System.Text.Json.JsonSerializer.Serialize(command, JsonSerialisationOptions.Options)); + await Assert.That(childSpan.Tags).Contains(t => t.Key == BrighterSemanticConventions.Operation && (string)t.Value == CommandProcessorSpanOperation.Send.ToSpanName()); } + [After(Test)] public void Dispose() { _parentActivity.Dispose(); _traceProvider.Dispose(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_An_Activity_Source_Use_Lib_Name_And_Version.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_An_Activity_Source_Use_Lib_Name_And_Version.cs index 653b9b0306..c1ab01367f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_An_Activity_Source_Use_Lib_Name_And_Version.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_An_Activity_Source_Use_Lib_Name_And_Version.cs @@ -1,23 +1,19 @@ -using Paramore.Brighter.Observability; -using Xunit; +using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; - -public class BrighterActivitySourceTests +public class BrighterActivitySourceTests { - [Fact] - public void When_creating_an_activity_source_use_lib_name_and_version() + [Test] + public async Task When_creating_an_activity_source_use_lib_name_and_version() { //arrange var assemblyName = typeof(BrighterTracer).Assembly.GetName(); var sourceName = assemblyName.Name; - var version = assemblyName.Version?.ToString(); - + var version = assemblyName.Version?.ToString(); //act var activitySource = new BrighterTracer().ActivitySource; - //assert - Assert.Equal(sourceName, activitySource.Name); - Assert.Equal(version, activitySource.Version); + await Assert.That(activitySource.Name).IsEqualTo(sourceName); + await Assert.That(activitySource.Version).IsEqualTo(version); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs index e9ebc158d1..841d06c14b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Diagnostics; @@ -36,7 +34,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch @@ -53,112 +50,66 @@ public class MessagePumpDispatchObservabilityTests private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Message _message; - public MessagePumpDispatchObservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); var subscriberRegistry = new SubscriberRegistry(); subscriberRegistry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); + var timeProvider = new FakeTimeProvider(); var tracer = new BrighterTracer(timeProvider); var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - var channel = new Channel( - new(ChannelName),_routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + var channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000) + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000) }; - var externalActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessagePumpSpanTests"); - Baggage.SetBaggage( "mykey", "myvalue" ); - - _message = new Message( - new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT, replyTo: new RoutingKey("io.paramorebrighter.myevent")), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - + Baggage.SetBaggage("mykey", "myvalue"); + _message = new Message(new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT, replyTo: new RoutingKey("io.paramorebrighter.myevent")), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); var contextPropogator = new TextContextPropogator(); contextPropogator.PropogateContext(externalActivity?.Context, _message); - externalActivity?.Stop(); - - channel.Enqueue(_message); var quitMessage = MessageFactory.CreateQuitMessage(new RoutingKey("MyTopic")); channel.Enqueue(quitMessage); - } - [Fact] - public void When_a_message_is_dispatched_it_should_begin_a_span() + [Test] + public async Task When_a_message_is_dispatched_it_should_begin_a_span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(6, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - + await Assert.That(_exportedActivities.Count).IsEqualTo(6); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); //there should be a span for each message received by a pump - var createActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.TagObjects.Any(to => to is { Value: not null, Key: BrighterSemanticConventions.MessageType } && Enum.Parse(to.Value.ToString() ?? string.Empty) == MessageType.MT_EVENT) - ); - Assert.NotNull(createActivity); - Assert.Equal(_message.Header.TraceParent?.Value, createActivity!.ParentId); - Assert.Contains(Baggage.Current.GetBaggage(), b => b.Key == "mykey" && b.Value == "myvalue"); - Assert.Contains(createActivity.Tags, t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "receive" }); - Assert.Contains(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value == _message.Header.Topic); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value == _message.Header.PartitionKey.Value); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageId && t.Value == _message.Id.Value); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageType && t.Value == _message.Header.MessageType.ToString()); - Assert.Contains(createActivity.TagObjects, t => t.Value != null && t.Key == BrighterSemanticConventions.MessageBodySize && Convert.ToInt32(t.Value) == _message.Body.Bytes.Length); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageBody && t.Value == _message.Body.Value); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessageHeaders && t.Value == JsonSerializer.Serialize(_message.Header, JsonSerialisationOptions.Options)); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.ConversationId && t.Value == _message.Header.CorrelationId.Value); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.MessagingSystem && t.Value == MessagingSystem.InternalBus.ToMessagingSystemName()); - Assert.Contains(createActivity.TagObjects, t => t.Value != null && t.Key == BrighterSemanticConventions.CeSource && ((Uri)(t.Value)) == _message.Header.Source); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.CeSubject && t.Value == _message.Header.Subject); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.CeVersion && t.Value == "1.0"); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.CeType && t.Value == _message.Header.Type); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value == _message.Id.Value); - Assert.Contains(createActivity.TagObjects, t => t.Key == BrighterSemanticConventions.HandledCount && Convert.ToInt32(t.Value) == _message.Header.HandledCount); - Assert.Contains(createActivity.Tags, t => t.Key == BrighterSemanticConventions.ReplyTo && t.Value == _message.Header.ReplyTo?.Value); + var createActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.TagObjects.Any(to => to is { Value: not null, Key: BrighterSemanticConventions.MessageType } && Enum.Parse(to.Value.ToString() ?? string.Empty) == MessageType.MT_EVENT)); + await Assert.That(createActivity).IsNotNull(); + await Assert.That(createActivity!.ParentId).IsEqualTo(_message.Header.TraceParent?.Value); + await Assert.That(Baggage.Current.GetBaggage()).Contains(b => b.Key == "mykey" && b.Value == "myvalue"); + await Assert.That(createActivity.Tags).Contains(t => t is { Key: BrighterSemanticConventions.MessagingOperationType, Value: "receive" }); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestination && t.Value == _message.Header.Topic); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingDestinationPartitionId && t.Value == _message.Header.PartitionKey.Value); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageId && t.Value == _message.Id.Value); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageType && t.Value == _message.Header.MessageType.ToString()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Value != null && t.Key == BrighterSemanticConventions.MessageBodySize && Convert.ToInt32(t.Value) == _message.Body.Bytes.Length); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageBody && t.Value == _message.Body.Value); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessageHeaders && t.Value == JsonSerializer.Serialize(_message.Header, JsonSerialisationOptions.Options)); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.ConversationId && t.Value == _message.Header.CorrelationId.Value); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.MessagingSystem && t.Value == MessagingSystem.InternalBus.ToMessagingSystemName()); + await Assert.That(createActivity.TagObjects).Contains(t => t.Value != null && t.Key == BrighterSemanticConventions.CeSource && ((Uri)(t.Value)) == _message.Header.Source); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeSubject && t.Value == _message.Header.Subject); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeVersion && t.Value == "1.0"); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeType && t.Value == _message.Header.Type); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.CeMessageId && t.Value == _message.Id.Value); + await Assert.That(createActivity.TagObjects).Contains(t => t.Key == BrighterSemanticConventions.HandledCount && Convert.ToInt32(t.Value) == _message.Header.HandledCount); + await Assert.That(createActivity.Tags).Contains(t => t.Key == BrighterSemanticConventions.ReplyTo && t.Value == _message.Header.ReplyTo?.Value); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs index 67c3ffa991..60ef4feca6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -10,10 +10,8 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; - public class MessagePumpEmptyQueueOberservabilityTests { private const string Topic = "MyTopic"; @@ -26,83 +24,44 @@ public class MessagePumpEmptyQueueOberservabilityTests private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; private readonly Message _message; - public MessagePumpEmptyQueueOberservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); - _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - Channel channel = new(new(ChannelName),_routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) - { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) - }; - - //in theory the message pump should see this from the consumer when the queue is empty - //we are just forcing this to run exactly once, before we quit. - _message = MessageFactory.CreateEmptyMessage(_routingKey); - - channel.Enqueue(_message); - - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); - channel.Enqueue(quitMessage); + _exportedActivities = new List(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); + var subscriberRegistry = new SubscriberRegistry(); + subscriberRegistry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + var instrumentationOptions = InstrumentationOptions.All; + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + Channel channel = new(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) + }; + //in theory the message pump should see this from the consumer when the queue is empty + //we are just forcing this to run exactly once, before we quit. + _message = MessageFactory.CreateEmptyMessage(_routingKey); + channel.Enqueue(_message); + var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); + channel.Enqueue(quitMessage); } - [Fact] - public void When_There_Are_No_Messages_Close_The_Span() + [Test] + public async Task When_There_Are_No_Messages_Close_The_Span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(3, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - - var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.TagObjects.Any(t => - t is { Value: not null, Key: BrighterSemanticConventions.MessageType } - && Enum.Parse(t.Value.ToString()) == MessageType.MT_NONE - ) - ); - - Assert.NotNull(emptyMessageActivity); - Assert.Equal(ActivityStatusCode.Ok, emptyMessageActivity!.Status); - + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); + var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.TagObjects.Any(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageType } && Enum.Parse(t.Value.ToString()) == MessageType.MT_NONE)); + await Assert.That(emptyMessageActivity).IsNotNull(); + await Assert.That(emptyMessageActivity!.Status).IsEqualTo(ActivityStatusCode.Ok); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs index 25a2839c95..37af4000a4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,10 +14,8 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; - public class MessagePumpBrokenCircuitChannelFailureOberservabilityTests { private const string ChannelName = "myChannel"; @@ -30,93 +28,46 @@ public class MessagePumpBrokenCircuitChannelFailureOberservabilityTests private readonly TracerProvider _traceProvider; private readonly MyEvent _myEvent = new(); private readonly Message _message; - public MessagePumpBrokenCircuitChannelFailureOberservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); - _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - FailingChannel channel = new( - new (ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - brokenCircuit: true); - - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) - { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) - }; - - var externalActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessagePumpSpanTests"); - - _message = new Message( - new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - - var contextPropogator = new TextContextPropogator(); - contextPropogator.PropogateContext(externalActivity?.Context, _message); - - externalActivity?.Stop(); - - channel.Enqueue(_message); - - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); - channel.Enqueue(quitMessage); - + _exportedActivities = new List(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); + var subscriberRegistry = new SubscriberRegistry(); + subscriberRegistry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + var instrumentationOptions = InstrumentationOptions.All; + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + FailingChannel channel = new(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), brokenCircuit: true); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) + }; + var externalActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessagePumpSpanTests"); + _message = new Message(new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); + var contextPropogator = new TextContextPropogator(); + contextPropogator.PropogateContext(externalActivity?.Context, _message); + externalActivity?.Stop(); + channel.Enqueue(_message); + var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); + channel.Enqueue(quitMessage); } - [Fact] - public void When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span() + [Test] + public async Task When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(7, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - - var errorMessageActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.Status == ActivityStatusCode.Error - ); - - Assert.NotNull(errorMessageActivity); - Assert.Equal(ActivityStatusCode.Error, errorMessageActivity?.Status); + await Assert.That(_exportedActivities.Count).IsEqualTo(7); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + var errorMessageActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.Status == ActivityStatusCode.Error); + await Assert.That(errorMessageActivity).IsNotNull(); + await Assert.That(errorMessageActivity?.Status).IsEqualTo(ActivityStatusCode.Error); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs index 7e4d53d022..6b1fcbb18a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,10 +14,8 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; - public class MessagePumpChannelFailureOberservabilityTests { private const string ChannelName = "myChannel"; @@ -30,90 +28,44 @@ public class MessagePumpChannelFailureOberservabilityTests private readonly TracerProvider _traceProvider; private readonly MyEvent _myEvent = new(); private readonly Message _message; - public MessagePumpChannelFailureOberservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); - _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - FailingChannel channel = new( - new (ChannelName), - _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), - brokenCircuit: false); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), - new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) - { - Channel = channel, TimeOut = TimeSpan.FromMilliseconds(5000), EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) - }; - - var externalActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessagePumpSpanTests"); - - _message = new Message( - new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), - new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options)) - ); - - externalActivity?.Stop(); - - channel.Enqueue(_message); - - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); - channel.Enqueue(quitMessage); - + _exportedActivities = new List(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); + var subscriberRegistry = new SubscriberRegistry(); + subscriberRegistry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + var instrumentationOptions = InstrumentationOptions.All; + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + FailingChannel channel = new(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)), brokenCircuit: false); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) + }; + var externalActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("MessagePumpSpanTests"); + _message = new Message(new MessageHeader(_myEvent.Id, _routingKey, MessageType.MT_EVENT), new MessageBody(JsonSerializer.Serialize(_myEvent, JsonSerialisationOptions.Options))); + externalActivity?.Stop(); + channel.Enqueue(_message); + var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); + channel.Enqueue(quitMessage); } - [Fact] - public void When_There_Is_A_Channel_Failure_Close_The_Span() + [Test] + public async Task When_There_Is_A_Channel_Failure_Close_The_Span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(7, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - - var errorMessageActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.Status == ActivityStatusCode.Error - ); - - Assert.NotNull(errorMessageActivity); - Assert.Equal(ActivityStatusCode.Error, errorMessageActivity.Status); + await Assert.That(_exportedActivities.Count).IsEqualTo(7); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); + var errorMessageActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.Status == ActivityStatusCode.Error); + await Assert.That(errorMessageActivity).IsNotNull(); + await Assert.That(errorMessageActivity.Status).IsEqualTo(ActivityStatusCode.Error); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs index 8ae12f1bd4..50bb6d17ed 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -10,10 +10,8 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; - public class MessagePumpQuitOberservabilityTests { private const string Topic = "MyTopic"; @@ -25,81 +23,40 @@ public class MessagePumpQuitOberservabilityTests private readonly IDictionary _receivedMessages = new Dictionary(); private readonly List _exportedActivities; private readonly TracerProvider _traceProvider; - public MessagePumpQuitOberservabilityTests() { var builder = Sdk.CreateTracerProviderBuilder(); - _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - Channel channel = new( - new (Channel), _routingKey, - new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)) - ); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), - channel, tracer, instrumentationOptions) - { - Channel = channel, TimeOut= TimeSpan.FromMilliseconds(5000), EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) - }; - - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); - channel.Enqueue(quitMessage); + _exportedActivities = new List(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); + var subscriberRegistry = new SubscriberRegistry(); + subscriberRegistry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + var instrumentationOptions = InstrumentationOptions.All; + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + Channel channel = new(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), channel, tracer, instrumentationOptions) + { + Channel = channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) + }; + var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); + channel.Enqueue(quitMessage); } - [Fact] - public void When_There_Is_A_Quit_Message_Close_The_Span() + [Test] + public async Task When_There_Is_A_Quit_Message_Close_The_Span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(2, _exportedActivities.Count); - Assert.True(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")); - - var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_routingKey} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.TagObjects.Any(t => - t is { Value: not null, Key: BrighterSemanticConventions.MessageType } - && Enum.Parse(t.Value.ToString()) == MessageType.MT_QUIT - ) - ); - - Assert.NotNull(emptyMessageActivity); - Assert.Equal(ActivityStatusCode.Ok, emptyMessageActivity!.Status); - + await Assert.That(_exportedActivities.Count).IsEqualTo(2); + await Assert.That(_exportedActivities.Any(a => a.Source.Name == "Paramore.Brighter")).IsTrue(); + var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_routingKey} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.TagObjects.Any(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageType } && Enum.Parse(t.Value.ToString()) == MessageType.MT_QUIT)); + await Assert.That(emptyMessageActivity).IsNotNull(); + await Assert.That(emptyMessageActivity!.Status).IsEqualTo(ActivityStatusCode.Ok); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs index c43cec0dd6..3641849206 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -10,10 +10,8 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; - public class MessagePumpUnacceptableMessageOberservabilityTests { private const string Topic = "MyTopic"; @@ -27,86 +25,45 @@ public class MessagePumpUnacceptableMessageOberservabilityTests private readonly TracerProvider _traceProvider; private readonly Message _message; private readonly Channel _channel; - public MessagePumpUnacceptableMessageOberservabilityTests() { - var builder = Sdk.CreateTracerProviderBuilder(); - _exportedActivities = new List(); - - _traceProvider = builder - .AddSource("Paramore.Brighter.Tests", "Paramore.Brighter") - .ConfigureResource(r => r.AddService("in-memory-tracer")) - .AddInMemoryExporter(_exportedActivities) - .Build(); - - - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); - - var timeProvider = new FakeTimeProvider(); - var tracer = new BrighterTracer(timeProvider); - var instrumentationOptions = InstrumentationOptions.All; - - var commandProcessor = new Brighter.CommandProcessor( - subscriberRegistry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory(), - tracer: tracer, - instrumentationOptions: instrumentationOptions); - - PipelineBuilder.ClearPipelineCache(); - - _channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory( - _ => new MyEventMessageMapper()), - null); - messageMapperRegistry.Register(); - - _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), - messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel, tracer, instrumentationOptions) - { - Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) - }; - - //in theory the message pump should see this from the consumer when the queue is empty - //we are just forcing this to run exactly once, before we quit. - _message = new Message( - new MessageHeader(Guid.Empty.ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), - new MessageBody(string.Empty) - ); - - _channel.Enqueue(_message); - - var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); - _channel.Enqueue(quitMessage); + var builder = Sdk.CreateTracerProviderBuilder(); + _exportedActivities = new List(); + _traceProvider = builder.AddSource("Paramore.Brighter.Tests", "Paramore.Brighter").ConfigureResource(r => r.AddService("in-memory-tracer")).AddInMemoryExporter(_exportedActivities).Build(); + var subscriberRegistry = new SubscriberRegistry(); + subscriberRegistry.Register(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyEventHandler(_receivedMessages)); + var timeProvider = new FakeTimeProvider(); + var tracer = new BrighterTracer(timeProvider); + var instrumentationOptions = InstrumentationOptions.All; + var commandProcessor = new Brighter.CommandProcessor(subscriberRegistry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory(), tracer: tracer, instrumentationOptions: instrumentationOptions); + _channel = new Channel(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + var messageMapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => new MyEventMessageMapper()), null); + messageMapperRegistry.Register(); + _messagePump = new Reactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactory(), new InMemoryRequestContextFactory(), _channel, tracer, instrumentationOptions) + { + Channel = _channel, + TimeOut = TimeSpan.FromMilliseconds(5000), + EmptyChannelDelay = TimeSpan.FromMilliseconds(1000) + }; + //in theory the message pump should see this from the consumer when the queue is empty + //we are just forcing this to run exactly once, before we quit. + _message = new Message(new MessageHeader(Guid.Empty.ToString(), _routingKey, MessageType.MT_UNACCEPTABLE), new MessageBody(string.Empty)); + _channel.Enqueue(_message); + var quitMessage = MessageFactory.CreateQuitMessage(_routingKey); + _channel.Enqueue(quitMessage); } - [Fact] - public void When_There_Are_No_Messages_Close_The_Span() + [Test] + public async Task When_There_Are_No_Messages_Close_The_Span() { _messagePump.Run(); - _traceProvider.ForceFlush(); - - Assert.Equal(3, _exportedActivities.Count); - Assert.Contains(_exportedActivities, a => a.Source.Name == "Paramore.Brighter"); - - var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => - a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" - && a.TagObjects.Any(t => - t is { Value: not null, Key: BrighterSemanticConventions.MessageType } - && Enum.Parse(t.Value.ToString()) == MessageType.MT_UNACCEPTABLE - ) - ); - - Assert.NotNull(emptyMessageActivity); - Assert.Equal(ActivityStatusCode.Error, emptyMessageActivity!.Status); - Assert.Contains($"MessagePump: Failed to parse a message from the incoming message with id {_message.Id} from {_channel.Name}", emptyMessageActivity.StatusDescription); + await Assert.That(_exportedActivities.Count).IsEqualTo(3); + await Assert.That(_exportedActivities).Contains(a => a.Source.Name == "Paramore.Brighter"); + var emptyMessageActivity = _exportedActivities.FirstOrDefault(a => a.DisplayName == $"{_message.Header.Topic} {MessagePumpSpanOperation.Receive.ToSpanName()}" && a.TagObjects.Any(t => t is { Value: not null, Key: BrighterSemanticConventions.MessageType } && Enum.Parse(t.Value.ToString()) == MessageType.MT_UNACCEPTABLE)); + await Assert.That(emptyMessageActivity).IsNotNull(); + await Assert.That(emptyMessageActivity!.Status).IsEqualTo(ActivityStatusCode.Error); + await Assert.That(emptyMessageActivity.StatusDescription).Contains($"MessagePump: Failed to parse a message from the incoming message with id {_message.Id} from {_channel.Name}"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs b/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs index f37b1d038d..580b18e936 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs @@ -1,60 +1,48 @@ -using Paramore.Brighter.Observability; -using Xunit; +using System.Threading.Tasks; +using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Trace; - -public class TraceStateTests +public class TraceStateTests { - [Fact] - public void When_Adding_TraceState() + [Test] + public async Task When_Adding_TraceState() { // Arrange var traceState = new Baggage(); - //act traceState.Add("key1", "value1"); traceState.Add("key2", "value2"); - // Assert - Assert.Equal("key1=value1,key2=value2", traceState.ToString()); + await Assert.That(traceState.ToString()).IsEqualTo("key1=value1,key2=value2"); } - [Fact] - public void When_Adding_TraceState_From_Baggage() + [Test] + public async Task When_Adding_TraceState_From_Baggage() { //Arrange var traceState = new Baggage(); var baggage = "key1=value1,key2=value2"; - //Act traceState.Add("key3", "value3"); traceState.LoadBaggage(baggage); - //Assert - Assert.Equal("key3=value3,key1=value1,key2=value2", traceState.ToString()); + await Assert.That(traceState.ToString()).IsEqualTo("key3=value3,key1=value1,key2=value2"); } - [Fact] - public void When_Enumerating_TraceState() + [Test] + public async Task When_Enumerating_TraceState() { //Arrange var traceState = new Baggage(); traceState.Add("key1", "value1"); traceState.Add("key2", "value2"); - //Act - //Assert - Assert.Collection(traceState, - entry => - { - Assert.Equal("key1", entry.Key); - Assert.Equal("value1", entry.Value); - }, - entry => - { - Assert.Equal("key2", entry.Key); - Assert.Equal("value2", entry.Value); - }); + var entries = traceState.ToList(); + await Assert.That(entries).HasCount().EqualTo(2); + await Assert.That(entries[0].Key).IsEqualTo("key1"); + await Assert.That(entries[0].Value).IsEqualTo("value1"); + await Assert.That(entries[1].Key).IsEqualTo("key2"); + await Assert.That(entries[1].Value).IsEqualTo("value2"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled.cs index c610c0d686..c748384b26 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled.cs @@ -1,4 +1,4 @@ -using System; +using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; using Paramore.Brighter.Inbox.Exceptions; @@ -6,46 +6,39 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly { - public class OnceOnlyAttributeTests + public class OnceOnlyAttributeTests { private readonly MyCommand _command; private readonly IAmAnInboxSync _inbox; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Handling_A_Command_Only_Once() + [Test] + public async Task When_Handling_A_Command_Only_Once() { _commandProcessor.Send(_command); - - Exception ex = Assert.Throws(() => _commandProcessor.Send(_command)); - - Assert.Equal($"A command with id {_command.Id} has already been handled", ex.Message); + var ex = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); + await Assert.That(ex!.Message).IsEqualTo($"A command with id {_command.Id} has already been handled"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled_Async.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled_Async.cs index 0781484897..0528077cb5 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Inbox_Enabled_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; @@ -7,49 +7,39 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly { - public class OnceOnlyAttributeAsyncTests { private readonly MyCommand _command; private readonly IAmAnInboxAsync _inbox; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeAsyncTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Handling_A_Command_Only_Once() { await _commandProcessor.SendAsync(_command); - - Exception ex = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_command)); - - Assert.Equal($"A command with id {_command.Id} has already been handled", ex.Message); - + var ex = await Assert.That(() => _commandProcessor.SendAsync(_command)).ThrowsExactly(); + await Assert.That(ex!.Message).IsEqualTo($"A command with id {_command.Id} has already been handled"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled.cs index 5dab5c465c..1d74ec3272 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly @@ -40,36 +37,30 @@ public class OnceOnlyAttributeWithThrowExceptionTests private readonly MyCommand _command; private readonly IAmAnInboxSync _inbox; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeWithThrowExceptionTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Handling_A_Command_Once_Only_With_Throw_Enabled() + [Test] + public async Task When_Handling_A_Command_Once_Only_With_Throw_Enabled() { _commandProcessor.Send(_command); - - Exception ex = Assert.Throws(() => _commandProcessor.Send(_command)); - - Assert.Equal($"A command with id {_command.Id} has already been handled", ex.Message); + var ex = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); + await Assert.That(ex!.Message).IsEqualTo($"A command with id {_command.Id} has already been handled"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled_Async.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled_Async.cs index c4c2e2d77b..85ec8cb480 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Throw_Enabled_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -32,7 +30,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.OnceOnly { @@ -41,36 +38,30 @@ public class OnceOnlyAttributeWithThrowExceptionAsyncTests private readonly MyCommand _command; private readonly IAmAnInboxAsync _inbox; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeWithThrowExceptionAsyncTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient>(); container.AddTransient(); container.AddSingleton(_inbox); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Handling_A_Command_Once_Only_With_Throw_Enabled() { await _commandProcessor.SendAsync(_command); - - Exception ex = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_command)); - - Assert.Equal($"A command with id {_command.Id} has already been handled", ex.Message); + var ex = await Assert.That(() => _commandProcessor.SendAsync(_command)).ThrowsExactly(); + await Assert.That(ex!.Message).IsEqualTo($"A command with id {_command.Id} has already been handled"); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled.cs index fabb69a042..f779745891 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly @@ -39,35 +36,30 @@ public class OnceOnlyAttributeWithWarnExceptionTests private readonly MyCommand _command; private readonly IAmAnInboxSync _inbox; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeWithWarnExceptionTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Handling_A_Command_Once_Only_With_Warn_Enabled() + [Test] + public async Task When_Handling_A_Command_Once_Only_With_Warn_Enabled() { - _commandProcessor.Send(_command); _commandProcessor.Send(_command); - - Assert.Equal(1, MyStoredCommandToWarnHandler.ReceivedCount); + _commandProcessor.Send(_command); + await Assert.That(MyStoredCommandToWarnHandler.ReceivedCount).IsEqualTo(1); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled_Async.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled_Async.cs index c1dedfe6a7..979f1f34e1 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_Once_Only_With_Warn_Enabled_Async.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -30,7 +28,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly @@ -39,35 +36,30 @@ public class OnceOnlyAttributeWithWarnExceptionAsyncTests { private readonly MyCommand _command; private readonly IAmACommandProcessor _commandProcessor; - public OnceOnlyAttributeWithWarnExceptionAsyncTests() { IAmAnInboxAsync inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddSingleton(inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Handling_A_Command_Once_Only_With_Warn_Enabled() { await _commandProcessor.SendAsync(_command); await _commandProcessor.SendAsync(_command); - - Assert.Equal(1, MyStoredCommandToWarnHandlerAsync.ReceivedCount); + await Assert.That(MyStoredCommandToWarnHandlerAsync.ReceivedCount).IsEqualTo(1); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled.cs index b3b7d60b8f..d905d33f5b 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2015 Ian Cooper +Copyright 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,16 +12,14 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly @@ -40,50 +37,42 @@ public class CommandProcessorUsingInboxTests private readonly IAmAnInboxSync _inbox; private readonly IAmACommandProcessor _commandProcessor; private readonly string _contextKey; - public CommandProcessorUsingInboxTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.Register(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _command = new MyCommand {Value = "My Test String"}; - + _command = new MyCommand + { + Value = "My Test String" + }; _contextKey = typeof(MyStoredCommandHandler).FullName; - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void When_Handling_A_Command_With_A_Inbox_Enabled() + [Test] + public async Task When_Handling_A_Command_With_A_Inbox_Enabled() { _commandProcessor.Send(_command); - //should_store_the_command_to_the_inbox - Assert.Equal(_command.Value, _inbox.Get(_command.Id, _contextKey, null).Value); + await Assert.That(_inbox.Get(_command.Id, _contextKey, null).Value).IsEqualTo(_command.Value); } - [Fact] - public void Command_Is_Not_Stored_If_The_Handler_Is_Not_Successful() + [Test] + public async Task Command_Is_Not_Stored_If_The_Handler_Is_Not_Successful() { string id = Guid.NewGuid().ToString(); - - Assert.Throws(() => _commandProcessor.Send(new MyCommandToFail { Id = id})); - - Assert.False(_inbox.Exists(id, typeof(MyStoredCommandToFailHandler).FullName, null)); + await Assert.That(() => _commandProcessor.Send(new MyCommandToFail { Id = id })).ThrowsExactly(); + await Assert.That(_inbox.Exists(id, typeof(MyStoredCommandToFailHandler).FullName, null)).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled_Async.cs b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled_Async.cs index b016d86f0a..6856dfdc2f 100644 --- a/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/OnceOnly/When_Handling_A_Command_With_A_Inbox_Enabled_Async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.OnceOnly.TestDoubles; @@ -7,7 +7,6 @@ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.TestHelpers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; using Paramore.Brighter.Inbox.Handlers; namespace Paramore.Brighter.Core.Tests.OnceOnly @@ -18,48 +17,41 @@ public class CommandProcessorUsingInboxAsyncTests private readonly IAmAnInboxAsync _inbox; private readonly IAmACommandProcessor _commandProcessor; private readonly string _contextKey; - public CommandProcessorUsingInboxAsyncTests() { _inbox = new InMemoryInbox(new FakeTimeProvider()); - var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient(); container.AddSingleton(_inbox); container.AddTransient>(); - container.AddSingleton(new BrighterOptions {HandlerLifetime = ServiceLifetime.Transient}); - + container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - _contextKey = typeof(MyStoredCommandHandlerAsync).FullName; - - _command = new MyCommand {Value = "My Test String"}; - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _command = new MyCommand + { + Value = "My Test String" + }; + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task When_Handling_A_Command_With_A_Inbox_Enabled_Async() { await _commandProcessor.SendAsync(_command); - - // should_store_the_command_to_the_inbox - Assert.Equal(_command.Value, (await _inbox.GetAsync(_command.Id, _contextKey, null)).Value); + // should_store_the_command_to_the_inbox + await Assert.That((await _inbox.GetAsync(_command.Id, _contextKey, null)).Value).IsEqualTo(_command.Value); } - [Fact] + [Test] public async Task Command_Is_Not_Stored_If_The_Handler_Is_Not_Successful() { string id = Guid.NewGuid().ToString(); - await Catch.ExceptionAsync(async () =>await _commandProcessor.SendAsync(new MyCommandToFail { Id = id })); - + await Catch.ExceptionAsync(async () => await _commandProcessor.SendAsync(new MyCommandToFail { Id = id })); var exists = await _inbox.ExistsAsync(id, typeof(MyStoredCommandToFailHandlerAsync).FullName, null); - Assert.False(exists); + await Assert.That(exists).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj b/tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj index bbf12b7f64..9bfc590808 100644 --- a/tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj +++ b/tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj @@ -2,6 +2,7 @@ false $(BrighterTestTargetFrameworks) + Exe @@ -12,37 +13,14 @@ - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - Always - - - - - + diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_succeeds_should_not_reject_message.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_succeeds_should_not_reject_message.cs index 56d3e9ba3b..549c31b6a4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_succeeds_should_not_reject_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_succeeds_should_not_reject_message.cs @@ -19,16 +19,13 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Reject.TestDoubles; using Paramore.Brighter.Reject.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { @@ -36,13 +33,11 @@ public class When_async_handler_succeeds_should_not_reject_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_async_handler_succeeds_should_not_reject_message() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { if (type == typeof(MySucceedingRejectHandlerAsync)) @@ -51,28 +46,21 @@ public When_async_handler_succeeds_should_not_reject_message() return new RejectMessageOnErrorHandlerAsync(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MySucceedingRejectHandlerAsync.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task It_should_complete_without_throwing() { //Act - var exception = await Record.ExceptionAsync(() => _commandProcessor.SendAsync(_command)); + Exception? exception = null; + try { await _commandProcessor.SendAsync(_command); } + catch (Exception e) { exception = e; } //Assert - Assert.Null(exception); // No exception thrown - Assert.True(MySucceedingRejectHandlerAsync.HandlerCalled); // Handler was invoked + await Assert.That(exception).IsNull(); // No exception thrown + await Assert.That(MySucceedingRejectHandlerAsync.HandlerCalled).IsTrue(); // Handler was invoked } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_throws_exception_should_reject_message.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_throws_exception_should_reject_message.cs index 2a23497405..a4da686bef 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_throws_exception_should_reject_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_async_handler_throws_exception_should_reject_message.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Threading.Tasks; using Paramore.Brighter.Actions; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Reject.TestDoubles; using Paramore.Brighter.Reject.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { @@ -37,13 +34,11 @@ public class When_async_handler_throws_exception_should_reject_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_async_handler_throws_exception_should_reject_message() { //Arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(type => { if (type == typeof(MyFailingRejectHandlerAsync)) @@ -52,30 +47,20 @@ public When_async_handler_throws_exception_should_reject_message() return new RejectMessageOnErrorHandlerAsync(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingRejectHandlerAsync.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] + [Test] public async Task It_should_throw_RejectMessageAction_with_original_exception() { //Act - var exception = await Assert.ThrowsAsync(() => _commandProcessor.SendAsync(_command)); - + var exception = await Assert.That(() => _commandProcessor.SendAsync(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingRejectHandlerAsync.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingRejectHandlerAsync.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingRejectHandlerAsync.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message + await Assert.That(MyFailingRejectHandlerAsync.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingRejectHandlerAsync.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingRejectHandlerAsync.EXCEPTION_MESSAGE); // Inner has same message } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_async_attribute.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_async_attribute.cs index b237826c17..df90df2b27 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_async_attribute.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_async_attribute.cs @@ -19,30 +19,25 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { public class When_getting_handler_type_from_reject_message_on_error_async_attribute { - [Fact] - public void It_should_return_correct_handler_configuration() + [Test] + public async Task It_should_return_correct_handler_configuration() { //Arrange var attribute = new RejectMessageOnErrorAsyncAttribute(step: 1); - //Act var handlerType = attribute.GetHandlerType(); - //Assert - Assert.Equal(typeof(RejectMessageOnErrorHandlerAsync<>), handlerType); // Returns the correct async handler type - Assert.Equal(HandlerTiming.Before, attribute.Timing); // Must wrap subsequent handlers - Assert.Equal(1, attribute.Step); // Preserves the specified step + await Assert.That(handlerType).IsEqualTo(typeof(RejectMessageOnErrorHandlerAsync<>)); // Returns the correct async handler type + await Assert.That(attribute.Timing).IsEqualTo(HandlerTiming.Before); // Must wrap subsequent handlers + await Assert.That(attribute.Step).IsEqualTo(1); // Preserves the specified step } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_attribute.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_attribute.cs index 487e6a5ebd..ca6298b4ba 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_attribute.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_getting_handler_type_from_reject_message_on_error_attribute.cs @@ -19,30 +19,25 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { public class When_getting_handler_type_from_reject_message_on_error_attribute { - [Fact] - public void It_should_return_correct_handler_configuration() + [Test] + public async Task It_should_return_correct_handler_configuration() { //Arrange var attribute = new RejectMessageOnErrorAttribute(step: 1); - //Act var handlerType = attribute.GetHandlerType(); - //Assert - Assert.Equal(typeof(RejectMessageOnErrorHandler<>), handlerType); // Returns the correct handler type - Assert.Equal(HandlerTiming.Before, attribute.Timing); // Must wrap subsequent handlers - Assert.Equal(1, attribute.Step); // Preserves the specified step + await Assert.That(handlerType).IsEqualTo(typeof(RejectMessageOnErrorHandler<>)); // Returns the correct handler type + await Assert.That(attribute.Timing).IsEqualTo(HandlerTiming.Before); // Must wrap subsequent handlers + await Assert.That(attribute.Step).IsEqualTo(1); // Preserves the specified step } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_succeeds_should_not_reject_message.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_succeeds_should_not_reject_message.cs index b464ba84fe..0b2d88aa1e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_succeeds_should_not_reject_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_succeeds_should_not_reject_message.cs @@ -19,15 +19,12 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Reject.TestDoubles; using Paramore.Brighter.Reject.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { @@ -35,13 +32,11 @@ public class When_handler_succeeds_should_not_reject_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_handler_succeeds_should_not_reject_message() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MySucceedingRejectHandler)) @@ -50,28 +45,21 @@ public When_handler_succeeds_should_not_reject_message() return new RejectMessageOnErrorHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MySucceedingRejectHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_complete_without_throwing() + [Test] + public async Task It_should_complete_without_throwing() { //Act - var exception = Record.Exception(() => _commandProcessor.Send(_command)); + Exception? exception = null; + try { _commandProcessor.Send(_command); } + catch (Exception e) { exception = e; } //Assert - Assert.Null(exception); // No exception thrown - Assert.True(MySucceedingRejectHandler.HandlerCalled); // Handler was invoked + await Assert.That(exception).IsNull(); // No exception thrown + await Assert.That(MySucceedingRejectHandler.HandlerCalled).IsTrue(); // Handler was invoked } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_throws_exception_should_reject_message.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_throws_exception_should_reject_message.cs index cc2a7966b5..9102c7e6f7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_throws_exception_should_reject_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_handler_throws_exception_should_reject_message.cs @@ -19,16 +19,13 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Actions; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Reject.TestDoubles; using Paramore.Brighter.Reject.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { @@ -36,13 +33,11 @@ public class When_handler_throws_exception_should_reject_message { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_handler_throws_exception_should_reject_message() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MyFailingRejectHandler)) @@ -51,30 +46,20 @@ public When_handler_throws_exception_should_reject_message() return new RejectMessageOnErrorHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyFailingRejectHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_throw_RejectMessageAction_with_original_exception() + [Test] + public async Task It_should_throw_RejectMessageAction_with_original_exception() { //Act - var exception = Assert.Throws(() => _commandProcessor.Send(_command)); - + var exception = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); //Assert - Assert.True(MyFailingRejectHandler.HandlerCalled); // Handler was invoked - Assert.Equal(MyFailingRejectHandler.EXCEPTION_MESSAGE, exception.Message); // Preserves original message - Assert.IsType(exception.InnerException); // Preserves original exception type - Assert.Equal(MyFailingRejectHandler.EXCEPTION_MESSAGE, exception.InnerException.Message); // Inner has same message + await Assert.That(MyFailingRejectHandler.HandlerCalled).IsTrue(); // Handler was invoked + await Assert.That(exception.Message).IsEqualTo(MyFailingRejectHandler.EXCEPTION_MESSAGE); // Preserves original message + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type + await Assert.That(exception.InnerException.Message).IsEqualTo(MyFailingRejectHandler.EXCEPTION_MESSAGE); // Inner has same message } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Reject/When_reject_handler_at_step_zero_catches_inner_exceptions.cs b/tests/Paramore.Brighter.Core.Tests/Reject/When_reject_handler_at_step_zero_catches_inner_exceptions.cs index f3b76bcc16..8723f33251 100644 --- a/tests/Paramore.Brighter.Core.Tests/Reject/When_reject_handler_at_step_zero_catches_inner_exceptions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Reject/When_reject_handler_at_step_zero_catches_inner_exceptions.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Actions; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; @@ -29,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Logging.Handlers; using Paramore.Brighter.Reject.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.Core.Tests.Reject { @@ -41,13 +38,11 @@ public class When_reject_handler_at_step_zero_catches_inner_exceptions { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _command = new(); - public When_reject_handler_at_step_zero_catches_inner_exceptions() { //Arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(type => { if (type == typeof(MyMultiStepFailingHandler)) @@ -58,29 +53,19 @@ public When_reject_handler_at_step_zero_catches_inner_exceptions() return new RequestLoggingHandler(); throw new ArgumentOutOfRangeException(nameof(type), type.Name, null); }); - MyMultiStepFailingHandler.HandlerCalled = false; - - _commandProcessor = new CommandProcessor( - registry, - handlerFactory, - new InMemoryRequestContextFactory(), - new PolicyRegistry(), - new ResiliencePipelineRegistry(), - new InMemorySchedulerFactory() - ); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } - [Fact] - public void It_should_catch_exception_at_outermost_handler() + [Test] + public async Task It_should_catch_exception_at_outermost_handler() { //Act - var exception = Assert.Throws(() => _commandProcessor.Send(_command)); - + var exception = await Assert.That(() => _commandProcessor.Send(_command)).ThrowsExactly(); //Assert - Assert.True(MyMultiStepFailingHandler.HandlerCalled); // Handler was invoked through the pipeline - Assert.Equal(MyMultiStepFailingHandler.EXCEPTION_MESSAGE, exception.Message); // Caught the inner exception - Assert.IsType(exception.InnerException); // Preserves original exception type + await Assert.That(MyMultiStepFailingHandler.HandlerCalled).IsTrue(); // Handler was invoked through the pipeline + await Assert.That(exception.Message).IsEqualTo(MyMultiStepFailingHandler.EXCEPTION_MESSAGE); // Caught the inner exception + await Assert.That(exception.InnerException).IsTypeOf(); // Preserves original exception type } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Specifications/TestDoubles/SpecificationTestState.cs b/tests/Paramore.Brighter.Core.Tests/Specifications/TestDoubles/SpecificationTestState.cs index a5a28a515d..fdd49c66b6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Specifications/TestDoubles/SpecificationTestState.cs +++ b/tests/Paramore.Brighter.Core.Tests/Specifications/TestDoubles/SpecificationTestState.cs @@ -2,7 +2,7 @@ namespace Paramore.Brighter.Core.Tests.Specifications.TestDoubles; -public enum TestState +public enum SpecificationState { Done, Ready, @@ -12,6 +12,6 @@ public enum TestState public class SpecificationTestState { - public TestState State { get; set; } + public SpecificationState State { get; set; } public Dictionary Bag { get; set; } } diff --git a/tests/Paramore.Brighter.Core.Tests/Specifications/When_and_specification_left_fails_should_evaluate_both_sides.cs b/tests/Paramore.Brighter.Core.Tests/Specifications/When_and_specification_left_fails_should_evaluate_both_sides.cs index 9772fb239d..9fdadc99f0 100644 --- a/tests/Paramore.Brighter.Core.Tests/Specifications/When_and_specification_left_fails_should_evaluate_both_sides.cs +++ b/tests/Paramore.Brighter.Core.Tests/Specifications/When_and_specification_left_fails_should_evaluate_both_sides.cs @@ -19,86 +19,61 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; -using Xunit; namespace Paramore.Brighter.Core.Tests.Specifications; - public class AndSpecificationTests { - [Fact] - public void When_both_sides_fail_should_collect_errors_from_both() + [Test] + public async Task When_both_sides_fail_should_collect_errors_from_both() { // Arrange — two simple rules that both fail for short strings - var left = new Specification( - s => s.Length > 5, - s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); - var right = new Specification( - s => s.StartsWith("X"), - s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); - + var left = new Specification(s => s.Length > 5, s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); + var right = new Specification(s => s.StartsWith("X"), s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); var combined = left.And(right); var collector = new ValidationResultCollector(); - // Act var satisfied = combined.IsSatisfiedBy("abc"); var results = combined.Accept(collector).ToList(); - // Assert — both sides evaluated, both errors collected - Assert.False(satisfied); - Assert.Equal(2, results.Count(r => !r.Success)); - Assert.Contains(results, r => r.Error?.Source == "Left"); - Assert.Contains(results, r => r.Error?.Source == "Right"); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results.Count(r => !r.Success)).IsEqualTo(2); + await Assert.That(results).Contains(r => r.Error?.Source == "Left"); + await Assert.That(results).Contains(r => r.Error?.Source == "Right"); } - [Fact] - public void When_left_fails_right_passes_should_collect_only_left_error() + [Test] + public async Task When_left_fails_right_passes_should_collect_only_left_error() { // Arrange - var left = new Specification( - s => s.Length > 5, - s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); - var right = new Specification( - s => s.StartsWith("a"), - s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); - + var left = new Specification(s => s.Length > 5, s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); + var right = new Specification(s => s.StartsWith("a"), s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); var combined = left.And(right); var collector = new ValidationResultCollector(); - // Act — "abc" fails left (length <= 5) but passes right (starts with 'a') var satisfied = combined.IsSatisfiedBy("abc"); var results = combined.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); + await Assert.That(satisfied).IsFalse(); var failures = results.Where(r => !r.Success).ToList(); - Assert.Single(failures); - Assert.Equal("Left", failures[0].Error!.Source); + await Assert.That(failures).HasSingleItem(); + await Assert.That(failures[0].Error!.Source).IsEqualTo("Left"); } - [Fact] - public void When_both_sides_pass_should_return_true() + [Test] + public async Task When_both_sides_pass_should_return_true() { // Arrange - var left = new Specification( - s => s.Length > 2, - s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); - var right = new Specification( - s => s.StartsWith("h"), - s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); - + var left = new Specification(s => s.Length > 2, s => new ValidationError(ValidationSeverity.Error, "Left", "too short")); + var right = new Specification(s => s.StartsWith("h"), s => new ValidationError(ValidationSeverity.Error, "Right", "wrong prefix")); var combined = left.And(right); var collector = new ValidationResultCollector(); - // Act var satisfied = combined.IsSatisfiedBy("hello"); var results = combined.Accept(collector).ToList(); - // Assert - Assert.True(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsTrue(); + await Assert.That(results).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Specifications/When_collector_visits_specification_graph_should_collect_all_failures.cs b/tests/Paramore.Brighter.Core.Tests/Specifications/When_collector_visits_specification_graph_should_collect_all_failures.cs index 8ce8b86362..39d5cb2ace 100644 --- a/tests/Paramore.Brighter.Core.Tests/Specifications/When_collector_visits_specification_graph_should_collect_all_failures.cs +++ b/tests/Paramore.Brighter.Core.Tests/Specifications/When_collector_visits_specification_graph_should_collect_all_failures.cs @@ -19,119 +19,90 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; -using Xunit; namespace Paramore.Brighter.Core.Tests.Specifications; - public class ValidationResultCollectorGraphTests { - [Fact] - public void When_ValidationResult_Ok_should_have_success_true_and_no_error() + [Test] + public async Task When_ValidationResult_Ok_should_have_success_true_and_no_error() { // Act var result = ValidationResult.Ok(); - // Assert - Assert.True(result.Success); - Assert.Null(result.Error); + await Assert.That(result.Success).IsTrue(); + await Assert.That(result.Error).IsNull(); } - [Fact] - public void When_ValidationResult_Fail_should_carry_the_error() + [Test] + public async Task When_ValidationResult_Fail_should_carry_the_error() { // Arrange var error = new ValidationError(ValidationSeverity.Warning, "MySource", "something wrong"); - // Act var result = ValidationResult.Fail(error); - // Assert - Assert.False(result.Success); - Assert.NotNull(result.Error); - Assert.Equal(ValidationSeverity.Warning, result.Error.Severity); - Assert.Equal("MySource", result.Error.Source); - Assert.Equal("something wrong", result.Error.Message); + await Assert.That(result.Success).IsFalse(); + await Assert.That(result.Error).IsNotNull(); + await Assert.That(result.Error.Severity).IsEqualTo(ValidationSeverity.Warning); + await Assert.That(result.Error.Source).IsEqualTo("MySource"); + await Assert.That(result.Error.Message).IsEqualTo("something wrong"); } - [Fact] - public void When_collector_visits_or_specification_graph_should_collect_from_both_children() + [Test] + public async Task When_collector_visits_or_specification_graph_should_collect_from_both_children() { // Arrange — Or: both children fail, collector should collect from both - var left = new Specification( - n => n > 100, - n => new ValidationError(ValidationSeverity.Error, "Left", "too small")); - var right = new Specification( - n => n < 0, - n => new ValidationError(ValidationSeverity.Error, "Right", "not negative")); - + var left = new Specification(n => n > 100, n => new ValidationError(ValidationSeverity.Error, "Left", "too small")); + var right = new Specification(n => n < 0, n => new ValidationError(ValidationSeverity.Error, "Right", "not negative")); var combined = left.Or(right); var collector = new ValidationResultCollector(); - // Act — 5 fails both (not > 100, not < 0) var satisfied = combined.IsSatisfiedBy(5); var results = combined.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); + await Assert.That(satisfied).IsFalse(); var failures = results.Where(r => !r.Success).ToList(); - Assert.Equal(2, failures.Count); - Assert.Contains(failures, r => r.Error?.Source == "Left"); - Assert.Contains(failures, r => r.Error?.Source == "Right"); + await Assert.That(failures.Count).IsEqualTo(2); + await Assert.That(failures).Contains(r => r.Error?.Source == "Left"); + await Assert.That(failures).Contains(r => r.Error?.Source == "Right"); } - [Fact] - public void When_collector_visits_not_specification_with_error_should_collect_negation_error() + [Test] + public async Task When_collector_visits_not_specification_with_error_should_collect_negation_error() { // Arrange — Not with error factory: inner passes, so Not fails - var inner = new Specification( - s => s.Length > 2, - s => new ValidationError(ValidationSeverity.Error, "Inner", "too short")); - - var negated = inner.Not( - s => new ValidationError(ValidationSeverity.Error, "Negation", "should be short but was long")); + var inner = new Specification(s => s.Length > 2, s => new ValidationError(ValidationSeverity.Error, "Inner", "too short")); + var negated = inner.Not(s => new ValidationError(ValidationSeverity.Error, "Negation", "should be short but was long")); var collector = new ValidationResultCollector(); - // Act — "hello" satisfies inner (length > 2), so Not fails var satisfied = negated.IsSatisfiedBy("hello"); var results = negated.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal("Negation", results[0].Error!.Source); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Source).IsEqualTo("Negation"); } - [Fact] - public void When_collector_visits_nested_and_or_graph_should_collect_all_leaf_failures() + [Test] + public async Task When_collector_visits_nested_and_or_graph_should_collect_all_leaf_failures() { // Arrange — (A AND B) OR C, where A and C fail, B passes - var specA = new Specification( - n => n > 10, - n => new ValidationError(ValidationSeverity.Error, "A", "not > 10")); - var specB = new Specification( - n => n > 0, - n => new ValidationError(ValidationSeverity.Error, "B", "not > 0")); - var specC = new Specification( - n => n < 0, - n => new ValidationError(ValidationSeverity.Error, "C", "not < 0")); - + var specA = new Specification(n => n > 10, n => new ValidationError(ValidationSeverity.Error, "A", "not > 10")); + var specB = new Specification(n => n > 0, n => new ValidationError(ValidationSeverity.Error, "B", "not > 0")); + var specC = new Specification(n => n < 0, n => new ValidationError(ValidationSeverity.Error, "C", "not < 0")); // (A AND B) OR C var combined = specA.And(specB).Or(specC); var collector = new ValidationResultCollector(); - // Act — 5: A fails (not > 10), B passes (> 0), C fails (not < 0) var satisfied = combined.IsSatisfiedBy(5); var results = combined.Accept(collector).ToList(); - // Assert — collector traverses full tree, finds A and C failures - Assert.False(satisfied); + await Assert.That(satisfied).IsFalse(); var failures = results.Where(r => !r.Success).ToList(); - Assert.Equal(2, failures.Count); - Assert.Contains(failures, r => r.Error?.Source == "A"); - Assert.Contains(failures, r => r.Error?.Source == "C"); + await Assert.That(failures.Count).IsEqualTo(2); + await Assert.That(failures).Contains(r => r.Error?.Source == "A"); + await Assert.That(failures).Contains(r => r.Error?.Source == "C"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Specifications/When_evaluating_a_specification.cs b/tests/Paramore.Brighter.Core.Tests/Specifications/When_evaluating_a_specification.cs index c39ce8b5a8..105bb0eb27 100644 --- a/tests/Paramore.Brighter.Core.Tests/Specifications/When_evaluating_a_specification.cs +++ b/tests/Paramore.Brighter.Core.Tests/Specifications/When_evaluating_a_specification.cs @@ -1,74 +1,64 @@ -using Paramore.Brighter.Core.Tests.Specifications.TestDoubles; -using Xunit; +using Paramore.Brighter.Core.Tests.Specifications.TestDoubles; namespace Paramore.Brighter.Core.Tests.Specifications; - public class SpecificationTests { - [Fact] - public void When_evaluating_a_specificaion() + [Test] + public async Task When_evaluating_a_specificaion() { - var specification = new Specification(state => state.State == TestState.Done); - Assert.True(specification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.False(specification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Ready })); + var specification = new Specification(state => state.State == SpecificationState.Done); + await Assert.That(specification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsTrue(); + await Assert.That(specification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Ready })).IsFalse(); } - [Fact] - public void When_combining_specifications_with_and() + [Test] + public async Task When_combining_specifications_with_and() { - var doneSpecification = new Specification(state => state.State == TestState.Done); - var runningSpecification = new Specification(state => state.State == TestState.Running); + var doneSpecification = new Specification(state => state.State == SpecificationState.Done); + var runningSpecification = new Specification(state => state.State == SpecificationState.Running); var combinedSpecification = doneSpecification.And(runningSpecification); - - Assert.False(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.False(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Running })); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsFalse(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Running })).IsFalse(); } - [Fact] - public void When_combining_specifications_with_or() + [Test] + public async Task When_combining_specifications_with_or() { - var doneSpecification = new Specification(state => state.State == TestState.Done); - var runningSpecification = new Specification(state => state.State == TestState.Running); + var doneSpecification = new Specification(state => state.State == SpecificationState.Done); + var runningSpecification = new Specification(state => state.State == SpecificationState.Running); var combinedSpecification = doneSpecification.Or(runningSpecification); - - Assert.True(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.True(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Running })); - Assert.False(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Ready })); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsTrue(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Running })).IsTrue(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Ready })).IsFalse(); } - [Fact] - public void When_negating_a_specification() + [Test] + public async Task When_negating_a_specification() { - var doneSpecification = new Specification(state => state.State == TestState.Done); + var doneSpecification = new Specification(state => state.State == SpecificationState.Done); var notDoneSpecification = doneSpecification.Not(); - - Assert.False(notDoneSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.True(notDoneSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Ready })); + await Assert.That(notDoneSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsFalse(); + await Assert.That(notDoneSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Ready })).IsTrue(); } - [Fact] - public void When_combining_specifications_with_and_not() + [Test] + public async Task When_combining_specifications_with_and_not() { - var doneSpecification = new Specification(state => state.State == TestState.Done); - var runningSpecification = new Specification(state => state.State == TestState.Running); + var doneSpecification = new Specification(state => state.State == SpecificationState.Done); + var runningSpecification = new Specification(state => state.State == SpecificationState.Running); var combinedSpecification = doneSpecification.AndNot(runningSpecification); - - Assert.True(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.False(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Running })); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsTrue(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Running })).IsFalse(); } - [Fact] - public void When_combining_specifications_with_or_not() + [Test] + public async Task When_combining_specifications_with_or_not() { - var doneSpecification = new Specification(state => state.State == TestState.Done); - var runningSpecification = new Specification(state => state.State == TestState.Running); + var doneSpecification = new Specification(state => state.State == SpecificationState.Done); + var runningSpecification = new Specification(state => state.State == SpecificationState.Running); var combinedSpecification = doneSpecification.OrNot(runningSpecification); - - Assert.True(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Done })); - Assert.True(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Ready })); - Assert.False(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = TestState.Running })); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Done })).IsTrue(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Ready })).IsTrue(); + await Assert.That(combinedSpecification.IsSatisfiedBy(new SpecificationTestState { State = SpecificationState.Running })).IsFalse(); } -} - - - +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Specifications/When_specification_with_error_factory_fails_should_collect_error.cs b/tests/Paramore.Brighter.Core.Tests/Specifications/When_specification_with_error_factory_fails_should_collect_error.cs index 3d108b9ee3..c59ffba5b8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Specifications/When_specification_with_error_factory_fails_should_collect_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Specifications/When_specification_with_error_factory_fails_should_collect_error.cs @@ -19,141 +19,113 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Linq; -using Xunit; namespace Paramore.Brighter.Core.Tests.Specifications; - public class SpecificationValidationTests { - [Fact] - public void When_pure_predicate_fails_should_return_empty_results_from_visitor() + [Test] + public async Task When_pure_predicate_fails_should_return_empty_results_from_visitor() { // Arrange — pure predicate constructor, no validation metadata var spec = new Specification(s => s.Length > 5); var collector = new ValidationResultCollector(); - // Act var satisfied = spec.IsSatisfiedBy("abc"); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).IsEmpty(); } - [Fact] - public void When_simple_rule_fails_should_collect_validation_error() + [Test] + public async Task When_simple_rule_fails_should_collect_validation_error() { // Arrange — simple rule: predicate + error factory - var spec = new Specification( - s => s.Length > 5, - s => new ValidationError( - ValidationSeverity.Error, - "TestSource", - $"String '{s}' is too short")); + var spec = new Specification(s => s.Length > 5, s => new ValidationError(ValidationSeverity.Error, "TestSource", $"String '{s}' is too short")); var collector = new ValidationResultCollector(); - // Act var satisfied = spec.IsSatisfiedBy("abc"); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.False(results[0].Success); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Equal("TestSource", results[0].Error!.Source); - Assert.Contains("abc", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Success).IsFalse(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Source).IsEqualTo("TestSource"); + await Assert.That(results[0].Error!.Message).Contains("abc"); } - [Fact] - public void When_simple_rule_passes_should_return_empty_results() + [Test] + public async Task When_simple_rule_passes_should_return_empty_results() { // Arrange - var spec = new Specification( - s => s.Length > 2, - s => new ValidationError(ValidationSeverity.Error, "TestSource", "too short")); + var spec = new Specification(s => s.Length > 2, s => new ValidationError(ValidationSeverity.Error, "TestSource", "too short")); var collector = new ValidationResultCollector(); - // Act var satisfied = spec.IsSatisfiedBy("hello"); var results = spec.Accept(collector).ToList(); - // Assert - Assert.True(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsTrue(); + await Assert.That(results).IsEmpty(); } - [Fact] - public void When_collapsed_rule_returns_failures_should_collect_all() + [Test] + public async Task When_collapsed_rule_returns_failures_should_collect_all() { // Arrange — collapsed rule: evaluator returns multiple results - var spec = new Specification(n => new List - { - ValidationResult.Fail(new ValidationError(ValidationSeverity.Error, "Item1", "first error")), - ValidationResult.Ok(), - ValidationResult.Fail(new ValidationError(ValidationSeverity.Warning, "Item3", "second error")) - }); + var spec = new Specification(n => new List { ValidationResult.Fail(new ValidationError(ValidationSeverity.Error, "Item1", "first error")), ValidationResult.Ok(), ValidationResult.Fail(new ValidationError(ValidationSeverity.Warning, "Item3", "second error")) }); var collector = new ValidationResultCollector(); - // Act var satisfied = spec.IsSatisfiedBy(42); var results = spec.Accept(collector).ToList(); - // Assert — IsSatisfiedBy returns false because not all results are successful - Assert.False(satisfied); - Assert.Equal(3, results.Count); - Assert.False(results[0].Success); - Assert.True(results[1].Success); - Assert.False(results[2].Success); - Assert.Equal(ValidationSeverity.Warning, results[2].Error!.Severity); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results.Count).IsEqualTo(3); + await Assert.That(results[0].Success).IsFalse(); + await Assert.That(results[1].Success).IsTrue(); + await Assert.That(results[2].Success).IsFalse(); + await Assert.That(results[2].Error!.Severity).IsEqualTo(ValidationSeverity.Warning); } - [Fact] - public void When_predicate_throws_should_produce_error_severity_result() + [Test] + public async Task When_predicate_throws_should_produce_error_severity_result() { // Arrange — predicate that throws an exception - var spec = new Specification( - s => throw new InvalidOperationException("boom"), - s => new ValidationError(ValidationSeverity.Warning, "Test", "unused")); + var spec = new Specification(s => throw new InvalidOperationException("boom"), s => new ValidationError(ValidationSeverity.Warning, "Test", "unused")); var collector = new ValidationResultCollector(); - // Act var satisfied = spec.IsSatisfiedBy("test"); var results = spec.Accept(collector).ToList(); - // Assert — exception is caught, produces Error-severity result - Assert.False(satisfied); - Assert.Single(results); - Assert.False(results[0].Success); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("boom", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Success).IsFalse(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("boom"); } - [Fact] - public void When_visitor_called_without_re_evaluating_should_return_cached_results() + [Test] + public async Task When_visitor_called_without_re_evaluating_should_return_cached_results() { // Arrange — track evaluation count via closure var evaluationCount = 0; - var spec = new Specification( - s => { evaluationCount++; return s.Length > 5; }, - s => new ValidationError(ValidationSeverity.Error, "Test", "too short")); + var spec = new Specification(s => + { + evaluationCount++; + return s.Length > 5; + }, s => new ValidationError(ValidationSeverity.Error, "Test", "too short")); var collector = new ValidationResultCollector(); - // Act — evaluate once, then visit twice spec.IsSatisfiedBy("abc"); var results1 = spec.Accept(collector).ToList(); var results2 = spec.Accept(collector).ToList(); - // Assert — predicate evaluated only once; visitor reads cached results - Assert.Equal(1, evaluationCount); - Assert.Single(results1); - Assert.Single(results2); + await Assert.That(evaluationCount).IsEqualTo(1); + await Assert.That(results1).HasSingleItem(); + await Assert.That(results2).HasSingleItem(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs index 37222ee44b..7ba2cfcd98 100644 --- a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs @@ -1,30 +1,25 @@ -#region Sources - +#region Sources // This class is based on Stephen Cleary's AyncContext, see OnMessagePublished; - public async Task PublishAsync(Action callBack) { await Task.Yield(); @@ -195,34 +181,30 @@ public async Task PublishAsync(Action callBack) public void Report(int value) { - Task.Run(() => OnMessagePublished?.Invoke(true, value)); + Task.Run(() => OnMessagePublished?.Invoke(true, value)); } } - - [Fact] - public void Current_WithoutAsyncContext_IsNull() + + [Test] + public async Task Current_WithoutAsyncContext_IsNull() { - Assert.Null(BrighterAsyncContext.Current); + await Assert.That(BrighterAsyncContext.Current).IsNull(); } - [Fact] - public void Current_FromBrighterSynchronizationHelper_IsBrighterSynchronizationHelper() + [Test] + public async Task Current_FromBrighterSynchronizationHelper_IsBrighterSynchronizationHelper() { BrighterAsyncContext observedHelper = null; var helper = new BrighterAsyncContext(); - - var task = helper.Factory.StartNew( - () => { observedHelper = BrighterAsyncContext.Current; }, - helper.Factory.CancellationToken, - helper.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - helper.TaskScheduler); - + var task = helper.Factory.StartNew(() => + { + observedHelper = BrighterAsyncContext.Current; + }, helper.Factory.CancellationToken, helper.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, helper.TaskScheduler); helper.Execute(task); - - Assert.Equal(helper, observedHelper); + await Assert.That(observedHelper).IsEqualTo(helper); } - - [Fact] + + [Test] public async Task Run_AsyncTaskWithResult_ContainsMultipleAsyncTasks_Still_Ends2() { bool resumed = false; @@ -232,74 +214,66 @@ public async Task Run_AsyncTaskWithResult_ContainsMultipleAsyncTasks_Still_Ends2 resumed = true; return 17; })); - await Task.Delay(100); - - var result =await Task.WhenAll(newTask); - - Assert.True(resumed); - Assert.Equal(17, result[0]); + var result = await Task.WhenAll(newTask); + await Assert.That(resumed).IsTrue(); + await Assert.That(result[0]).IsEqualTo(17); } - [Fact] - public void SynchronizationContextCurrent_FromBrighterSynchronizationHelper_IsBrighterSynchronizationHelperSynchronizationContext() + [Test] + public async Task SynchronizationContextCurrent_FromBrighterSynchronizationHelper_IsBrighterSynchronizationHelperSynchronizationContext() { System.Threading.SynchronizationContext? observedContext = null; var context = new BrighterAsyncContext(); - - var task = context.Factory.StartNew( - () => { observedContext = System.Threading.SynchronizationContext.Current; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - context.TaskScheduler); - + var task = context.Factory.StartNew(() => + { + observedContext = System.Threading.SynchronizationContext.Current; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, context.TaskScheduler); context.Execute(task); - - Assert.Equal(context.SynchronizationContext, observedContext); + await Assert.That(observedContext).IsEqualTo(context.SynchronizationContext); } - [Fact] - public void TaskSchedulerCurrent_FromAsyncContext_IsThreadPoolTaskScheduler() + [Test] + public async Task TaskSchedulerCurrent_FromAsyncContext_IsThreadPoolTaskScheduler() { TaskScheduler observedScheduler = null; var context = new BrighterAsyncContext(); - - var task = context.Factory.StartNew( - () => { observedScheduler = TaskScheduler.Current; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - context.TaskScheduler); - + var task = context.Factory.StartNew(() => + { + observedScheduler = TaskScheduler.Current; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, context.TaskScheduler); context.Execute(task); - - Assert.Equal(TaskScheduler.Default, observedScheduler); + await Assert.That(observedScheduler).IsEqualTo(TaskScheduler.Default); } - [Fact] - public void TaskScheduler_MaximumConcurrency_IsOne() + [Test] + public async Task TaskScheduler_MaximumConcurrency_IsOne() { var context = new BrighterAsyncContext(); - Assert.Equal(1, context.TaskScheduler.MaximumConcurrencyLevel); + await Assert.That(context.TaskScheduler.MaximumConcurrencyLevel).IsEqualTo(1); } - [Fact] - public void Run_PropagatesException() + [Test] + public async Task Run_PropagatesException() { bool propogatesException = false; try { - BrighterAsyncContext.Run(() => { throw new NotImplementedException(); }); + BrighterAsyncContext.Run(() => + { + throw new NotImplementedException(); + }); } catch (Exception e) { propogatesException = true; } - Assert.True(propogatesException); + await Assert.That(propogatesException).IsTrue(); } - [Fact] - public void Run_Async_PropagatesException() + [Test] + public async Task Run_Async_PropagatesException() { bool propogatesException = false; try @@ -315,10 +289,10 @@ public void Run_Async_PropagatesException() propogatesException = true; } - Assert.True(propogatesException); + await Assert.That(propogatesException).IsTrue(); } - [Fact] + [Test] public async Task Run_Async_InThread_PropagatesException() { bool propogatesException = false; @@ -332,7 +306,6 @@ public async Task Run_Async_InThread_PropagatesException() throw new NotImplementedException(); }); }); - await runningThread; } catch (Exception e) @@ -340,11 +313,11 @@ public async Task Run_Async_InThread_PropagatesException() propogatesException = true; } - Assert.True(propogatesException); + await Assert.That(propogatesException).IsTrue(); } - [Fact] - public void SynchronizationContextPost_PropagatesException() + [Test] + public async Task SynchronizationContextPost_PropagatesException() { bool propogatesException = false; try @@ -363,31 +336,27 @@ public void SynchronizationContextPost_PropagatesException() propogatesException = true; } - Assert.True(propogatesException); + await Assert.That(propogatesException).IsTrue(); } - [Fact] - public void Task_AfterExecute_NeverRuns() + [Test] + public async Task Task_AfterExecute_NeverRuns() { int value = 0; var context = new BrighterAsyncContext(); - - var task = context.Factory.StartNew( - () => { value = 1; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - context.TaskScheduler); - + var task = context.Factory.StartNew(() => + { + value = 1; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, context.TaskScheduler); context.Execute(task); - - var taskTwo = context.Factory.StartNew( - () => { value = 2; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - context.TaskScheduler); - - taskTwo.ContinueWith(_ => { throw new Exception("Should not run"); }, TaskScheduler.Default); - + var taskTwo = context.Factory.StartNew(() => + { + value = 2; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, context.TaskScheduler); + taskTwo.ContinueWith(_ => + { + throw new Exception("Should not run"); + }, TaskScheduler.Default); bool exceptionRan = false; try { @@ -397,32 +366,26 @@ public void Task_AfterExecute_NeverRuns() { exceptionRan = true; } - //there should be no pending work - Assert.Equal(1, value); - Assert.False(exceptionRan); + //there should be no pending work + await Assert.That(value).IsEqualTo(1); + await Assert.That(exceptionRan).IsFalse(); } - [Fact] + [Test] public async Task Task_AfterExecute_Runs_On_ThreadPool() { int value = 0; var context = new BrighterAsyncContext(); - - var task = context.Factory.StartNew( - () => { value = 1; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - context.TaskScheduler); - + var task = context.Factory.StartNew(() => + { + value = 1; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, context.TaskScheduler); context.Execute(task); - - var taskTwo = context.Factory.StartNew( - () => { value = 2; }, - context.Factory.CancellationToken, - context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, - TaskScheduler.Default); - + var taskTwo = context.Factory.StartNew(() => + { + value = 2; + }, context.Factory.CancellationToken, context.Factory.CreationOptions | TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); bool threadPoolExceptionRan = false; try { @@ -430,29 +393,27 @@ public async Task Task_AfterExecute_Runs_On_ThreadPool() } catch (Exception e) { - Assert.Equal("Should run on thread pool", e.Message); + await Assert.That(e.Message).IsEqualTo("Should run on thread pool"); threadPoolExceptionRan = true; } - Assert.True(threadPoolExceptionRan); + await Assert.That(threadPoolExceptionRan).IsTrue(); } - - [Fact] - public void SynchronizationContext_IsEqualToCopyOfItself() + + [Test] + public async Task SynchronizationContext_IsEqualToCopyOfItself() { - var synchronizationContext1 = - BrighterAsyncContext.Run(() => System.Threading.SynchronizationContext.Current); + var synchronizationContext1 = BrighterAsyncContext.Run(() => System.Threading.SynchronizationContext.Current); var synchronizationContext2 = synchronizationContext1.CreateCopy(); - - Assert.Equal(synchronizationContext2.GetHashCode(), synchronizationContext1.GetHashCode()); - Assert.True(synchronizationContext1.Equals(synchronizationContext2)); - Assert.False(synchronizationContext1.Equals(new System.Threading.SynchronizationContext())); + await Assert.That(synchronizationContext1.GetHashCode()).IsEqualTo(synchronizationContext2.GetHashCode()); + await Assert.That(synchronizationContext1.Equals(synchronizationContext2)).IsTrue(); + await Assert.That(synchronizationContext1.Equals(new System.Threading.SynchronizationContext())).IsFalse(); } - [Fact] - public void Id_IsEqualToTaskSchedulerId() + [Test] + public async Task Id_IsEqualToTaskSchedulerId() { var context = new BrighterAsyncContext(); - Assert.Equal(context.TaskScheduler.Id, context.Id); + await Assert.That(context.Id).IsEqualTo(context.TaskScheduler.Id); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_failing_a_timeout_policy_check.cs b/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_failing_a_timeout_policy_check.cs index 4758cbdd67..f9acab0a17 100644 --- a/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_failing_a_timeout_policy_check.cs +++ b/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_failing_a_timeout_policy_check.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,21 +12,18 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Timeout.Test_Doubles; -using Xunit; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.TestHelpers; @@ -40,34 +37,28 @@ public class TimeoutHandlerFailsCheckTests private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private AggregateException _thrownException; - public TimeoutHandlerFailsCheckTests() { var registry = new SubscriberRegistry(); registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact(Skip="Replace with Polly Timeout")] - public void When_Sending_A_Command_To_The_Processor_Failing_A_Timeout_Policy_Check() + [Test, Skip("Replace with Polly Timeout")] + public async Task When_Sending_A_Command_To_The_Processor_Failing_A_Timeout_Policy_Check() { _thrownException = (AggregateException)Catch.Exception(() => _commandProcessor.Send(_myCommand)); - //_should_throw_a_timeout_exception - Assert.IsType(_thrownException.Flatten().InnerExceptions.First()); + await Assert.That(_thrownException.Flatten().InnerExceptions.First()).IsTypeOf(); //_should_signal_that_a_timeout_occured_and_handler_should_be_cancelled - Assert.True(_myCommand.WasCancelled); + await Assert.That(_myCommand.WasCancelled).IsTrue(); //_should_not_run_to_completion - Assert.False(_myCommand.TaskCompleted); + await Assert.That(_myCommand.TaskCompleted).IsFalse(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_passing_a_timeout_policy_check.cs b/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_passing_a_timeout_policy_check.cs index a463672302..e45a672e52 100644 --- a/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_passing_a_timeout_policy_check.cs +++ b/tests/Paramore.Brighter.Core.Tests/Timeout/When_sending_a_command_to_the_processor_passing_a_timeout_policy_check.cs @@ -1,9 +1,9 @@ -#region Licence +#region Licence /* The MIT License (MIT) -Copyright © 2014 Ian Cooper +Copyright 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal +of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,20 +12,17 @@ of this software and associated documentation files (the “Software”), to dea The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Core.Tests.Timeout.Test_Doubles; -using Xunit; using Polly.Registry; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; @@ -37,31 +34,25 @@ public class MyPassesTimeoutHandlerTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); - public MyPassesTimeoutHandlerTests() { var registry = new SubscriberRegistry(); //Handler is decorated with UsePolicy registry.Register(); - var container = new ServiceCollection(); container.AddTransient(); container.AddTransient>(); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); - - _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); + _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } //We have to catch the final exception that bubbles out after retry - [Fact(Skip="Replace with Polly Timeout")] - public void When_Sending_A_Command_To_The_Processor_Passing_A_Timeout_Policy_Check() + [Test, Skip("Replace with Polly Timeout")] + public async Task When_Sending_A_Command_To_The_Processor_Passing_A_Timeout_Policy_Check() { _commandProcessor.Send(_myCommand); - //_should_complete_the_command_before_an_exception - Assert.True(_myCommand.TaskCompleted); + await Assert.That(_myCommand.TaskCompleted).IsTrue(); } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_async_handler_has_sync_attribute_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_async_handler_has_sync_attribute_should_report_error.cs index bf19f3b485..78b605b494 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_async_handler_has_sync_attribute_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_async_handler_has_sync_attribute_should_report_error.cs @@ -19,51 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class AsyncHandlerSyncAttributeValidationTests { - [Fact] - public void When_async_handler_has_sync_attribute_should_report_error() + [Test] + public async Task When_async_handler_has_sync_attribute_should_report_error() { // Arrange — async handler (isAsync: true) with a sync step handler type // RejectMessageOnErrorHandler<> extends RequestHandler (sync), not RequestHandlerAsync - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: true, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RejectMessageOnErrorAttribute), - typeof(RejectMessageOnErrorHandler<>), - Step: 1, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: true, beforeSteps: [new PipelineStepDescription(typeof(RejectMessageOnErrorAttribute), typeof(RejectMessageOnErrorHandler<>), Step: 1, HandlerTiming.Before)], afterSteps: []); var spec = HandlerPipelineValidationRules.AttributeAsyncConsistency(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).Where(r => !r.Success).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("Async handler uses sync attribute", results[0].Error!.Message); - Assert.Contains("RejectMessageOnErrorAttribute", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("Async handler uses sync attribute"); + await Assert.That(results[0].Error!.Message).Contains("RejectMessageOnErrorAttribute"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_after_resilience_should_report_ordering_warning.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_after_resilience_should_report_ordering_warning.cs index 07cc7f04fc..06166988fc 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_after_resilience_should_report_ordering_warning.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_after_resilience_should_report_ordering_warning.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Policies.Attributes; @@ -29,50 +27,28 @@ THE SOFTWARE. */ using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class BackstopResilienceValidationTests { - [Fact] - public void When_backstop_after_resilience_should_report_ordering_warning() + [Test] + public async Task When_backstop_after_resilience_should_report_ordering_warning() { // Arrange — backstop at step 5, resilience at step 3 // Lower step = outer wrapper, so backstop (step 5) is inner and will never catch failures - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: false, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RejectMessageOnErrorAttribute), - typeof(RejectMessageOnErrorHandler<>), - Step: 5, - HandlerTiming.Before), - new PipelineStepDescription( - typeof(UseResiliencePipelineAttribute), - typeof(ResilienceExceptionPolicyHandler<>), - Step: 3, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: false, beforeSteps: [new PipelineStepDescription(typeof(RejectMessageOnErrorAttribute), typeof(RejectMessageOnErrorHandler<>), Step: 5, HandlerTiming.Before), new PipelineStepDescription(typeof(UseResiliencePipelineAttribute), typeof(ResilienceExceptionPolicyHandler<>), Step: 3, HandlerTiming.Before)], afterSteps: []); var spec = HandlerPipelineValidationRules.BackstopAttributeOrdering(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).Where(r => !r.Success).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Warning, results[0].Error!.Severity); - Assert.Contains("RejectMessageOnErrorAttribute", results[0].Error!.Message); - Assert.Contains("step 5", results[0].Error!.Message); - Assert.Contains("UseResiliencePipelineAttribute", results[0].Error!.Message); - Assert.Contains("step 3", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Warning); + await Assert.That(results[0].Error!.Message).Contains("RejectMessageOnErrorAttribute"); + await Assert.That(results[0].Error!.Message).Contains("step 5"); + await Assert.That(results[0].Error!.Message).Contains("UseResiliencePipelineAttribute"); + await Assert.That(results[0].Error!.Message).Contains("step 3"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_before_resilience_should_pass.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_before_resilience_should_pass.cs index a2726ae182..54e5cbdc5d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_before_resilience_should_pass.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_backstop_before_resilience_should_pass.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Policies.Attributes; @@ -29,45 +27,23 @@ THE SOFTWARE. */ using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class BackstopBeforeResilienceValidationTests { - [Fact] - public void When_backstop_before_resilience_should_pass() + [Test] + public async Task When_backstop_before_resilience_should_pass() { // Arrange — backstop at step 0, resilience at step 1 // Lower step = outer wrapper, so backstop (step 0) is outermost — correct ordering - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: false, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RejectMessageOnErrorAttribute), - typeof(RejectMessageOnErrorHandler<>), - Step: 0, - HandlerTiming.Before), - new PipelineStepDescription( - typeof(UseResiliencePipelineAttribute), - typeof(ResilienceExceptionPolicyHandler<>), - Step: 1, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: false, beforeSteps: [new PipelineStepDescription(typeof(RejectMessageOnErrorAttribute), typeof(RejectMessageOnErrorHandler<>), Step: 0, HandlerTiming.Before), new PipelineStepDescription(typeof(UseResiliencePipelineAttribute), typeof(ResilienceExceptionPolicyHandler<>), Step: 1, HandlerTiming.Before)], afterSteps: []); var spec = HandlerPipelineValidationRules.BackstopAttributeOrdering(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).Where(r => !r.Success).ToList(); - // Assert - Assert.True(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsTrue(); + await Assert.That(results).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_both_validate_and_describe_registered_should_describe_once.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_both_validate_and_describe_registered_should_describe_once.cs index 43b52b885b..9d00379ba5 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_both_validate_and_describe_registered_should_describe_once.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_both_validate_and_describe_registered_should_describe_once.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -30,33 +28,26 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class DoubleDescribePreventionTests { - [Fact] + [Test] public async Task When_both_validate_and_describe_registered_should_describe_once() { // Arrange — a shared diagnostic writer registered in DI, used by both hosted services var diagnosticWriter = new SpyPipelineDiagnosticWriter(); var validator = SpyPipelineValidator.WithNoErrors(); var options = Options.Create(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }); - var services = new ServiceCollection(); services.AddSingleton(diagnosticWriter); var provider = services.BuildServiceProvider(); - - var validationService = new BrighterValidationHostedService( - options, validator, provider, NullLogger.Instance); + var validationService = new BrighterValidationHostedService(options, validator, provider, NullLogger.Instance); var diagnosticService = new BrighterDiagnosticHostedService(diagnosticWriter, options); - // Act — both hosted services start (as they would in a real host) await validationService.StartAsync(CancellationToken.None); await diagnosticService.StartAsync(CancellationToken.None); - // Assert — Describe should have been called exactly once, not twice - Assert.Equal(1, diagnosticWriter.DescribeCallCount); + await Assert.That(diagnosticWriter.DescribeCallCount).IsEqualTo(1); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_brighter_and_producers_configured_should_run_handler_and_producer_checks.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_brighter_and_producers_configured_should_run_handler_and_producer_checks.cs index be54865db5..cd198e590c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_brighter_and_producers_configured_should_run_handler_and_producer_checks.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_brighter_and_producers_configured_should_run_handler_and_producer_checks.cs @@ -19,42 +19,39 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidatorHandlerAndProducerTests { - [Fact] - public void When_brighter_and_producers_configured_should_run_handler_and_producer_checks() + [Test] + public async Task When_brighter_and_producers_configured_should_run_handler_and_producer_checks() { // Arrange — handler path: internal handler triggers visibility error var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyInternalHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Producer path: null RequestType triggers producer error - var publications = new[] { new Publication { Topic = new RoutingKey("test.topic"), RequestType = null } }; - + var publications = new[] + { + new Publication + { + Topic = new RoutingKey("test.topic"), + RequestType = null + } + }; // No subscriptions — consumer path should not run var validator = new PipelineValidator(pipelineBuilder, publications); - // Act var result = validator.Validate(); - // Assert — errors from both handler and producer paths - Assert.False(result.IsValid); - Assert.Contains(result.Errors, e => e.Message.Contains("not public")); - Assert.Contains(result.Errors, e => e.Message.Contains("RequestType")); - + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("not public")); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("RequestType")); // No consumer errors - Assert.DoesNotContain(result.Errors, e => e.Message.Contains("No handler registered")); + await Assert.That(result.Errors).DoesNotContain(e => e.Message.Contains("No handler registered")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_should_register_diagnostic_writer_in_di.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_should_register_diagnostic_writer_in_di.cs index 45ba0bf3ec..1667c72b72 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_should_register_diagnostic_writer_in_di.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_should_register_diagnostic_writer_in_di.cs @@ -19,32 +19,26 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class DescribePipelinesRegistrationTests { - [Fact] - public void When_describe_pipelines_called_should_register_diagnostic_writer_in_di() + [Test] + public async Task When_describe_pipelines_called_should_register_diagnostic_writer_in_di() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act var returnedBuilder = builder.DescribePipelines(); - // Assert — DescribePipelines registers IAmAPipelineDiagnosticWriter and returns builder for chaining - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); - Assert.Same(builder, returnedBuilder); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); + await Assert.That(returnedBuilder).IsSameReferenceAs(builder); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs index 5d98f98332..0314bffc77 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Collections.Generic; using System.Linq; @@ -32,31 +30,25 @@ THE SOFTWARE. */ using Microsoft.Extensions.Logging; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class DescribePipelinesStandaloneTests { - [Fact] - public void When_describe_pipelines_called_should_register_diagnostic_hosted_service() + [Test] + public async Task When_describe_pipelines_called_should_register_diagnostic_hosted_service() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act builder.DescribePipelines(); - // Assert — a diagnostic hosted service is registered - Assert.Contains(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); } - [Fact] + [Test] public async Task When_describe_pipelines_standalone_should_produce_log_output_at_startup() { // Arrange — DescribePipelines without ValidatePipelines, real diagnostic writer with captured logs @@ -67,13 +59,10 @@ public async Task When_describe_pipelines_standalone_should_produce_log_output_a var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); builder.DescribePipelines(); - // Use a capturing logger factory so we can verify log output var logEntries = new List(); services.AddSingleton(new CapturingLoggerFactory(logEntries)); - var provider = services.BuildServiceProvider(); - // Act — start all hosted services (simulates host startup) var hostedServices = provider.GetServices().ToList(); foreach (var svc in hostedServices) @@ -82,30 +71,33 @@ public async Task When_describe_pipelines_standalone_should_produce_log_output_a } // Assert — the diagnostic writer ran and produced the pipeline summary log - Assert.Contains(logEntries, e => - e.LogLevel == LogLevel.Information - && e.Message.Contains("handler pipeline")); + await Assert.That(logEntries).Contains(e => e.LogLevel == LogLevel.Information && e.Message.Contains("handler pipeline")); } /// /// A logger factory that captures all log entries for test assertions. /// - private class CapturingLoggerFactory(List entries) : ILoggerFactory + private class CapturingLoggerFactory(List entries) : Microsoft.Extensions.Logging.ILoggerFactory, System.IDisposable { public ILogger CreateLogger(string categoryName) => new CapturingLogger(entries); - public void AddProvider(ILoggerProvider provider) { } - public void Dispose() { } + public void AddProvider(ILoggerProvider provider) + { + } + + public void Dispose() + { + } } private class CapturingLogger(List entries) : ILogger { - public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, - Func formatter) + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { entries.Add(new LogEntry(logLevel, formatter(state, exception))); } public bool IsEnabled(LogLevel logLevel) => true; - public IDisposable? BeginScope(TState state) where TState : notnull => null; + public IDisposable? BeginScope(TState state) + where TState : notnull => null; } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_with_producers_should_log_publications.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_with_producers_should_log_publications.cs index ed89cb0f4f..d0017600d2 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_with_producers_should_log_publications.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_with_producers_should_log_publications.cs @@ -19,32 +19,24 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class DescribePipelinesWithProducersTests { - [Fact] - public void When_describe_pipelines_with_producers_should_log_publication_summary() + [Test] + public async Task When_describe_pipelines_with_producers_should_log_publication_summary() { // Arrange — set up a producer with a publication that has a RequestType and Topic var routingKey = new RoutingKey("greeting.created"); - var producer = new InMemoryMessageProducer( - new InternalBus(), - new Publication { Topic = routingKey, RequestType = typeof(MyDescribableEvent) }); - var producerRegistry = new ProducerRegistry( - new Dictionary { { routingKey, producer } }); - + var producer = new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyDescribableEvent) }); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer } }); var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); services.AddSingleton(subscriberRegistry); @@ -53,26 +45,23 @@ public void When_describe_pipelines_with_producers_should_log_publication_summar services.AddSingleton(mapperRegistry); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); builder.DescribePipelines(); - // Replace the logger factory so we can capture output var spyLogger = new SpyLogger(); - services.AddSingleton( - new TestLoggerFactory(spyLogger)); - + services.AddSingleton(new TestLoggerFactory(spyLogger)); var provider = services.BuildServiceProvider(); - // Act — resolve the diagnostic writer and call Describe var writer = provider.GetRequiredService(); writer.Describe(); - // Assert — the summary should include publication count var infoMessages = spyLogger.InformationEntries.Select(e => e.Message).ToList(); - Assert.Contains(infoMessages, m => m.Contains("1 publication")); + await Assert.That(infoMessages).Contains(m => m.Contains("1 publication")); } - private class MyDescribableEvent : Event + private class MyDescribableEvent : Paramore.Brighter.Event, Paramore.Brighter.IEvent, Paramore.Brighter.IRequest { - public MyDescribableEvent() : base(System.Guid.NewGuid()) { } + public MyDescribableEvent() : base(System.Guid.NewGuid()) + { + } } private class TestLoggerFactory : Microsoft.Extensions.Logging.ILoggerFactory @@ -80,7 +69,12 @@ private class TestLoggerFactory : Microsoft.Extensions.Logging.ILoggerFactory private readonly SpyLogger _logger; public TestLoggerFactory(SpyLogger logger) => _logger = logger; public Microsoft.Extensions.Logging.ILogger CreateLogger(string categoryName) => _logger; - public void AddProvider(Microsoft.Extensions.Logging.ILoggerProvider provider) { } - public void Dispose() { } + public void AddProvider(Microsoft.Extensions.Logging.ILoggerProvider provider) + { + } + + public void Dispose() + { + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug.cs index ef146c9144..13b980d37c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug.cs @@ -19,52 +19,35 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Microsoft.Extensions.Logging; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineDiagnosticWriterHandlerDetailTests { - [Fact] - public void When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug() + [Test] + public async Task When_diagnostic_writer_describes_should_log_handler_pipeline_detail_at_debug() { // Arrange — handler with two before-step attributes (backstop at 5, resilience at 3) var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyMisorderedBackstopHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - var logger = new SpyLogger(); var writer = new PipelineDiagnosticWriter(logger, pipelineBuilder); - // Act writer.Describe(); - // Assert — Debug-level messages contain handler name with sync/async indicator and pipeline chain var debugMessages = logger.DebugEntries.Select(e => e.Message).ToList(); - // Section header - Assert.Contains(debugMessages, m => m.Contains("Handler Pipelines")); - + await Assert.That(debugMessages).Contains(m => m.Contains("Handler Pipelines")); // Handler name with sync indicator (MyMisorderedBackstopHandler is sync) - Assert.Contains(debugMessages, m => - m.Contains("MyMisorderedBackstopHandler") && m.Contains("sync")); - + await Assert.That(debugMessages).Contains(m => m.Contains("MyMisorderedBackstopHandler") && m.Contains("sync")); // Pipeline chain shows attributes in step order with arrow separator ending at handler // Step 3 (UseResiliencePipeline) is outer, Step 5 (RejectMessageOnError) is inner // Format: [Attr(step)] → [Attr(step)] → HandlerName - Assert.Contains(debugMessages, m => - m.Contains("UseResiliencePipeline") && - m.Contains("→") && - m.Contains("RejectMessageOnError") && - m.Contains("→") && - m.Contains("MyMisorderedBackstopHandler")); + await Assert.That(debugMessages).Contains(m => m.Contains("UseResiliencePipeline") && m.Contains("→") && m.Contains("RejectMessageOnError") && m.Contains("→") && m.Contains("MyMisorderedBackstopHandler")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs index 37a82eefef..cb556b8424 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs @@ -19,34 +19,24 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Microsoft.Extensions.Logging; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineDiagnosticWriterPublicationDetailTests { - [Fact] - public void When_diagnostic_writer_describes_should_log_publication_detail_at_debug() + [Test] + public async Task When_diagnostic_writer_describes_should_log_publication_detail_at_debug() { // Arrange — one publication with a custom mapper that has a wrap transform var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!)); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!)); mapperRegistry.Register(); - TransformPipelineBuilder.ClearPipelineCache(); - var publications = new[] { new Publication @@ -55,30 +45,19 @@ public void When_diagnostic_writer_describes_should_log_publication_detail_at_de RequestType = typeof(MyDescribableCommand) } }; - var logger = new SpyLogger(); - var writer = new PipelineDiagnosticWriter( - logger, pipelineBuilder, mapperRegistry: mapperRegistry, publications: publications); - + var writer = new PipelineDiagnosticWriter(logger, pipelineBuilder, mapperRegistry: mapperRegistry, publications: publications); // Act writer.Describe(); - // Assert — Debug messages contain publication section and detail var debugMessages = logger.DebugEntries.Select(e => e.Message).ToList(); - // Section header - Assert.Contains(debugMessages, m => m.Contains("Publications")); - + await Assert.That(debugMessages).Contains(m => m.Contains("Publications")); // Publication topic and request type - Assert.Contains(debugMessages, m => - m.Contains("MyDescribableCommand") && m.Contains("order.created")); - + await Assert.That(debugMessages).Contains(m => m.Contains("MyDescribableCommand") && m.Contains("order.created")); // Mapper type with custom/default indicator - Assert.Contains(debugMessages, m => - m.Contains("MyDescribableCommandMessageMapper") && m.Contains("custom")); - + await Assert.That(debugMessages).Contains(m => m.Contains("MyDescribableCommandMessageMapper") && m.Contains("custom")); // Transform step from the mapper's [MyDescribableWrapWith(0)] - Assert.Contains(debugMessages, m => - m.Contains("MyDescribableWrapWith")); + await Assert.That(debugMessages).Contains(m => m.Contains("MyDescribableWrapWith")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_subscription_detail_at_debug.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_subscription_detail_at_debug.cs index 77a3105641..aaca0bcd96 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_subscription_detail_at_debug.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_subscription_detail_at_debug.cs @@ -19,57 +19,37 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Microsoft.Extensions.Logging; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineDiagnosticWriterSubscriptionDetailTests { - [Fact] - public void When_diagnostic_writer_describes_should_log_subscription_detail_at_debug() + [Test] + public async Task When_diagnostic_writer_describes_should_log_subscription_detail_at_debug() { // Arrange — one subscription with known channel, routing key, and pump type var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - var subscriptions = new[] { - new Subscription( - subscriptionName: new SubscriptionName("order-sub"), - channelName: new ChannelName("order-channel"), - routingKey: new RoutingKey("order.created"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor) + new Subscription(subscriptionName: new SubscriptionName("order-sub"), channelName: new ChannelName("order-channel"), routingKey: new RoutingKey("order.created"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor) }; - var logger = new SpyLogger(); - var writer = new PipelineDiagnosticWriter( - logger, pipelineBuilder, subscriptions: subscriptions); - + var writer = new PipelineDiagnosticWriter(logger, pipelineBuilder, subscriptions: subscriptions); // Act writer.Describe(); - // Assert — Debug messages contain subscription section and detail var debugMessages = logger.DebugEntries.Select(e => e.Message).ToList(); - // Section header - Assert.Contains(debugMessages, m => m.Contains("Subscriptions")); - + await Assert.That(debugMessages).Contains(m => m.Contains("Subscriptions")); // Subscription name with pump type - Assert.Contains(debugMessages, m => - m.Contains("order-sub") && m.Contains("Reactor")); - + await Assert.That(debugMessages).Contains(m => m.Contains("order-sub") && m.Contains("Reactor")); // Channel and routing key - Assert.Contains(debugMessages, m => - m.Contains("order-channel") && m.Contains("order.created")); + await Assert.That(debugMessages).Contains(m => m.Contains("order-channel") && m.Contains("order.created")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_summary_at_information.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_summary_at_information.cs index eae4311806..6922058b1c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_summary_at_information.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_summary_at_information.cs @@ -19,45 +19,39 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Microsoft.Extensions.Logging; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineDiagnosticWriterSummaryTests { - [Fact] - public void When_diagnostic_writer_describes_should_log_summary_at_information() + [Test] + public async Task When_diagnostic_writer_describes_should_log_summary_at_information() { // Arrange — two handler pipelines registered, one publication var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicAsyncHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - var publications = new[] { - new Publication { Topic = new RoutingKey("topic.one"), RequestType = typeof(MyDescribableCommand) } + new Publication + { + Topic = new RoutingKey("topic.one"), + RequestType = typeof(MyDescribableCommand) + } }; - var logger = new SpyLogger(); - var writer = new PipelineDiagnosticWriter(logger, pipelineBuilder, publications: publications); - // Act writer.Describe(); - // Assert — one Information-level summary line with correct counts var infoMessages = logger.InformationEntries.ToList(); - Assert.Single(infoMessages); - Assert.Contains("2 handler pipeline", infoMessages[0].Message); - Assert.Contains("1 publication", infoMessages[0].Message); + await Assert.That(infoMessages).HasSingleItem(); + await Assert.That(infoMessages[0].Message).Contains("2 handler pipeline"); + await Assert.That(infoMessages[0].Message).Contains("1 publication"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_has_no_items_should_produce_no_output.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_has_no_items_should_produce_no_output.cs index ebe4ea00ef..f5a4760d61 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_has_no_items_should_produce_no_output.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_has_no_items_should_produce_no_output.cs @@ -19,32 +19,24 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineDiagnosticWriterNoItemsTests { - [Fact] - public void When_diagnostic_writer_has_no_items_should_produce_no_output() + [Test] + public async Task When_diagnostic_writer_has_no_items_should_produce_no_output() { // Arrange — empty registry, no publications, no subscriptions var registry = new SubscriberRegistry(); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - var logger = new SpyLogger(); var writer = new PipelineDiagnosticWriter(logger, pipelineBuilder); - // Act writer.Describe(); - // Assert — no log entries at any level - Assert.Empty(logger.Entries); + await Assert.That(logger.Entries).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_correctly_configured_should_report_no_findings.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_correctly_configured_should_report_no_findings.cs index 30cb3f872a..70478b8ae2 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_correctly_configured_should_report_no_findings.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_correctly_configured_should_report_no_findings.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Policies.Attributes; @@ -29,53 +27,24 @@ THE SOFTWARE. */ using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class CorrectlyConfiguredHandlerValidationTests { - [Fact] - public void When_handler_correctly_configured_should_report_no_findings() + [Test] + public async Task When_handler_correctly_configured_should_report_no_findings() { // Arrange — public handler, backstop outermost (step 0), resilience inner (step 1), all sync - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: false, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RejectMessageOnErrorAttribute), - typeof(RejectMessageOnErrorHandler<>), - Step: 0, - HandlerTiming.Before), - new PipelineStepDescription( - typeof(UseResiliencePipelineAttribute), - typeof(ResilienceExceptionPolicyHandler<>), - Step: 1, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: false, beforeSteps: [new PipelineStepDescription(typeof(RejectMessageOnErrorAttribute), typeof(RejectMessageOnErrorHandler<>), Step: 0, HandlerTiming.Before), new PipelineStepDescription(typeof(UseResiliencePipelineAttribute), typeof(ResilienceExceptionPolicyHandler<>), Step: 1, HandlerTiming.Before)], afterSteps: []); var visibility = HandlerPipelineValidationRules.HandlerTypeVisibility(); var ordering = HandlerPipelineValidationRules.BackstopAttributeOrdering(); var consistency = HandlerPipelineValidationRules.AttributeAsyncConsistency(); - // Act - var allSatisfied = visibility.IsSatisfiedBy(description) - && ordering.IsSatisfiedBy(description) - && consistency.IsSatisfiedBy(description); - + var allSatisfied = visibility.IsSatisfiedBy(description) && ordering.IsSatisfiedBy(description) && consistency.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); - var allFailures = visibility.Accept(collector) - .Concat(ordering.Accept(collector)) - .Concat(consistency.Accept(collector)) - .Where(r => !r.Success) - .ToList(); - + var allFailures = visibility.Accept(collector).Concat(ordering.Accept(collector)).Concat(consistency.Accept(collector)).Where(r => !r.Success).ToList(); // Assert - Assert.True(allSatisfied); - Assert.Empty(allFailures); + await Assert.That(allSatisfied).IsTrue(); + await Assert.That(allFailures).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_type_is_not_public_should_report_visibility_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_type_is_not_public_should_report_visibility_error.cs index 835a62d5c4..22643cfba4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_type_is_not_public_should_report_visibility_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_handler_type_is_not_public_should_report_visibility_error.cs @@ -19,47 +19,35 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class InternalHandlerValidationTests { - [Fact] - public void When_handler_type_is_not_public_should_report_visibility_error() + [Test] + public async Task When_handler_type_is_not_public_should_report_visibility_error() { // Arrange — an internal handler type is not visible to the pipeline builder - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(InternalTestHandler), - isAsync: false, - beforeSteps: [], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(InternalTestHandler), isAsync: false, beforeSteps: [], afterSteps: []); var spec = HandlerPipelineValidationRules.HandlerTypeVisibility(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("not public", results[0].Error!.Message); - Assert.Contains(nameof(InternalTestHandler), results[0].Error!.Source); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("not public"); + await Assert.That(results[0].Error!.Source).Contains(nameof(InternalTestHandler)); } } /// Internal handler type for testing visibility validation. -internal class InternalTestHandler : RequestHandler +internal class InternalTestHandler : Paramore.Brighter.RequestHandler, Paramore.Brighter.IHandleRequests, Paramore.Brighter.IHandleRequests { public override MyCommand Handle(MyCommand command) => base.Handle(command); -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_only_brighter_configured_should_run_only_handler_checks.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_only_brighter_configured_should_run_only_handler_checks.cs index 20dd99545c..2ff8f14943 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_only_brighter_configured_should_run_only_handler_checks.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_only_brighter_configured_should_run_only_handler_checks.cs @@ -19,39 +19,30 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidatorHandlerOnlyTests { - [Fact] - public void When_only_brighter_configured_should_run_only_handler_checks() + [Test] + public async Task When_only_brighter_configured_should_run_only_handler_checks() { // Arrange — internal handler triggers a handler-path error; // no publications or subscriptions provided var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyInternalHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - var validator = new PipelineValidator(pipelineBuilder); - // Act var result = validator.Validate(); - // Assert — only handler-path errors appear - Assert.False(result.IsValid); - Assert.Contains(result.Errors, e => e.Message.Contains("not public")); - + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("not public")); // No producer or consumer errors - Assert.DoesNotContain(result.Errors, e => e.Message.Contains("RequestType")); - Assert.DoesNotContain(result.Errors, e => e.Message.Contains("No handler registered")); + await Assert.That(result.Errors).DoesNotContain(e => e.Message.Contains("RequestType")); + await Assert.That(result.Errors).DoesNotContain(e => e.Message.Contains("No handler registered")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_pipeline_builder_describes_handler_should_return_pipeline_description.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_pipeline_builder_describes_handler_should_return_pipeline_description.cs index c8e6992106..7933006d37 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_pipeline_builder_describes_handler_should_return_pipeline_description.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_pipeline_builder_describes_handler_should_return_pipeline_description.cs @@ -19,137 +19,109 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineBuilderDescribeTests { - [Fact] - public void When_describing_sync_handler_should_return_description_with_request_and_handler_types() + [Test] + public async Task When_describing_sync_handler_should_return_description_with_request_and_handler_types() { // Arrange var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandler)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act var descriptions = pipelineBuilder.Describe(typeof(MyCommand)).ToList(); - // Assert - Assert.Single(descriptions); + await Assert.That(descriptions).HasSingleItem(); var description = descriptions[0]; - Assert.Equal(typeof(MyCommand), description.RequestType); - Assert.Equal(typeof(MyPreAndPostDecoratedHandler), description.HandlerType); - Assert.False(description.IsAsync); + await Assert.That(description.RequestType).IsEqualTo(typeof(MyCommand)); + await Assert.That(description.HandlerType).IsEqualTo(typeof(MyPreAndPostDecoratedHandler)); + await Assert.That(description.IsAsync).IsFalse(); } - [Fact] - public void When_describing_sync_handler_should_list_before_steps_in_step_order() + [Test] + public async Task When_describing_sync_handler_should_list_before_steps_in_step_order() { // Arrange — MyPreAndPostDecoratedHandler has [MyPreValidationHandler(2, Before)] var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandler)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act var description = pipelineBuilder.Describe(typeof(MyCommand)).First(); - // Assert - Assert.Single(description.BeforeSteps); + await Assert.That(description.BeforeSteps).HasSingleItem(); var beforeStep = description.BeforeSteps[0]; - Assert.Equal(typeof(MyPreValidationHandlerAttribute), beforeStep.AttributeType); - Assert.Equal(typeof(MyValidationHandler<>), beforeStep.HandlerType); - Assert.Equal(2, beforeStep.Step); - Assert.Equal(HandlerTiming.Before, beforeStep.Timing); + await Assert.That(beforeStep.AttributeType).IsEqualTo(typeof(MyPreValidationHandlerAttribute)); + await Assert.That(beforeStep.HandlerType).IsEqualTo(typeof(MyValidationHandler<>)); + await Assert.That(beforeStep.Step).IsEqualTo(2); + await Assert.That(beforeStep.Timing).IsEqualTo(HandlerTiming.Before); } - [Fact] - public void When_describing_sync_handler_should_list_after_steps() + [Test] + public async Task When_describing_sync_handler_should_list_after_steps() { // Arrange — MyPreAndPostDecoratedHandler has [MyPostLoggingHandler(1, After)] var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandler)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act var description = pipelineBuilder.Describe(typeof(MyCommand)).First(); - // Assert - Assert.Single(description.AfterSteps); + await Assert.That(description.AfterSteps).HasSingleItem(); var afterStep = description.AfterSteps[0]; - Assert.Equal(typeof(MyPostLoggingHandlerAttribute), afterStep.AttributeType); - Assert.Equal(typeof(MyLoggingHandler<>), afterStep.HandlerType); - Assert.Equal(1, afterStep.Step); - Assert.Equal(HandlerTiming.After, afterStep.Timing); + await Assert.That(afterStep.AttributeType).IsEqualTo(typeof(MyPostLoggingHandlerAttribute)); + await Assert.That(afterStep.HandlerType).IsEqualTo(typeof(MyLoggingHandler<>)); + await Assert.That(afterStep.Step).IsEqualTo(1); + await Assert.That(afterStep.Timing).IsEqualTo(HandlerTiming.After); } - [Fact] - public void When_describing_async_handler_should_set_IsAsync_true() + [Test] + public async Task When_describing_async_handler_should_set_IsAsync_true() { // Arrange — MyPreAndPostDecoratedHandlerAsync extends RequestHandlerAsync var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandlerAsync)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act var description = pipelineBuilder.Describe(typeof(MyCommand)).First(); - // Assert - Assert.True(description.IsAsync); - Assert.Equal(typeof(MyPreAndPostDecoratedHandlerAsync), description.HandlerType); + await Assert.That(description.IsAsync).IsTrue(); + await Assert.That(description.HandlerType).IsEqualTo(typeof(MyPreAndPostDecoratedHandlerAsync)); } - [Fact] - public void When_multiple_handlers_registered_should_produce_multiple_descriptions() + [Test] + public async Task When_multiple_handlers_registered_should_produce_multiple_descriptions() { // Arrange — two handler types for the same request type var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandler)); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandlerAsync)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act var descriptions = pipelineBuilder.Describe(typeof(MyCommand)).ToList(); - // Assert - Assert.Equal(2, descriptions.Count); - Assert.Contains(descriptions, d => d.HandlerType == typeof(MyPreAndPostDecoratedHandler)); - Assert.Contains(descriptions, d => d.HandlerType == typeof(MyPreAndPostDecoratedHandlerAsync)); + await Assert.That(descriptions.Count).IsEqualTo(2); + await Assert.That(descriptions).Contains(d => d.HandlerType == typeof(MyPreAndPostDecoratedHandler)); + await Assert.That(descriptions).Contains(d => d.HandlerType == typeof(MyPreAndPostDecoratedHandlerAsync)); } - [Fact] - public void When_parameterless_describe_should_iterate_all_registered_request_types() + [Test] + public async Task When_parameterless_describe_should_iterate_all_registered_request_types() { // Arrange — register handlers for MyCommand only var registry = new SubscriberRegistry(); registry.Add(typeof(MyCommand), typeof(MyPreAndPostDecoratedHandler)); - var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Act — parameterless Describe() should find all registered request types var descriptions = pipelineBuilder.Describe().ToList(); - // Assert - Assert.Single(descriptions); - Assert.Equal(typeof(MyCommand), descriptions[0].RequestType); + await Assert.That(descriptions).HasSingleItem(); + await Assert.That(descriptions[0].RequestType).IsEqualTo(typeof(MyCommand)); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_proactor_subscription_has_sync_handler_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_proactor_subscription_has_sync_handler_should_report_error.cs index 3d12037fd2..693f3a9da3 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_proactor_subscription_has_sync_handler_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_proactor_subscription_has_sync_handler_should_report_error.cs @@ -19,46 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ProactorSubscriptionWithSyncHandlerValidationTests { - [Fact] - public void When_proactor_subscription_has_sync_handler_should_report_error() + [Test] + public async Task When_proactor_subscription_has_sync_handler_should_report_error() { // Arrange — Proactor subscription with a sync handler registered - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Proactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Proactor); var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); - var spec = ConsumerValidationRules.PumpHandlerMatch(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("Proactor", results[0].Error!.Message); - Assert.Contains("Reactor", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("Proactor"); + await Assert.That(results[0].Error!.Message).Contains("Reactor"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_missing_request_type_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_missing_request_type_should_report_error.cs index 0b80486fdd..de1cc5eeb7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_missing_request_type_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_missing_request_type_should_report_error.cs @@ -19,35 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PublicationMissingRequestTypeValidationTests { - [Fact] - public void When_publication_missing_request_type_should_report_error() + [Test] + public async Task When_publication_missing_request_type_should_report_error() { // Arrange — publication with RequestType = null - var publication = new Publication { Topic = new RoutingKey("test.topic"), RequestType = null }; - + var publication = new Publication + { + Topic = new RoutingKey("test.topic"), + RequestType = null + }; var spec = ProducerValidationRules.PublicationRequestTypeSet(); - // Act var satisfied = spec.IsSatisfiedBy(publication); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("test.topic", results[0].Error!.Source); - Assert.Contains("RequestType is null", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Source).Contains("test.topic"); + await Assert.That(results[0].Error!.Message).Contains("RequestType is null"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_request_type_not_IRequest_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_request_type_not_IRequest_should_report_error.cs index 20481390fa..2a29f1e9fc 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_request_type_not_IRequest_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_request_type_not_IRequest_should_report_error.cs @@ -19,19 +19,15 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PublicationRequestTypeNotIRequestValidationTests { - [Fact] - public void When_publication_request_type_not_IRequest_should_report_error() + [Test] + public async Task When_publication_request_type_not_IRequest_should_report_error() { // Arrange — RequestType is set but does not implement IRequest var publication = new Publication @@ -39,22 +35,19 @@ public void When_publication_request_type_not_IRequest_should_report_error() Topic = new RoutingKey("test.topic"), RequestType = typeof(NotAnIRequest) }; - var spec = ProducerValidationRules.PublicationRequestTypeImplementsIRequest(); - // Act var satisfied = spec.IsSatisfiedBy(publication); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("test.topic", results[0].Error!.Source); - Assert.Contains("does not implement IRequest", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Source).Contains("test.topic"); + await Assert.That(results[0].Error!.Message).Contains("does not implement IRequest"); } } /// A type that does not implement IRequest, for testing producer validation. -public class NotAnIRequest; +public class NotAnIRequest; \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_valid_should_report_no_findings.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_valid_should_report_no_findings.cs index ed95003407..7a8b66de2e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_valid_should_report_no_findings.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_publication_valid_should_report_no_findings.cs @@ -19,20 +19,16 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidPublicationValidationTests { - [Fact] - public void When_publication_valid_should_report_no_findings() + [Test] + public async Task When_publication_valid_should_report_no_findings() { // Arrange — publication with a valid RequestType that implements IRequest var publication = new Publication @@ -40,22 +36,14 @@ public void When_publication_valid_should_report_no_findings() Topic = new RoutingKey("test.topic"), RequestType = typeof(MyCommand) }; - var requestTypeSet = ProducerValidationRules.PublicationRequestTypeSet(); var implementsIRequest = ProducerValidationRules.PublicationRequestTypeImplementsIRequest(); - // Act - var allSatisfied = requestTypeSet.IsSatisfiedBy(publication) - && implementsIRequest.IsSatisfiedBy(publication); - + var allSatisfied = requestTypeSet.IsSatisfiedBy(publication) && implementsIRequest.IsSatisfiedBy(publication); var collector = new ValidationResultCollector(); - var allFailures = requestTypeSet.Accept(collector) - .Concat(implementsIRequest.Accept(collector)) - .Where(r => !r.Success) - .ToList(); - + var allFailures = requestTypeSet.Accept(collector).Concat(implementsIRequest.Accept(collector)).Where(r => !r.Success).ToList(); // Assert - Assert.True(allSatisfied); - Assert.Empty(allFailures); + await Assert.That(allSatisfied).IsTrue(); + await Assert.That(allFailures).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_pump_handler_mismatch_should_report_correct_handler.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_pump_handler_mismatch_should_report_correct_handler.cs index 6bc2ed1f91..ff877ab6af 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_pump_handler_mismatch_should_report_correct_handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_pump_handler_mismatch_should_report_correct_handler.cs @@ -19,76 +19,52 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PumpHandlerMismatchReportTests { - [Fact] - public void When_reactor_has_both_sync_and_async_handlers_should_name_async_handler() + [Test] + public async Task When_reactor_has_both_sync_and_async_handlers_should_name_async_handler() { // Arrange — Reactor subscription with both a sync handler (OK) and async handler (mismatched) var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicAsyncHandler)); - - var subscription = new Subscription( - subscriptionName: new SubscriptionName("reactor-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("reactor-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var spec = ConsumerValidationRules.PumpHandlerMatch(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert — error should name MyPublicAsyncHandler, not MyPublicSyncHandler - Assert.False(satisfied); - Assert.Single(results); - Assert.Contains("MyPublicAsyncHandler", results[0].Error!.Message); - Assert.DoesNotContain("MyPublicSyncHandler", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Message).Contains("MyPublicAsyncHandler"); + await Assert.That(results[0].Error!.Message).DoesNotContain("MyPublicSyncHandler"); } - [Fact] - public void When_proactor_has_both_async_and_sync_handlers_should_name_sync_handler() + [Test] + public async Task When_proactor_has_both_async_and_sync_handlers_should_name_sync_handler() { // Arrange — Proactor subscription with both an async handler (OK) and sync handler (mismatched) var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicAsyncHandler)); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); - - var subscription = new Subscription( - subscriptionName: new SubscriptionName("proactor-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Proactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("proactor-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Proactor); var spec = ConsumerValidationRules.PumpHandlerMatch(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert — error should name MyPublicSyncHandler, not MyPublicAsyncHandler - Assert.False(satisfied); - Assert.Single(results); - Assert.Contains("MyPublicSyncHandler", results[0].Error!.Message); - Assert.DoesNotContain("MyPublicAsyncHandler", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Message).Contains("MyPublicSyncHandler"); + await Assert.That(results[0].Error!.Message).DoesNotContain("MyPublicAsyncHandler"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_reactor_subscription_has_async_handler_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_reactor_subscription_has_async_handler_should_report_error.cs index 3f82af8ae4..73d8cb734e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_reactor_subscription_has_async_handler_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_reactor_subscription_has_async_handler_should_report_error.cs @@ -19,46 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ReactorSubscriptionWithAsyncHandlerValidationTests { - [Fact] - public void When_reactor_subscription_has_async_handler_should_report_error() + [Test] + public async Task When_reactor_subscription_has_async_handler_should_report_error() { // Arrange — Reactor subscription with an async handler registered - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicAsyncHandler)); - var spec = ConsumerValidationRules.PumpHandlerMatch(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("Reactor", results[0].Error!.Message); - Assert.Contains("Proactor", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("Reactor"); + await Assert.That(results[0].Error!.Message).Contains("Proactor"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_scanning_assemblies_should_exclude_open_generic_handlers.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_scanning_assemblies_should_exclude_open_generic_handlers.cs index 940a28e3f3..6d0ee11977 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_scanning_assemblies_should_exclude_open_generic_handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_scanning_assemblies_should_exclude_open_generic_handlers.cs @@ -19,38 +19,31 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Defer.Handlers; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class AssemblyScanningOpenGenericExclusionTests { - [Fact] - public void When_scanning_assemblies_should_not_register_open_generic_type_parameters() + [Test] + public async Task When_scanning_assemblies_should_not_register_open_generic_type_parameters() { // Arrange — scan the Brighter core assembly, which contains DeferMessageOnErrorHandler var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - var brighterAssembly = typeof(DeferMessageOnErrorHandler<>).Assembly; builder.HandlersFromAssemblies(new[] { brighterAssembly }, null); builder.AsyncHandlersFromAssemblies(new[] { brighterAssembly }, null); - // Act var requestTypes = subscriberRegistry.GetRegisteredRequestTypes(); - // Assert — no registered request type should be a generic type parameter (e.g. TRequest) var openGenericParameters = requestTypes.Where(t => t.IsGenericParameter).ToList(); - Assert.Empty(openGenericParameters); + await Assert.That(openGenericParameters).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_service_collection_subscriber_registry_should_implement_inspector.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_service_collection_subscriber_registry_should_implement_inspector.cs index 89e61b16ab..7c14030022 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_service_collection_subscriber_registry_should_implement_inspector.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_service_collection_subscriber_registry_should_implement_inspector.cs @@ -19,22 +19,17 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ServiceCollectionSubscriberRegistryInspectorTests { private readonly ServiceCollectionSubscriberRegistry _registry; - public ServiceCollectionSubscriberRegistryInspectorTests() { // Arrange @@ -43,36 +38,33 @@ public ServiceCollectionSubscriberRegistryInspectorTests() _registry.Register(); } - [Fact] - public void When_cast_to_inspector_should_return_registered_request_types() + [Test] + public async Task When_cast_to_inspector_should_return_registered_request_types() { // Act var inspector = (IAmASubscriberRegistryInspector)_registry; var requestTypes = inspector.GetRegisteredRequestTypes(); - // Assert - Assert.Contains(typeof(MyDescribableCommand), requestTypes); + await Assert.That(requestTypes).Contains(typeof(MyDescribableCommand)); } - [Fact] - public void When_cast_to_inspector_should_return_handler_types_for_request() + [Test] + public async Task When_cast_to_inspector_should_return_handler_types_for_request() { // Act var inspector = (IAmASubscriberRegistryInspector)_registry; var handlerTypes = inspector.GetHandlerTypes(typeof(MyDescribableCommand)); - // Assert - Assert.Contains(typeof(MyPublicSyncHandler), handlerTypes); + await Assert.That(handlerTypes).Contains(typeof(MyPublicSyncHandler)); } - [Fact] - public void When_cast_to_inspector_should_return_empty_for_unregistered_request() + [Test] + public async Task When_cast_to_inspector_should_return_empty_for_unregistered_request() { // Act var inspector = (IAmASubscriberRegistryInspector)_registry; var handlerTypes = inspector.GetHandlerTypes(typeof(MyBareRequest)); - // Assert - Assert.Empty(handlerTypes); + await Assert.That(handlerTypes).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_step_implements_neither_handler_interface_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_step_implements_neither_handler_interface_should_report_error.cs index 59431dde7e..77f4b5bb0b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_step_implements_neither_handler_interface_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_step_implements_neither_handler_interface_should_report_error.cs @@ -19,51 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class NeitherHandlerInterfaceValidationTests { - [Fact] - public void When_step_implements_neither_handler_interface_should_report_error() + [Test] + public async Task When_step_implements_neither_handler_interface_should_report_error() { // Arrange — step handler type that implements neither IHandleRequests nor IHandleRequestsAsync // This represents a corrupted or unexpected type in the pipeline registry - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: false, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RequestHandlerAttribute), - typeof(NeitherSyncNorAsyncStep), - Step: 1, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: false, beforeSteps: [new PipelineStepDescription(typeof(RequestHandlerAttribute), typeof(NeitherSyncNorAsyncStep), Step: 1, HandlerTiming.Before)], afterSteps: []); var spec = HandlerPipelineValidationRules.AttributeAsyncConsistency(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).Where(r => !r.Success).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("implements neither", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("implements neither"); } } /// A type that implements neither IHandleRequests nor IHandleRequestsAsync. -public class NeitherSyncNorAsyncStep; +public class NeitherSyncNorAsyncStep; \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_correctly_configured_should_report_no_findings.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_correctly_configured_should_report_no_findings.cs index bceb36e0da..cce27c0e16 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_correctly_configured_should_report_no_findings.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_correctly_configured_should_report_no_findings.cs @@ -19,46 +19,31 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SubscriptionCorrectlyConfiguredValidationTests { - [Fact] - public void When_subscription_correctly_configured_should_report_no_findings() + [Test] + public async Task When_subscription_correctly_configured_should_report_no_findings() { // Arrange — correctly configured: Reactor + sync handler + ICommand type - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyPublicSyncHandler)); - var pumpMatch = ConsumerValidationRules.PumpHandlerMatch(registry); var handlerRegistered = ConsumerValidationRules.HandlerRegistered(registry); var requestTypeSubtype = ConsumerValidationRules.RequestTypeSubtype(); - // Act & Assert — all three rules pass - Assert.True(pumpMatch.IsSatisfiedBy(subscription)); - Assert.Empty(pumpMatch.Accept(new ValidationResultCollector()).ToList()); - - Assert.True(handlerRegistered.IsSatisfiedBy(subscription)); - Assert.Empty(handlerRegistered.Accept(new ValidationResultCollector()).ToList()); - - Assert.True(requestTypeSubtype.IsSatisfiedBy(subscription)); - Assert.Empty(requestTypeSubtype.Accept(new ValidationResultCollector()).ToList()); + await Assert.That(pumpMatch.IsSatisfiedBy(subscription)).IsTrue(); + await Assert.That(pumpMatch.Accept(new ValidationResultCollector()).ToList()).IsEmpty(); + await Assert.That(handlerRegistered.IsSatisfiedBy(subscription)).IsTrue(); + await Assert.That(handlerRegistered.Accept(new ValidationResultCollector()).ToList()).IsEmpty(); + await Assert.That(requestTypeSubtype.IsSatisfiedBy(subscription)).IsTrue(); + await Assert.That(requestTypeSubtype.Accept(new ValidationResultCollector()).ToList()).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handler_registered_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handler_registered_should_report_error.cs index a1c5a9848d..cc4e7c6cfc 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handler_registered_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handler_registered_should_report_error.cs @@ -19,45 +19,31 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SubscriptionNoHandlerRegisteredValidationTests { - [Fact] - public void When_subscription_has_no_handler_registered_should_report_error() + [Test] + public async Task When_subscription_has_no_handler_registered_should_report_error() { // Arrange — subscription with a RequestType but no handler registered for it - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var registry = new SubscriberRegistry(); // No handlers registered for MyDescribableCommand - var spec = ConsumerValidationRules.HandlerRegistered(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("No handler registered", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("No handler registered"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handlers_pump_match_should_pass.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handlers_pump_match_should_pass.cs index 3dff71273c..a7804cbb93 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handlers_pump_match_should_pass.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_has_no_handlers_pump_match_should_pass.cs @@ -19,43 +19,29 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SubscriptionNoHandlersPumpMatchValidationTests { - [Fact] - public void When_subscription_has_no_handlers_pump_match_should_pass() + [Test] + public async Task When_subscription_has_no_handlers_pump_match_should_pass() { // Arrange — Reactor subscription but no handlers registered for the type - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var registry = new SubscriberRegistry(); // No handlers registered for MyDescribableCommand - var spec = ConsumerValidationRules.PumpHandlerMatch(registry); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert — vacuously passes; HandlerRegistered catches the missing handler case - Assert.True(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsTrue(); + await Assert.That(results).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_is_command_should_pass.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_is_command_should_pass.cs index 06352f07f1..e39f8c4d9f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_is_command_should_pass.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_is_command_should_pass.cs @@ -19,40 +19,27 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SubscriptionRequestTypeIsCommandValidationTests { - [Fact] - public void When_subscription_request_type_is_command_should_pass() + [Test] + public async Task When_subscription_request_type_is_command_should_pass() { // Arrange — subscription with a RequestType that implements ICommand - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyDescribableCommand), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyDescribableCommand), messagePumpType: MessagePumpType.Reactor); var spec = ConsumerValidationRules.RequestTypeSubtype(); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert - Assert.True(satisfied); - Assert.Empty(results); + await Assert.That(satisfied).IsTrue(); + await Assert.That(results).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_not_command_or_event_should_report_warning.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_not_command_or_event_should_report_warning.cs index fe6137a227..902af21a53 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_not_command_or_event_should_report_warning.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_subscription_request_type_not_command_or_event_should_report_warning.cs @@ -19,43 +19,30 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SubscriptionRequestTypeNotCommandOrEventValidationTests { - [Fact] - public void When_subscription_request_type_not_command_or_event_should_report_warning() + [Test] + public async Task When_subscription_request_type_not_command_or_event_should_report_warning() { // Arrange — subscription with a RequestType that implements IRequest but not ICommand or IEvent - var subscription = new Subscription( - subscriptionName: new SubscriptionName("test-sub"), - channelName: new ChannelName("test-channel"), - routingKey: new RoutingKey("test.routing.key"), - requestType: typeof(MyBareRequest), - messagePumpType: MessagePumpType.Reactor - ); - + var subscription = new Subscription(subscriptionName: new SubscriptionName("test-sub"), channelName: new ChannelName("test-channel"), routingKey: new RoutingKey("test.routing.key"), requestType: typeof(MyBareRequest), messagePumpType: MessagePumpType.Reactor); var spec = ConsumerValidationRules.RequestTypeSubtype(); - // Act var satisfied = spec.IsSatisfiedBy(subscription); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).ToList(); - // Assert — Warning, not Error, because it may still work but is unusual - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Warning, results[0].Error!.Severity); - Assert.Contains("ICommand", results[0].Error!.Message); - Assert.Contains("IEvent", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Warning); + await Assert.That(results[0].Error!.Message).Contains("ICommand"); + await Assert.That(results[0].Error!.Message).Contains("IEvent"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_sync_handler_has_async_attribute_should_report_error.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_sync_handler_has_async_attribute_should_report_error.cs index 777711333b..9527d3e1fe 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_sync_handler_has_async_attribute_should_report_error.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_sync_handler_has_async_attribute_should_report_error.cs @@ -19,51 +19,32 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Reject.Attributes; using Paramore.Brighter.Reject.Handlers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class SyncHandlerAsyncAttributeValidationTests { - [Fact] - public void When_sync_handler_has_async_attribute_should_report_error() + [Test] + public async Task When_sync_handler_has_async_attribute_should_report_error() { // Arrange — sync handler (isAsync: false) with an async step handler type // RejectMessageOnErrorHandlerAsync<> extends RequestHandlerAsync, not RequestHandler - var description = new HandlerPipelineDescription( - requestType: typeof(MyCommand), - handlerType: typeof(MyCommandHandler), - isAsync: false, - beforeSteps: - [ - new PipelineStepDescription( - typeof(RejectMessageOnErrorAsyncAttribute), - typeof(RejectMessageOnErrorHandlerAsync<>), - Step: 1, - HandlerTiming.Before) - ], - afterSteps: []); - + var description = new HandlerPipelineDescription(requestType: typeof(MyCommand), handlerType: typeof(MyCommandHandler), isAsync: false, beforeSteps: [new PipelineStepDescription(typeof(RejectMessageOnErrorAsyncAttribute), typeof(RejectMessageOnErrorHandlerAsync<>), Step: 1, HandlerTiming.Before)], afterSteps: []); var spec = HandlerPipelineValidationRules.AttributeAsyncConsistency(); - // Act var satisfied = spec.IsSatisfiedBy(description); var collector = new ValidationResultCollector(); var results = spec.Accept(collector).Where(r => !r.Success).ToList(); - // Assert - Assert.False(satisfied); - Assert.Single(results); - Assert.Equal(ValidationSeverity.Error, results[0].Error!.Severity); - Assert.Contains("Sync handler uses async attribute", results[0].Error!.Message); - Assert.Contains("RejectMessageOnErrorAsyncAttribute", results[0].Error!.Message); + await Assert.That(satisfied).IsFalse(); + await Assert.That(results).HasSingleItem(); + await Assert.That(results[0].Error!.Severity).IsEqualTo(ValidationSeverity.Error); + await Assert.That(results[0].Error!.Message).Contains("Sync handler uses async attribute"); + await Assert.That(results[0].Error!.Message).Contains("RejectMessageOnErrorAsyncAttribute"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_throw_on_error_false_should_log_errors_not_throw.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_throw_on_error_false_should_log_errors_not_throw.cs index 96ee03f6c6..87849415a9 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_throw_on_error_false_should_log_errors_not_throw.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_throw_on_error_false_should_log_errors_not_throw.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -31,119 +29,93 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ThrowOnErrorFalseTests { - private static BrighterValidationHostedService BuildService( - BrighterPipelineValidationOptions options, - IAmAPipelineValidator validator, - SpyLogger logger) + private static BrighterValidationHostedService BuildService(BrighterPipelineValidationOptions options, IAmAPipelineValidator validator, SpyLogger logger) { var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); - - return new BrighterValidationHostedService( - Options.Create(options), - validator, - provider, - logger); + return new BrighterValidationHostedService(Options.Create(options), validator, provider, logger); } - [Fact] - public void When_validate_pipelines_with_throw_on_error_false_should_store_in_options() + [Test] + public async Task When_validate_pipelines_with_throw_on_error_false_should_store_in_options() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act builder.ValidatePipelines(throwOnError: false); - // Assert — ThrowOnError should be false in the resolved options var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.False(options.ThrowOnError); + await Assert.That(options.ThrowOnError).IsFalse(); } - [Fact] - public void When_validate_pipelines_with_throw_on_error_true_should_store_in_options() + [Test] + public async Task When_validate_pipelines_with_throw_on_error_true_should_store_in_options() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act builder.ValidatePipelines(throwOnError: true); - // Assert — ThrowOnError should be true (the default) var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.True(options.ThrowOnError); + await Assert.That(options.ThrowOnError).IsTrue(); } - [Fact] - public void When_validate_pipelines_default_should_have_throw_on_error_true() + [Test] + public async Task When_validate_pipelines_default_should_have_throw_on_error_true() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act — no throwOnError argument builder.ValidatePipelines(); - // Assert — default ThrowOnError should be true var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.True(options.ThrowOnError); + await Assert.That(options.ThrowOnError).IsTrue(); } - [Fact] + [Test] public async Task When_throw_on_error_false_and_errors_should_log_not_throw() { // Arrange var error = new ValidationError(ValidationSeverity.Error, "TestHandler", "Handler is misconfigured"); var validator = SpyPipelineValidator.WithErrors(error); var logger = new SpyLogger(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = false }, - validator, - logger); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = false }, validator, logger); // Act — should NOT throw await service.StartAsync(CancellationToken.None); - // Assert — error should be logged, not thrown - Assert.True(validator.ValidateWasCalled); - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); } - [Fact] + [Test] public async Task When_throw_on_error_true_and_errors_should_throw() { // Arrange var error = new ValidationError(ValidationSeverity.Error, "TestHandler", "Handler is misconfigured"); var validator = SpyPipelineValidator.WithErrors(error); var logger = new SpyLogger(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = true }, - validator, - logger); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = true }, validator, logger); // Act & Assert — should throw PipelineValidationException - await Assert.ThrowsAsync( - () => service.StartAsync(CancellationToken.None)); + await Assert.That(() => service.StartAsync(CancellationToken.None)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_throw_on_error_false_should_still_log_warnings() { // Arrange @@ -151,16 +123,11 @@ public async Task When_throw_on_error_false_should_still_log_warnings() var error = new ValidationError(ValidationSeverity.Error, "TestHandler", "Handler is misconfigured"); var validator = new SpyPipelineValidator(new PipelineValidationResult([error], [warning])); var logger = new SpyLogger(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = false }, - validator, - logger); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false, ThrowOnError = false }, validator, logger); // Act await service.StartAsync(CancellationToken.None); - // Assert — both error and warning should be logged - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Warning && e.Message.Contains("suboptimal")); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Warning && e.Message.Contains("suboptimal")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs index a1abc6003d..fd3852c138 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs @@ -19,128 +19,88 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System; using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.MessageMappers; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class TransformPipelineBuilderDescribeTests { - [Fact] - public void When_describing_custom_mapper_should_return_mapper_type_and_not_default() + [Test] + public async Task When_describing_custom_mapper_should_return_mapper_type_and_not_default() { // Arrange — register an explicit (non-default) mapper for MyDescribableCommand - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!)); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!)); mapperRegistry.Register(); - - TransformPipelineBuilder.ClearPipelineCache(); - // Act - var description = TransformPipelineBuilder.DescribeTransforms( - mapperRegistry, typeof(MyDescribableCommand)); - + var description = TransformPipelineBuilder.DescribeTransforms(mapperRegistry, typeof(MyDescribableCommand)); // Assert - Assert.NotNull(description); - Assert.Equal(typeof(MyDescribableCommandMessageMapper), description.MapperType); - Assert.False(description.IsDefaultMapper); + await Assert.That(description).IsNotNull(); + await Assert.That(description.MapperType).IsEqualTo(typeof(MyDescribableCommandMessageMapper)); + await Assert.That(description.IsDefaultMapper).IsFalse(); } - [Fact] - public void When_describing_transforms_should_list_wrap_transforms_in_step_order() + [Test] + public async Task When_describing_transforms_should_list_wrap_transforms_in_step_order() { // Arrange - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!)); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!)); mapperRegistry.Register(); - - TransformPipelineBuilder.ClearPipelineCache(); - // Act - var description = TransformPipelineBuilder.DescribeTransforms( - mapperRegistry, typeof(MyDescribableCommand)); - + var description = TransformPipelineBuilder.DescribeTransforms(mapperRegistry, typeof(MyDescribableCommand)); // Assert — MyDescribableCommandMessageMapper has [MyDescribableWrapWith(0)] on MapToMessage - Assert.NotNull(description); - Assert.Single(description.WrapTransforms); + await Assert.That(description).IsNotNull(); + await Assert.That(description.WrapTransforms).HasSingleItem(); var wrapStep = description.WrapTransforms[0]; - Assert.Equal(typeof(MyDescribableWrapWith), wrapStep.AttributeType); - Assert.Equal(typeof(MyDescribableTransform), wrapStep.TransformType); - Assert.Equal(0, wrapStep.Step); + await Assert.That(wrapStep.AttributeType).IsEqualTo(typeof(MyDescribableWrapWith)); + await Assert.That(wrapStep.TransformType).IsEqualTo(typeof(MyDescribableTransform)); + await Assert.That(wrapStep.Step).IsEqualTo(0); } - [Fact] - public void When_describing_transforms_should_list_unwrap_transforms_in_step_order() + [Test] + public async Task When_describing_transforms_should_list_unwrap_transforms_in_step_order() { // Arrange - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!)); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!)); mapperRegistry.Register(); - - TransformPipelineBuilder.ClearPipelineCache(); - // Act - var description = TransformPipelineBuilder.DescribeTransforms( - mapperRegistry, typeof(MyDescribableCommand)); - + var description = TransformPipelineBuilder.DescribeTransforms(mapperRegistry, typeof(MyDescribableCommand)); // Assert — MyDescribableCommandMessageMapper has [MyDescribableUnwrapWith(0)] on MapToRequest - Assert.NotNull(description); - Assert.Single(description.UnwrapTransforms); + await Assert.That(description).IsNotNull(); + await Assert.That(description.UnwrapTransforms).HasSingleItem(); var unwrapStep = description.UnwrapTransforms[0]; - Assert.Equal(typeof(MyDescribableUnwrapWith), unwrapStep.AttributeType); - Assert.Equal(typeof(MyDescribableTransform), unwrapStep.TransformType); - Assert.Equal(0, unwrapStep.Step); + await Assert.That(unwrapStep.AttributeType).IsEqualTo(typeof(MyDescribableUnwrapWith)); + await Assert.That(unwrapStep.TransformType).IsEqualTo(typeof(MyDescribableTransform)); + await Assert.That(unwrapStep.Step).IsEqualTo(0); } - [Fact] - public void When_describing_default_mapper_should_identify_as_default() + [Test] + public async Task When_describing_default_mapper_should_identify_as_default() { // Arrange — use an open generic default mapper (no explicit registration for this request type) - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!), - defaultMessageMapper: typeof(JsonMessageMapper<>)); - - TransformPipelineBuilder.ClearPipelineCache(); - + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!), defaultMessageMapper: typeof(JsonMessageMapper<>)); // Act - var description = TransformPipelineBuilder.DescribeTransforms( - mapperRegistry, typeof(MyDescribableCommand)); - + var description = TransformPipelineBuilder.DescribeTransforms(mapperRegistry, typeof(MyDescribableCommand)); // Assert - Assert.NotNull(description); - Assert.True(description.IsDefaultMapper); - Assert.Equal(typeof(JsonMessageMapper), description.MapperType); + await Assert.That(description).IsNotNull(); + await Assert.That(description.IsDefaultMapper).IsTrue(); + await Assert.That(description.MapperType).IsEqualTo(typeof(JsonMessageMapper)); } - [Fact] - public void When_describing_vanilla_mapper_should_have_empty_transforms() + [Test] + public async Task When_describing_vanilla_mapper_should_have_empty_transforms() { // Arrange — MyVanillaDescribableCommandMessageMapper has no wrap/unwrap attributes - var mapperRegistry = new MessageMapperRegistry( - new SimpleMessageMapperFactory(_ => null!), - new SimpleMessageMapperFactoryAsync(_ => null!)); + var mapperRegistry = new MessageMapperRegistry(new SimpleMessageMapperFactory(_ => null!), new SimpleMessageMapperFactoryAsync(_ => null!)); mapperRegistry.Register(); - - TransformPipelineBuilder.ClearPipelineCache(); - // Act - var description = TransformPipelineBuilder.DescribeTransforms( - mapperRegistry, typeof(MyDescribableCommand)); - + var description = TransformPipelineBuilder.DescribeTransforms(mapperRegistry, typeof(MyDescribableCommand)); // Assert - Assert.NotNull(description); - Assert.Empty(description.WrapTransforms); - Assert.Empty(description.UnwrapTransforms); + await Assert.That(description).IsNotNull(); + await Assert.That(description.WrapTransforms).IsEmpty(); + await Assert.That(description.UnwrapTransforms).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_hosted_service_and_options.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_hosted_service_and_options.cs index 3d4218da69..c2d53c0c85 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_hosted_service_and_options.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_hosted_service_and_options.cs @@ -19,53 +19,43 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesHostedServiceRegistrationTests { - [Fact] - public void When_validate_pipelines_called_should_register_hosted_service() + [Test] + public async Task When_validate_pipelines_called_should_register_hosted_service() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act builder.ValidatePipelines(); - // Assert — BrighterValidationHostedService is registered as IHostedService - Assert.Contains(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterValidationHostedService"); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterValidationHostedService"); } - [Fact] - public void When_validate_pipelines_called_should_register_options_with_consumer_owns_false() + [Test] + public async Task When_validate_pipelines_called_should_register_options_with_consumer_owns_false() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act builder.ValidatePipelines(); - // Assert — BrighterPipelineValidationOptions is configured with ConsumerOwnsValidation = false var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.False(options.ConsumerOwnsValidation); + await Assert.That(options.ConsumerOwnsValidation).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_validator_in_di.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_validator_in_di.cs index bd0cdacc6f..48d03a7787 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_validator_in_di.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_called_should_register_validator_in_di.cs @@ -19,32 +19,26 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesRegistrationTests { - [Fact] - public void When_validate_pipelines_called_should_register_validator_in_di() + [Test] + public async Task When_validate_pipelines_called_should_register_validator_in_di() { // Arrange var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - // Act var returnedBuilder = builder.ValidatePipelines(); - // Assert — ValidatePipelines registers IAmAPipelineValidator and returns builder for chaining - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineValidator)); - Assert.Same(builder, returnedBuilder); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineValidator)); + await Assert.That(returnedBuilder).IsSameReferenceAs(builder); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_disabled_should_not_register.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_disabled_should_not_register.cs index 6e90b53fd7..f41f003d5a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_disabled_should_not_register.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_disabled_should_not_register.cs @@ -19,18 +19,14 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesDisabledTests { private static IBrighterBuilder CreateBuilder(out ServiceCollection services) @@ -41,95 +37,75 @@ private static IBrighterBuilder CreateBuilder(out ServiceCollection services) return new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); } - [Fact] - public void When_validate_pipelines_disabled_should_not_register_validator() + [Test] + public async Task When_validate_pipelines_disabled_should_not_register_validator() { // Arrange var builder = CreateBuilder(out var services); - // Act var returnedBuilder = builder.ValidatePipelines(enabled: false); - // Assert — no validator, no hosted service registered - Assert.DoesNotContain(services, sd => sd.ServiceType == typeof(IAmAPipelineValidator)); - Assert.DoesNotContain(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterValidationHostedService"); - Assert.Same(builder, returnedBuilder); + await Assert.That(services).DoesNotContain(sd => sd.ServiceType == typeof(IAmAPipelineValidator)); + await Assert.That(services).DoesNotContain(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterValidationHostedService"); + await Assert.That(returnedBuilder).IsSameReferenceAs(builder); } - [Fact] - public void When_validate_pipelines_enabled_should_register_validator() + [Test] + public async Task When_validate_pipelines_enabled_should_register_validator() { // Arrange var builder = CreateBuilder(out var services); - // Act builder.ValidatePipelines(enabled: true); - // Assert — validator and hosted service registered (same as default) - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineValidator)); - Assert.Contains(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterValidationHostedService"); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineValidator)); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterValidationHostedService"); } - [Fact] - public void When_validate_pipelines_default_should_register_validator() + [Test] + public async Task When_validate_pipelines_default_should_register_validator() { // Arrange var builder = CreateBuilder(out var services); - // Act — no arguments, default should be enabled builder.ValidatePipelines(); - // Assert - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineValidator)); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineValidator)); } - [Fact] - public void When_describe_pipelines_disabled_should_not_register_writer() + [Test] + public async Task When_describe_pipelines_disabled_should_not_register_writer() { // Arrange var builder = CreateBuilder(out var services); - // Act var returnedBuilder = builder.DescribePipelines(enabled: false); - // Assert — no diagnostic writer, no hosted service registered - Assert.DoesNotContain(services, sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); - Assert.DoesNotContain(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); - Assert.Same(builder, returnedBuilder); + await Assert.That(services).DoesNotContain(sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); + await Assert.That(services).DoesNotContain(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); + await Assert.That(returnedBuilder).IsSameReferenceAs(builder); } - [Fact] - public void When_describe_pipelines_enabled_should_register_writer() + [Test] + public async Task When_describe_pipelines_enabled_should_register_writer() { // Arrange var builder = CreateBuilder(out var services); - // Act builder.DescribePipelines(enabled: true); - // Assert — diagnostic writer and hosted service registered (same as default) - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); - Assert.Contains(services, sd => - sd.ServiceType == typeof(IHostedService) - && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IHostedService) && sd.ImplementationType?.Name == "BrighterDiagnosticHostedService"); } - [Fact] - public void When_describe_pipelines_default_should_register_writer() + [Test] + public async Task When_describe_pipelines_default_should_register_writer() { // Arrange var builder = CreateBuilder(out var services); - // Act — no arguments, default should be enabled builder.DescribePipelines(); - // Assert - Assert.Contains(services, sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); + await Assert.That(services).Contains(sd => sd.ServiceType == typeof(IAmAPipelineDiagnosticWriter)); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_with_producers_should_receive_publications.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_with_producers_should_receive_publications.cs index 66ed031e2d..8f2a550524 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_with_producers_should_receive_publications.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_with_producers_should_receive_publications.cs @@ -19,29 +19,22 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesWithProducersTests { - [Fact] - public void When_validate_pipelines_with_producers_should_detect_missing_request_type() + [Test] + public async Task When_validate_pipelines_with_producers_should_detect_missing_request_type() { // Arrange — set up a producer whose publication has no RequestType var routingKey = new RoutingKey("test.validation.topic"); - var producer = new InMemoryMessageProducer( - new InternalBus(), new Publication { Topic = routingKey }); - var producerRegistry = new ProducerRegistry( - new Dictionary { { routingKey, producer } }); - + var producer = new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey }); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer } }); var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); services.AddSingleton(subscriberRegistry); @@ -50,29 +43,22 @@ public void When_validate_pipelines_with_producers_should_detect_missing_request services.AddSingleton(mapperRegistry); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); builder.ValidatePipelines(); - var provider = services.BuildServiceProvider(); - // Act — resolve validator and run validation var validator = provider.GetRequiredService(); var result = validator.Validate(); - // Assert — validation should detect the missing RequestType on the publication - Assert.False(result.IsValid); - Assert.Contains(result.Errors, e => e.Message.Contains("RequestType is null")); + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("RequestType is null")); } - [Fact] - public void When_validate_pipelines_with_valid_producers_should_pass_producer_checks() + [Test] + public async Task When_validate_pipelines_with_valid_producers_should_pass_producer_checks() { // Arrange — set up a producer with a valid publication var routingKey = new RoutingKey("test.validation.topic"); - var producer = new InMemoryMessageProducer( - new InternalBus(), - new Publication { Topic = routingKey, RequestType = typeof(MyValidationCommand) }); - var producerRegistry = new ProducerRegistry( - new Dictionary { { routingKey, producer } }); - + var producer = new InMemoryMessageProducer(new InternalBus(), new Publication { Topic = routingKey, RequestType = typeof(MyValidationCommand) }); + var producerRegistry = new ProducerRegistry(new Dictionary { { routingKey, producer } }); var services = new ServiceCollection(); var subscriberRegistry = new ServiceCollectionSubscriberRegistry(services); services.AddSingleton(subscriberRegistry); @@ -81,19 +67,18 @@ public void When_validate_pipelines_with_valid_producers_should_pass_producer_ch services.AddSingleton(mapperRegistry); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); builder.ValidatePipelines(); - var provider = services.BuildServiceProvider(); - // Act var validator = provider.GetRequiredService(); var result = validator.Validate(); - // Assert — no producer validation errors - Assert.DoesNotContain(result.Errors, e => e.Source.Contains("Publication")); + await Assert.That(result.Errors).DoesNotContain(e => e.Source.Contains("Publication")); } - private class MyValidationCommand : Command + private class MyValidationCommand : Paramore.Brighter.Command, Paramore.Brighter.ICommand, Paramore.Brighter.IRequest { - public MyValidationCommand() : base(System.Guid.NewGuid()) { } + public MyValidationCommand() : base(System.Guid.NewGuid()) + { + } } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_without_describe_should_build_service_provider.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_without_describe_should_build_service_provider.cs index cb5f8c2734..14b2aeb212 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_without_describe_should_build_service_provider.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validate_pipelines_without_describe_should_build_service_provider.cs @@ -19,22 +19,18 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesWithoutDescribeTests { - [Fact] + [Test] public async Task When_validate_pipelines_called_without_describe_should_build_and_start() { // Arrange — register ValidatePipelines but NOT DescribePipelines @@ -44,17 +40,13 @@ public async Task When_validate_pipelines_called_without_describe_should_build_a services.AddSingleton(subscriberRegistry); var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); - builder.ValidatePipelines(); - // Act — building the service provider and resolving the hosted service should not throw var provider = services.BuildServiceProvider(); var hostedServices = provider.GetServices(); var validationService = hostedServices.FirstOrDefault(s => s.GetType().Name == "BrighterValidationHostedService"); - - Assert.NotNull(validationService); - + await Assert.That(validationService).IsNotNull(); // StartAsync should complete without throwing (no diagnostic writer, no errors) await validationService.StartAsync(CancellationToken.None); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_has_warnings_should_log_them.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_has_warnings_should_log_them.cs index b85b14b991..2d43e04f39 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_has_warnings_should_log_them.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_has_warnings_should_log_them.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -30,13 +28,11 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidationHostedServiceWarningLoggingTests { - [Fact] + [Test] public async Task When_validation_has_warnings_should_log_them_at_warning_level() { // Arrange — two warnings with distinct source and message @@ -47,20 +43,18 @@ public async Task When_validation_has_warnings_should_log_them_at_warning_level( var logger = new SpyLogger(); var provider = new ServiceCollection().BuildServiceProvider(); var service = new BrighterValidationHostedService(options, validator, provider, logger); - // Act await service.StartAsync(CancellationToken.None); - // Assert — each warning is logged at Warning level with source and message var warningEntries = logger.WarningEntries.ToList(); - Assert.Equal(2, warningEntries.Count); - Assert.Contains("HandlerA", warningEntries[0].Message); - Assert.Contains("Backstop ordering suboptimal", warningEntries[0].Message); - Assert.Contains("HandlerB", warningEntries[1].Message); - Assert.Contains("Attribute mismatch suggestion", warningEntries[1].Message); + await Assert.That(warningEntries.Count).IsEqualTo(2); + await Assert.That(warningEntries[0].Message).Contains("HandlerA"); + await Assert.That(warningEntries[0].Message).Contains("Backstop ordering suboptimal"); + await Assert.That(warningEntries[1].Message).Contains("HandlerB"); + await Assert.That(warningEntries[1].Message).Contains("Attribute mismatch suggestion"); } - [Fact] + [Test] public async Task When_validation_has_no_warnings_should_not_log_warnings() { // Arrange — no warnings @@ -69,11 +63,9 @@ public async Task When_validation_has_no_warnings_should_not_log_warnings() var logger = new SpyLogger(); var provider = new ServiceCollection().BuildServiceProvider(); var service = new BrighterValidationHostedService(options, validator, provider, logger); - // Act await service.StartAsync(CancellationToken.None); - // Assert — no warning log entries - Assert.Empty(logger.WarningEntries); + await Assert.That(logger.WarningEntries).IsEmpty(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_starts_without_consumers_should_validate.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_starts_without_consumers_should_validate.cs index 4dcae60297..24a42af9d7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_starts_without_consumers_should_validate.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_hosted_service_starts_without_consumers_should_validate.cs @@ -19,9 +19,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -30,102 +28,71 @@ THE SOFTWARE. */ using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidationHostedServiceTests { - private static BrighterValidationHostedService BuildService( - BrighterPipelineValidationOptions options, - IAmAPipelineValidator validator, - IAmAPipelineDiagnosticWriter? diagnosticWriter = null) + private static BrighterValidationHostedService BuildService(BrighterPipelineValidationOptions options, IAmAPipelineValidator validator, IAmAPipelineDiagnosticWriter? diagnosticWriter = null) { var services = new ServiceCollection(); if (diagnosticWriter != null) services.AddSingleton(diagnosticWriter); - var provider = services.BuildServiceProvider(); - - return new BrighterValidationHostedService( - Options.Create(options), - validator, - provider, - NullLogger.Instance); + return new BrighterValidationHostedService(Options.Create(options), validator, provider, NullLogger.Instance); } - [Fact] + [Test] public async Task When_consumer_does_not_own_validation_should_run_validation() { // Arrange var validator = SpyPipelineValidator.WithNoErrors(); var diagnosticWriter = new SpyPipelineDiagnosticWriter(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, - validator, - diagnosticWriter); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, validator, diagnosticWriter); // Act await service.StartAsync(CancellationToken.None); - // Assert — validation should have run; Describe is owned by BrighterDiagnosticHostedService - Assert.True(validator.ValidateWasCalled); - Assert.False(diagnosticWriter.DescribeWasCalled); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(diagnosticWriter.DescribeWasCalled).IsFalse(); } - [Fact] + [Test] public async Task When_consumer_owns_validation_should_be_noop() { // Arrange var validator = SpyPipelineValidator.WithNoErrors(); var diagnosticWriter = new SpyPipelineDiagnosticWriter(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = true }, - validator, - diagnosticWriter); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = true }, validator, diagnosticWriter); // Act await service.StartAsync(CancellationToken.None); - // Assert — neither validation nor diagnostics should have run - Assert.False(validator.ValidateWasCalled); - Assert.False(diagnosticWriter.DescribeWasCalled); + await Assert.That(validator.ValidateWasCalled).IsFalse(); + await Assert.That(diagnosticWriter.DescribeWasCalled).IsFalse(); } - [Fact] + [Test] public async Task When_validation_has_errors_should_throw_pipeline_validation_exception() { // Arrange var error = new ValidationError(ValidationSeverity.Error, "TestHandler", "Handler is misconfigured"); var validator = SpyPipelineValidator.WithErrors(error); var diagnosticWriter = new SpyPipelineDiagnosticWriter(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, - validator, - diagnosticWriter); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, validator, diagnosticWriter); // Act & Assert — validation errors should prevent startup - await Assert.ThrowsAsync( - () => service.StartAsync(CancellationToken.None)); + await Assert.That(() => service.StartAsync(CancellationToken.None)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_validation_has_warnings_only_should_not_throw() { // Arrange var warning = new ValidationError(ValidationSeverity.Warning, "TestHandler", "Backstop ordering suboptimal"); var validator = SpyPipelineValidator.WithWarningsOnly(warning); var diagnosticWriter = new SpyPipelineDiagnosticWriter(); - var service = BuildService( - new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, - validator, - diagnosticWriter); - + var service = BuildService(new BrighterPipelineValidationOptions { ConsumerOwnsValidation = false }, validator, diagnosticWriter); // Act — should complete without throwing await service.StartAsync(CancellationToken.None); - // Assert — validation ran, but no exception was thrown; Describe is owned by BrighterDiagnosticHostedService - Assert.True(validator.ValidateWasCalled); - Assert.False(diagnosticWriter.DescribeWasCalled); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(diagnosticWriter.DescribeWasCalled).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_result_has_errors_should_throw_pipeline_validation_exception.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_result_has_errors_should_throw_pipeline_validation_exception.cs index 6fe1f3a1d7..875608da7f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_result_has_errors_should_throw_pipeline_validation_exception.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validation_result_has_errors_should_throw_pipeline_validation_exception.cs @@ -19,20 +19,16 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Collections.Generic; using System.Linq; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidationResultTests { - [Fact] - public void When_no_errors_only_warnings_should_be_valid() + [Test] + public async Task When_no_errors_only_warnings_should_be_valid() { // Arrange var warnings = new List @@ -40,18 +36,16 @@ public void When_no_errors_only_warnings_should_be_valid() new(ValidationSeverity.Warning, "Handler 'OrderHandler'", "Backstop after resilience pipeline") }; var errors = new List(); - // Act var result = new PipelineValidationResult(errors, warnings); - // Assert - Assert.True(result.IsValid); - Assert.Empty(result.Errors); - Assert.Single(result.Warnings); + await Assert.That(result.IsValid).IsTrue(); + await Assert.That(result.Errors).IsEmpty(); + await Assert.That(result.Warnings).HasSingleItem(); } - [Fact] - public void When_errors_present_should_not_be_valid() + [Test] + public async Task When_errors_present_should_not_be_valid() { // Arrange var errors = new List @@ -59,17 +53,15 @@ public void When_errors_present_should_not_be_valid() new(ValidationSeverity.Error, "Handler 'OrderHandler'", "Handler type is not public") }; var warnings = new List(); - // Act var result = new PipelineValidationResult(errors, warnings); - // Assert - Assert.False(result.IsValid); - Assert.Single(result.Errors); + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).HasSingleItem(); } - [Fact] - public void When_has_errors_ThrowIfInvalid_should_throw_PipelineValidationException() + [Test] + public async Task When_has_errors_ThrowIfInvalid_should_throw_PipelineValidationException() { // Arrange var errors = new List @@ -79,62 +71,45 @@ public void When_has_errors_ThrowIfInvalid_should_throw_PipelineValidationExcept }; var warnings = new List(); var result = new PipelineValidationResult(errors, warnings); - // Act - var exception = Assert.Throws(() => result.ThrowIfInvalid()); - + var exception = await Assert.That(() => result.ThrowIfInvalid()).ThrowsExactly(); // Assert — exception is a ConfigurationException - Assert.IsAssignableFrom(exception); - + await Assert.That(exception).IsAssignableTo(); // Assert — exception carries the validation result - Assert.Same(result, exception.ValidationResult); - + await Assert.That(exception.ValidationResult).IsSameReferenceAs(result); // Assert — message lists all errors with source context - Assert.Contains("[Handler 'OrderHandler']", exception.Message); - Assert.Contains("Handler type is not public", exception.Message); - Assert.Contains("[Producer 'OrderCreated']", exception.Message); - Assert.Contains("RequestType not set", exception.Message); - Assert.Contains("2 error(s)", exception.Message); + await Assert.That(exception.Message).Contains("[Handler 'OrderHandler']"); + await Assert.That(exception.Message).Contains("Handler type is not public"); + await Assert.That(exception.Message).Contains("[Producer 'OrderCreated']"); + await Assert.That(exception.Message).Contains("RequestType not set"); + await Assert.That(exception.Message).Contains("2 error(s)"); } - [Fact] - public void When_valid_ThrowIfInvalid_should_not_throw() + [Test] + public async Task When_valid_ThrowIfInvalid_should_not_throw() { // Arrange - var result = new PipelineValidationResult( - new List(), - new List { new(ValidationSeverity.Warning, "X", "minor") }); - + var result = new PipelineValidationResult(new List(), new List { new(ValidationSeverity.Warning, "X", "minor") }); // Act & Assert — no exception result.ThrowIfInvalid(); } - [Fact] - public void When_combining_results_should_merge_errors_and_warnings() + [Test] + public async Task When_combining_results_should_merge_errors_and_warnings() { // Arrange - var result1 = new PipelineValidationResult( - new List { new(ValidationSeverity.Error, "A", "error from A") }, - new List { new(ValidationSeverity.Warning, "A", "warning from A") }); - - var result2 = new PipelineValidationResult( - new List { new(ValidationSeverity.Error, "B", "error from B") }, - new List()); - - var result3 = new PipelineValidationResult( - new List(), - new List { new(ValidationSeverity.Warning, "C", "warning from C") }); - + var result1 = new PipelineValidationResult(new List { new(ValidationSeverity.Error, "A", "error from A") }, new List { new(ValidationSeverity.Warning, "A", "warning from A") }); + var result2 = new PipelineValidationResult(new List { new(ValidationSeverity.Error, "B", "error from B") }, new List()); + var result3 = new PipelineValidationResult(new List(), new List { new(ValidationSeverity.Warning, "C", "warning from C") }); // Act var combined = PipelineValidationResult.Combine(result1, result2, result3); - // Assert - Assert.False(combined.IsValid); - Assert.Equal(2, combined.Errors.Count); - Assert.Equal(2, combined.Warnings.Count); - Assert.Contains(combined.Errors, e => e.Source == "A"); - Assert.Contains(combined.Errors, e => e.Source == "B"); - Assert.Contains(combined.Warnings, e => e.Source == "A"); - Assert.Contains(combined.Warnings, e => e.Source == "C"); + await Assert.That(combined.IsValid).IsFalse(); + await Assert.That(combined.Errors.Count).IsEqualTo(2); + await Assert.That(combined.Warnings.Count).IsEqualTo(2); + await Assert.That(combined.Errors).Contains(e => e.Source == "A"); + await Assert.That(combined.Errors).Contains(e => e.Source == "B"); + await Assert.That(combined.Warnings).Contains(e => e.Source == "A"); + await Assert.That(combined.Warnings).Contains(e => e.Source == "C"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_encounters_warnings_and_errors_should_collect_separately.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_encounters_warnings_and_errors_should_collect_separately.cs index 6d7988ace8..d389d8420a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_encounters_warnings_and_errors_should_collect_separately.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_encounters_warnings_and_errors_should_collect_separately.cs @@ -19,46 +19,43 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidatorWarningsSeparationTests { - [Fact] - public void When_validator_encounters_warnings_and_errors_should_collect_separately() + [Test] + public async Task When_validator_encounters_warnings_and_errors_should_collect_separately() { // Arrange — configure paths that produce both errors and warnings - // Handler path: misordered backstop/resilience triggers a Warning var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyMisorderedBackstopHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Producer path: null RequestType triggers an Error - var publications = new[] { new Publication { Topic = new RoutingKey("test.topic"), RequestType = null } }; - + var publications = new[] + { + new Publication + { + Topic = new RoutingKey("test.topic"), + RequestType = null + } + }; var validator = new PipelineValidator(pipelineBuilder, publications); - // Act var result = validator.Validate(); - // Assert — warnings and errors are in separate collections - Assert.NotEmpty(result.Errors); - Assert.NotEmpty(result.Warnings); - - Assert.All(result.Errors, e => Assert.Equal(ValidationSeverity.Error, e.Severity)); - Assert.All(result.Warnings, w => Assert.Equal(ValidationSeverity.Warning, w.Severity)); - + await Assert.That(result.Errors).IsNotEmpty(); + await Assert.That(result.Warnings).IsNotEmpty(); + foreach (var e in result.Errors) + await Assert.That(e.Severity).IsEqualTo(ValidationSeverity.Error); + foreach (var w in result.Warnings) + await Assert.That(w.Severity).IsEqualTo(ValidationSeverity.Warning); // Verify no cross-contamination - Assert.DoesNotContain(result.Errors, e => e.Severity == ValidationSeverity.Warning); - Assert.DoesNotContain(result.Warnings, w => w.Severity == ValidationSeverity.Error); + await Assert.That(result.Errors).DoesNotContain(e => e.Severity == ValidationSeverity.Warning); + await Assert.That(result.Warnings).DoesNotContain(w => w.Severity == ValidationSeverity.Error); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_finds_errors_across_paths_should_aggregate_all.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_finds_errors_across_paths_should_aggregate_all.cs index e4c13f6dd2..819a78935b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_finds_errors_across_paths_should_aggregate_all.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_finds_errors_across_paths_should_aggregate_all.cs @@ -19,59 +19,48 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using System.Linq; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.ServiceActivator.Validation; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidatorErrorAggregationTests { - [Fact] - public void When_all_paths_have_errors_should_collect_errors_from_each() + [Test] + public async Task When_all_paths_have_errors_should_collect_errors_from_each() { // Arrange — configure each path with a known error - // Handler path: internal handler triggers HandlerTypeVisibility error var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyInternalHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // Producer path: null RequestType triggers PublicationRequestTypeSet error - var publications = new[] { new Publication { Topic = new RoutingKey("test.topic"), RequestType = null } }; - + var publications = new[] + { + new Publication + { + Topic = new RoutingKey("test.topic"), + RequestType = null + } + }; // Consumer path: no handler for MyBareRequest triggers HandlerRegistered error var subscriptions = new[] { - new Subscription( - subscriptionName: new SubscriptionName("bare-sub"), - channelName: new ChannelName("bare-channel"), - routingKey: new RoutingKey("bare.routing.key"), - requestType: typeof(MyBareRequest), - messagePumpType: MessagePumpType.Reactor) + new Subscription(subscriptionName: new SubscriptionName("bare-sub"), channelName: new ChannelName("bare-channel"), routingKey: new RoutingKey("bare.routing.key"), requestType: typeof(MyBareRequest), messagePumpType: MessagePumpType.Reactor) }; - var consumerRules = new ISpecification[] { ConsumerValidationRules.HandlerRegistered(registry) }; - var validator = new PipelineValidator(pipelineBuilder, publications, subscriptions, consumerRules); - // Act var result = validator.Validate(); - // Assert — errors from all three paths are present - Assert.False(result.IsValid); - - Assert.Contains(result.Errors, e => e.Message.Contains("not public")); - Assert.Contains(result.Errors, e => e.Message.Contains("RequestType")); - Assert.Contains(result.Errors, e => e.Message.Contains("No handler registered")); + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("not public")); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("RequestType")); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("No handler registered")); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs index 15d7564326..411c398966 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs @@ -19,21 +19,17 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class ValidatePipelinesThroughDiPathTests { - [Fact] - public void When_validator_resolved_from_di_should_validate_without_configuration_exception() + [Test] + public async Task When_validator_resolved_from_di_should_validate_without_configuration_exception() { // Arrange — wire up Brighter with a handler and ValidatePipelines through the builder var services = new ServiceCollection(); @@ -43,14 +39,11 @@ public void When_validator_resolved_from_di_should_validate_without_configuratio var mapperRegistry = new ServiceCollectionMessageMapperRegistryBuilder(services); var builder = new ServiceCollectionBrighterBuilder(services, subscriberRegistry, mapperRegistry); builder.ValidatePipelines(); - var provider = services.BuildServiceProvider(); - // Act — resolve the validator and run validation through the full DI path var validator = provider.GetRequiredService(); var result = validator.Validate(); - // Assert — validation completes without ConfigurationException; result is valid - Assert.True(result.IsValid); + await Assert.That(result.IsValid).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_result_has_only_warnings_should_be_valid.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_result_has_only_warnings_should_be_valid.cs index 80c80a911b..b7c38682c4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_result_has_only_warnings_should_be_valid.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_result_has_only_warnings_should_be_valid.cs @@ -19,35 +19,27 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #endregion - using Paramore.Brighter.Core.Tests.Validation.TestDoubles; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Core.Tests.Validation; - public class PipelineValidatorIsValidWithWarningsTests { - [Fact] - public void When_validator_result_has_only_warnings_should_be_valid() + [Test] + public async Task When_validator_result_has_only_warnings_should_be_valid() { // Arrange — handler with misordered backstop/resilience produces only a warning var registry = new SubscriberRegistry(); registry.Add(typeof(MyDescribableCommand), typeof(MyMisorderedBackstopHandler)); var pipelineBuilder = new PipelineBuilder(registry); - PipelineBuilder.ClearPipelineCache(); - // No publications or subscriptions — only handler path runs var validator = new PipelineValidator(pipelineBuilder); - // Act var result = validator.Validate(); - // Assert — warnings present but IsValid is still true - Assert.NotEmpty(result.Warnings); - Assert.Empty(result.Errors); - Assert.True(result.IsValid); + await Assert.That(result.Warnings).IsNotEmpty(); + await Assert.That(result.Errors).IsEmpty(); + await Assert.That(result.IsValid).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs index d855d4488f..c74f3f46b1 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs @@ -1,93 +1,62 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorWaitStepFlowTests +public class MediatorWaitStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; - private readonly ITestOutputHelper _testOutputHelper; private readonly FakeTimeProvider _timeProvider = new(); private readonly Waker _waker; - - public MediatorWaitStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorWaitStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - _job = new Job(workflowData); - - var secondStep = new Sequential( - "Test of Job", - new ChangeAsync( (_) => Task.CompletedTask), - () => { _stepCompleted = true; }, - null - ); - - var firstStep = new Wait("Test of Job", - TimeSpan.FromMilliseconds(100), - secondStep - ); - + var secondStep = new Sequential("Test of Job", new ChangeAsync((_) => Task.CompletedTask), () => + { + _stepCompleted = true; + }, null); + var firstStep = new Wait("Test of Job", TimeSpan.FromMilliseconds(100), secondStep); _job.InitSteps(firstStep); - InMemoryStateStoreAsync store = new(_timeProvider); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); _waker = new Waker(TimeSpan.FromMilliseconds(100), _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_wait_workflow() { var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(3)); - + ct.CancelAfter(TimeSpan.FromSeconds(3)); try { await _scheduler.ScheduleAsync(_job); - _timeProvider.Advance(TimeSpan.FromMilliseconds(1000)); - _runner.RunAsync(ct.Token); _waker.RunAsync(ct.Token); - await Task.Delay(5, ct.Token); - } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - Assert.True(_stepCompleted); - Assert.Equal(JobState.Done, _job.State); + await Assert.That(_stepCompleted).IsTrue(); + await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs index 05630f2258..5c20582271 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs @@ -1,85 +1,67 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorChangeStepFlowTests +public class MediatorChangeStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; - - public MediatorChangeStepFlowTests (ITestOutputHelper testOutputHelper) + public MediatorChangeStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData { Bag = { ["MyValue"] = "Test" } }; - - _job = new Job(workflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new ChangeAsync( (data) => + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData + { + Bag = { - var tcs = new TaskCompletionSource(); - data.Bag["MyValue"] = "Altered"; - tcs.SetResult(); - return tcs.Task; - }), - () => { _stepCompleted = true; }, - null - ); - + ["MyValue"] = "Test" + } + }; + _job = new Job(workflowData); + var firstStep = new Sequential("Test of Job", new ChangeAsync((data) => + { + var tcs = new TaskCompletionSource(); + data.Bag["MyValue"] = "Altered"; + tcs.SetResult(); + return tcs.Task; + }), () => + { + _stepCompleted = true; + }, null); _job.InitSteps(firstStep); - - var store = new InMemoryStateStoreAsync (); + var store = new InMemoryStateStoreAsync(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_change_workflow() { await _scheduler.ScheduleAsync(_job); - //let it run long enough to finish work, then terminate var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception ex) { - // swallow the exception, we expect it to be cancelled - _testOutputHelper.WriteLine(ex.ToString()); + Console.WriteLine(ex.ToString()); } - - Assert.Equal(JobState.Done, _job.State); - Assert.True(_stepCompleted); - Assert.Equal("Altered", _job.Data.Bag["MyValue"]); + + await Assert.That(_job.State).IsEqualTo(JobState.Done); + await Assert.That(_stepCompleted).IsTrue(); + await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Altered"); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs index 07d7870f53..3ea33317ec 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs @@ -1,110 +1,77 @@ -using System; +using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorFailingChoiceFlowTests +public class MediatorFailingChoiceFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompletedOne; private bool _stepCompletedTwo; private bool _stepCompletedThree; - - public MediatorFailingChoiceFlowTests(ITestOutputHelper testOutputHelper) + public MediatorFailingChoiceFlowTests() { - _testOutputHelper = testOutputHelper; // arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new MyOtherCommandHandlerAsync(commandProcessor), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new MyOtherCommandHandlerAsync(commandProcessor), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Fail"; - - _job = new Job(workflowData) ; - - var stepThree = new Sequential( - "Test of Job SequenceStep Three", - new FireAndForgetAsync((data) => - new MyOtherCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepCompletedThree = true; }, - null); - - var stepTwo = new Sequential( - "Test of Job SequenceStep Two", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepCompletedTwo = true; }, - null); - - var stepOne = new ExclusiveChoice( - "Test of Job SequenceStep One", - new Specification(data => data.Bag["MyValue"] as string == "Pass"), - () => { _stepCompletedOne = true; }, - stepTwo, - stepThree); - + _job = new Job(workflowData); + var stepThree = new Sequential("Test of Job SequenceStep Three", new FireAndForgetAsync((data) => new MyOtherCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepCompletedThree = true; + }, null); + var stepTwo = new Sequential("Test of Job SequenceStep Two", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepCompletedTwo = true; + }, null); + var stepOne = new ExclusiveChoice("Test of Job SequenceStep One", new Specification(data => data.Bag["MyValue"] as string == "Pass"), () => + { + _stepCompletedOne = true; + }, stepTwo, stepThree); _job.InitSteps(stepOne); - InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_choice_workflow_step() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyOtherCommandHandlerAsync.ReceivedCommands.Clear(); - await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } // Assert - Assert.True(_stepCompletedOne); - Assert.False(_stepCompletedTwo); - Assert.True(_stepCompletedThree); - Assert.Contains(MyOtherCommandHandlerAsync.ReceivedCommands, c => c.Value == "Fail"); - Assert.False(MyCommandHandlerAsync.ReceivedCommands.Any()); + await Assert.That(_stepCompletedOne).IsTrue(); + await Assert.That(_stepCompletedTwo).IsFalse(); + await Assert.That(_stepCompletedThree).IsTrue(); + await Assert.That(MyOtherCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Fail"); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands.Any()).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs index aae9ac317f..22ab3d3966 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs @@ -1,101 +1,69 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorReplyMultiStepFlowTests +public class MediatorReplyMultiStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompletedOne; private bool _stepCompletedTwo; - - public MediatorReplyMultiStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorReplyMultiStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var stepTwo = new Sequential( - "Test of Job SequenceStep Two", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepCompletedTwo = true; }, - null); - - Sequential stepOne = new( - "Test of Job SequenceStep One", - new RequestAndReactionAsync( - (data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, - (reply, data) => data.Bag["MyReply"] = ((MyEvent)reply).Value), - () => { _stepCompletedOne = true; }, - stepTwo); - - _job.InitSteps(stepOne); - + _job = new Job(workflowData); + var stepTwo = new Sequential("Test of Job SequenceStep Two", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepCompletedTwo = true; + }, null); + Sequential stepOne = new("Test of Job SequenceStep One", new RequestAndReactionAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, (reply, data) => data.Bag["MyReply"] = ((MyEvent)reply).Value), () => + { + _stepCompletedOne = true; + }, stepTwo); + _job.InitSteps(stepOne); InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_workflow_with_reply() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyEventHandlerAsync.ReceivedEvents.Clear(); - await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.True(_stepCompletedOne); - Assert.True(_stepCompletedTwo); - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyEventHandlerAsync.ReceivedEvents, e => e.Value == "Test"); - Assert.Equal(JobState.Done, _job.State); + await Assert.That(_stepCompletedOne).IsTrue(); + await Assert.That(_stepCompletedTwo).IsTrue(); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs index 457119aca6..4a3ec46e0e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs @@ -1,109 +1,77 @@ -using System; +using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorPassingChoiceFlowTests +public class MediatorPassingChoiceFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompletedOne; private bool _stepCompletedTwo; private bool _stepCompletedThree; - - public MediatorPassingChoiceFlowTests(ITestOutputHelper testOutputHelper) + public MediatorPassingChoiceFlowTests() { - _testOutputHelper = testOutputHelper; // arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new (commandProcessor), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new(commandProcessor), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Pass"; - - _job = new Job(workflowData) ; - - var stepThree = new Sequential( - "Test of Job SequenceStep Three", - new FireAndForgetAsync((data) => - new MyOtherCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepCompletedThree = true; }, - null); - - var stepTwo = new Sequential( - "Test of Job SequenceStep Two", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepCompletedTwo = true; }, - null); - - var stepOne = new ExclusiveChoice( - "Test of Job SequenceStep One", - new Specification(x => x.Bag["MyValue"] as string == "Pass"), - () => { _stepCompletedOne = true; }, - stepTwo, - stepThree); - - _job.InitSteps(stepOne); - + _job = new Job(workflowData); + var stepThree = new Sequential("Test of Job SequenceStep Three", new FireAndForgetAsync((data) => new MyOtherCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepCompletedThree = true; + }, null); + var stepTwo = new Sequential("Test of Job SequenceStep Two", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepCompletedTwo = true; + }, null); + var stepOne = new ExclusiveChoice("Test of Job SequenceStep One", new Specification(x => x.Bag["MyValue"] as string == "Pass"), () => + { + _stepCompletedOne = true; + }, stepTwo, stepThree); + _job.InitSteps(stepOne); InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_choice_workflow_step() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyOtherCommandHandlerAsync.ReceivedCommands.Clear(); - await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - Assert.True(_stepCompletedOne); - Assert.True(_stepCompletedTwo); - Assert.False(_stepCompletedThree); - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Pass"); - Assert.False(MyOtherCommandHandlerAsync.ReceivedCommands.Any()); - Assert.True(_stepCompletedOne); + + await Assert.That(_stepCompletedOne).IsTrue(); + await Assert.That(_stepCompletedTwo).IsTrue(); + await Assert.That(_stepCompletedThree).IsFalse(); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Pass"); + await Assert.That(MyOtherCommandHandlerAsync.ReceivedCommands.Any()).IsFalse(); + await Assert.That(_stepCompletedOne).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs index 56dc753f03..e5d92b85d7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs @@ -1,82 +1,56 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorOneStepFlowTests +public class MediatorOneStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; - - public MediatorOneStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorOneStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new FireAndForgetAsync((data) => - new MyCommand { Value = (workflowData.Bag["MyValue"] as string)!}), - () => { _stepCompleted = true; }, - null - ); - + _job = new Job(workflowData); + var firstStep = new Sequential("Test of Job", new FireAndForgetAsync((data) => new MyCommand { Value = (workflowData.Bag["MyValue"] as string)! }), () => + { + _stepCompleted = true; + }, null); _job.InitSteps(firstStep); - InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_single_step_workflow() { MyCommandHandlerAsync.ReceivedCommands.Clear(); - - await _scheduler.ScheduleAsync(_job); - + await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Equal(JobState.Done, _job.State); - Assert.True(_stepCompleted); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); + await Assert.That(_stepCompleted).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs index 626022ac06..24f2a58f70 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs @@ -1,90 +1,61 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorTwoStepFlowTests +public class MediatorTwoStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepsCompleted; - - public MediatorTwoStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorTwoStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var secondStep = new Sequential( - "Test of Job Two", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _stepsCompleted = true; }, - null - ); - - var firstStep = new Sequential( - "Test of Job One", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { workflowData.Bag["MyValue"] = "TestTwo"; }, - secondStep - ); - - _job.InitSteps(firstStep); - + _job = new Job(workflowData); + var secondStep = new Sequential("Test of Job Two", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _stepsCompleted = true; + }, null); + var firstStep = new Sequential("Test of Job One", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + workflowData.Bag["MyValue"] = "TestTwo"; + }, secondStep); + _job.InitSteps(firstStep); InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_two_step_workflow() { MyCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "TestTwo"); - Assert.Equal(JobState.Done, _job.State); - Assert.True(_stepsCompleted); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); + await Assert.That(_stepsCompleted).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs index 23a79ac708..edc815c539 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs @@ -1,103 +1,68 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorParallelSplitFlowTests +public class MediatorParallelSplitFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _firstBranchFinished; private bool _secondBranchFinished; - - public MediatorParallelSplitFlowTests(ITestOutputHelper testOutputHelper) + public MediatorParallelSplitFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); - - _job = new Job(workflowData) ; - - var parallelSplit = new ParallelSplit( - "Test of Job Parallel Split", - (data) => - { - data.Bag.TryAdd("MyValue", "Test"); - data.Bag.TryAdd("MyOtherValue", "TestTwo"); - - var secondBranch = new Sequential( - "Test of Job Two", - new FireAndForgetAsync((d) => - new MyCommand { Value = (d.Bag["MyOtherValue"] as string)! }), - () => { _secondBranchFinished = true; }, - null - ); - - var firstBranch = new Sequential( - "Test of Job One", - new FireAndForgetAsync((d) => - new MyCommand { Value = (d.Bag["MyValue"] as string)! }), - () => { _firstBranchFinished = true; }, - null - ); - - return [firstBranch, secondBranch]; - } - ); - + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); + _job = new Job(workflowData); + var parallelSplit = new ParallelSplit("Test of Job Parallel Split", (data) => + { + data.Bag.TryAdd("MyValue", "Test"); + data.Bag.TryAdd("MyOtherValue", "TestTwo"); + var secondBranch = new Sequential("Test of Job Two", new FireAndForgetAsync((d) => new MyCommand { Value = (d.Bag["MyOtherValue"] as string)! }), () => + { + _secondBranchFinished = true; + }, null); + var firstBranch = new Sequential("Test of Job One", new FireAndForgetAsync((d) => new MyCommand { Value = (d.Bag["MyValue"] as string)! }), () => + { + _firstBranchFinished = true; + }, null); + return[firstBranch, secondBranch]; + }); _job.InitSteps(parallelSplit); - InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] - public async Task When_running_a_workflow_with_a_parallel_split() + + [Test] + public async Task When_running_a_workflow_with_a_parallel_split() { MyCommandHandlerAsync.ReceivedCommands.Clear(); - await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(3) ); - + ct.CancelAfter(TimeSpan.FromSeconds(3)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "TestTwo"); - Assert.True(_firstBranchFinished); - Assert.True(_secondBranchFinished); - Assert.Equal(JobState.Done, _job.State); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_firstBranchFinished).IsTrue(); + await Assert.That(_secondBranchFinished).IsTrue(); + await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs index adf0f8124d..c531e730fa 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs @@ -1,96 +1,70 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; using MyCommand = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyCommand; using MyCommandHandlerAsync = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyCommandHandlerAsync; using MyEvent = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyEvent; using MyEventHandlerAsync = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyEventHandlerAsync; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorReplyStepFlowTests +public class MediatorReplyStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; - - public MediatorReplyStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorReplyStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new RequestAndReactionAsync( - (data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, - (reply,data) => { data.Bag["MyReply"] = reply!.Value; }), - () => { _stepCompleted = true; }, - null); - - _job.InitSteps(firstStep); - - InMemoryStateStoreAsync store = new(); - InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - - _runner = new Runner(channel, store, commandProcessor, _scheduler); + _job = new Job(workflowData); + var firstStep = new Sequential("Test of Job", new RequestAndReactionAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, (reply, data) => + { + data.Bag["MyReply"] = reply!.Value; + }), () => + { + _stepCompleted = true; + }, null); + _job.InitSteps(firstStep); + InMemoryStateStoreAsync store = new(); + InMemoryJobChannel channel = new(); + _scheduler = new Scheduler(channel, store); + _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_workflow_with_reply() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyEventHandlerAsync.ReceivedEvents.Clear(); - await _scheduler.ScheduleAsync(_job); - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(3) ); - + ct.CancelAfter(TimeSpan.FromSeconds(3)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - Assert.True(_stepCompleted); - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyEventHandlerAsync.ReceivedEvents, e => e.Value == "Test"); - Assert.Equal(JobState.Done, _job.State); + await Assert.That(_stepCompleted).IsTrue(); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs index 6865ae3e64..b6aec491a5 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs @@ -1,102 +1,78 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorRobustReplyNoFaultStepFlowTests +public class MediatorRobustReplyNoFaultStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; private bool _stepFaulted; - - public MediatorRobustReplyNoFaultStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorRobustReplyNoFaultStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new RobustRequestAndReactionAsync( - (data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, - (reply, data) => { data.Bag["MyReply"] = ((MyEvent)reply).Value; }, - (fault, data) => { data.Bag["MyFault"] = ((MyFault)fault).Value; }), - () => { _stepCompleted = true; }, - null, - () => { _stepFaulted = true; }, - null); - - _job.InitSteps(firstStep); - - InMemoryStateStoreAsync store = new(); - InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - - _runner = new Runner(channel, store, commandProcessor, _scheduler); + _job = new Job(workflowData); + var firstStep = new Sequential("Test of Job", new RobustRequestAndReactionAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, (reply, data) => + { + data.Bag["MyReply"] = ((MyEvent)reply).Value; + }, (fault, data) => + { + data.Bag["MyFault"] = ((MyFault)fault).Value; + }), () => + { + _stepCompleted = true; + }, null, () => + { + _stepFaulted = true; + }, null); + _job.InitSteps(firstStep); + InMemoryStateStoreAsync store = new(); + InMemoryJobChannel channel = new(); + _scheduler = new Scheduler(channel, store); + _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_workflow_with_reply() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyEventHandlerAsync.ReceivedEvents.Clear(); MyFaultHandlerAsync.ReceivedFaults.Clear(); - await _scheduler.ScheduleAsync(_job); - - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyEventHandlerAsync.ReceivedEvents, e => e.Value == "Test"); - Assert.Empty(MyFaultHandlerAsync.ReceivedFaults); - Assert.Equal("Test", _job.Data.Bag["MyValue"]); - Assert.Equal("Test", _job.Data.Bag["MyReply"]); - Assert.Equal(JobState.Done, _job.State); - Assert.True(_stepCompleted); - Assert.False(_stepFaulted); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); + await Assert.That(MyFaultHandlerAsync.ReceivedFaults).IsEmpty(); + await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Test"); + await Assert.That(_job.Data.Bag["MyReply"]).IsEqualTo("Test"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); + await Assert.That(_stepCompleted).IsTrue(); + await Assert.That(_stepFaulted).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs index 11b7da28dc..b66e1bb210 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs @@ -1,104 +1,80 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorRobustReplyFaultStepFlowTests +public class MediatorRobustReplyFaultStepFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; private bool _stepCompleted; private bool _stepFaulted; - - public MediatorRobustReplyFaultStepFlowTests(ITestOutputHelper testOutputHelper) + public MediatorRobustReplyFaultStepFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); registry.RegisterAsync(); registry.RegisterAsync(); - IAmACommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => - handlerType switch - { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, raiseFault: true), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), - _ when handlerType == typeof(MyFaultHandlerAsync) => new MyFaultHandlerAsync(_scheduler), - _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported") - }); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - - PipelineBuilder.ClearPipelineCache(); - - var workflowData= new WorkflowTestData(); + var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch + { + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, raiseFault: true), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ when handlerType == typeof(MyFaultHandlerAsync) => new MyFaultHandlerAsync(_scheduler), + _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; - - _job = new Job(workflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new RobustRequestAndReactionAsync( - (data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, - (reply, data) => { data.Bag["MyReply"] = reply!.Value; }, - (fault, data) => { data.Bag["MyFault"] = fault!.Value; }), - () => { _stepCompleted = true; }, - null, - () => { _stepFaulted = true; }, - null); - - _job.InitSteps(firstStep); - - InMemoryStateStoreAsync store = new(); - InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - - _runner = new Runner(channel, store, commandProcessor, _scheduler); + _job = new Job(workflowData); + var firstStep = new Sequential("Test of Job", new RobustRequestAndReactionAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }, (reply, data) => + { + data.Bag["MyReply"] = reply!.Value; + }, (fault, data) => + { + data.Bag["MyFault"] = fault!.Value; + }), () => + { + _stepCompleted = true; + }, null, () => + { + _stepFaulted = true; + }, null); + _job.InitSteps(firstStep); + InMemoryStateStoreAsync store = new(); + InMemoryJobChannel channel = new(); + _scheduler = new Scheduler(channel, store); + _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_workflow_with_reply() { MyCommandHandlerAsync.ReceivedCommands.Clear(); MyEventHandlerAsync.ReceivedEvents.Clear(); MyFaultHandlerAsync.ReceivedFaults.Clear(); - await _scheduler.ScheduleAsync(_job); - - var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(1) ); - + ct.CancelAfter(TimeSpan.FromSeconds(1)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyFaultHandlerAsync.ReceivedFaults, e => e.Value == "Test"); - Assert.Empty(MyEventHandlerAsync.ReceivedEvents); - Assert.Equal("Test", _job.Data.Bag["MyValue"]); - Assert.Equal("Test", _job.Data.Bag["MyFault"]); - Assert.Equal(JobState.Done, _job.State); - Assert.True(_stepCompleted); - Assert.False(_stepFaulted); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyFaultHandlerAsync.ReceivedFaults).Contains(e => e.Value == "Test"); + await Assert.That(MyEventHandlerAsync.ReceivedEvents).IsEmpty(); + await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Test"); + await Assert.That(_job.Data.Bag["MyFault"]).IsEqualTo("Test"); + await Assert.That(_job.State).IsEqualTo(JobState.Done); + await Assert.That(_stepCompleted).IsTrue(); + await Assert.That(_stepFaulted).IsFalse(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs index 7068e8c85c..eefcaa3cde 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs @@ -1,101 +1,74 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.Workflows.TestDoubles; using Paramore.Brighter.Mediator; using Polly.Registry; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Core.Tests.Workflows; - -public class MediatorMultipleWorkflowFlowTests +public class MediatorMultipleWorkflowFlowTests { - private readonly ITestOutputHelper _testOutputHelper; private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _firstJob; private readonly Job _secondJob; private bool _jobOneCompleted; private bool _jobTwoCompleted; - - public MediatorMultipleWorkflowFlowTests(ITestOutputHelper testOutputHelper) + public MediatorMultipleWorkflowFlowTests() { - _testOutputHelper = testOutputHelper; var registry = new SubscriberRegistry(); registry.RegisterAsync(); - CommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); - - commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), - new PolicyRegistry(), new ResiliencePipelineRegistry(),new InMemorySchedulerFactory()); - - PipelineBuilder.ClearPipelineCache(); - - var firstWorkflowData= new WorkflowTestData { Bag = { ["MyValue"] = "Test" } }; - - _firstJob = new Job(firstWorkflowData) ; - - var firstStep = new Sequential( - "Test of Job", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)!}), - () => { _jobOneCompleted = true; }, - null - ); - + commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); + var firstWorkflowData = new WorkflowTestData + { + Bag = + { + ["MyValue"] = "Test" + } + }; + _firstJob = new Job(firstWorkflowData); + var firstStep = new Sequential("Test of Job", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _jobOneCompleted = true; + }, null); _firstJob.InitSteps(firstStep); - var secondWorkflowData = new WorkflowTestData(); secondWorkflowData.Bag["MyValue"] = "TestTwo"; _secondJob = new Job(secondWorkflowData); - - var secondStep = new Sequential( - "Second Test of Job", - new FireAndForgetAsync((data) => - new MyCommand { Value = (data.Bag["MyValue"] as string)! }), - () => { _jobTwoCompleted = true; }, - null - ); - + var secondStep = new Sequential("Second Test of Job", new FireAndForgetAsync((data) => new MyCommand { Value = (data.Bag["MyValue"] as string)! }), () => + { + _jobTwoCompleted = true; + }, null); _secondJob.InitSteps(secondStep); - InMemoryStateStoreAsync store = new(); InMemoryJobChannel channel = new(); - - _scheduler = new Scheduler( - channel, - store - ); - + _scheduler = new Scheduler(channel, store); _runner = new Runner(channel, store, commandProcessor, _scheduler); } - - [Fact] + + [Test] public async Task When_running_a_single_step_workflow() { MyCommandHandlerAsync.ReceivedCommands.Clear(); - - await _scheduler.ScheduleAsync([_firstJob, _secondJob]); - + await _scheduler.ScheduleAsync([_firstJob, _secondJob]); var ct = new CancellationTokenSource(); - ct.CancelAfter( TimeSpan.FromSeconds(120) ); - + ct.CancelAfter(TimeSpan.FromSeconds(120)); try { _runner.RunAsync(ct.Token); } catch (Exception e) { - _testOutputHelper.WriteLine(e.ToString()); + Console.WriteLine(e.ToString()); } - - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "Test"); - Assert.Contains(MyCommandHandlerAsync.ReceivedCommands, c => c.Value == "TestTwo"); - Assert.Equal(JobState.Done, _firstJob.State); - Assert.Equal(JobState.Done, _secondJob.State); - Assert.True(_jobOneCompleted); - Assert.True(_jobTwoCompleted); + + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_firstJob.State).IsEqualTo(JobState.Done); + await Assert.That(_secondJob.State).IsEqualTo(JobState.Done); + await Assert.That(_jobOneCompleted).IsTrue(); + await Assert.That(_jobTwoCompleted).IsTrue(); } -} +} \ No newline at end of file diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs index c5fb1a6496..de0e4cd83f 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; @@ -21,7 +21,6 @@ public class LargeMessagePaylodUnwrapTests : IDisposable public LargeMessagePaylodUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( null, diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs index 9b27c33216..9e135f6310 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Gcp.Tests.TestDoubles; @@ -23,7 +23,6 @@ public class LargeMessagePayloadWrapTests : IDisposable public LargeMessagePayloadWrapTests() { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync( diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs index 4b9427cce1..5c7660b30c 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; @@ -20,7 +20,6 @@ public class LargeMessagePayloadUnwrapTests public LargeMessagePayloadUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs index dba3d3bc56..74948af067 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text.Json; using System.Threading.Tasks; @@ -21,7 +21,6 @@ public class LargeMessagePayloadAsyncUnwrapTests public LargeMessagePayloadAsyncUnwrapTests() { //arrange - TransformPipelineBuilder.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( null, diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs index 9873718c3b..ec6623c02d 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MongoDb.Tests.TestDoubles; using Paramore.Brighter.Transformers.MongoGridFS; @@ -20,7 +20,6 @@ public class LargeMessagePayloadWrapTests : IDisposable public LargeMessagePayloadWrapTests () { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry( new SimpleMessageMapperFactory(_ => new MyLargeCommandMessageMapper()), diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs index 6e54fc1495..11162d621f 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MongoDb.Tests.TestDoubles; @@ -22,7 +22,6 @@ public class LargeMessagePayloadAsyncWrapTests : IAsyncDisposable public LargeMessagePayloadAsyncWrapTests () { //arrange - TransformPipelineBuilderAsync.ClearPipelineCache(); var mapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync( diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs.liquid index 1d6a5d85af..5f49825213 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,30 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingADuplicateMessageItShouldNotThrowAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -48,6 +45,6 @@ public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs.liquid index 2bc9c8b420..bea68809fd 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -50,37 +46,37 @@ public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLi var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic.ToString()).IsEqualTo(message.Header.Topic.ToString()); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsBetween(message.Header.TimeStamp.AddSeconds(-1), message.Header.TimeStamp.AddSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId.ToString()).IsEqualTo(message.Header.CorrelationId.ToString()); + await Assert.That(storedMessage.Header.ReplyTo.ToString()).IsEqualTo(message.Header.ReplyTo.ToString()); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey.ToString()).IsEqualTo(message.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs.liquid index 0e92eedfe2..fd70b9492f 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -55,6 +51,6 @@ public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAs var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs.liquid index 88a9844eb2..b6b9cdf397 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -55,37 +51,37 @@ public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic.ToString()).IsEqualTo(message.Header.Topic.ToString()); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsBetween(message.Header.TimeStamp.AddSeconds(-1), message.Header.TimeStamp.AddSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId.ToString()).IsEqualTo(message.Header.CorrelationId.ToString()); + await Assert.That(storedMessage.Header.ReplyTo.ToString()).IsEqualTo(message.Header.ReplyTo.ToString()); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey.ToString()).IsEqualTo(message.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs.liquid index b2cdb51b12..5cb7c088ad 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,30 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -59,8 +56,8 @@ public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IA .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs.liquid index 1b9dedde2b..43053d828a 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs.liquid @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,30 +34,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -85,8 +82,8 @@ public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLife .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs.liquid index a80635573b..16e80f0f21 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs.liquid @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,31 +34,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -81,38 +77,38 @@ public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IA var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Body.Value).IsEqualTo(dispatched.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox + await Assert.That(message.Header.Topic.ToString()).IsEqualTo(dispatched.Header.Topic.ToString()); + await Assert.That(message.Header.MessageType).IsEqualTo(dispatched.Header.MessageType); + await Assert.That(message.Header.TimeStamp).IsBetween(dispatched.Header.TimeStamp.AddSeconds(-1), dispatched.Header.TimeStamp.AddSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(message.Header.CorrelationId.ToString()).IsEqualTo(dispatched.Header.CorrelationId.ToString()); + await Assert.That(message.Header.ReplyTo.ToString()).IsEqualTo(dispatched.Header.ReplyTo.ToString()); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(message.Header.PartitionKey.ToString()).IsEqualTo(dispatched.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs.liquid index 7708052518..29adc8ab17 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -46,6 +42,6 @@ public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs.liquid index e10b607de2..63afb33f37 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs.liquid @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,31 +34,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -81,9 +77,9 @@ public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs.liquid index dd89134f7d..805fc99c66 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +54,18 @@ public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLi var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs.liquid index 9119f3c417..2b3b4ef3c2 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs.liquid @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,31 +34,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -83,9 +79,9 @@ public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs.liquid index e6a4173662..346d536636 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs.liquid @@ -2,7 +2,6 @@ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,31 +9,28 @@ using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Async; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { - private readonly IAmAnOutboxProviderAsync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderAsync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() + [Before(HookType.Test)] + public async Task Setup() { _outboxProvider = new {{ OutboxProvider }}(); - _messageFactory = new {{ MessageFactory }}(); - } - - public async Task InitializeAsync() - { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +54,18 @@ public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncL var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs.liquid index 8e39d831ba..0e77bbc4f4 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs.liquid @@ -27,30 +27,35 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenAddingADuplicateMessageItShouldNotThrow { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingADuplicateMessageItShouldNotThrow() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); - _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [After(HookType.Test)] + public void Cleanup() + { + _outboxProvider.DeleteStore(_createdMessages); + } + + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,12 +68,6 @@ public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable outbox.Add(message, context); // Assert - // Just adding a simple assertion to remove any warning - Assert.True(true); - } - - public void Dispose() - { - _outboxProvider.DeleteStore(_createdMessages); + await Assert.That(true).IsTrue(); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs.liquid index 3e908858ec..6035e0e7a8 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs.liquid @@ -27,30 +27,35 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageItShouldBeStoredWithAllProperties { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageItShouldBeStoredWithAllProperties() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); - _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [After(HookType.Test)] + public void Cleanup() + { + _outboxProvider.DeleteStore(_createdMessages); + } + + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -65,42 +70,37 @@ public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic.ToString()).IsEqualTo(message.Header.Topic.ToString()); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsBetween(message.Header.TimeStamp.AddSeconds(-1), message.Header.TimeStamp.AddSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId.ToString()).IsEqualTo(message.Header.CorrelationId.ToString()); + await Assert.That(storedMessage.Header.ReplyTo.ToString()).IsEqualTo(message.Header.ReplyTo.ToString()); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey.ToString()).IsEqualTo(message.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); - } - - public void Dispose() - { - _outboxProvider.DeleteStore(_createdMessages); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs.liquid index b2414926e8..b82d8f99ee 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,10 +71,11 @@ public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs.liquid index bb98754aba..b4404320a9 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : ID _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,41 +71,42 @@ public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : ID var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic.ToString()).IsEqualTo(message.Header.Topic.ToString()); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsBetween(message.Header.TimeStamp.AddSeconds(-1), message.Header.TimeStamp.AddSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId.ToString()).IsEqualTo(message.Header.CorrelationId.ToString()); + await Assert.That(storedMessage.Header.ReplyTo.ToString()).IsEqualTo(message.Header.ReplyTo.ToString()); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey.ToString()).IsEqualTo(message.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs.liquid index 8def02f434..c5de774759 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDispos _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,12 +76,13 @@ public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDispos .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs.liquid index 44218e6785..3493727193 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,12 +76,13 @@ public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs.liquid index 9a337137f6..3bc2af60fe 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDispos _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -71,42 +72,43 @@ public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDispos var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic.ToString()).IsEqualTo(message.Header.Topic.ToString()); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsBetween(message.Header.TimeStamp.AddSeconds(-1), message.Header.TimeStamp.AddSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId.ToString()).IsEqualTo(message.Header.CorrelationId.ToString()); + await Assert.That(dispatched.Header.ReplyTo.ToString()).IsEqualTo(message.Header.ReplyTo.ToString()); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey.ToString()).IsEqualTo(message.Header.PartitionKey.ToString()); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag.ContainsKey(key)).IsTrue(); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type.ToString()).IsEqualTo(message.Header.Type.ToString()); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState.ToString()).IsEqualTo(message.Header.TraceState.ToString()); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs.liquid index 1a05099074..89dca8cdab 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisp _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -61,10 +62,11 @@ public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisp var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs.liquid index c234f8d5d5..8478351ec1 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -71,13 +72,14 @@ public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs.liquid index 7a69e26381..d131edc3d5 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingDispatchedMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingDispatchedMessagesItShouldFilterByAge() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,22 +74,23 @@ public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs.liquid index 27baccab65..1fab981b1f 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : ID _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -73,13 +74,14 @@ public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : ID .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } diff --git a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs.liquid b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs.liquid index 2d7d5340f6..4389b017d7 100644 --- a/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs.liquid +++ b/tools/Paramore.Brighter.Test.Generator/Templates/Outbox/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs.liquid @@ -27,21 +27,22 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace {{ Namespace }}.Outbox{{ Prefix }}.Sync; {% if Category != null %} -[Trait("Category", "{{Category}}")]{% endif %} -public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable +[Category("{{Category}}")]{% endif %} +public class WhenRetrievingOutstandingMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; - private readonly IAmAMessageFactory _messageFactory; + private IAmAnOutboxProviderSync _outboxProvider; + private IAmAMessageFactory _messageFactory; private List _createdMessages = []; - public WhenRetrievingOutstandingMessagesItShouldFilterByAge() + [Before(HookType.Test)] + public void Setup() { _outboxProvider = new {{ OutboxProvider }}(); _outboxProvider.CreateStore(); @@ -49,8 +50,8 @@ public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable _messageFactory = new {{ MessageFactory }}(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,22 +74,23 @@ public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [After(HookType.Test)] + public void Cleanup() { _outboxProvider.DeleteStore(_createdMessages); } From fa7db986536c50e32c3a993826cd36619c47799b Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:21:58 +0100 Subject: [PATCH 02/14] fix: upgrade TUnit to 1.33.0, fix all Core.Tests parallel execution failures Upgrade TUnit from 0.67.10 to 1.33.0 and fix all test failures to achieve 650 tests passing with full parallel execution (0 failures, 7 intentional skips). Production code changes: - PipelineBuilder: add inbox-aware cache key for pre-attributes to prevent cross-contamination between tests with/without global inbox config - RequestHandler: add self-reference guard in SetSuccessor (parity with async) Test fixes for parallel safety: - Clear Activity.Current in test method bodies to prevent TUnit ambient activity from contaminating observability tests (Before hooks and constructors run in different async scopes, so clearing there has no effect) - Convert static fields to instance fields in pipeline test classes - Change Dictionary.Add() to indexer assignment in 7 test doubles to prevent duplicate key exceptions under concurrent invocation - Add [NotInParallel] groups for tests sharing process-global state: Observability (ActivitySource/Listener), Workflows (static handler state), ContextAware (static test strings), ExceptionPolicy (shared handler flag) TUnit assertion fixes: - byte[] comparison: IsEqualTo -> IsEquivalentTo (reference vs value semantics) - ContentType comparison: add .ToString() for object-to-value-type comparison - Header bag deserialization: compare via .ToString() for numeric type mismatches - HasCount().EqualTo() -> Count().IsEqualTo() for TUnit 1.33.0 API - Swap incorrect Assert.That argument order in context test - Add #pragma for TUnit0031 in synchronization context tests --- .github/workflows/ci.yml | 6 ++++++ Directory.Packages.props | 2 +- src/Paramore.Brighter/PipelineBuilder.cs | 19 +++++++++++++++---- src/Paramore.Brighter/RequestHandler.cs | 3 +++ .../When_a_message_uses_cloud_events.cs | 16 ++++++++-------- ...en_Creating_Context_For_A_Handler_Async.cs | 6 +++--- ...cised_The_Pipeline_Cleanup_Its_Handlers.cs | 12 ++++++------ .../TestDoubles/MyCommandHandler.cs | 2 +- .../TestDoubles/MyCommandHandlerAsync.cs | 2 +- .../TestDoubles/MyEventHandler.cs | 2 +- .../TestDoubles/MyEventHandlerAsync.cs | 2 +- .../TestDoubles/MyGlobalnboxEventHandler.cs | 2 +- .../TestDoubles/MyOtherEventHandler.cs | 2 +- .../TestDoubles/MyOtherEventHandlerAsync.cs | 2 +- .../When_A_Request_Context_Is_Provided.cs | 1 + .../When_No_Request_Context_Is_Provided.cs | 1 + ...en_a_message_compresses_a_large_payload.cs | 4 ++-- .../When_Accessing_A_Request_Context.cs | 2 +- ...hat_Repeatedely_Fails_Break_The_Circuit.cs | 1 + ...ing_A_Command_That_Should_Retry_Failure.cs | 1 + ...When_Deserializing_A_Message_Header_Bag.cs | 2 +- .../When_I_Am_Serialising_The_Payload.cs | 16 ++++++++-------- .../Archive/When_archiving_from_the_outbox.cs | 2 ++ .../When_archiving_from_the_outbox_async.cs | 2 ++ ...ring_A_Message_Should_Propogate_Context.cs | 1 + ...A_Message_Should_Propogate_Context_Asyn.cs | 1 + ...Publishing_A_Request_A_Span_Is_Exported.cs | 2 ++ ...shing_A_Request_A_Span_Is_Exported_Asyn.cs | 3 +++ ...en_Sending_A_Request_A_Span_Is_Exported.cs | 2 ++ ...ding_A_Request_A_Span_Is_Exported_Async.cs | 2 ++ ..._Span_Add_Brighter_Semantic_Conventions.cs | 1 + ..._Name_Add_Brighter_Semantic_Conventions.cs | 1 + ..._Event_Add_Brighter_SemanticConventions.cs | 1 + ...apper_Add_Brighter_Semantic_Conventions.cs | 1 + ..._Span_Add_Brighter_Semantic_Conventions.cs | 1 + ...ge_Is_Dispatched_It_Should_Begin_A_Span.cs | 1 + ...en_There_Are_No_Messages_Close_The_Span.cs | 1 + ...nCircuit_Channel_Failure_Close_The_Span.cs | 1 + ...ere_Is_A_Channel_Failure_Close_The_Span.cs | 1 + ..._There_Is_A_Quit_Message_Close_The_Span.cs | 1 + ...An_Unacceptable_Messages_Close_The_Span.cs | 1 + .../TraceState/When_Adding_TraceState.cs | 2 +- .../BrighterSynchronizationContextsTests.cs | 6 ++++++ .../When_running_a_blocking_wait_workflow.cs | 1 + .../When_running_a_change_workflow.cs | 1 + ..._running_a_failing_choice_workflow_step.cs | 1 + ...running_a_multistep_workflow_with_reply.cs | 1 + ..._running_a_passing_choice_workflow_step.cs | 1 + .../When_running_a_single_step_workflow.cs | 1 + .../When_running_a_two_step_workflow.cs | 1 + ...unning_a_workflow_with_a_parallel_split.cs | 1 + .../When_running_a_workflow_with_reply.cs | 1 + ...ng_a_workflow_with_robust_reply_nofault.cs | 1 + ...a_workflow_with_robust_reply_with_fault.cs | 1 + .../When_running_multiple_workflows.cs | 1 + 55 files changed, 110 insertions(+), 42 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7edb0ba076..f2b1364689 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,6 +58,12 @@ jobs: Linux-nuget- - name: Build run: dotnet build --configuration Release + - name: Enable Automated Test Artifact Uploads + uses: actions/github-script@v9 + with: + script: | + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN']); + core.exportVariable('ACTIONS_RESULTS_URL', process.env['ACTIONS_RESULTS_URL']); - name: Core Tests run: | dotnet test tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj --filter "Fragile!=CI" -c Release --logger GitHubActions --no-restore --no-build --verbosity d diff --git a/Directory.Packages.props b/Directory.Packages.props index 749ad4b279..b587558c52 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -140,7 +140,7 @@ - + all diff --git a/src/Paramore.Brighter/PipelineBuilder.cs b/src/Paramore.Brighter/PipelineBuilder.cs index 598fa45087..a76ddfdbc9 100644 --- a/src/Paramore.Brighter/PipelineBuilder.cs +++ b/src/Paramore.Brighter/PipelineBuilder.cs @@ -261,7 +261,8 @@ private IHandleRequests BuildPipeline(RequestHandler implici implicitHandler.Context = requestContext; - if (!s_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), + var preCacheKey = GetPreAttributesCacheKey(implicitHandler.Name.ToString()); + if (!s_preAttributesMemento.TryGetValue(preCacheKey, out IReadOnlyList? preAttributes)) { var orderedPreAttributes = @@ -273,7 +274,7 @@ private IHandleRequests BuildPipeline(RequestHandler implici AddGlobalInboxAttributes(ref orderedPreAttributes, implicitHandler); preAttributes = orderedPreAttributes.ToList().AsReadOnly(); - s_preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes); + s_preAttributesMemento.TryAdd(preCacheKey, preAttributes); } var firstInPipeline = PushOntoPipeline(preAttributes, implicitHandler, requestContext, instanceScope); @@ -308,7 +309,8 @@ private IHandleRequestsAsync BuildAsyncPipeline(RequestHandlerAsync? preAttributes)) + var preCacheKey = GetPreAttributesCacheKey(implicitHandler.Name.ToString()); + if (!s_preAttributesMemento.TryGetValue(preCacheKey, out IReadOnlyList? preAttributes)) { var orderedPreAttributes = implicitHandler.FindHandlerMethod() @@ -319,7 +321,7 @@ private IHandleRequestsAsync BuildAsyncPipeline(RequestHandlerAsync handler.Step); } + /// + /// Builds a cache key for pre-attributes that accounts for inbox configuration. + /// The global inbox adds a dynamic to the pipeline attributes, + /// so pipelines built with and without inbox configuration must be cached separately. + /// Post-attributes are not affected by inbox configuration and use the handler name directly. + /// + private string GetPreAttributesCacheKey(string handlerName) + => _inboxConfiguration != null ? $"{handlerName}:inbox" : handlerName; + private IHandleRequests PushOntoPipeline(IEnumerable attributes, IHandleRequests lastInPipeline, IRequestContext requestContext, IAmALifetime instanceScope) { diff --git a/src/Paramore.Brighter/RequestHandler.cs b/src/Paramore.Brighter/RequestHandler.cs index c4a1ed0804..420ed5bce1 100644 --- a/src/Paramore.Brighter/RequestHandler.cs +++ b/src/Paramore.Brighter/RequestHandler.cs @@ -73,6 +73,9 @@ public abstract partial class RequestHandler(InstrumentationOptions in /// The successor. public void SetSuccessor(IHandleRequests successor) { + if (this == successor) + return; + _successor = successor; } diff --git a/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs b/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs index 6370599e10..f849d35498 100644 --- a/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs +++ b/tests/Paramore.Brighter.Core.Tests/CloudEvents/When_a_message_uses_cloud_events.cs @@ -34,7 +34,7 @@ public async Task When_a_message_uses_cloud_events_via_attribute() await Assert.That(cloudEvents.Header.ContentType!).IsEqualTo(_message.Header.ContentType); await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); - await Assert.That(cloudEvents.Body.Bytes).IsEqualTo(body.Bytes); + await Assert.That(cloudEvents.Body.Bytes).IsEquivalentTo(body.Bytes); } [Test] @@ -100,7 +100,7 @@ public async Task When_a_non_json_message_uses_cloud_events_via_attribute_and_fo await Assert.That(cloudEvents.Header.ContentType).IsEqualTo(_message.Header.ContentType); await Assert.That(cloudEvents.Header.DataSchema).IsEqualTo(_dataSchema); await Assert.That(cloudEvents.Header.Subject).IsEqualTo(_subject); - await Assert.That(cloudEvents.Body.Bytes).IsEqualTo(body.Bytes); + await Assert.That(cloudEvents.Body.Bytes).IsEquivalentTo(body.Bytes); } [Test] @@ -213,7 +213,7 @@ public async Task When_unwrap_a_message_with_binary_format() await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); - await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); + await Assert.That(message.Body.Bytes).IsEquivalentTo(_message.Body.Bytes); } [Test] @@ -232,7 +232,7 @@ public async Task When_unwrap_a_message_with_binary_format_and_wrap_before() await Assert.That(message.Header.Type).IsEqualTo(CloudEventsType.Empty); await Assert.That(message.Header.DataSchema).IsEqualTo(_dataSchema); await Assert.That(message.Header.Subject).IsEqualTo(_subject); - await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); + await Assert.That(message.Body.Bytes).IsEquivalentTo(_message.Body.Bytes); } [Test] @@ -248,7 +248,7 @@ public async Task When_unwrap_a_message_with_json_format_and_provided_message_is await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); - await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); + await Assert.That(message.Body.Bytes).IsEquivalentTo(_message.Body.Bytes); } [Test] @@ -263,7 +263,7 @@ public async Task When_unwrap_a_message_with_json_format_and_provided_message_is await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); - await Assert.That(message.Body.Bytes).IsEqualTo(_message.Body.Bytes); + await Assert.That(message.Body.Bytes).IsEquivalentTo(_message.Body.Bytes); } [Test] @@ -280,7 +280,7 @@ public async Task When_unwrap_a_message_with_json_format_and_provided_message_ha await Assert.That(unwrap.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); await Assert.That(unwrap.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); await Assert.That(unwrap.Header.Subject).IsEqualTo(_message.Header.Subject); - await Assert.That(unwrap.Body.Bytes).IsEqualTo([]); + await Assert.That(unwrap.Body.Bytes).IsEquivalentTo(Array.Empty()); } [Test] @@ -297,7 +297,7 @@ public async Task When_unwrap_a_message_with_json_format() await Assert.That(unwrap.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Text.Plain)); await Assert.That(unwrap.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); await Assert.That(unwrap.Header.Subject).IsEqualTo(_message.Header.Subject); - await Assert.That(unwrap.Body.Bytes).IsEqualTo(body.Bytes); + await Assert.That(unwrap.Body.Bytes).IsEquivalentTo(body.Bytes); await Assert.That(unwrap.Header.Bag).HasSingleItem(); await Assert.That(unwrap.Header.Bag["test"]).IsEqualTo("test-header"); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs index 736d336eed..8d1edede2f 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Creating_Context_For_A_Handler_Async.cs @@ -7,9 +7,9 @@ namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline { public class PipelineForCommandAsyncTests { - private static PipelineBuilder _chainBuilder; - private static IHandleRequestsAsync _chainOfResponsibility; - private static RequestContext _requestContext; + private PipelineBuilder _chainBuilder; + private IHandleRequestsAsync _chainOfResponsibility; + private RequestContext _requestContext; private readonly IDictionary _receivedMessages = new Dictionary(); public PipelineForCommandAsyncTests() { diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs index 5a3b179e5d..9d6aa29aec 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers.cs @@ -7,14 +7,14 @@ namespace Paramore.Brighter.Core.Tests.CommandProcessors.Pipeline public class PipelineCleanupTests { private readonly PipelineBuilder _pipelineBuilder; - private static string s_released; + private string _released; public PipelineCleanupTests() { - s_released = string.Empty; + _released = string.Empty; var registry = new SubscriberRegistry(); registry.Register(); registry.Register>(); - var handlerFactory = new CheapHandlerFactorySync(); + var handlerFactory = new CheapHandlerFactorySync(this); _pipelineBuilder = new PipelineBuilder(registry, handlerFactory); _pipelineBuilder.Build(new MyCommand(), new RequestContext()).Any(); } @@ -25,10 +25,10 @@ public async Task When_We_Have_Exercised_The_Pipeline_Cleanup_Its_Handlers() _pipelineBuilder.Dispose(); await Assert.That(MyPreAndPostDecoratedHandler.DisposeWasCalled).IsTrue(); await Assert.That(MyLoggingHandler.DisposeWasCalled).IsTrue(); - await Assert.That(s_released).IsEqualTo("|MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|MyLoggingHandler`1"); + await Assert.That(_released).IsEqualTo("|MyValidationHandler`1|MyPreAndPostDecoratedHandler|MyLoggingHandler`1|MyLoggingHandler`1"); } - internal sealed class CheapHandlerFactorySync : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory + internal sealed class CheapHandlerFactorySync(PipelineCleanupTests owner) : Paramore.Brighter.IAmAHandlerFactorySync, Paramore.Brighter.IAmAHandlerFactory { public IHandleRequests Create(Type handlerType, IAmALifetime lifetime) { @@ -54,7 +54,7 @@ public void Release(IHandleRequests handler, IAmALifetime lifetime) { var disposable = handler as IDisposable; disposable?.Dispose(); - s_released += "|" + handler.Name; + owner._released += "|" + handler.Name; } } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandler.cs index 47a16cbd9b..48f68746da 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandler.cs @@ -44,7 +44,7 @@ public bool ShouldReceive(MyCommand expectedCommand) private void LogCommand(MyCommand request) { _command = request; - receivedMessages.Add(nameof(MyCommandHandler), request.Id); + receivedMessages[nameof(MyCommandHandler)] = request.Id; } } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandlerAsync.cs index d7853d2449..695e8d3b22 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyCommandHandlerAsync.cs @@ -22,7 +22,7 @@ public bool ShouldReceive(MyCommand expectedCommand) private void LogCommand(MyCommand request) { _command = request; - receivedMessages.Add(nameof(MyCommandHandlerAsync), request.Id); + receivedMessages[nameof(MyCommandHandlerAsync)] = request.Id; } } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandler.cs index 3bb7ae3057..6798815a7e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandler.cs @@ -30,7 +30,7 @@ internal sealed class MyEventHandler(IDictionary receivedMessage { public override MyEvent Handle(MyEvent myEvent) { - receivedMessages.Add(nameof(MyEventHandler), myEvent.Id); + receivedMessages[nameof(MyEventHandler)] = myEvent.Id; return base.Handle(myEvent); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandlerAsync.cs index ac5aa705c8..2b3ac37503 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyEventHandlerAsync.cs @@ -42,7 +42,7 @@ public override async Task HandleAsync(MyEvent command, CancellationTok if (cancellationToken.IsCancellationRequested) return command; - _receivedMessages.Add(nameof(MyEventHandlerAsync), command.Id); + _receivedMessages[nameof(MyEventHandlerAsync)] = command.Id; await Task.Delay(0, cancellationToken).ConfigureAwait(ContinueOnCapturedContext); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyGlobalnboxEventHandler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyGlobalnboxEventHandler.cs index 3c46d28e7c..0f4011c817 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyGlobalnboxEventHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyGlobalnboxEventHandler.cs @@ -37,7 +37,7 @@ public MyGlobalInboxEventHandler(IDictionary receivedMessages) public override MyEvent Handle(MyEvent myEvent) { - _receivedMessages.Add(nameof(MyEventHandler), myEvent.Id); + _receivedMessages[nameof(MyEventHandler)] = myEvent.Id; return base.Handle(myEvent); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandler.cs index 7096ed901a..561ab4e6b7 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandler.cs @@ -30,7 +30,7 @@ internal sealed class MyOtherEventHandler(IDictionary receivedMe { public override MyEvent Handle(MyEvent myEvent) { - receivedMessages.Add(nameof(MyOtherEventHandler), myEvent.Id); + receivedMessages[nameof(MyOtherEventHandler)] = myEvent.Id; return base.Handle(myEvent); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandlerAsync.cs index 6249c56756..a056188950 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyOtherEventHandlerAsync.cs @@ -42,7 +42,7 @@ public override async Task HandleAsync(MyEvent @event, CancellationToke if (cancellationToken.IsCancellationRequested) return @event; - _receivedMessages.Add(nameof(MyOtherEventHandlerAsync), @event.Id); + _receivedMessages[nameof(MyOtherEventHandlerAsync)] = @event.Id; await Task.Delay(0, cancellationToken).ConfigureAwait(ContinueOnCapturedContext); return await base.HandleAsync(@event, cancellationToken); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs index fec3db3b37..7e16ac29de 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_A_Request_Context_Is_Provided.cs @@ -9,6 +9,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.CommandProcessors; +[NotInParallel("ContextAware")] public class RequestContextPresentTests { private readonly SpyContextFactory _requestContextFactory; diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs index 7e185299d0..ce70e2f3d9 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs @@ -9,6 +9,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.CommandProcessors; +[NotInParallel("ContextAware")] public class RequestContextFromFactoryTests { private readonly SpyContextFactory _requestContextFactory; diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs index 6eeeb2ccf8..d5e584db74 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs @@ -31,7 +31,7 @@ public async Task When_a_message_gzip_compresses_a_large_payload() await Assert.That(BitConverter.ToUInt16(compressedMessage.Body.Bytes, 0)).IsEqualTo(GZIP_LEAD_BYTES); //mime types await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType("application/gzip")); - await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType("application/gzip")); } @@ -47,7 +47,7 @@ public async Task When_a_message_zlib_compresses_a_large_payload() await Assert.That(compressedMessage.Body.Bytes[0]).IsEqualTo(ZLIB_LEAD_BYTE); //mime types await Assert.That(compressedMessage.Header.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE)); - await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); + await Assert.That(compressedMessage.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER]).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }.ToString()); await Assert.That(compressedMessage.Body.ContentType).IsEqualTo(new ContentType(CompressPayloadTransformer.DEFLATE)); } diff --git a/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs b/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs index 5d18e0740f..36a800a320 100644 --- a/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/Context/When_Accessing_A_Request_Context.cs @@ -39,7 +39,7 @@ public async Task When_Accessing_A_Request_Context() context.Span = span; context.OriginatingMessage = message; //assert - await Assert.That("value").IsEqualTo(context.Bag["key"]); + await Assert.That(context.Bag["key"]).IsEqualTo("value"); await Assert.That(context.Policies["key"]).IsNotNull(); await Assert.That(context.Span?.Id).IsEqualTo(span?.Id); await Assert.That(context.OriginatingMessage).IsNotNull(); diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs index 75e0d18d4f..e920fd5711 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs @@ -11,6 +11,7 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { + [NotInParallel("ExceptionPolicy")] public class CommandProcessorWithCircuitBreakerTests { private readonly CommandProcessor _commandProcessor; diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs index 0cdf42650c..fa9bea6bde 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs @@ -10,6 +10,7 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { + [NotInParallel("ExceptionPolicy")] public class CommandProcessorWithRetryPolicyTests { private readonly CommandProcessor _commandProcessor; diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs index 485cf434b4..45b61144cf 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_Deserializing_A_Message_Header_Bag.cs @@ -74,7 +74,7 @@ public async Task When_deserializing_a_message_header_bag() { var expected = expectedBag[key]; var actual = deserializedHeader!.Bag[key]; - await Assert.That(actual).IsEquivalentTo(expected); + await Assert.That(actual?.ToString()).IsEqualTo(expected?.ToString()); } if (key == "myArrayKey") diff --git a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs index c42c07fab3..7e96651810 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageSerialisation/When_I_Am_Serialising_The_Payload.cs @@ -27,7 +27,7 @@ public async Task When_I_serialise_a_vanilla_payload_as_a_utf8_string() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); await Assert.That(serBody.Value).IsEqualTo(desBody.Value); } @@ -48,7 +48,7 @@ public async Task When_I_serialise_a_vanilla_payload_as_a_base64_string() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); await Assert.That(serBody.Value).IsEqualTo(desBody.ToCharacterEncodedString(CharacterEncoding.UTF8)); } @@ -68,7 +68,7 @@ public async Task When_I_serialise_a_raw_payload_as_binary() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); } [Test] @@ -89,7 +89,7 @@ public async Task When_I_serialise_a_raw_payload_as_a_base64_string() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); } [Test] @@ -110,7 +110,7 @@ public async Task When_I_try_to_serialise_a_raw_payload_as_a_string() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); } [Test] @@ -142,7 +142,7 @@ public async Task When_I_serialise_a_kafka_payload_as_binary() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Raw); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.Base64); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); await Assert.That(retrievedSchemaId).IsEqualTo(id); } @@ -173,7 +173,7 @@ public async Task When_I_serialise_a_utf8_kafka_payload_as_bytes() //assert await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); - await Assert.That(serBody.Bytes).IsEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsEquivalentTo(desBody.Bytes); await Assert.That(serBody.Value).IsEqualTo(desBody.Value); await Assert.That(retrievedSchemaId).IsEqualTo(id); } @@ -206,6 +206,6 @@ public async Task When_I_try_to_serialise_a_utf8_kafka_payload_as_a_utf8_string( await Assert.That(serBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); await Assert.That(desBody.CharacterEncoding).IsEqualTo(CharacterEncoding.UTF8); //Note the issue here, that the UTF conversion means that we do not get back the same bytes - await Assert.That(serBody.Bytes).IsNotEqualTo(desBody.Bytes); + await Assert.That(serBody.Bytes).IsNotEquivalentTo(desBody.Bytes); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs index 3ae8799961..7df8905481 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs @@ -14,6 +14,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.Archive; +[NotInParallel("Observability")] public class ExternalServiceBusArchiveObservabilityTests { private readonly List _exportedActivities = new(); @@ -57,6 +58,7 @@ public ExternalServiceBusArchiveObservabilityTests() [Arguments(InstrumentationOptions.All)] public async Task When_archiving_from_the_outbox(InstrumentationOptions instrumentationOptions) { + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var context = new RequestContext { diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs index 975930ae74..c6e3f49e55 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox_async.cs @@ -16,6 +16,7 @@ // ReSharper disable ExplicitCallerInfoArgument namespace Paramore.Brighter.Core.Tests.Observability.Archive; +[NotInParallel("Observability")] public class AsyncExternalServiceBusArchiveObservabilityTests { private readonly List _exportedActivities = new(); @@ -59,6 +60,7 @@ public AsyncExternalServiceBusArchiveObservabilityTests() [Arguments(InstrumentationOptions.All)] public async Task When_archiving_from_the_outbox(InstrumentationOptions instrumentationOptions) { + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var context = new RequestContext { diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs index 399969f116..1bfce59eb8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context.cs @@ -17,6 +17,7 @@ using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; +[NotInParallel("Observability")] public class MessageDispatchPropogateContextTests { private readonly List _exportedActivities = []; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs index a7788a662c..1fc4c188fb 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Clear/When_Clearing_A_Message_Should_Propogate_Context_Asyn.cs @@ -17,6 +17,7 @@ using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Clear; +[NotInParallel("Observability")] public class AsyncMessageDispatchPropogateContextTests { private readonly List _exportedActivities = []; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs index 5402200b56..ef564f16e2 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported.cs @@ -110,6 +110,7 @@ public async Task When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_Are_Exported() { //arrange + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var @event = new MyEvent(); var context = new RequestContext(); @@ -165,6 +166,7 @@ public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_S public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange + Activity.Current = null; var @event = new MyEvent(); var context = new RequestContext(); //act diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs index 2b6aee2f8c..3c61af925e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Publish/When_Publishing_A_Request_A_Span_Is_Exported_Asyn.cs @@ -14,6 +14,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.CommandProcessor.Publish; +[NotInParallel("Observability")] public class AsyncCommandProcessorPublishObservabilityTests { private readonly List _exportedActivities; @@ -112,6 +113,7 @@ public async Task When_Publishing_A_Request_With_Span_In_Context_Child_Spans_Are public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_Spans_Are_Exported() { //arrange + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var @event = new MyEvent(); var context = new RequestContext(); @@ -167,6 +169,7 @@ public async Task When_Publishing_A_Request_With_Span_In_ActivityCurrent_Child_S public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange + Activity.Current = null; var @event = new MyEvent(); var context = new RequestContext(); //act diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs index 4a97732064..d4e4337fe8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported.cs @@ -83,6 +83,7 @@ public async Task When_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Ex public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Span_Is_Exported() { //arrange + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var command = new MyCommand { @@ -114,6 +115,7 @@ public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Sp public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange + Activity.Current = null; var command = new MyCommand { Value = "My Test String" diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs index 69a634c4a7..695038f3c6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Send/When_Sending_A_Request_A_Span_Is_Exported_Async.cs @@ -89,6 +89,7 @@ public async Task When_Sending_A_Request_With_Span_In_Context_A_Child_Span_Is_Ex public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Span_Is_Exported() { //arrange + Activity.Current = null; var parentActivity = new ActivitySource("Paramore.Brighter.Tests").StartActivity("BrighterTracerSpanTests"); var command = new MyCommand { @@ -120,6 +121,7 @@ public async Task When_Sending_A_Request_With_Span_In_ActivityCurrent_A_Child_Sp public async Task When_Sending_A_Request_With_No_Context_Or_Span_In_ActivityCurrent_A_Root_Span_Is_Exported() { //arrange + Activity.Current = null; var command = new MyCommand { Value = "My Test String" diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs index 31c790a7b4..22bb41be3d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_Add_Brighter_Semantic_Conventions.cs @@ -8,6 +8,7 @@ using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; +[NotInParallel("Observability")] public class BrighterSemanticConventionsDbSpanTests { private const string DbStatement = "INSERT INTO outbox (id, topic, message_id, message_body, message_type, time_to_live, created_at_utc) VALUES (@id, @topic, @message_id, @message_body, @message_type, @time_to_live, @created_at_utc)"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs index b7c4bc6603..1cb784ff19 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Db_Span_With_Custom_Database_Name_Add_Brighter_Semantic_Conventions.cs @@ -8,6 +8,7 @@ using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; +[NotInParallel("Observability")] public class BrighterSemanticConventionsDbSpanWithCustomNameTests { private const string DbStatement = "INSERT INTO outbox (id, topic, message_id, message_body, message_type, time_to_live, created_at_utc) VALUES (@id, @topic, @message_id, @message_body, @message_type, @time_to_live, @created_at_utc)"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs index c10c68f4e0..fcf994c357 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Handler_Event_Add_Brighter_SemanticConventions.cs @@ -7,6 +7,7 @@ using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; +[NotInParallel("Observability")] public class BrighterSemanticConventionsEventTests { private readonly ICollection _exportedActivities; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs index 458518fee2..6b4bd308de 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Message_Mapper_Add_Brighter_Semantic_Conventions.cs @@ -10,6 +10,7 @@ using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; +[NotInParallel("Observability")] public class BrighterSemanticConventionsMessageMapperTests { private readonly ICollection _exportedActivities; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs index 3a297635c6..a3f99216b7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Common/When_Creating_A_Span_Add_Brighter_Semantic_Conventions.cs @@ -10,6 +10,7 @@ using Paramore.Brighter.Observability; namespace Paramore.Brighter.Core.Tests.Observability.Common; +[NotInParallel("Observability")] public class BrighterTracerSpanTests { private readonly ICollection _exportedActivities; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs index 841d06c14b..57a05c2381 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_A_Message_Is_Dispatched_It_Should_Begin_A_Span.cs @@ -38,6 +38,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch { + [NotInParallel("Observability")] public class MessagePumpDispatchObservabilityTests { private const string ChannelName = "myChannel"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs index 60ef4feca6..61f51a9051 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Are_No_Messages_Close_The_Span.cs @@ -12,6 +12,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; +[NotInParallel("Observability")] public class MessagePumpEmptyQueueOberservabilityTests { private const string Topic = "MyTopic"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs index 37af4000a4..83c2dfc09a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_BrokenCircuit_Channel_Failure_Close_The_Span.cs @@ -16,6 +16,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; +[NotInParallel("Observability")] public class MessagePumpBrokenCircuitChannelFailureOberservabilityTests { private const string ChannelName = "myChannel"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs index 6b1fcbb18a..de25bceddc 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Channel_Failure_Close_The_Span.cs @@ -16,6 +16,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; +[NotInParallel("Observability")] public class MessagePumpChannelFailureOberservabilityTests { private const string ChannelName = "myChannel"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs index 50bb6d17ed..9407df4ed3 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_A_Quit_Message_Close_The_Span.cs @@ -12,6 +12,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; +[NotInParallel("Observability")] public class MessagePumpQuitOberservabilityTests { private const string Topic = "MyTopic"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs index 3641849206..a49c918f2c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/MessageDispatch/When_There_Is_An_Unacceptable_Messages_Close_The_Span.cs @@ -12,6 +12,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Observability.MessageDispatch; +[NotInParallel("Observability")] public class MessagePumpUnacceptableMessageOberservabilityTests { private const string Topic = "MyTopic"; diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs b/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs index 580b18e936..65e5848d4a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/TraceState/When_Adding_TraceState.cs @@ -39,7 +39,7 @@ public async Task When_Enumerating_TraceState() //Act //Assert var entries = traceState.ToList(); - await Assert.That(entries).HasCount().EqualTo(2); + await Assert.That(entries).Count().IsEqualTo(2); await Assert.That(entries[0].Key).IsEqualTo("key1"); await Assert.That(entries[0].Value).IsEqualTo("value1"); await Assert.That(entries[1].Key).IsEqualTo("key2"); diff --git a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs index 7ba2cfcd98..bbaf422c01 100644 --- a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs @@ -22,11 +22,13 @@ public async Task AsyncContext_StaysOnSameThread() public async Task Run_AsyncVoid_BlocksUntilCompletion() { bool resumed = false; +#pragma warning disable TUnit0031 // Intentionally testing async void behavior in BrighterAsyncContext BrighterAsyncContext.Run((Action)(async () => { await Task.Yield(); resumed = true; })); +#pragma warning restore TUnit0031 await Assert.That(resumed).IsTrue(); } @@ -34,11 +36,13 @@ public async Task Run_AsyncVoid_BlocksUntilCompletion() public async Task Run_AsyncVoid_BlocksUntilCompletion_RunsContinuation() { bool resumed = false; +#pragma warning disable TUnit0031 // Intentionally testing async void behavior in BrighterAsyncContext BrighterAsyncContext.Run((Action)(async () => { await Task.Delay(50); resumed = true; })); +#pragma warning restore TUnit0031 await Assert.That(resumed).IsTrue(); } @@ -48,11 +52,13 @@ public async Task Run_FuncThatCallsAsyncVoid_BlocksUntilCompletion() bool resumed = false; var result = BrighterAsyncContext.Run((Func)(() => { +#pragma warning disable TUnit0031 // Intentionally testing async void behavior in BrighterAsyncContext Action asyncVoid = async () => { await Task.Yield(); resumed = true; }; +#pragma warning restore TUnit0031 asyncVoid(); return 13; })); diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs index c74f3f46b1..ec61d57173 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs @@ -7,6 +7,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorWaitStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs index 5c20582271..cd7c01688b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorChangeStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs index 3ea33317ec..1e9c82f2e7 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs @@ -7,6 +7,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorFailingChoiceFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs index 22ab3d3966..3f1941942f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorReplyMultiStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs index 4a3ec46e0e..48e1bcd2bc 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs @@ -7,6 +7,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorPassingChoiceFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs index e5d92b85d7..4d0f494ac8 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorOneStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs index 24f2a58f70..7dd2860604 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorTwoStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs index edc815c539..89f612dd1a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorParallelSplitFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs index c531e730fa..9cc21c4032 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs @@ -10,6 +10,7 @@ using MyEventHandlerAsync = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyEventHandlerAsync; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorReplyStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs index b6aec491a5..4b8c0d5e47 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorRobustReplyNoFaultStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs index b66e1bb210..ce019c4cff 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorRobustReplyFaultStepFlowTests { private readonly Scheduler _scheduler; diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs index eefcaa3cde..f0b8796c71 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs @@ -6,6 +6,7 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; +[NotInParallel("Workflows")] public class MediatorMultipleWorkflowFlowTests { private readonly Scheduler _scheduler; From 3ec53e2067d4ce2ea6ed83e9e71be153125cd512 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 16:02:05 +0100 Subject: [PATCH 03/14] Further Migrations --- global.json | 5 + src/Paramore.Brighter/Id.cs | 2 +- src/Paramore.Brighter/RoutingKey.cs | 2 +- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...n_infastructure_exists_can_assume_async.cs | 7 +- ..._infrastructure_exists_can_verify_async.cs | 7 +- ...tructure_exists_can_verify_by_arn_async.cs | 7 +- ...message_via_the_messaging_gateway_async.cs | 39 +-- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 29 +- ..._message_should_delete_from_queue_async.cs | 7 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 9 +- .../When_infastructure_exists_can_verify.cs | 7 +- ..._infastructure_exists_can_verify_by_arn.cs | 9 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ing_a_message_via_the_messaging_gateway.cs | 39 +-- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- .../When_raw_message_delivery_disabled.cs | 33 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- .../When_topic_missing_verify_throws.cs | 20 +- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...creating_a_topic_with_custom_tags_async.cs | 9 +- ...hen_customising_aws_client_config_async.cs | 15 +- ...n_infastructure_exists_can_assume_async.cs | 7 +- ..._infrastructure_exists_can_verify_async.cs | 7 +- ...tructure_exists_can_verify_by_arn_async.cs | 7 +- ...e_exists_can_verify_by_convention_async.cs | 7 +- ...ng_a_message_resources_are_tagged_async.cs | 11 +- ...message_via_the_messaging_gateway_async.cs | 33 +- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 23 +- ..._message_should_delete_from_queue_async.cs | 9 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_customising_aws_client_config.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 9 +- .../When_infastructure_exists_can_verify.cs | 7 +- ..._infastructure_exists_can_verify_by_arn.cs | 9 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ing_a_message_via_the_messaging_gateway.cs | 31 +- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- .../When_raw_message_delivery_disabled.cs | 25 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- .../Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- .../When_topic_missing_verify_throws.cs | 18 +- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...n_infastructure_exists_can_assume_async.cs | 9 +- ..._infrastructure_exists_can_verify_async.cs | 9 +- ...tructure_exists_can_verify_by_url_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 39 +-- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 31 +- ..._message_should_delete_from_queue_async.cs | 9 +- ...delivery_error_should_send_to_dlq_async.cs | 29 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 5 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 11 +- .../When_infastructure_exists_can_verify.cs | 9 +- ..._infastructure_exists_can_verify_by_url.cs | 9 +- ...ing_a_message_via_the_messaging_gateway.cs | 41 ++- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 31 +- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 11 +- .../When_topic_missing_verify_throws.cs | 15 +- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...hen_customising_aws_client_config_async.cs | 13 +- ..._infrastructure_exists_can_assume_async.cs | 9 +- ..._infrastructure_exists_can_verify_async.cs | 9 +- ...infrastructure_exists_can_verify_by_url.cs | 9 +- ...tructure_exists_can_verify_by_url_async.cs | 9 +- ...ng_a_message_resources_are_tagged_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 33 +- ...When_queues_missing_assume_throws_async.cs | 7 +- ...When_queues_missing_verify_throws_async.cs | 7 +- ..._message_should_delete_from_queue_async.cs | 9 +- ...delivery_error_should_send_to_dlq_async.cs | 27 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_customising_aws_client_config.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 11 +- .../When_infrastructure_exists_can_verify.cs | 9 +- ...ing_a_message_via_the_messaging_gateway.cs | 31 +- .../When_queue_missing_verify_throws.cs | 18 +- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 29 +- ...s_configured_should_acknowledge_and_log.cs | 11 +- ..._invalid_channel_should_fallback_to_dlq.cs | 29 +- ...e_reason_should_send_to_invalid_channel.cs | 31 +- .../Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...q_routing_keys_should_expose_properties.cs | 25 +- .../Paramore.Brighter.AWS.Tests.csproj | 23 +- ...reating_luggagestore_missing_parameters.cs | 41 ++- .../When_unwrapping_a_large_message.cs | 11 +- .../When_uploading_luggage_to_S3.cs | 9 +- .../When_validating_a_luggage_store_exists.cs | 17 +- .../When_wrapping_a_large_message.cs | 11 +- .../When_creating_sns_attributes_with_tags.cs | 45 ++- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...n_infastructure_exists_can_assume_async.cs | 7 +- ..._infrastructure_exists_can_verify_async.cs | 7 +- ...tructure_exists_can_verify_by_arn_async.cs | 7 +- ...message_via_the_messaging_gateway_async.cs | 39 +-- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 29 +- ..._message_should_delete_from_queue_async.cs | 7 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 9 +- .../When_infastructure_exists_can_verify.cs | 7 +- ..._infastructure_exists_can_verify_by_arn.cs | 9 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ing_a_message_via_the_messaging_gateway.cs | 39 +-- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- .../When_raw_message_delivery_disabled.cs | 33 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- .../When_topic_missing_verify_throws.cs | 20 +- ..._consumer_reads_multiple_messages_async.cs | 17 +- ...hen_customising_aws_client_config_async.cs | 15 +- ...n_infastructure_exists_can_assume_async.cs | 7 +- ..._infrastructure_exists_can_verify_async.cs | 7 +- ...tructure_exists_can_verify_by_arn_async.cs | 7 +- ...e_exists_can_verify_by_convention_async.cs | 7 +- ...message_via_the_messaging_gateway_async.cs | 37 +- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 23 +- ..._message_should_delete_from_queue_async.cs | 9 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 17 +- .../When_customising_aws_client_config.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 9 +- .../When_infastructure_exists_can_verify.cs | 7 +- ..._infastructure_exists_can_verify_by_arn.cs | 9 +- ...ructure_exists_can_verify_by_convention.cs | 7 +- ...ing_a_message_via_the_messaging_gateway.cs | 35 +- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- .../When_raw_message_delivery_disabled.cs | 25 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- .../Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- .../When_topic_missing_verify_throws.cs | 18 +- ..._consumer_reads_multiple_messages_async.cs | 13 +- ...n_infastructure_exists_can_assume_async.cs | 9 +- ..._infrastructure_exists_can_verify_async.cs | 9 +- ...tructure_exists_can_verify_by_url_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 39 +-- ...When_queues_missing_assume_throws_async.cs | 5 +- ...When_queues_missing_verify_throws_async.cs | 5 +- ...hen_raw_message_delivery_disabled_async.cs | 31 +- ..._message_should_delete_from_queue_async.cs | 9 +- ...delivery_error_should_send_to_dlq_async.cs | 29 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 5 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 11 +- .../When_infastructure_exists_can_verify.cs | 9 +- ..._infastructure_exists_can_verify_by_url.cs | 9 +- ...ing_a_message_via_the_messaging_gateway.cs | 41 ++- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 31 +- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 11 +- .../When_topic_missing_verify_throws.cs | 15 +- ..._consumer_reads_multiple_messages_async.cs | 17 +- ...hen_customising_aws_client_config_async.cs | 13 +- ...n_infastructure_exists_can_assume_async.cs | 9 +- ..._infastructure_exists_can_verify_by_url.cs | 9 +- ..._infrastructure_exists_can_verify_async.cs | 9 +- ...tructure_exists_can_verify_by_url_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 37 +- ...When_queues_missing_assume_throws_async.cs | 7 +- ...When_queues_missing_verify_throws_async.cs | 7 +- ..._message_should_delete_from_queue_async.cs | 9 +- ...delivery_error_should_send_to_dlq_async.cs | 27 +- .../When_requeueing_a_message_async.cs | 7 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 +- ...wing_defer_action_respect_redrive_async.cs | 9 +- .../When_topic_missing_verify_throws_async.cs | 7 +- ...essage_consumer_reads_multiple_messages.cs | 17 +- .../When_customising_aws_client_config.cs | 13 +- .../When_infastructure_exists_can_assume.cs | 11 +- .../When_infastructure_exists_can_verify.cs | 9 +- ...ing_a_message_via_the_messaging_gateway.cs | 35 +- .../When_queue_missing_verify_throws.cs | 18 +- .../When_queues_missing_assume_throws.cs | 9 +- .../When_queues_missing_verify_throws.cs | 9 +- ...ting_a_message_should_delete_from_queue.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 29 +- ...s_configured_should_acknowledge_and_log.cs | 11 +- ..._invalid_channel_should_fallback_to_dlq.cs | 29 +- ...e_reason_should_send_to_invalid_channel.cs | 31 +- .../Reactor/When_requeueing_a_message.cs | 9 +- .../When_requeueing_redrives_to_the_dlq.cs | 11 +- ...n_throwing_defer_action_respect_redrive.cs | 9 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...q_routing_keys_should_expose_properties.cs | 25 +- .../Paramore.Brighter.AWS.V4.Tests.csproj | 22 +- ...reating_luggagestore_missing_parameters.cs | 41 ++- .../When_unwrapping_a_large_message.cs | 11 +- .../When_uploading_luggage_to_S3.cs | 9 +- .../When_validating_a_luggage_store_exists.cs | 17 +- .../When_wrapping_a_large_message.cs | 11 +- ...aramore.Brighter.AWSScheduler.Tests.csproj | 23 +- .../Sns/When_Scheduling_A_Sns_Message.cs | 18 +- .../When_Scheduling_A_Sns_Message_Async.cs | 14 +- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 22 +- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 20 +- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 16 +- .../When_Scheduling_A_Sqs_Message_Async.cs | 14 +- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 22 +- ...g_A_Sqs_Message_Via_FireScheduler_Async.cs | 20 +- .../Sns/When_Scheduling_A_Sns_Request.cs | 116 +++---- .../When_Scheduling_A_Sns_Request_Async.cs | 114 +++--- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 114 +++--- .../When_Scheduling_A_Sqs_Request_Async.cs | 20 +- ...more.Brighter.AWSScheduler.V4.Tests.csproj | 25 +- .../Sns/When_Scheduling_A_Sns_Message.cs | 18 +- .../When_Scheduling_A_Sns_Message_Async.cs | 14 +- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 22 +- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 20 +- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 16 +- .../When_Scheduling_A_Sqs_Message_Async.cs | 14 +- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 22 +- ...g_A_Sqs_Message_Via_FireScheduler_Async.cs | 20 +- .../Sns/When_Scheduling_A_Sns_Request.cs | 116 +++---- .../When_Scheduling_A_Sns_Request_Async.cs | 114 +++--- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 114 +++--- .../When_Scheduling_A_Sqs_Request_Async.cs | 20 +- ...cationRequestTypeAssignmentAnalyzerTest.cs | 10 +- .../SubscriptionConstructorAnalyzerTest.cs | 8 +- .../Analyzers/WrapAttributeAnalyzerTest.cs | 4 +- .../Paramore.Brighter.Analyzer.Tests.csproj | 23 +- .../AzureBlobArchiveProviderTests.cs | 48 +-- .../AzureBlobLockingProviderTests.cs | 10 +- .../Paramore.Brighter.Azure.Tests.csproj | 43 +-- .../When_unwrapping_a_large_message.cs | 6 +- .../When_unwrapping_a_large_message_async.cs | 4 +- .../When_uploading_luggage_to_blob.cs | 8 +- .../When_uploading_luggage_to_blob_async.cs | 4 +- .../When_wrapping_a_large_message.cs | 12 +- .../When_wrapping_a_large_message_async.cs | 10 +- tests/Paramore.Brighter.Azure.Tests/Usings.cs | 2 +- .../AzureServiceBusChannelFactoryTests.cs | 25 +- ...ServiceBusBulkMessageProducerTestsAsync.cs | 87 +++-- .../AzureServiceBusConsumerTestsAsync.cs | 138 ++++---- ...zureServiceBusMessageProducerTestsAsync.cs | 111 +++--- .../Reactor/AzureServiceBusConsumerTests.cs | 158 +++++---- .../AzureServiceBusMessageProducerTests.cs | 136 ++++---- ...en_consuming_a_message_via_the_consumer.cs | 85 +++-- ...osting_a_large_message_via_the_producer.cs | 39 +-- ...When_posting_a_message_via_the_producer.cs | 69 ++-- ...more.Brighter.AzureServiceBus.Tests.csproj | 27 +- .../Inbox/InboxAsyncTest.cs | 36 +- .../Inbox/InboxTests.cs | 45 +-- .../Locking/DistributedLockingAsyncTest.cs | 43 +-- .../Outbox/OutboxAsyncTest.cs | 213 ++++++------ .../Outbox/OutboxTest.cs | 226 ++++++------ .../Paramore.Brighter.Base.Test.csproj | 28 +- ..._A_Table_Omit_Non_Key_Schema_Attributes.cs | 21 +- ...A_Table_From_A_Class_Missing_A_Hash_Key.cs | 8 +- ...le_From_A_Class_Missing_Table_Attribute.cs | 8 +- ...eating_A_Table_From_An_Attributed_Class.cs | 25 +- ..._Creating_A_Table_With_Admin_Attributes.cs | 15 +- ...ting_A_Table_With_Collection_Properties.cs | 17 +- ...Creating_A_Table_With_Custom_Properties.cs | 11 +- ...able_With_Multple_GSI_Indexes_Per_Field.cs | 11 +- .../When_Creating_A_Table_With_Projections.cs | 11 +- ...ing_A_Table_With_Provisioned_Throughput.cs | 13 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- .../Paramore.Brighter.DynamoDB.Tests.csproj | 48 +-- ..._A_Table_Omit_Non_Key_Schema_Attributes.cs | 21 +- ...A_Table_From_A_Class_Missing_A_Hash_Key.cs | 8 +- ...le_From_A_Class_Missing_Table_Attribute.cs | 8 +- ...eating_A_Table_From_An_Attributed_Class.cs | 27 +- ..._Creating_A_Table_With_Admin_Attributes.cs | 15 +- ...ting_A_Table_With_Collection_Properties.cs | 17 +- ...Creating_A_Table_With_Custom_Properties.cs | 11 +- ...able_With_Multple_GSI_Indexes_Per_Field.cs | 11 +- .../When_Creating_A_Table_With_Projections.cs | 11 +- ...ing_A_Table_With_Provisioned_Throughput.cs | 13 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...Paramore.Brighter.DynamoDB.V4.Tests.csproj | 22 +- ...AssemblyResolutionDefaultTransientTests.cs | 61 ++-- ...meScopedAndMapperLifetimeSingletonTests.cs | 67 ++-- ...emblyResolutionMissingDependenciesTests.cs | 11 +- .../CommandProcessorIsolationTests.cs | 23 +- .../CommandProcessorSingletonTests.cs | 79 +++-- ...spatcherResolutionScopedDependencyTests.cs | 15 +- .../FactoryErrorHandlingTests.cs | 27 +- .../FactoryLifetimeTests.cs | 73 ++-- .../FactoryThreadSafetyTests.cs | 19 +- .../LifetimeConfigurationTests.cs | 17 +- .../Paramore.Brighter.Extensions.Tests.csproj | 18 +- .../ServiceProviderLambdaTests.cs | 45 ++- .../TestDifferentSetups.cs | 33 +- .../TransformerFactoryTests.cs | 27 +- ...alidation_should_set_consumer_owns_flag.cs | 19 +- ...should_set_scheduler_on_channel_factory.cs | 21 +- ...ler_on_per_subscription_channel_factory.cs | 23 +- ...n_scheduler_channel_factory_should_work.cs | 9 +- ...uld_default_to_InMemorySchedulerFactory.cs | 25 +- ...itly_configured_should_override_default.cs | 29 +- ..._activator_has_warnings_should_log_them.cs | 15 +- ...onstructor_should_resolve_optional_deps.cs | 21 +- ...alidator_should_validate_before_receive.cs | 19 +- ...row_on_error_false_should_log_not_throw.cs | 29 +- ..._consumers_should_receive_subscriptions.cs | 15 +- ..._consumer_reads_multiple_messages_async.cs | 8 +- ...message_via_the_messaging_gateway_async.cs | 32 +- ...When_queues_missing_verify_throws_async.cs | 12 +- .../When_requeueing_a_message_async.cs | 8 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 10 +- ...essage_consumer_reads_multiple_messages.cs | 10 +- ...ing_a_message_via_the_messaging_gateway.cs | 34 +- .../When_queues_missing_verify_throws.cs | 10 +- .../Pull/Reactor/When_requeueing_a_message.cs | 10 +- .../When_requeueing_redrives_to_the_dlq.cs | 10 +- ..._consumer_reads_multiple_messages_async.cs | 8 +- ...message_via_the_messaging_gateway_async.cs | 32 +- ...When_queues_missing_verify_throws_async.cs | 12 +- .../When_requeueing_a_message_async.cs | 8 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 10 +- ...essage_consumer_reads_multiple_messages.cs | 10 +- ...ing_a_message_via_the_messaging_gateway.cs | 34 +- .../When_queues_missing_verify_throws.cs | 10 +- .../Reactor/When_requeueing_a_message.cs | 10 +- .../When_requeueing_redrives_to_the_dlq.cs | 12 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 18 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 58 ++-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 18 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 58 ++-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 22 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 22 +- ...Should_Return_The_Correct_Message_Async.cs | 60 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 18 +- ...clude_Dispatched_And_Undispatched_Async.cs | 24 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 38 +- ...ld_Return_Only_Requested_Messages_Async.cs | 24 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 38 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 11 +- ...It_Should_Be_Stored_With_All_Properties.cs | 51 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 11 +- ...action_It_Should_Be_Stored_After_Commit.cs | 51 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 15 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 15 +- ...Id_It_Should_Return_The_Correct_Message.cs | 53 ++- ..._Message_It_Should_Return_Empty_Message.cs | 11 +- ...uld_Include_Dispatched_And_Undispatched.cs | 17 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 31 +- ...t_Should_Return_Only_Requested_Messages.cs | 17 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 31 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 18 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 58 ++-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 18 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 58 ++-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 22 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 22 +- ...Should_Return_The_Correct_Message_Async.cs | 60 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 18 +- ...clude_Dispatched_And_Undispatched_Async.cs | 24 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 38 +- ...ld_Return_Only_Requested_Messages_Async.cs | 24 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 38 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 11 +- ...It_Should_Be_Stored_With_All_Properties.cs | 51 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 11 +- ...action_It_Should_Be_Stored_After_Commit.cs | 51 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 15 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 15 +- ...Id_It_Should_Return_The_Correct_Message.cs | 53 ++- ..._Message_It_Should_Return_Empty_Message.cs | 11 +- ...uld_Include_Dispatched_And_Undispatched.cs | 17 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 31 +- ...t_Should_Return_Only_Requested_Messages.cs | 17 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 31 +- .../Paramore.Brighter.Gcp.Tests.csproj | 34 +- .../Spanner/Inbox/SpannerInboxAsyncTest.cs | 4 +- .../Spanner/Inbox/SpannerInboxTest.cs | 4 +- ...reating_luggagestore_missing_parameters.cs | 38 +- .../When_unwrapping_a_large_message.cs | 8 +- .../When_uploading_luggage_to_S3.cs | 10 +- .../When_validating_a_luggage_store_exists.cs | 10 +- .../When_wrapping_a_large_message.cs | 12 +- .../Paramore.Brighter.Hangfire.Tests.csproj | 33 +- .../When_scheduling_a_message.cs | 122 +++---- .../When_scheduling_a_message_async.cs | 108 +++--- .../When_scheduling_a_request.cs | 328 +++++++++--------- .../When_scheduling_a_request_async.cs | 308 ++++++++-------- ...When_accessing_messages_on_an_empty_bus.cs | 7 +- ..._dequeing_messages_from_an_internal_bus.cs | 25 +- ..._enqueueing_messages_on_an_internal_bus.cs | 17 +- .../When_a_dequeued_item_is_acknowledged.cs | 15 +- ...n_a_dequeued_item_is_acknowledged_async.cs | 11 +- .../When_a_dequeued_item_is_rejected.cs | 9 +- .../When_a_dequeued_item_is_rejected_async.cs | 7 +- ...en_an_inmemory_channelfactory_is_called.cs | 9 +- ..._creating_an_inmemory_producer_registry.cs | 11 +- ..._should_dispose_lazily_created_producer.cs | 27 +- ...hould_requeue_via_scheduler_after_delay.cs | 35 +- ...figuration_exception_on_delayed_requeue.cs | 21 +- .../When_reading_messages_via_a_consumer.cs | 11 +- ...n_reading_messages_via_a_consumer_async.cs | 9 +- ...ng_a_message_with_a_dead_letter_channel.cs | 11 +- ...essage_with_a_dead_letter_channel_async.cs | 9 +- ..._a_message_it_should_be_available_again.cs | 19 +- ...sage_it_should_be_available_again_async.cs | 15 +- ..._with_delay_should_delegate_to_producer.cs | 15 +- ..._with_delay_should_delegate_to_producer.cs | 21 +- ...ero_delay_should_use_direct_bus_enqueue.cs | 25 +- .../Inbox/When_expiring_messages_in_inbox.cs | 15 +- .../Inbox/When_storing_items_in_inbox.cs | 51 ++- .../When_Retrieving_Messages_based_on_Age.cs | 23 +- .../Outbox/When_controlling_cache_size.cs | 25 +- .../Outbox/When_expiring_message_in_outbox.cs | 15 +- .../Outbox/When_storing_message_in_outbox.cs | 57 ++- .../Paramore.Brighter.InMemory.Tests.csproj | 44 +-- .../When_adding_messages_to_the_producer.cs | 11 +- ...heduler_configured_should_use_scheduler.cs | 15 +- ..._no_scheduler_should_use_timer_fallback.cs | 12 +- ...heduler_configured_should_use_scheduler.cs | 19 +- ...ould_send_immediately_without_scheduler.cs | 25 +- .../Scheduler/When_scheduling_a_message.cs | 175 +++++----- .../When_scheduling_a_message_async.cs | 173 +++++---- .../Scheduler/When_scheduling_a_request.cs | 327 +++++++++-------- .../When_scheduling_a_request_async.cs | 307 ++++++++-------- ...ting_id_should_atomically_replace_timer.cs | 27 +- .../Sweeper/When_sweeping_the_outbox.cs | 31 +- ...weeping_the_outbox_with_circuit_breaker.cs | 61 ++-- ...age_is_acknowledged_update_offset_async.cs | 30 +- ...f_messages_is_sent_preserve_order_async.cs | 26 +- ...onsumer_assumes_topic_but_missing_async.cs | 14 +- .../When_consumer_declares_topic_async.cs | 26 +- ...es_async_with_delay_should_use_producer.cs | 26 +- ..._message_it_should_be_redelivered_async.cs | 30 +- ...iting_next_acknowledge_sweep_them_async.cs | 22 +- .../Proactor/When_posting_a_message_async.cs | 34 +- ...sting_a_message_with_header_bytes_async.cs | 32 +- ...sage_without_partition_key_header_async.cs | 24 +- ...delivery_error_should_send_to_dlq_async.cs | 36 +- ...igured_should_acknowledge_and_log_async.cs | 26 +- ...id_channel_should_fallback_to_dlq_async.cs | 38 +- ...on_should_send_to_invalid_channel_async.cs | 38 +- ...unknown_reason_should_send_to_dlq_async.cs | 38 +- ...should_commit_uncommitted_offsets_async.cs | 22 +- ...a_message_is_acknowledged_update_offset.cs | 26 +- ..._set_of_messages_is_sent_preserve_order.cs | 24 +- ...g_offsets_during_revoke_should_not_race.cs | 30 +- ...When_consumer_assumes_topic_but_missing.cs | 18 +- .../Reactor/When_consumer_declares_topic.cs | 22 +- ...onverting_brighterheader_to_kafkaheader.cs | 49 ++- ...onverting_kafkaheader_to_brighterheader.cs | 39 +-- ...ake_channels_create_should_create_topic.cs | 36 +- ...isposes_should_dispose_requeue_producer.cs | 30 +- ...requeues_with_delay_should_use_producer.cs | 32 +- ...equeues_with_delay_should_use_scheduler.cs | 25 +- ...king_a_message_it_should_be_redelivered.cs | 30 +- ...ts_awaiting_next_acknowledge_sweep_them.cs | 22 +- .../Reactor/When_posting_a_message.cs | 66 ++-- ...hen_posting_a_message_with_header_bytes.cs | 32 +- ..._a_message_without_partition_key_header.cs | 24 +- ...jecting_message_should_include_metadata.cs | 64 ++-- ..._with_delivery_error_should_send_to_dlq.cs | 36 +- ...s_configured_should_acknowledge_and_log.cs | 26 +- ..._invalid_channel_should_fallback_to_dlq.cs | 38 +- ...e_reason_should_send_to_invalid_channel.cs | 38 +- ..._with_unknown_reason_should_send_to_dlq.cs | 38 +- ...evoked_partitions_offsets_are_committed.cs | 36 +- ...should_commit_uncommitted_offsets_async.cs | 24 +- .../When_using_a_consumer_config_hook.cs | 11 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...tter_routing_key_should_expose_property.cs | 9 +- ...sage_routing_key_should_expose_property.cs | 9 +- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._has_scheduler_should_pass_to_consumers.cs | 31 +- ..._creates_consumer_should_pass_scheduler.cs | 25 +- ...actory_scheduler_set_after_construction.cs | 21 +- ...message_without_offset_should_not_throw.cs | 19 +- .../Paramore.Brighter.Kafka.Tests.csproj | 46 +-- .../Helpers/Base/MqttTestClassBase.cs | 7 +- .../Helpers/Server/MqttTestServer.cs | 10 +- ...es_async_with_delay_should_use_producer.cs | 18 +- ...message_via_the_messaging_gateway_async.cs | 20 +- .../Proactor/When_queue_is_purged_async.cs | 20 +- ...delivery_error_should_send_to_dlq_async.cs | 26 +- ..._should_configure_and_dispose_correctly.cs | 33 +- ...requeues_with_delay_should_use_producer.cs | 20 +- ...iples_message_via_the_messaging_gateway.cs | 22 +- .../Reactor/When_queue_is_purged.cs | 24 +- ..._with_delivery_error_should_send_to_dlq.cs | 32 +- ..._channels_configured_should_return_true.cs | 14 +- ..._invalid_channel_should_fallback_to_dlq.cs | 20 +- ...e_reason_should_send_to_invalid_channel.cs | 22 +- ...tes_channel_should_use_consumer_factory.cs | 35 +- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._creates_consumer_should_pass_scheduler.cs | 25 +- ...actory_scheduler_set_after_construction.cs | 21 +- .../Paramore.Brighter.MQTT.Tests.csproj | 30 +- ...q_subscription_should_pass_routing_keys.cs | 23 +- ...q_routing_keys_should_expose_properties.cs | 25 +- .../When_a_message_is_sent.cs | 13 +- .../When_a_message_is_sent_async.cs | 11 +- .../When_a_message_is_sent_keep_order.cs | 25 +- ...When_a_message_is_sent_keep_order_async.cs | 23 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...q_routing_keys_should_expose_properties.cs | 25 +- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._has_scheduler_should_pass_to_consumers.cs | 31 +- ..._should_configure_and_dispose_correctly.cs | 29 +- ..._creates_consumer_should_pass_scheduler.cs | 25 +- ...actory_scheduler_set_after_construction.cs | 21 +- ...es_async_with_delay_should_use_producer.cs | 15 +- ...requeues_with_delay_should_use_producer.cs | 17 +- ...with_zero_delay_should_use_direct_queue.cs | 33 +- .../MessagingGateway/When_queue_is_purged.cs | 13 +- .../When_queue_is_purged_async.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 29 +- ...delivery_error_should_send_to_dlq_async.cs | 27 +- ..._channels_configured_should_log_warning.cs | 11 +- ..._invalid_channel_should_fallback_to_dlq.cs | 16 +- ...e_reason_should_send_to_invalid_channel.cs | 18 +- .../When_requeueing_a_message.cs | 11 +- .../When_requeueing_a_message_aync.cs | 9 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- .../Paramore.Brighter.MSSQL.Tests.csproj | 53 +-- ...tyFrameworkTransactionProviderAsyncTest.cs | 45 ++- ...bEntityFrameworkTransactionProviderTest.cs | 93 +++-- .../MongoDbLockingProviderTest.cs | 19 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- .../Paramore.Brighter.MongoDb.Tests.csproj | 27 +- .../When_unwrapping_a_large_message.cs | 11 +- .../When_unwrapping_a_large_message_async.cs | 9 +- .../When_validating_a_luggage_store_exists.cs | 13 +- ...validating_a_luggage_store_exists_async.cs | 11 +- .../When_wrapping_a_large_message.cs | 15 +- .../When_wrapping_a_large_message_async.cs | 13 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- .../Paramore.Brighter.MySQL.Tests.csproj | 50 +-- .../When_a_message_is_sent_keep_order.cs | 25 +- ...When_a_message_is_sent_keep_order_async.cs | 23 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...q_routing_keys_should_expose_properties.cs | 25 +- ...queues_with_delay_should_use_native_sql.cs | 15 +- .../MessagingGateway/When_queue_is_purged.cs | 13 +- .../When_queue_is_purged_async.cs | 11 +- ..._with_delivery_error_should_send_to_dlq.cs | 31 +- ...delivery_error_should_send_to_dlq_async.cs | 29 +- ...onfigured_should_delete_and_log_warning.cs | 13 +- ..._invalid_channel_should_fallback_to_dlq.cs | 15 +- ...e_reason_should_send_to_invalid_channel.cs | 17 +- .../When_requeueing_a_message.cs | 13 +- .../When_requeueing_a_message_aync.cs | 11 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...Paramore.Brighter.PostgresSQL.Tests.csproj | 51 +-- .../Paramore.Brighter.Quartz.Tests.csproj | 36 +- .../When_scheduling_a_message.cs | 116 +++---- .../When_scheduling_a_message_async.cs | 104 +++--- .../When_scheduling_a_request.cs | 324 ++++++++--------- .../When_scheduling_a_request_async.cs | 304 ++++++++-------- .../When_building_a_dispatcher.cs | 17 +- .../When_building_a_dispatcher_async.cs | 17 +- ...uilding_a_dispatcher_with_named_gateway.cs | 9 +- ...g_a_dispatcher_with_named_gateway_async.cs | 9 +- ...When_publishing_and_receiving_with_mtls.cs | 19 +- ...publishing_with_trace_context_over_mtls.cs | 77 ++-- .../When_using_mtls_with_quorum_queues.cs | 31 +- .../When_a_message_consumer_a_cloud_events.cs | 19 +- ..._consumer_reads_multiple_messages_async.cs | 11 +- ..._closed_exception_when_connecting_async.cs | 9 +- ...pported_exception_when_connecting_async.cs | 12 +- ...rrupted_exception_when_connecting_async.cs | 9 +- ...ding_a_channel_to_multiple_topics_async.cs | 15 +- ...essages_via_the_messaging_gateway_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 13 +- .../When_creating_quorum_queue_validation.cs | 33 +- ..._infrastructure_exists_can_assert_async.cs | 7 +- ...nfrastructure_exists_can_validate_async.cs | 7 +- ...o_post_a_message_at_the_same_time_async.cs | 7 +- ...g_a_message_but_no_broker_created_async.cs | 7 +- ...persist_via_the_messaging_gateway_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 41 ++- ..._via_the_messaging_gateway_quorum_async.cs | 41 ++- ...h_causes_a_message_to_be_rejected_async.cs | 9 +- ...message_via_the_messaging_gateway_async.cs | 33 +- ..._a_message_to_a_dead_letter_queue_async.cs | 11 +- ...ing_a_message_via_the_messaging_gateway.cs | 41 ++- ...When_resetting_a_connection_that_exists.cs | 9 +- ...mits_force_a_message_onto_the_DLQ_async.cs | 13 +- ..._should_use_message_topic_and_scheduler.cs | 25 +- ...nsumer_disposes_should_dispose_producer.cs | 26 +- ...ithout_native_delay_should_use_producer.cs | 16 +- ...ding_a_message_should_propagate_context.cs | 11 +- .../When_ttl_causes_a_message_to_expire.cs | 11 +- .../When_a_message_consumer_a_cloud_events.cs | 23 +- ...essage_consumer_reads_multiple_messages.cs | 15 +- ...lready_closed_exception_when_connecting.cs | 13 +- ...not_supported_exception_when_connecting.cs | 16 +- ...n_interrupted_exception_when_connecting.cs | 13 +- ...en_binding_a_channel_to_multiple_topics.cs | 19 +- ...iple_messages_via_the_messaging_gateway.cs | 11 +- ...ing_a_message_via_the_messaging_gateway.cs | 15 +- .../When_infrastructure_exists_can_assert.cs | 11 +- ...When_infrastructure_exists_can_validate.cs | 11 +- ..._try_to_post_a_message_at_the_same_time.cs | 11 +- ...posting_a_message_but_no_broker_created.cs | 11 +- ...ge_to_persist_via_the_messaging_gateway.cs | 13 +- ...ing_a_message_via_the_messaging_gateway.cs | 45 ++- ...essage_via_the_messaging_gateway_quorum.cs | 45 ++- ..._length_causes_a_message_to_be_rejected.cs | 13 +- ...layed_message_via_the_messaging_gateway.cs | 39 +-- ...ecting_a_message_to_a_dead_letter_queue.cs | 17 +- ...ing_a_message_via_the_messaging_gateway.cs | 45 ++- ...etting_a_connection_that_does_not_exist.cs | 11 +- ...try_limits_force_a_message_onto_the_DLQ.cs | 11 +- ...ithout_native_delay_should_use_producer.cs | 20 +- ...ding_a_message_should_propagate_context.cs | 15 +- .../MessagingGateway/TestHelpers.cs | 5 +- .../When_configuring_mutual_tls_connection.cs | 71 ++-- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._has_scheduler_should_pass_to_consumers.cs | 31 +- ..._creates_consumer_should_pass_scheduler.cs | 25 +- ...actory_scheduler_set_after_construction.cs | 21 +- .../Paramore.Brighter.RMQ.Async.Tests.csproj | 48 +-- .../When_building_a_dispatcher.cs | 17 +- ...uilding_a_dispatcher_with_named_gateway.cs | 9 +- ...When_publishing_and_receiving_with_mtls.cs | 27 +- ...publishing_with_trace_context_over_mtls.cs | 89 +++-- .../When_using_mtls_with_quorum_queues.cs | 37 +- .../RabbitMQMtlsTestCollection.cs | 21 +- ...essage_consumer_reads_multiple_messages.cs | 15 +- ...lready_closed_exception_when_connecting.cs | 13 +- ...not_supported_exception_when_connecting.cs | 15 +- ...n_interrupted_exception_when_connecting.cs | 13 +- ...en_binding_a_channel_to_multiple_topics.cs | 19 +- ...ing_a_message_via_the_messaging_gateway.cs | 15 +- .../When_infrastructure_exists_can_assert.cs | 13 +- ...When_infrastructure_exists_can_validate.cs | 13 +- ..._try_to_post_a_message_at_the_same_time.cs | 11 +- ...posting_a_message_but_no_broker_created.cs | 13 +- ...ge_to_persist_via_the_messaging_gateway.cs | 13 +- ...ing_a_message_via_the_messaging_gateway.cs | 45 ++- ..._length_causes_a_message_to_be_rejected.cs | 13 +- ...layed_message_via_the_messaging_gateway.cs | 39 +-- ...ecting_a_message_to_a_dead_letter_queue.cs | 17 +- ...ing_a_message_via_the_messaging_gateway.cs | 45 ++- ...etting_a_connection_that_does_not_exist.cs | 11 +- ...try_limits_force_a_message_onto_the_DLQ.cs | 11 +- ...ithout_native_delay_should_use_producer.cs | 36 +- ...ding_a_message_should_propagate_context.cs | 15 +- .../When_configuring_mutual_tls_connection.cs | 71 ++-- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._has_scheduler_should_pass_to_consumers.cs | 23 +- ..._creates_consumer_should_pass_scheduler.cs | 17 +- ...actory_scheduler_set_after_construction.cs | 21 +- .../Paramore.Brighter.RMQ.Sync.Tests.csproj | 22 +- ...ion_when_connecting_to_the_server_async.cs | 13 +- ...ption_when_connecting_to_the_pool_async.cs | 13 +- ...message_via_the_messaging_gateway_async.cs | 14 +- ...essages_via_the_messaging_gateway_async.cs | 16 +- ...delivery_error_should_send_to_dlq_async.cs | 29 +- .../When_requeing_a_failed_message_async.cs | 16 +- ...exception_when_connecting_to_the_server.cs | 15 +- ...t_exception_when_connecting_to_the_pool.cs | 15 +- ...ing_a_message_via_the_messaging_gateway.cs | 48 +-- ...iple_messages_via_the_messaging_gateway.cs | 18 +- ..._with_delivery_error_should_send_to_dlq.cs | 31 +- ..._configured_should_remove_from_inflight.cs | 15 +- ..._invalid_channel_should_fallback_to_dlq.cs | 18 +- ...e_reason_should_send_to_invalid_channel.cs | 20 +- .../Reactor/When_requeing_a_failed_message.cs | 18 +- ...q_subscription_should_pass_routing_keys.cs | 19 +- ...q_routing_keys_should_expose_properties.cs | 25 +- ...ng_client_configuration_via_the_gateway.cs | 35 +- ...arsing_a_good_redis_message_to_brighter.cs | 43 ++- ...factory_forwards_scheduler_to_consumers.cs | 13 +- ..._has_scheduler_should_pass_to_consumers.cs | 31 +- ..._should_configure_and_dispose_correctly.cs | 36 +- ..._creates_consumer_should_pass_scheduler.cs | 25 +- ...actory_scheduler_set_after_construction.cs | 21 +- ...es_async_with_delay_should_use_producer.cs | 17 +- ...requeues_with_delay_should_use_producer.cs | 19 +- ..._with_zero_delay_should_use_direct_list.cs | 23 +- .../Paramore.Brighter.Redis.Tests.csproj | 39 +-- .../When_building_a_dispatcher.cs | 19 +- .../When_building_a_dispatcher_async.cs | 15 +- ...uilding_a_dispatcher_with_named_gateway.cs | 9 +- ...a_message_consumer_a_cloud_events_async.cs | 19 +- ..._consumer_reads_multiple_messages_async.cs | 11 +- ...message_via_the_messaging_gateway_async.cs | 31 +- ...delivery_error_should_send_to_dlq_async.cs | 27 +- .../When_requeueing_a_message_async.cs | 9 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 11 +- .../When_a_message_consumer_a_cloud_events.cs | 21 +- ...essage_consumer_reads_multiple_messages.cs | 13 +- ...ing_a_message_via_the_messaging_gateway.cs | 33 +- ..._with_delivery_error_should_send_to_dlq.cs | 29 +- ...s_configured_should_ack_and_log_warning.cs | 13 +- ..._invalid_channel_should_fallback_to_dlq.cs | 20 +- ...e_reason_should_send_to_invalid_channel.cs | 22 +- .../Reactor/When_requeueing_a_message.cs | 11 +- .../When_requeueing_redrives_to_the_dlq.cs | 13 +- ...q_subscription_should_pass_routing_keys.cs | 25 +- ...q_routing_keys_should_expose_properties.cs | 25 +- .../Paramore.Brighter.RocketMQ.Tests.csproj | 35 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- ...icate_Message_It_Should_Not_Throw_Async.cs | 16 +- ...uld_Be_Stored_With_All_Properties_Async.cs | 56 +-- ..._Rollback_It_Should_Not_Be_Stored_Async.cs | 16 +- ..._It_Should_Be_Stored_After_Commit_Async.cs | 56 +-- ...hey_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ..._It_Should_Be_Removed_From_Outbox_Async.cs | 20 +- ...Should_Return_The_Correct_Message_Async.cs | 58 ++-- ...ge_It_Should_Return_Empty_Message_Async.cs | 16 +- ...clude_Dispatched_And_Undispatched_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...ld_Return_Only_Requested_Messages_Async.cs | 22 +- ..._Messages_It_Should_Filter_By_Age_Async.cs | 36 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 9 +- ...It_Should_Be_Stored_With_All_Properties.cs | 49 ++- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 9 +- ...action_It_Should_Be_Stored_After_Commit.cs | 49 ++- ...ages_They_Should_Be_Removed_From_Outbox.cs | 13 +- ...essage_It_Should_Be_Removed_From_Outbox.cs | 13 +- ...Id_It_Should_Return_The_Correct_Message.cs | 51 ++- ..._Message_It_Should_Return_Empty_Message.cs | 9 +- ...uld_Include_Dispatched_And_Undispatched.cs | 15 +- ...atched_Messages_It_Should_Filter_By_Age.cs | 29 +- ...t_Should_Return_Only_Requested_Messages.cs | 15 +- ...anding_Messages_It_Should_Filter_By_Age.cs | 29 +- .../Paramore.Brighter.Sqlite.Tests.csproj | 56 ++- ..._generator_with_logger_should_not_throw.cs | 9 +- ..._outboxes_should_complete_without_error.cs | 5 +- ...out_transaction_support_should_complete.cs | 5 +- ...le_outbox_should_complete_without_error.cs | 5 +- ...x_configuration_should_log_and_complete.cs | 5 +- ...missing_prefix_should_use_key_as_prefix.cs | 7 +- ...ssage_factory_should_use_parent_factory.cs | 7 +- ...g_namespace_should_use_parent_namespace.cs | 7 +- ...amore.Brighter.Test.Generator.Tests.csproj | 40 +-- ...ltiple_features_should_render_correctly.cs | 17 +- ...simple_template_should_render_correctly.cs | 7 +- ...ith_conditional_should_render_correctly.cs | 7 +- ...th_empty_collection_should_render_empty.cs | 7 +- ...h_false_conditional_should_skip_content.cs | 7 +- ...ate_with_filters_should_apply_correctly.cs | 7 +- ...plate_with_loop_should_render_correctly.cs | 11 +- ...x_configuration_should_render_correctly.cs | 9 +- ..._generator_with_logger_should_not_throw.cs | 9 +- ...stom_message_factory_should_preserve_it.cs | 7 +- ...h_no_message_factory_should_use_default.cs | 7 +- .../Paramore.Brighter.Testing.Tests.csproj | 22 +- ...alled_should_record_async_command_types.cs | 22 +- ...hen_call_count_returns_invocation_count.cs | 26 +- ...n_call_invoked_records_and_returns_null.cs | 36 +- ...en_clear_outbox_moves_requests_to_queue.cs | 36 +- ...ost_called_tracks_in_deposited_requests.cs | 36 +- ...t_calls_returns_matching_recorded_calls.cs | 40 +-- ..._get_requests_returns_matching_requests.cs | 38 +- ...d_called_should_capture_request_details.cs | 30 +- ...When_observe_dequeues_requests_in_order.cs | 31 +- .../When_reset_clears_all_state.cs | 51 ++- ...cheduled_methods_record_scheduler_types.cs | 114 +++--- ...nd_is_called_should_record_command_type.cs | 14 +- ...lass_overrides_executes_custom_behavior.cs | 42 ++- ...ion_provider_overloads_record_correctly.cs | 88 +++-- ...en_was_called_checks_for_invoked_method.cs | 20 +- .../Paramore.Brighter.TickerQ.Tests.csproj | 24 +- .../When_scheduling_a_message.cs | 117 +++---- .../When_scheduling_a_message_async.cs | 109 +++--- .../When_scheduling_a_request.cs | 327 ++++++++--------- .../When_scheduling_a_request_async.cs | 307 ++++++++-------- .../JustSaying/JustSayingMessageMapperTest.cs | 203 ++++++----- .../JustSaying/JustSayingTransformTest.cs | 79 +++-- .../MassTransitMessageMapperTest.cs | 53 ++- .../MassTransit/MassTransitTransformTest.cs | 117 ++++--- ....Brighter.Transforms.Adaptors.Tests.csproj | 45 +-- .../Base/ITestClassBase.cs | 16 +- .../Base/TestClassBase.cs | 48 +-- .../Paramore.Test.Helpers.csproj | 19 +- .../TestOutput/CoreTestOutputHelper.cs | 15 +- .../TestOutput/ICoreTestOutputHelper.cs | 10 +- 1086 files changed, 13900 insertions(+), 15086 deletions(-) create mode 100644 global.json diff --git a/global.json b/global.json new file mode 100644 index 0000000000..3140116df3 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "test": { + "runner": "Microsoft.Testing.Platform" + } +} diff --git a/src/Paramore.Brighter/Id.cs b/src/Paramore.Brighter/Id.cs index 521229ce3f..4a9e46bd66 100644 --- a/src/Paramore.Brighter/Id.cs +++ b/src/Paramore.Brighter/Id.cs @@ -92,7 +92,7 @@ public static bool IsNullOrEmpty([NotNullWhen(false)] Id? id) /// /// The to convert. /// The value of the identifier. - public static implicit operator string(Id id) => id.Value; + public static implicit operator string(Id id) => id?.Value!; /// /// Implicitly converts a string to an Id. diff --git a/src/Paramore.Brighter/RoutingKey.cs b/src/Paramore.Brighter/RoutingKey.cs index 74095c7e68..d5c61a49f9 100644 --- a/src/Paramore.Brighter/RoutingKey.cs +++ b/src/Paramore.Brighter/RoutingKey.cs @@ -92,7 +92,7 @@ public override string ToString() /// The result of the conversion. public static implicit operator string(RoutingKey rhs) { - return rhs.ToString(); + return rhs?.ToString()!; } /// diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index d7e7bd9022..71c71bd4da 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -59,7 +58,7 @@ public SqsBufferedConsumerTestsAsync() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_topicName); @@ -121,10 +120,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -138,7 +137,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() await Task.Delay(1000); } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index 631db07251..42949438e5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,7 +64,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -75,7 +74,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 9dd1659119..23860e0f7a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -81,7 +80,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 88efb6bceb..19987a4d1c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -74,7 +73,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -84,7 +83,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 97e94fafad..d429fa1d47 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public SqsMessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -87,26 +86,26 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 630c07f4f1..605cc7baad 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -51,7 +50,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index 25099f5f78..929f6a1e3e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,7 +43,7 @@ public AwsValidateQueuesTestsAsync() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index c559589bbf..70c7344c2f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -48,7 +47,7 @@ public SqsRawMessageDeliveryTestsAsync() }); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -76,18 +75,18 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSend.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSend.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index f3e7d21b1d..d3d0ec5417 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -62,7 +61,7 @@ public SqsMessageConsumerRejectTestsAsync() }); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -75,7 +74,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs index c516305d2b..6c9a3bff08 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -63,7 +62,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -74,7 +73,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index d6ae720c1f..6336c628f1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -10,12 +10,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -73,7 +72,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -89,7 +88,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index c836c905a3..09c5c8c186 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -128,7 +127,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "Failing async tests caused by task scheduler issues")] + [Test, Skip("Failing async tests caused by task scheduler issues")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -144,7 +143,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); var dlqCount = await GetDLQCountAsync(_dlqChannelName + ".fifo"); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs index d3bafd27aa..69e010bb65 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,7 +21,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 19e68cf488..2f7394bf18 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -63,7 +62,7 @@ public SqsBufferedConsumerTests() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_topicName); @@ -128,10 +127,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -146,7 +145,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 57b5a45b1f..c35496206b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -81,8 +80,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -91,7 +90,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index b12f15f2b1..86d1aa86b9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -78,7 +77,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -90,7 +89,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index c465a6d068..6c2e36b3ee 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("CI", "Fragile")] +[Category("AWS")] +[Property("CI", "Fragile")] public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,7 +78,7 @@ public AwsValidateInfrastructureByArnTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -91,7 +90,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index e47ccf65da..886e22146f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -78,7 +77,7 @@ public AwsValidateInfrastructureByConventionTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -90,7 +89,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index 0a09863dba..a68968b9e4 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { _messageProducer.Send(_message); @@ -82,7 +81,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); _consumer.Acknowledge(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index d1c3df252e..72db9aae71 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -76,7 +75,7 @@ public SqsMessageProducerSendTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer() { //arrange @@ -91,26 +90,26 @@ public async Task When_posting_a_message_via_the_producer() _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs index b7525578f3..58cf4633cf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -54,11 +53,11 @@ public AwsAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs index 44115e6047..3cd04856ce 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,13 +43,13 @@ public AwsValidateQueuesTests() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index 410f5a437d..c83e551887 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -51,8 +50,8 @@ public SqsRawMessageDeliveryTests() }); } - [Fact] - public void When_raw_message_delivery_disabled() + [Test] + public async Task When_raw_message_delivery_disabled() { //arrange var messageGroupId = $"MessageGroupId{Guid.NewGuid():N}"; @@ -79,19 +78,19 @@ public void When_raw_message_delivery_disabled() _channel.Acknowledge(messageReceived); //assert - Assert.Equal(messageToSent.Id, messageReceived.Id); - Assert.Equal(messageToSent.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSent.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSent.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSent.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSent.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSent.Body.Value, messageReceived.Body.Value); - - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSent.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSent.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSent.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSent.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSent.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSent.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); + + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index bcf44df4ca..4e57ca29c2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -64,8 +63,8 @@ public SqsMessageConsumerRejectTests() }); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -77,7 +76,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs index a6d7951941..a8b0b93949 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -62,8 +61,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -74,7 +73,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 91746f1868..933a042ecc 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -77,8 +76,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -94,7 +93,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 5fbcef0856..9feba70eef 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -11,13 +11,12 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -140,7 +139,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -160,7 +159,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs index 5df84731b3..7ec67b2a11 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -21,8 +20,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { //arrange var producer = new SnsMessageProducer(_awsConnection, @@ -35,9 +34,12 @@ public void When_topic_missing_verify_throws() var messageGroupId = $"MessageGroup{Guid.NewGuid():N}"; //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, - type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, + type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index f7041d127c..c3f3652d8b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -51,7 +50,7 @@ public SqsBufferedConsumerTestsAsync() new SnsPublication { MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_topicName); @@ -97,10 +96,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -115,7 +114,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs index 5a1cafba9d..31dcbd6061 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs @@ -10,11 +10,10 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerCreateTopicWithTagsAsyncTests : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -64,7 +63,7 @@ public SqsMessageProducerCreateTopicWithTagsAsyncTests() }); } - [Fact] + [Test] public async Task When_creating_a_topic_with_custom_tags_async() { //arrange @@ -77,8 +76,8 @@ public async Task When_creating_a_topic_with_custom_tags_async() new ListTagsForResourceRequest { ResourceArn = topicArn }); //assert - Assert.Contains(tagsResponse.Tags, t => t.Key == "Source" && t.Value == "Brighter"); - Assert.Contains(tagsResponse.Tags, t => t.Key == "Environment" && t.Value == "Test"); + await Assert.That(tagsResponse.Tags).Contains(t => t.Key == "Source" && t.Value == "Brighter"); + await Assert.That(tagsResponse.Tags).Contains(t => t.Key == "Environment" && t.Value == "Test"); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs index f5e616ea86..d884398eba 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public CustomisingAwsClientConfigTestsAsync() ); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -78,15 +77,15 @@ public async Task When_customising_aws_client_config() var message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //clear the queue - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await _channel.AcknowledgeAsync(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); - Assert.Contains("async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index 1dde7e9866..cfe7c150ba 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -68,7 +67,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -78,7 +77,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 3213747301..888d3621d7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor { - [Trait("Category", "AWS")] + [Category("AWS")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -79,7 +78,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 2ff22482e1..4956871ad1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -75,7 +74,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -85,7 +84,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index 8f75a4f3b6..1d948cf066 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -79,7 +78,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index a071c847be..5de051477c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -10,11 +10,10 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -70,7 +69,7 @@ public SqsMessageProducerResourcesAreTaggedAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_resources_are_tagged_async() { //arrange @@ -89,11 +88,11 @@ public async Task When_posting_a_message_resources_are_tagged_async() new ListQueueTagsRequest { QueueUrl = queueUrlResponse.QueueUrl }); //assert - topic has Environment=Test tag - Assert.Contains(topicTagsResponse.Tags, t => t.Key == "Environment" && t.Value == "Test"); + await Assert.That(topicTagsResponse.Tags).Contains(t => t.Key == "Environment" && t.Value == "Test"); //assert - queue has Environment=Test tag - Assert.True(queueTagsResponse.Tags.ContainsKey("Environment")); - Assert.Equal("Test", queueTagsResponse.Tags["Environment"]); + await Assert.That(queueTagsResponse.Tags.ContainsKey("Environment")).IsTrue(); + await Assert.That(queueTagsResponse.Tags["Environment"]).IsEqualTo("Test"); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 8b937341b1..0b842e5478 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -64,7 +63,7 @@ public SqsMessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -79,22 +78,22 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 46e1d89348..d1efe96783 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -51,7 +50,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs index 0390163238..3bbc530bae 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,7 +43,7 @@ public AwsValidateQueuesTestsAsync() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs index fab7c0236c..b5a5d19693 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -49,7 +48,7 @@ public SqsRawMessageDeliveryTestsAsync() }); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -74,15 +73,15 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic, messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSend.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSend.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 55570033eb..8b01b23ac3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -56,7 +55,7 @@ public SqsMessageConsumerRejectTestsAsync() _messageProducer = new SnsMessageProducer(awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -69,7 +68,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs index 0d0070b61e..500b929d64 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -59,7 +58,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -70,7 +69,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index c26dcb8b68..fd55cea346 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -10,13 +10,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -67,7 +66,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -83,7 +82,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 9498d534bc..aae802dc26 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -13,12 +13,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -126,7 +125,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "Failing async tests caused by task scheduler issues")] + [Test, Skip("Failing async tests caused by task scheduler issues")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -142,7 +141,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs index 51495125c1..e182eced42 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,7 +21,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 868817ad84..415d447ee5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -55,7 +54,7 @@ public SqsBufferedConsumerTests() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_topicName); @@ -102,10 +101,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -121,7 +120,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index 1d9e282fbc..2f2417de89 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,7 +62,7 @@ public CustomisingAwsClientConfigTests() MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -77,11 +76,11 @@ public async Task When_customising_aws_client_config() _channel.Acknowledge(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sync_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sync_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sync_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_sub"]) > (0)).IsTrue(); - Assert.Contains("sync_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sync_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index 72304c61a9..585031f8f9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,8 +64,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -75,7 +74,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index 180f2fb00b..6ab6dfa324 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -83,7 +82,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index eb01114833..1ab0851eea 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,7 +78,7 @@ public AwsValidateInfrastructureByArnTests() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -91,8 +90,8 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 69c3669b13..915565a8ac 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureByConventionTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -81,7 +80,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 1ae3276b2d..6f16d099b3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -62,7 +61,7 @@ public SqsMessageProducerSendTests() new SnsPublication{Topic = new RoutingKey(_topicName), MakeChannels = OnMissingChannel.Create}); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer() { //arrange @@ -77,22 +76,22 @@ public async Task When_posting_a_message_via_the_producer() _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs index ca98234a85..fa94a286d5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -51,11 +50,11 @@ public AwsAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs index 8793261de3..0a676a05b7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -45,13 +44,13 @@ public AwsValidateQueuesTests() } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index 043a6650da..d6abe95b43 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -48,8 +47,8 @@ public SqsRawMessageDeliveryTests() }); } - [Fact] - public void When_raw_message_delivery_disabled() + [Test] + public async Task When_raw_message_delivery_disabled() { //arrange var messageHeader = new MessageHeader( @@ -73,15 +72,15 @@ public void When_raw_message_delivery_disabled() _channel.Acknowledge(messageReceived); //assert - Assert.Equal(messageToSent.Id, messageReceived.Id); - Assert.Equal(messageToSent.Header.Topic, messageReceived.Header.Topic); - Assert.Equal(messageToSent.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSent.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSent.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSent.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSent.Body.Value, messageReceived.Body.Value); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSent.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSent.Header.Topic); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSent.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSent.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSent.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSent.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index d917a0e962..27cf3bba7a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -8,12 +8,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -58,8 +57,8 @@ public SqsMessageConsumerRejectTests() _messageProducer = new SnsMessageProducer(awsConnection, new SnsPublication{MakeChannels = OnMissingChannel.Create}); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -71,7 +70,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs index 32764d9ec3..f36326efbc 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -61,8 +60,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -73,7 +72,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage ); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index d60073bb71..b4975cf48a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -10,13 +10,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -67,8 +66,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -84,7 +83,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 45d5998bf9..ab81b746ee 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -13,12 +13,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -139,7 +138,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -159,7 +158,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs index cefa94068d..0e1920fd45 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -21,8 +20,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { //arrange var producer = new SnsMessageProducer(_awsConnection, @@ -32,8 +31,11 @@ public void When_topic_missing_verify_throws() }); //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index c82cd1b508..6775d6cc23 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -58,7 +57,7 @@ public SqsBufferedConsumerTestsAsync() new SqsPublication(channelName: channelName, queueAttributes: queueAttributes, makeChannels: OnMissingChannel.Create)); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_queueName); @@ -120,10 +119,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -137,7 +136,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() await Task.Delay(1000); } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index 3d5fdab046..c3bf8efffa 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -81,7 +80,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 5e910cf263..e21f17587c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -77,7 +76,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 12f883ebf6..ae1b566134 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -82,7 +81,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 0ba4f344e5..5d22ecaaaf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public SqsMessageProducerSendAsyncTests() new SqsPublication(channelName: channelName, queueAttributes: queueAttributes, makeChannels: OnMissingChannel.Create)); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -87,26 +86,26 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index d2a10185e7..f5653e7ca2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -39,7 +38,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index ce80e26df5..60de2a9244 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -34,7 +33,7 @@ public AwsValidateQueuesTestsAsync() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 1fa31a414b..0b79fc3fd9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SqsMessageProducer _messageProducer; @@ -55,7 +54,7 @@ public SqsRawMessageDeliveryTestsAsync() ); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -83,18 +82,18 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.StartsWith(messageToSend.Header.ContentType?.ToString(), messageReceived.Header.ContentType?.ToString()); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType?.ToString()).StartsWith(messageToSend.Header.ContentType?.ToString()); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 06bd88cead..a6d81aff6b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,7 +62,7 @@ public SqsMessageConsumerRejectTestsAsync() ); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -76,7 +75,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs index 9a78e07c24..cbd1b279a3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -107,7 +106,7 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync() _dlqChannel = _dlqChannelFactory.CreateAsyncChannel(dlqSubscription); } - [Fact] + [Test] public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async() { //Arrange @@ -121,24 +120,24 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to //Assert - message should appear on DLQ var dlqMessage = await _dlqChannel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify FIFO attributes are preserved on DLQ message - Assert.Equal(_messageGroupId, dlqMessage.Header.PartitionKey); + await Assert.That(dlqMessage.Header.PartitionKey).IsEqualTo(_messageGroupId); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs index e41357e9f4..37e30e7b1d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -61,7 +60,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -72,7 +71,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 7cb781618d..6069ac6090 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -69,7 +68,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -85,7 +84,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName.ToValidSQSQueueName(true)); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index c76d8a0288..1a0d6e205f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -127,7 +126,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "This test is skipped because running tests of the DLQ is unreliable in the CI environment")] + [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -143,7 +142,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); var dlqCount = await GetDLQCountAsync(_dlqChannelName + ".fifo"); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs index 67ff91a4be..9d9acf6bce 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs @@ -3,12 +3,11 @@ using Amazon.SQS.Model; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -25,7 +24,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_queue_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 920a9cc001..d992fc493d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -62,7 +61,7 @@ public SqsBufferedConsumerTests() )); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_queueName); @@ -127,10 +126,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -145,7 +144,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index ad14259cf7..cd392e1be5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,8 +68,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -79,7 +78,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index ac6d2bbdbf..e5fe51631b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -74,7 +73,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -86,7 +85,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index 6c69d9cb6d..7df7d5f03a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -81,7 +80,7 @@ public AwsValidateInfrastructureByUrlTests () _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -93,7 +92,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index dfd107352d..d64539d287 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -71,8 +70,8 @@ public SqsMessageProducerSendAsyncTests() ); } - [Fact] - public void When_posting_a_message_via_the_producer() + [Test] + public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; @@ -86,26 +85,26 @@ public void When_posting_a_message_via_the_producer() _channel.Acknowledge(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs index 56c4d7fc9d..5fdb4a6d50 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -40,11 +39,11 @@ public AWSAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs index 7113cd218a..26e0ab6039 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTests : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -37,13 +36,13 @@ public AWSValidateQueuesTests() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { // We have no queues so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateAsyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannel(_subscription)).ThrowsExactly(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index d27d62e842..c5a83c2f94 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -59,8 +58,8 @@ public SqsMessageConsumerRejectTests() ); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -72,7 +71,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index 1984144559..a069176751 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -107,8 +106,8 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -121,24 +120,24 @@ public void When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() //Assert - message should appear on DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify FIFO attributes are preserved on DLQ message - Assert.Equal(_messageGroupId, dlqMessage.Header.PartitionKey); + await Assert.That(dlqMessage.Header.PartitionKey).IsEqualTo(_messageGroupId); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs index 0b14c11b17..0d91e22043 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -63,8 +62,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -74,7 +73,7 @@ public void When_requeueing_a_message() _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index e0f95e877a..464c337b24 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -71,8 +70,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -88,7 +87,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 3804fbe7be..829cb9f2eb 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -126,8 +125,8 @@ public int GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "This test is skipped because running tests of the DLQ is unreliable in the CI environment")] - public void When_throwing_defer_action_respect_redrive_async() + [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] + public async Task When_throwing_defer_action_respect_redrive_async() { _sender.Send(_message); @@ -142,7 +141,7 @@ public void When_throwing_defer_action_respect_redrive_async() Task.Delay(5000).GetAwaiter().GetResult(); var dlqCount = GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs index e18511000f..a462f5c8d3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Collections.Generic; using Amazon.SQS.Model; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -23,8 +22,8 @@ public AWSValidateMissingTopicTests() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] - public void When_channel_missing_verify_throws() + [Test] + public async Task When_channel_missing_verify_throws() { // arrange var producer = new SqsMessageProducer( @@ -39,10 +38,12 @@ public void When_channel_missing_verify_throws() var messageGroupId = $"MessageGroup{Guid.NewGuid():N}"; // act & assert - Assert.Throws(() => + Assert.ThrowsExactly(() => + { producer.Send(new Message( new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), - new MessageBody("Test")))); + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 8a538e1cc6..84f52dbc11 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SQSBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -53,7 +52,7 @@ public SQSBufferedConsumerTestsAsync() ); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_queueName); @@ -99,10 +98,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -117,7 +116,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs index 8ae5d61eb0..2c3c9a7d10 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,7 +64,7 @@ public CustomisingAwsClientConfigTestsAsync() ); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -79,11 +78,11 @@ public async Task When_customising_aws_client_config() await _channel.AcknowledgeAsync(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sqs_async_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_async_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_async_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_sub"]) > (0)).IsTrue(); - Assert.Contains("sqs_async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs index 32ddae4f3a..d1df4eb884 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public AWSAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -77,7 +76,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 03acba2f5d..b9c1ca741a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor { - [Trait("Category", "AWS")] - [Trait("Fragile", "CI")] + [Category("AWS")] + [Property("Fragile", "CI")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -64,7 +63,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -74,7 +73,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs index b32e0faabf..aa629030f4 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -76,7 +75,7 @@ public AWSValidateInfrastructureByUrlTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -88,7 +87,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 4973c64b2d..18c211436f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -77,7 +76,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -87,7 +86,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index fa323d48f0..70e09e4825 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -8,11 +8,10 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable, IDisposable { private readonly SqsMessageProducer _messageProducer; @@ -59,7 +58,7 @@ public SqsMessageProducerResourcesAreTaggedAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_resources_are_tagged_async() { // arrange @@ -72,8 +71,8 @@ public async Task When_posting_a_message_resources_are_tagged_async() new ListQueueTagsRequest { QueueUrl = queueUrlResponse.QueueUrl }); // assert - queue has Environment=Test tag - Assert.True(queueTagsResponse.Tags.ContainsKey("Environment")); - Assert.Equal("Test", queueTagsResponse.Tags["Environment"]); + await Assert.That(queueTagsResponse.Tags.ContainsKey("Environment")).IsTrue(); + await Assert.That(queueTagsResponse.Tags["Environment"]).IsEqualTo("Test"); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 3d562dad76..9337ec1586 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -62,7 +61,7 @@ public SqsMessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -77,22 +76,22 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 30ee9ccda7..9e67bf8ecb 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -46,11 +45,11 @@ public AWSAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist - await Assert.ThrowsAsync(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs index 13ca375e79..2c6e774b35 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -31,13 +30,13 @@ public AWSValidateQueuesTestsAsync() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_subscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_subscription)).ThrowsExactly(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index cac38d8505..a880d79bca 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -60,7 +59,7 @@ public SqsMessageConsumerRejectTestsAsync() ); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -73,7 +72,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 786e400dd5..e04433c2d5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -96,7 +95,7 @@ public SqsMessageConsumerDeliveryErrorDlqTestsAsync() _dlqChannel = _dlqChannelFactory.CreateAsyncChannel(dlqSubscription); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { //Arrange @@ -110,21 +109,21 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ //Assert - message should appear on DLQ var dlqMessage = await _dlqChannel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs index 98781fa72d..d9be83dd34 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -54,7 +53,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -65,7 +64,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 8491371c90..c953c2c62b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -65,7 +64,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -81,7 +80,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 33898b0bc0..caed08e869 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -125,7 +124,7 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "DLQ is fragile on async tests")] + [Test, Skip("DLQ is fragile on async tests")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -141,7 +140,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqQueueName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs index 2b4ad9eeb2..11e1d6e6c7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Threading.Tasks; using Amazon.SQS.Model; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -24,7 +23,7 @@ public AWSValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 49ff050640..35f7397169 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SQSBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -53,7 +52,7 @@ public SQSBufferedConsumerTests() new SqsPublication(channelName: channelName, makeChannels: OnMissingChannel.Create)); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_queueName); @@ -100,10 +99,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -119,7 +118,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index 396a5cffa2..3bb2ad7247 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -60,7 +59,7 @@ public CustomisingAwsClientConfigTests() new SqsPublication { ChannelName = channelName, MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -74,11 +73,11 @@ public async Task When_customising_aws_client_config() _channel.Acknowledge(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sqs_sync_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_sync_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_sync_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_sub"]) > (0)).IsTrue(); - Assert.Contains("sqs_sync_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_sync_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index 7fb816dae3..87def3965d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -68,8 +67,8 @@ public AWSAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -78,7 +77,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs index bd65975469..a41ee6beaa 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -73,7 +72,7 @@ public AWSValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -85,7 +84,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index e59958e576..8d79c326fb 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,7 +62,7 @@ public SqsMessageProducerSendTests() ); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer() { //arrange @@ -78,22 +77,22 @@ public async Task When_posting_a_message_via_the_producer() _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs index 41e5ad966a..080177f41c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs @@ -1,12 +1,11 @@ -using System; +using System; using Amazon.SQS.Model; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,8 +21,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_queue_missing_verify_throws() + [Test] + public async Task When_queue_missing_verify_throws() { //arrange var producer = new SqsMessageProducer( @@ -31,8 +30,11 @@ public void When_queue_missing_verify_throws() new SqsPublication(channelName: new ChannelName(_routingKey), makeChannels: OnMissingChannel.Validate)); //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs index 1f6ac50789..e312825932 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -36,11 +35,11 @@ public AWSAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs index 22298a15e9..edef7d30fe 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -31,13 +30,13 @@ public AWSValidateQueuesTests() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 8787d2a256..4e9bc07b78 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -61,8 +60,8 @@ public SqsMessageConsumerRejectTests() ); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -74,7 +73,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index deb6f28168..250d7f379e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerDeliveryErrorDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -96,8 +95,8 @@ public SqsMessageConsumerDeliveryErrorDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -110,21 +109,21 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() //Assert - message should appear on DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index d3aaa2ab63..91cdfa49a5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerNoChannelsRejectTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,8 +78,8 @@ public SqsMessageConsumerNoChannelsRejectTests() new SqsPublication(channelName: channelName, makeChannels: OnMissingChannel.Create)); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() { //Arrange _messageProducer.Send(_message); @@ -91,7 +90,7 @@ public void When_rejecting_message_with_no_channels_configured_should_acknowledg //Assert - original message should be deleted (acknowledged) since there is no DLQ var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 2af0f741a9..b9c9f51ae0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -97,8 +96,8 @@ public SqsMessageConsumerUnacceptableFallbackToDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -111,21 +110,21 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou //Assert - message should fall back to the DLQ since no invalid message queue is configured var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 7ab61b8ac9..56ca3b23e0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerUnacceptableInvalidChannelTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -114,8 +113,8 @@ public SqsMessageConsumerUnacceptableInvalidChannelTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange _messageProducer.Send(_message); @@ -128,25 +127,25 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval //Assert - message should appear on the invalid message queue var invalidMessage = _invalidChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(invalidMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, invalidMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(invalidMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), invalidMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(invalidMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(invalidMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), invalidMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify message did NOT go to the DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs index 441eebc13d..9e5e73552c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -63,8 +62,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -75,7 +74,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index 2bc57911a5..08cb106085 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -10,12 +10,11 @@ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -69,8 +68,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -86,7 +85,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 207c9a994b..4ce1918694 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -139,7 +138,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -159,7 +158,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs index aab7f9aaa2..7a3b1301ea 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -27,7 +27,6 @@ THE SOFTWARE. */ using Amazon.Runtime; using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs; @@ -45,8 +44,8 @@ public SqsMessageConsumerFactoryDlqTests() _factory = new SqsMessageConsumerFactory(connection); } - [Fact] - public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -64,7 +63,7 @@ public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -72,17 +71,17 @@ public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs index f3d71de9ab..af568e4970 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -23,14 +23,13 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs; public class SqsSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -46,17 +45,17 @@ public void When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_p ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_sqs_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_sqs_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new SqsSubscription( @@ -66,12 +65,12 @@ public void When_creating_sqs_subscription_without_dlq_routing_keys_should_defau ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj b/tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj index 7ea80ae547..5e3c4e8c97 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj +++ b/tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj @@ -1,30 +1,15 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - @@ -32,9 +17,7 @@ - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs index 55f7825494..fea60f7010 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.AWS.Tests.Helpers; using Paramore.Brighter.Transformers.AWS; -using Xunit; namespace Paramore.Brighter.AWS.Tests.Transformers; @@ -23,39 +22,39 @@ public S3LuggageUploadMissingParametersTests() _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; } - [Fact] - public void When_creating_luggagestore_missing_client() + [Test] + public async Task When_creating_luggagestore_missing_client() { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(null!, null!))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Theory] - [InlineData("")] - [InlineData(null)] - public void When_creating_luggagestore_missing_bucketName(string? bucketName) + [Test] + [Arguments("")] + [Arguments(null)] + public async Task When_creating_luggagestore_missing_bucketName(string? bucketName) { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(GatewayFactory.CreateS3Connection(), bucketName!))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_bad_bucketName() { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(GatewayFactory.CreateS3Connection(), "A" ))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_missing_httpClient() { //arrange @@ -65,11 +64,11 @@ public async Task When_creating_luggagestore_missing_httpClient() await store.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_missing_ACL() { //arrange @@ -83,7 +82,7 @@ public async Task When_creating_luggagestore_missing_ACL() await store.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs index 3d58d01085..6d5b44cb4e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -11,12 +11,11 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.AWS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.AWS.Tests.Transformers; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class LargeMessagePaylodUnwrapTests : IAsyncDisposable { private readonly TransformPipelineBuilderAsync _pipelineBuilder; @@ -58,7 +57,7 @@ public LargeMessagePaylodUnwrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message() { //arrange @@ -97,8 +96,8 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False((await _luggageStore.HasClaimAsync(id))); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That((await _luggageStore.HasClaimAsync(id))).IsFalse(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_uploading_luggage_to_S3.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_uploading_luggage_to_S3.cs index 5ae9a9f24a..073379125e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_uploading_luggage_to_S3.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_uploading_luggage_to_S3.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Net; using System.Net.Http; @@ -11,7 +11,6 @@ using Polly; using Polly.Contrib.WaitAndRetry; using Polly.Retry; -using Xunit; using Policy = Polly.Policy; namespace Paramore.Brighter.AWS.Tests.Transformers; @@ -30,7 +29,7 @@ public S3LuggageUploadTests() _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; } - [Fact] + [Test] public async Task When_uploading_luggage_to_S3() { //arrange @@ -58,12 +57,12 @@ public async Task When_uploading_luggage_to_S3() //assert //do we have a claim? - Assert.True((await luggageStore.HasClaimAsync(claim))); + await Assert.That((await luggageStore.HasClaimAsync(claim))).IsTrue(); //check for the contents indicated by the claim id on S3 var result = await luggageStore.RetrieveAsync(claim); var resultAsString = await new StreamReader(result).ReadToEndAsync(); - Assert.Equal(testContent, resultAsString); + await Assert.That(resultAsString).IsEqualTo(testContent); await luggageStore.DeleteAsync(claim); diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_validating_a_luggage_store_exists.cs index 3b71382985..7663bc7aa9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_validating_a_luggage_store_exists.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Amazon.S3; @@ -8,12 +8,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS; using Paramore.Brighter.Transformers.AWS; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.AWS.Tests.Transformers; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class S3LuggageStoreExistsTests { private readonly IHttpClientFactory _httpClientFactory; @@ -27,7 +26,7 @@ public S3LuggageStoreExistsTests() _httpClientFactory = provider.GetRequiredService(); } - [Fact] + [Test] public async Task When_checking_store_that_exists() { var bucketName = $"brightertestbucket-{Guid.NewGuid()}"; @@ -55,7 +54,7 @@ public async Task When_checking_store_that_exists() Tags = [new Tag { Key = "BrighterTests", Value = "S3LuggageUploadTests" }], }); - Assert.NotNull(luggageStore); + await Assert.That(luggageStore).IsNotNull(); //teardown var factory = new AWSClientFactory(GatewayFactory.CreateFactory()); @@ -63,7 +62,7 @@ public async Task When_checking_store_that_exists() await client.DeleteBucketAsync(bucketName); } - [Fact] + [Test] public async Task When_checking_store_that_does_not_exist() { //act @@ -82,7 +81,7 @@ public async Task When_checking_store_that_does_not_exist() await luggageStore.EnsureStoreExistsAsync(); }); - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs index 48616fa4a3..9cc070b234 100644 --- a/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/Transformers/When_wrapping_a_large_message.cs @@ -10,7 +10,6 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.AWS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.AWS.Tests.Transformers; @@ -66,7 +65,7 @@ public LargeMessagePayloadWrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, transformerFactoryAsync, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_wrapping_a_large_message() { //act @@ -74,12 +73,12 @@ public async Task When_wrapping_a_large_message() var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.True(await _luggageStore.HasClaimAsync(_id)); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/When_creating_sns_attributes_with_tags.cs b/tests/Paramore.Brighter.AWS.Tests/When_creating_sns_attributes_with_tags.cs index c807142089..b5f8703c72 100644 --- a/tests/Paramore.Brighter.AWS.Tests/When_creating_sns_attributes_with_tags.cs +++ b/tests/Paramore.Brighter.AWS.Tests/When_creating_sns_attributes_with_tags.cs @@ -1,14 +1,13 @@ using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; using Paramore.Brighter.MessagingGateway.AWSSQS; -using Xunit; namespace Paramore.Brighter.AWS.Tests; public class When_creating_sns_attributes_with_tags { - [Fact] - public void When_tags_provided_should_store_them() + [Test] + public async Task When_tags_provided_should_store_them() { //arrange var tags = new List { new() { Key = "Environment", Value = "Test" } }; @@ -17,36 +16,36 @@ public void When_tags_provided_should_store_them() var snsAttributes = new SnsAttributes(tags: tags); //assert - Assert.NotNull(snsAttributes.Tags); - Assert.Single(snsAttributes.Tags); - Assert.Equal("Environment", snsAttributes.Tags[0].Key); - Assert.Equal("Test", snsAttributes.Tags[0].Value); + await Assert.That(snsAttributes.Tags).IsNotNull(); + await Assert.That(snsAttributes.Tags).HasSingleItem(); + await Assert.That(snsAttributes.Tags[0].Key).IsEqualTo("Environment"); + await Assert.That(snsAttributes.Tags[0].Value).IsEqualTo("Test"); } - [Fact] - public void When_no_tags_provided_should_be_empty() + [Test] + public async Task When_no_tags_provided_should_be_empty() { //act var snsAttributes = new SnsAttributes(); //assert - Assert.NotNull(snsAttributes.Tags); - Assert.Empty(snsAttributes.Tags); + await Assert.That(snsAttributes.Tags).IsNotNull(); + await Assert.That(snsAttributes.Tags).IsEmpty(); } - [Fact] - public void When_empty_should_have_empty_tags() + [Test] + public async Task When_empty_should_have_empty_tags() { //act var snsAttributes = SnsAttributes.Empty; //assert - Assert.NotNull(snsAttributes.Tags); - Assert.Empty(snsAttributes.Tags); + await Assert.That(snsAttributes.Tags).IsNotNull(); + await Assert.That(snsAttributes.Tags).IsEmpty(); } - [Fact] - public void When_tags_provided_should_not_affect_other_parameters() + [Test] + public async Task When_tags_provided_should_not_affect_other_parameters() { //arrange var tags = new List { new() { Key = "Environment", Value = "Test" } }; @@ -63,11 +62,11 @@ public void When_tags_provided_should_not_affect_other_parameters() ); //assert - Assert.Equal(deliveryPolicy, snsAttributes.DeliveryPolicy); - Assert.Equal(policy, snsAttributes.Policy); - Assert.Equal(SqsType.Fifo, snsAttributes.Type); - Assert.False(snsAttributes.ContentBasedDeduplication); - Assert.NotNull(snsAttributes.Tags); - Assert.Single(snsAttributes.Tags); + await Assert.That(snsAttributes.DeliveryPolicy).IsEqualTo(deliveryPolicy); + await Assert.That(snsAttributes.Policy).IsEqualTo(policy); + await Assert.That(snsAttributes.Type).IsEqualTo(SqsType.Fifo); + await Assert.That(snsAttributes.ContentBasedDeduplication).IsFalse(); + await Assert.That(snsAttributes.Tags).IsNotNull(); + await Assert.That(snsAttributes.Tags).HasSingleItem(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 01d6c06be6..c64b1054d5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -59,7 +58,7 @@ public SqsBufferedConsumerTestsAsync() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_topicName); @@ -121,10 +120,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -138,7 +137,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() await Task.Delay(1000); } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index 1c85ad66e4..db5a45439b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,7 +64,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -75,7 +74,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index cc7579b106..f30b428799 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -81,7 +80,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index b288e02e7a..f2f040531c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -74,7 +73,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -84,7 +83,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 609634fcf1..6925ef1ffe 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public SqsMessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -87,26 +86,26 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 75b22b2f3d..a40be11b6c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -51,7 +50,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index d74896366b..8928ad135f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,7 +43,7 @@ public AwsValidateQueuesTestsAsync() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 3899575aaa..1ff9733567 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -48,7 +47,7 @@ public SqsRawMessageDeliveryTestsAsync() }); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -76,18 +75,18 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSend.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSend.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index f87d92cd8c..502bfa0b67 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -62,7 +61,7 @@ public SqsMessageConsumerRejectTestsAsync() }); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -75,7 +74,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs index c6b69a5536..075f8f0d8a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -63,7 +62,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -74,7 +73,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index fe3055058b..d1e35406ba 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -10,12 +10,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -73,7 +72,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -89,7 +88,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 462edc1afc..65fb5a2478 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -128,7 +127,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "Failing async tests caused by task scheduler issues")] + [Test, Skip("Failing async tests caused by task scheduler issues")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -144,7 +143,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); var dlqCount = await GetDLQCountAsync(_dlqChannelName + ".fifo"); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs index 5689410af7..f9e8656908 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,7 +21,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index dab990d887..26912ede2c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -63,7 +62,7 @@ public SqsBufferedConsumerTests() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_topicName); @@ -128,10 +127,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -146,7 +145,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 501045ca21..41f4c4f71f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -81,8 +80,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -91,7 +90,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index d9687ad4d6..647d588e1c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -78,7 +77,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -90,7 +89,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 3890f9d9b7..f79bdb6198 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("CI", "Fragile")] +[Category("AWS")] +[Property("CI", "Fragile")] public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,7 +78,7 @@ public AwsValidateInfrastructureByArnTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -91,7 +90,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 97c7881e53..acd8fad750 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -78,7 +77,7 @@ public AwsValidateInfrastructureByConventionTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -90,7 +89,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index 8687631e40..3e62a4154b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { _messageProducer.Send(_message); @@ -82,7 +81,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); _consumer.Acknowledge(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 9e5dba4e24..84b240ac96 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -76,7 +75,7 @@ public SqsMessageProducerSendTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer() { //arrange @@ -91,26 +90,26 @@ public async Task When_posting_a_message_via_the_producer() _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs index bb9ad8bd9d..c1fd3192b0 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -54,11 +53,11 @@ public AwsAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs index 97f6561b0a..38281311fb 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,13 +43,13 @@ public AwsValidateQueuesTests() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index 34f0156b24..ad00255d7e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -51,8 +50,8 @@ public SqsRawMessageDeliveryTests() }); } - [Fact] - public void When_raw_message_delivery_disabled() + [Test] + public async Task When_raw_message_delivery_disabled() { //arrange var messageGroupId = $"MessageGroupId{Guid.NewGuid():N}"; @@ -79,19 +78,19 @@ public void When_raw_message_delivery_disabled() _channel.Acknowledge(messageReceived); //assert - Assert.Equal(messageToSent.Id, messageReceived.Id); - Assert.Equal(messageToSent.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSent.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSent.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSent.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSent.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSent.Body.Value, messageReceived.Body.Value); - - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSent.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSent.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSent.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSent.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSent.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSent.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); + + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 97289301e2..0b90d8e168 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -64,8 +63,8 @@ public SqsMessageConsumerRejectTests() }); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -77,7 +76,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs index 1f0a6d8759..0309f4f149 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -62,8 +61,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -74,7 +73,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index fdf5f77873..c07e2ed89b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -77,8 +76,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -94,7 +93,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index abd438e537..27decf2046 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -11,13 +11,12 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -140,7 +139,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -160,7 +159,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs index dc98c208c4..6d9bf9fb36 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_topic_missing_verify_throws.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -21,8 +20,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { //arrange var producer = new SnsMessageProducer(_awsConnection, @@ -35,9 +34,12 @@ public void When_topic_missing_verify_throws() var messageGroupId = $"MessageGroup{Guid.NewGuid():N}"; //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, - type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, + type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index eb7874b0d0..c8860712d0 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -51,9 +50,9 @@ public SqsBufferedConsumerTestsAsync() new SnsPublication { MakeChannels = OnMissingChannel.Create }); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_a_message_consumer_reads_multiple_messages_async(bool fairQueue) { var partitionOne = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; @@ -101,10 +100,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async(bool fai //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -119,7 +118,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async(bool fai } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs index 8063220d2c..b58efbb07b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public CustomisingAwsClientConfigTestsAsync() ); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -78,15 +77,15 @@ public async Task When_customising_aws_client_config() var message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //clear the queue - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await _channel.AcknowledgeAsync(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); - Assert.Contains("async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index 1eef276308..127c428d47 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -68,7 +67,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -78,7 +77,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 54c1b2ab2e..3f05f1ab9d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor { - [Trait("Category", "AWS")] + [Category("AWS")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -79,7 +78,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 3bca81d33d..8ab349c099 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -75,7 +74,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -85,7 +84,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index 0a53861b7b..c22f7b4f44 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -79,7 +78,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 8afe1f5546..4adc02048e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -64,9 +63,9 @@ public SqsMessageProducerSendAsyncTests() }); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) { // arrange @@ -82,22 +81,22 @@ public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index e77f7b46f2..faf4deac89 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -51,7 +50,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs index 8392b094f9..09152cb135 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -44,7 +43,7 @@ public AwsValidateQueuesTestsAsync() producer.ConfirmTopicExistsAsync(topicName).Wait(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs index ce9dd23838..0880cc4fa4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SnsMessageProducer _messageProducer; @@ -49,7 +48,7 @@ public SqsRawMessageDeliveryTestsAsync() }); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -74,15 +73,15 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic, messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSend.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSend.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index d44c76ad1e..3718035ac9 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -56,7 +55,7 @@ public SqsMessageConsumerRejectTestsAsync() _messageProducer = new SnsMessageProducer(awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -69,7 +68,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs index cd725633d1..921a4b925a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -59,7 +58,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -70,7 +69,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 6c812d0829..1b8bc68ef8 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -10,13 +10,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -67,7 +66,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -83,7 +82,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 99d10d0a15..4cf71ecd15 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -13,12 +13,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -126,7 +125,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "Failing async tests caused by task scheduler issues")] + [Test, Skip("Failing async tests caused by task scheduler issues")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -142,7 +141,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs index 468fb32603..2828bbea93 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,7 +21,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index d30f9bc6bb..5035d817df 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -55,9 +54,9 @@ public SqsBufferedConsumerTests() }); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue) { var partitionOne = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; @@ -107,10 +106,10 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -126,7 +125,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index ea2a7116a2..7d418617e4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,7 +62,7 @@ public CustomisingAwsClientConfigTests() MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -77,11 +76,11 @@ public async Task When_customising_aws_client_config() _channel.Acknowledge(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sync_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sync_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sync_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_sub"]) > (0)).IsTrue(); - Assert.Contains("sync_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sync_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index a2c44ac4e7..56e05c8d77 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,8 +64,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -75,7 +74,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index 3d78c8c794..03edc61788 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -83,7 +82,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index e5246ed530..32a4df8d47 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,7 +78,7 @@ public AwsValidateInfrastructureByArnTests() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -91,8 +90,8 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index ab5e3cc3b8..350973d285 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,7 +68,7 @@ public AwsValidateInfrastructureByConventionTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -81,7 +80,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 7907c03f3a..3009f2ced7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -62,9 +61,9 @@ public SqsMessageProducerSendTests() new SnsPublication{Topic = new RoutingKey(_topicName), MakeChannels = OnMissingChannel.Create}); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_producer(bool fairQueue) { //arrange @@ -80,22 +79,22 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs index 6efdc8a68c..11a7f1d0b3 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -51,11 +50,11 @@ public AwsAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs index 07ee0c8f51..8e0fb3e23f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -4,13 +4,12 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -45,13 +44,13 @@ public AwsValidateQueuesTests() } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index 0e7968e4a0..00af8be5be 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; @@ -48,8 +47,8 @@ public SqsRawMessageDeliveryTests() }); } - [Fact] - public void When_raw_message_delivery_disabled() + [Test] + public async Task When_raw_message_delivery_disabled() { //arrange var messageHeader = new MessageHeader( @@ -73,15 +72,15 @@ public void When_raw_message_delivery_disabled() _channel.Acknowledge(messageReceived); //assert - Assert.Equal(messageToSent.Id, messageReceived.Id); - Assert.Equal(messageToSent.Header.Topic, messageReceived.Header.Topic); - Assert.Equal(messageToSent.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSent.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSent.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.Equal(messageToSent.Header.ContentType, messageReceived.Header.ContentType); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSent.Body.Value, messageReceived.Body.Value); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSent.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSent.Header.Topic); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSent.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSent.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSent.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType).IsEqualTo(messageToSent.Header.ContentType); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 9cba148e44..a483184ca4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -58,8 +57,8 @@ public SqsMessageConsumerRejectTests() _messageProducer = new SnsMessageProducer(awsConnection, new SnsPublication{MakeChannels = OnMissingChannel.Create}); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -71,7 +70,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs index 9d464b82fd..0f3447e1b2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -61,8 +60,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -73,7 +72,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage ); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index 4dd8b6ebd7..642ff62070 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -10,13 +10,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using Amazon.SimpleNotificationService.Model; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SnsMessageProducer _sender; @@ -67,8 +66,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -84,7 +83,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index cc93182c26..e75e87072d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -13,12 +13,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -139,7 +138,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -159,7 +158,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs index c335ee196f..59da641e24 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_topic_missing_verify_throws.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -21,8 +20,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { //arrange var producer = new SnsMessageProducer(_awsConnection, @@ -32,8 +31,11 @@ public void When_topic_missing_verify_throws() }); //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index a3577234eb..6922f885c1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -58,7 +57,7 @@ public SqsBufferedConsumerTestsAsync() new SqsPublication(channelName: channelName, queueAttributes: queueAttributes, makeChannels: OnMissingChannel.Create)); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_queueName); @@ -120,10 +119,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -137,7 +136,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() await Task.Delay(1000); } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index c3ec9d90c9..54d9008f80 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -71,7 +70,7 @@ public AwsAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -81,7 +80,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 558ec33d1a..309d3c8e0e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -77,7 +76,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index f2f07493f0..eecb02c0ae 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -82,7 +81,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 71d103c919..9e3d90c0aa 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -72,7 +71,7 @@ public SqsMessageProducerSendAsyncTests() new SqsPublication(channelName: channelName, queueAttributes: queueAttributes, makeChannels: OnMissingChannel.Create)); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -87,26 +86,26 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 05edc30b8b..203b739e23 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -39,7 +38,7 @@ public AwsAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index 896f659942..1fe06434a2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -34,7 +33,7 @@ public AwsValidateQueuesTestsAsync() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 63c0746405..ed7e18c959 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -5,12 +5,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable { private readonly SqsMessageProducer _messageProducer; @@ -55,7 +54,7 @@ public SqsRawMessageDeliveryTestsAsync() ); } - [Fact] + [Test] public async Task When_raw_message_delivery_disabled_async() { // Arrange @@ -83,18 +82,18 @@ public async Task When_raw_message_delivery_disabled_async() await _channel.AcknowledgeAsync(messageReceived); // Assert - Assert.Equal(messageToSend.Id, messageReceived.Id); - Assert.Equal(messageToSend.Header.Topic.ToValidSNSTopicName(true), messageReceived.Header.Topic); - Assert.Equal(messageToSend.Header.MessageType, messageReceived.Header.MessageType); - Assert.Equal(messageToSend.Header.CorrelationId, messageReceived.Header.CorrelationId); - Assert.Equal(messageToSend.Header.ReplyTo, messageReceived.Header.ReplyTo); - Assert.StartsWith(messageToSend.Header.ContentType?.ToString(), messageReceived.Header.ContentType?.ToString()); - Assert.Contains(customHeaderItem.Key, messageReceived.Header.Bag); - Assert.Equal(customHeaderItem.Value, messageReceived.Header.Bag[customHeaderItem.Key]); - Assert.Equal(messageToSend.Body.Value, messageReceived.Body.Value); - Assert.Equal(messageGroupId, messageReceived.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, messageReceived.Header.Bag); - Assert.Equal(deduplicationId, messageReceived.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(messageReceived.Id).IsEqualTo(messageToSend.Id); + await Assert.That(messageReceived.Header.Topic).IsEqualTo(messageToSend.Header.Topic.ToValidSNSTopicName(true)); + await Assert.That(messageReceived.Header.MessageType).IsEqualTo(messageToSend.Header.MessageType); + await Assert.That(messageReceived.Header.CorrelationId).IsEqualTo(messageToSend.Header.CorrelationId); + await Assert.That(messageReceived.Header.ReplyTo).IsEqualTo(messageToSend.Header.ReplyTo); + await Assert.That(messageReceived.Header.ContentType?.ToString()).StartsWith(messageToSend.Header.ContentType?.ToString()); + await Assert.That(messageReceived.Header.Bag).ContainsKey(customHeaderItem.Key); + await Assert.That(messageReceived.Header.Bag[customHeaderItem.Key]).IsEqualTo(customHeaderItem.Value); + await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); + await Assert.That(messageReceived.Header.PartitionKey).IsEqualTo(messageGroupId); + await Assert.That(messageReceived.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 496737f7d9..587cceb9de 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,7 +62,7 @@ public SqsMessageConsumerRejectTestsAsync() ); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -76,7 +75,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs index 58c030984a..8831fcd671 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -107,7 +106,7 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync() _dlqChannel = _dlqChannelFactory.CreateAsyncChannel(dlqSubscription); } - [Fact] + [Test] public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async() { //Arrange @@ -121,24 +120,24 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to //Assert - message should appear on DLQ var dlqMessage = await _dlqChannel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify FIFO attributes are preserved on DLQ message - Assert.Equal(_messageGroupId, dlqMessage.Header.PartitionKey); + await Assert.That(dlqMessage.Header.PartitionKey).IsEqualTo(_messageGroupId); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs index 937eabbf68..484705b221 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -61,7 +60,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -72,7 +71,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index f77e7f86bb..44ba534095 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -69,7 +68,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -85,7 +84,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName.ToValidSQSQueueName(true)); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index a7a379bb3c..6089a28116 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -127,7 +126,7 @@ public async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "This test is skipped because running tests of the DLQ is unreliable in the CI environment")] + [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -143,7 +142,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); var dlqCount = await GetDLQCountAsync(_dlqChannelName + ".fifo"); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs index af8f1bc651..d3601c4fef 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_topic_missing_verify_throws_async.cs @@ -3,12 +3,11 @@ using Amazon.SQS.Model; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -25,7 +24,7 @@ public AwsValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_queue_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index a2b2d75e7a..7fe0ce389f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -62,7 +61,7 @@ public SqsBufferedConsumerTests() )); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_queueName); @@ -127,10 +126,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -145,7 +144,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index fba6083b07..13742644c3 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -69,8 +68,8 @@ public AwsAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(true)); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -79,7 +78,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index c4fceef03e..fd263675d3 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -74,7 +73,7 @@ public AwsValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -86,7 +85,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index ffd875ec4c..0a22f6649d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -81,7 +80,7 @@ public AwsValidateInfrastructureByUrlTests () _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -93,7 +92,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index f9469c5737..a5dc506141 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -71,8 +70,8 @@ public SqsMessageProducerSendAsyncTests() ); } - [Fact] - public void When_posting_a_message_via_the_producer() + [Test] + public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; @@ -86,26 +85,26 @@ public void When_posting_a_message_via_the_producer() _channel.Acknowledge(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.Equal(_messageGroupId, message.Header.PartitionKey); - Assert.Contains(HeaderNames.DeduplicationId, message.Header.Bag); - Assert.Equal(_deduplicationId, message.Header.Bag[HeaderNames.DeduplicationId]); + await Assert.That(message.Header.PartitionKey).IsEqualTo(_messageGroupId); + await Assert.That(message.Header.Bag).ContainsKey(HeaderNames.DeduplicationId); + await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs index 167f3d222e..c28cd80240 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -40,11 +39,11 @@ public AWSAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs index 237ddb3c49..75c24a0f85 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTests : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -37,13 +36,13 @@ public AWSValidateQueuesTests() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { // We have no queues so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateAsyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannel(_subscription)).ThrowsExactly(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index f94ad7ffc4..04c36a5a64 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -59,8 +58,8 @@ public SqsMessageConsumerRejectTests() ); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -72,7 +71,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index 9eeabd9fda..b21c90303c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -107,8 +106,8 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -121,24 +120,24 @@ public void When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() //Assert - message should appear on DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify FIFO attributes are preserved on DLQ message - Assert.Equal(_messageGroupId, dlqMessage.Header.PartitionKey); + await Assert.That(dlqMessage.Header.PartitionKey).IsEqualTo(_messageGroupId); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs index 12db4ac318..190681edf5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -63,8 +62,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -74,7 +73,7 @@ public void When_requeueing_a_message() _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 2a510c80b8..85836a77d6 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -71,8 +70,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -88,7 +87,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName + ".fifo")); + await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 6bdd628b13..902ede1b89 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -126,8 +125,8 @@ public int GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "This test is skipped because running tests of the DLQ is unreliable in the CI environment")] - public void When_throwing_defer_action_respect_redrive_async() + [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] + public async Task When_throwing_defer_action_respect_redrive_async() { _sender.Send(_message); @@ -142,7 +141,7 @@ public void When_throwing_defer_action_respect_redrive_async() Task.Delay(5000).GetAwaiter().GetResult(); var dlqCount = GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs index 22e4bcf28e..7aa40eafc2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_topic_missing_verify_throws.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Collections.Generic; using Amazon.SQS.Model; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -23,8 +22,8 @@ public AWSValidateMissingTopicTests() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] - public void When_channel_missing_verify_throws() + [Test] + public async Task When_channel_missing_verify_throws() { // arrange var producer = new SqsMessageProducer( @@ -39,10 +38,12 @@ public void When_channel_missing_verify_throws() var messageGroupId = $"MessageGroup{Guid.NewGuid():N}"; // act & assert - Assert.Throws(() => + Assert.ThrowsExactly(() => + { producer.Send(new Message( new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text"), partitionKey: messageGroupId), - new MessageBody("Test")))); + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 2e2112592c..18f6aa44d5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SQSBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -53,9 +52,9 @@ public SQSBufferedConsumerTestsAsync() ); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_a_message_consumer_reads_multiple_messages_async(bool fairQueue) { var partitionOne = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; @@ -104,10 +103,10 @@ public async Task When_a_message_consumer_reads_multiple_messages_async(bool fai //retrieve messages var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -122,7 +121,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async(bool fai } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs index 56a030fe07..35a88a047d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -65,7 +64,7 @@ public CustomisingAwsClientConfigTestsAsync() ); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -79,11 +78,11 @@ public async Task When_customising_aws_client_config() await _channel.AcknowledgeAsync(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sqs_async_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_async_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_async_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_sub"]) > (0)).IsTrue(); - Assert.Contains("sqs_async_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_async_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index baa9de9ed3..c5f6418550 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -67,7 +66,7 @@ public AWSAssumeInfrastructureTestsAsync() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] + [Test] public async Task When_infastructure_exists_can_assume() { //arrange @@ -77,7 +76,7 @@ public async Task When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue await _consumer.AcknowledgeAsync(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs index 7a571bf893..ceee561ca5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -76,7 +75,7 @@ public AWSValidateInfrastructureByUrlTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -88,7 +87,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index c1b4df8dc8..827027767a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor { - [Trait("Category", "AWS")] - [Trait("Fragile", "CI")] + [Category("AWS")] + [Property("Fragile", "CI")] public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -64,7 +63,7 @@ public AwsValidateInfrastructureTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -74,7 +73,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 6af0996a58..3902c6f39f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -77,7 +76,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify_async() { await _messageProducer.SendAsync(_message); @@ -87,7 +86,7 @@ public async Task When_infrastructure_exists_can_verify_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); await _consumer.AcknowledgeAsync(message); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 2697e7647e..a65a724a27 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -8,12 +8,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable { private readonly Message _message; @@ -63,9 +62,9 @@ public SqsMessageProducerSendAsyncTests() }); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) { // arrange @@ -81,22 +80,22 @@ public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 9fb749f6bc..d294a7c4c4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable { private readonly ChannelFactory _channelFactory; @@ -46,11 +45,11 @@ public AWSAssumeQueuesTestsAsync() _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } - [Fact] + [Test] public async Task When_queues_missing_assume_throws_async() { //we will try to get the queue url, and fail because it does not exist - await Assert.ThrowsAsync(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs index ea815e65fb..75f62bf832 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTestsAsync : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -31,13 +30,13 @@ public AWSValidateQueuesTestsAsync() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] + [Test] public async Task When_queues_missing_verify_throws_async() { // We have no queues so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_subscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_subscription)).ThrowsExactly(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 17b2e92023..c8d2abec6d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -60,7 +59,7 @@ public SqsMessageConsumerRejectTestsAsync() ); } - [Fact] + [Test] public async Task When_rejecting_a_message_should_delete_from_queue_async() { //Arrange @@ -73,7 +72,7 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() //Assert - message should be deleted, not requeued message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 1ae69744ee..bb243e3f17 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -96,7 +95,7 @@ public SqsMessageConsumerDeliveryErrorDlqTestsAsync() _dlqChannel = _dlqChannelFactory.CreateAsyncChannel(dlqSubscription); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { //Arrange @@ -110,21 +109,21 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ //Assert - message should appear on DLQ var dlqMessage = await _dlqChannel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs index c8f1906d13..4a18da0165 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -54,7 +53,7 @@ public SqsMessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -65,7 +64,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 6e5b4cd023..157d1df457 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -9,13 +9,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -65,7 +64,7 @@ public SqsMessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -81,7 +80,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqChannelName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 124456b8f6..859261e678 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -125,7 +124,7 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - [Fact(Skip = "DLQ is fragile on async tests")] + [Test, Skip("DLQ is fragile on async tests")] public async Task When_throwing_defer_action_respect_redrive_async() { await _sender.SendAsync(_message); @@ -141,7 +140,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(_dlqQueueName); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs index 282915de96..c644c803fb 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_topic_missing_verify_throws_async.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Threading.Tasks; using Amazon.SQS.Model; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateMissingTopicTestsAsync { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -24,7 +23,7 @@ public AWSValidateMissingTopicTestsAsync() // Because we don't use channel factory to create the infrastructure - it won't exist } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // arrange diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 3d956c3a57..a775b7b9b4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SQSBufferedConsumerTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; @@ -53,9 +52,9 @@ public SQSBufferedConsumerTests() new SqsPublication(channelName: channelName, makeChannels: OnMissingChannel.Create)); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue) { var partitionOne = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; @@ -105,10 +104,10 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue //retrieve messages var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.True(messages.Length <= outstandingMessageCount); + await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); //should not receive more than buffer in one hit - Assert.True(messages.Length <= BufferSize); + await Assert.That(messages.Length <= BufferSize).IsTrue(); var moreMessages = messages.Where(m => m.Header.MessageType == MessageType.MT_COMMAND); foreach (var message in moreMessages) @@ -124,7 +123,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue } while ((iteration <= 5) && (messagesReceivedCount < MessageCount)); - Assert.Equal(4, messagesReceivedCount); + await Assert.That(messagesReceivedCount).IsEqualTo(4); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index c614a3a799..80f76e3f87 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -6,12 +6,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -60,7 +59,7 @@ public CustomisingAwsClientConfigTests() new SqsPublication { ChannelName = channelName, MakeChannels = OnMissingChannel.Create }); } - [Fact] + [Test] public async Task When_customising_aws_client_config() { //arrange @@ -74,11 +73,11 @@ public async Task When_customising_aws_client_config() _channel.Acknowledge(message); //publish_and_subscribe_should_use_custom_http_client_factory - Assert.Contains("sqs_sync_sub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_sync_sub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_sync_sub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_sub"]) > (0)).IsTrue(); - Assert.Contains("sqs_sync_pub", InterceptingDelegatingHandler.RequestCount); - Assert.True((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)); + await Assert.That(InterceptingDelegatingHandler.RequestCount).ContainsKey("sqs_sync_pub"); + await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index e6be965265..1e53011058 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSAssumeInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -68,8 +67,8 @@ public AWSAssumeInfrastructureTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name); } - [Fact] - public void When_infastructure_exists_can_assume() + [Test] + public async Task When_infastructure_exists_can_assume() { //arrange _messageProducer.Send(_message); @@ -78,7 +77,7 @@ public void When_infastructure_exists_can_assume() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs index 2eb9f6961d..b12f7da784 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class AWSValidateInfrastructureTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -73,7 +72,7 @@ public AWSValidateInfrastructureTests() _consumer = new SqsMessageConsumerFactory(awsConnection).Create(subscription); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_verify() { //arrange @@ -85,7 +84,7 @@ public async Task When_infrastructure_exists_can_verify() //Assert var message = messages.First(); - Assert.Equal(_myCommand.Id, message.Id); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue _consumer.Acknowledge(message); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 632a1c47b3..cbc0cdf567 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.Extensions; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -63,9 +62,9 @@ public SqsMessageProducerSendTests() ); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_producer(bool fairQueue) { //arrange @@ -81,22 +80,22 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) _channel.Acknowledge(message); //should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_queueName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_queueName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs index 5df29621c4..9a614efaea 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queue_missing_verify_throws.cs @@ -1,12 +1,11 @@ -using System; +using System; using Amazon.SQS.Model; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AwsValidateMissingTopicTests { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -22,8 +21,8 @@ public AwsValidateMissingTopicTests() //Because we don't use channel factory to create the infrastructure -it won't exist } - [Fact] - public void When_queue_missing_verify_throws() + [Test] + public async Task When_queue_missing_verify_throws() { //arrange var producer = new SqsMessageProducer( @@ -31,8 +30,11 @@ public void When_queue_missing_verify_throws() new SqsPublication(channelName: new ChannelName(_routingKey), makeChannels: OnMissingChannel.Validate)); //act && assert - Assert.Throws(() => producer.Send(new Message( - new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), - new MessageBody("Test")))); + Assert.ThrowsExactly(() => + { + producer.Send(new Message( + new MessageHeader("", _routingKey, MessageType.MT_EVENT, type: new CloudEventsType("plain/text")), + new MessageBody("Test"))); + }); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs index c557dd8831..d8781f823e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable { private readonly ChannelFactory _channelFactory; @@ -36,11 +35,11 @@ public AWSAssumeQueuesTests() _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } - [Fact] - public void When_queues_missing_assume_throws() + [Test] + public async Task When_queues_missing_assume_throws() { //we will try to get the queue url, and fail because it does not exist - Assert.Throws(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))); + await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs index 6162047318..d3cc0f25c5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -4,12 +4,11 @@ using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class AWSValidateQueuesTests : IDisposable, IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; @@ -31,13 +30,13 @@ public AWSValidateQueuesTests() _awsConnection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_queues_missing_verify_throws() + [Test] + public async Task When_queues_missing_verify_throws() { //We have no queues so we should throw //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_subscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index c3ee95d320..edd7f346d7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -6,13 +6,12 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerRejectTests : IDisposable { private readonly Message _message; @@ -61,8 +60,8 @@ public SqsMessageConsumerRejectTests() ); } - [Fact] - public void When_rejecting_a_message_should_delete_from_queue() + [Test] + public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange _messageProducer.Send(_message); @@ -74,7 +73,7 @@ public void When_rejecting_a_message_should_delete_from_queue() //Assert - message should be deleted, not requeued message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 05f0a15730..4659d16168 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerDeliveryErrorDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -96,8 +95,8 @@ public SqsMessageConsumerDeliveryErrorDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -110,21 +109,21 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() //Assert - message should appear on DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index b54350d2cc..00dadcf63b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerNoChannelsRejectTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -79,8 +78,8 @@ public SqsMessageConsumerNoChannelsRejectTests() new SqsPublication(channelName: channelName, makeChannels: OnMissingChannel.Create)); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() { //Arrange _messageProducer.Send(_message); @@ -91,7 +90,7 @@ public void When_rejecting_message_with_no_channels_configured_should_acknowledg //Assert - original message should be deleted (acknowledged) since there is no DLQ var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 182b0367b6..9937021e3c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -97,8 +96,8 @@ public SqsMessageConsumerUnacceptableFallbackToDlqTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange _messageProducer.Send(_message); @@ -111,21 +110,21 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou //Assert - message should fall back to the DLQ since no invalid message queue is configured var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 93e0d01f58..6182ceb034 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -30,12 +30,11 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageConsumerUnacceptableInvalidChannelTests : IDisposable, IAsyncDisposable { private readonly Message _message; @@ -114,8 +113,8 @@ public SqsMessageConsumerUnacceptableInvalidChannelTests() _dlqChannel = _dlqChannelFactory.CreateSyncChannel(dlqSubscription); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange _messageProducer.Send(_message); @@ -128,25 +127,25 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval //Assert - message should appear on the invalid message queue var invalidMessage = _invalidChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); //verify rejection metadata was added (keys are camelCase due to JSON serialization policy) - Assert.True(invalidMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, invalidMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(invalidMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), invalidMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(invalidMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(invalidMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), invalidMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); //verify message did NOT go to the DLQ var dlqMessage = _dlqChannel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); //verify original message is deleted from source queue var sourceMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs index a26152adca..11fcf454cf 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs @@ -7,12 +7,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; using System.Collections.Generic; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] +[Category("AWS")] public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; @@ -63,8 +62,8 @@ public SqsMessageProducerRequeueTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -75,7 +74,7 @@ public void When_requeueing_a_message() //clear the queue _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index ba3fca52d5..a41ef1e13d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -10,12 +10,11 @@ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable { private readonly SqsMessageProducer _sender; @@ -69,8 +68,8 @@ public SqsMessageProducerDlqTests() _channel = _channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -86,7 +85,7 @@ public void When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } private int GetDLQCount(string queueName) diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index b0c72a8df7..ac401a136e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -12,12 +12,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable { private readonly IAmAMessagePump _messagePump; @@ -139,7 +138,7 @@ private int GetDLQCount(string queueName) } - [Fact] + [Test] public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue @@ -159,7 +158,7 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - Assert.Equal(1, GetDLQCount(_dlqChannelName)); + await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 87079d8c4b..acc9088095 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -27,7 +27,6 @@ THE SOFTWARE. */ using Amazon.Runtime; using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs; @@ -45,8 +44,8 @@ public SqsMessageConsumerFactoryDlqTests() _factory = new SqsMessageConsumerFactory(connection); } - [Fact] - public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -64,7 +63,7 @@ public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -72,17 +71,17 @@ public void When_creating_sqs_consumer_with_dlq_subscription_should_pass_routing var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs index 2b91123af3..1053d2b564 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -23,14 +23,13 @@ THE SOFTWARE. */ using Paramore.Brighter.AWS.V4.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AWSSQS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs; public class SqsSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -46,17 +45,17 @@ public void When_creating_sqs_subscription_with_dlq_routing_keys_should_expose_p ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_sqs_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_sqs_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new SqsSubscription( @@ -66,12 +65,12 @@ public void When_creating_sqs_subscription_without_dlq_routing_keys_should_defau ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj b/tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj index 155c8838b3..d93610401c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj @@ -1,29 +1,14 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - @@ -31,5 +16,4 @@ - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs index 149beff93a..d59bf3e7ff 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.AWS.V4.Tests.Helpers; using Paramore.Brighter.Transformers.AWS.V4; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.Transformers; @@ -23,39 +22,39 @@ public S3LuggageUploadMissingParametersTests() _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; } - [Fact] - public void When_creating_luggagestore_missing_client() + [Test] + public async Task When_creating_luggagestore_missing_client() { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(null!, null!))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Theory] - [InlineData("")] - [InlineData(null)] - public void When_creating_luggagestore_missing_bucketName(string? bucketName) + [Test] + [Arguments("")] + [Arguments(null)] + public async Task When_creating_luggagestore_missing_bucketName(string? bucketName) { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(GatewayFactory.CreateS3Connection(), bucketName!))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_bad_bucketName() { //arrange var exception = Catch.Exception(() => new S3LuggageStore(new S3LuggageOptions(GatewayFactory.CreateS3Connection(), "A" ))); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_missing_httpClient() { //arrange @@ -65,11 +64,11 @@ public async Task When_creating_luggagestore_missing_httpClient() await store.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } - [Fact] + [Test] public async Task When_creating_luggagestore_missing_ACL() { //arrange @@ -83,7 +82,7 @@ public async Task When_creating_luggagestore_missing_ACL() await store.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); - Assert.IsType(exception); + await Assert.That(exception).IsNotNull(); + await Assert.That(exception).IsTypeOf(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs index 05a71e3f1a..381b16a62e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -11,12 +11,11 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.AWS.V4; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.Transformers; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class LargeMessagePaylodUnwrapTests : IAsyncDisposable { private readonly TransformPipelineBuilderAsync _pipelineBuilder; @@ -58,7 +57,7 @@ public LargeMessagePaylodUnwrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.None); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message() { //arrange @@ -97,8 +96,8 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False((await _luggageStore.HasClaimAsync(id))); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That((await _luggageStore.HasClaimAsync(id))).IsFalse(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_uploading_luggage_to_S3.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_uploading_luggage_to_S3.cs index cf86058b56..a358a03a10 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_uploading_luggage_to_S3.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_uploading_luggage_to_S3.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Net; using System.Net.Http; @@ -11,7 +11,6 @@ using Polly; using Polly.Contrib.WaitAndRetry; using Polly.Retry; -using Xunit; using Policy = Polly.Policy; namespace Paramore.Brighter.AWS.V4.Tests.Transformers; @@ -30,7 +29,7 @@ public S3LuggageUploadTests() _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; } - [Fact] + [Test] public async Task When_uploading_luggage_to_S3() { //arrange @@ -58,12 +57,12 @@ public async Task When_uploading_luggage_to_S3() //assert //do we have a claim? - Assert.True((await luggageStore.HasClaimAsync(claim))); + await Assert.That((await luggageStore.HasClaimAsync(claim))).IsTrue(); //check for the contents indicated by the claim id on S3 var result = await luggageStore.RetrieveAsync(claim); var resultAsString = await new StreamReader(result).ReadToEndAsync(); - Assert.Equal(testContent, resultAsString); + await Assert.That(resultAsString).IsEqualTo(testContent); await luggageStore.DeleteAsync(claim); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_validating_a_luggage_store_exists.cs index c426c42947..0ec3ffa08d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_validating_a_luggage_store_exists.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading.Tasks; using Amazon.S3; @@ -8,12 +8,11 @@ using Paramore.Brighter.MessagingGateway.AWSSQS.V4; using Paramore.Brighter.Transformers.AWS.V4; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.Transformers; -[Trait("Category", "AWS")] -[Trait("Fragile", "CI")] +[Category("AWS")] +[Property("Fragile", "CI")] public class S3LuggageStoreExistsTests { private readonly IHttpClientFactory _httpClientFactory; @@ -27,7 +26,7 @@ public S3LuggageStoreExistsTests() _httpClientFactory = provider.GetRequiredService(); } - [Fact] + [Test] public async Task When_checking_store_that_exists() { var bucketName = $"brightertestbucket-{Guid.NewGuid()}"; @@ -55,7 +54,7 @@ public async Task When_checking_store_that_exists() Tags = [new Tag { Key = "BrighterTests", Value = "S3LuggageUploadTests" }], }); - Assert.NotNull(luggageStore); + await Assert.That(luggageStore).IsNotNull(); //teardown var factory = new AWSClientFactory(GatewayFactory.CreateFactory()); @@ -63,7 +62,7 @@ public async Task When_checking_store_that_exists() await client.DeleteBucketAsync(bucketName); } - [Fact] + [Test] public async Task When_checking_store_that_does_not_exist() { //act @@ -82,7 +81,7 @@ public async Task When_checking_store_that_does_not_exist() await luggageStore.EnsureStoreExistsAsync(); }); - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs index c0e2ed766e..ba7f9da82d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/Transformers/When_wrapping_a_large_message.cs @@ -10,7 +10,6 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.AWS.V4; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.AWS.V4.Tests.Transformers; @@ -66,7 +65,7 @@ public LargeMessagePayloadWrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, transformerFactoryAsync, InstrumentationOptions.None); } - [Fact] + [Test] public async Task When_wrapping_a_large_message() { //act @@ -74,12 +73,12 @@ public async Task When_wrapping_a_large_message() var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.True(await _luggageStore.HasClaimAsync(_id)); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj b/tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj index a42f2a1461..ed287ffafc 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj @@ -1,31 +1,16 @@ - - + $(BrighterTestTargetFrameworks) enable false + Exe - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + + - \ No newline at end of file diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index f5682ae6a7..ed127ab1df 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS; @@ -7,8 +7,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -59,8 +59,8 @@ public SnsSchedulingMessageTest() }; } - [Fact] - public void When_Scheduling_A_Sns_Message() + [Test] + public async Task When_Scheduling_A_Sns_Message() { var routingKey = new RoutingKey(_topicName); var message = new Message( @@ -78,13 +78,13 @@ public void When_Scheduling_A_Sns_Message() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(message.Header.MessageType, messages[0].Header.MessageType); - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index 0d463d96e7..02778ac727 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS; @@ -7,8 +7,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -60,7 +60,7 @@ public SnsSchedulingAsyncMessageTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sns_Message_Async() { var routingKey = new RoutingKey(_topicName); @@ -77,12 +77,12 @@ public async Task When_Scheduling_A_Sns_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 701784ab69..95e74c7d4b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.JsonConverters; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -60,8 +60,8 @@ public SnsSchedulingMessageViaFireSchedulerTest() }; } - [Fact] - public void When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() + [Test] + public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() { var routingKey = new RoutingKey(_topicName); var message = new Message( @@ -79,17 +79,17 @@ public void When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index b897a9ac3c..2c2ef1ffb3 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.JsonConverters; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); @@ -60,7 +60,7 @@ public SnsSchedulingMessageViaFireSchedulerAsyncTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sns_Message_Async() { var routingKey = new RoutingKey(_topicName); @@ -79,17 +79,17 @@ public async Task When_Scheduling_A_Sns_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index fd82304378..1cbd9f3b35 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS; @@ -6,8 +6,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -48,8 +48,8 @@ public SqsSchedulingMessageTest() }; } - [Fact] - public void When_Scheduling_A_Sqs_Message() + [Test] + public async Task When_Scheduling_A_Sqs_Message() { var routingKey = new RoutingKey(_queueName); var message = new Message( @@ -67,12 +67,12 @@ public void When_Scheduling_A_Sqs_Message() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index bbbcf3a85e..92be2e552b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS; @@ -6,8 +6,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -47,7 +47,7 @@ public SqsSchedulingAsyncMessageTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Async() { var routingKey = new RoutingKey(_queueName); @@ -66,12 +66,12 @@ public async Task When_Scheduling_A_Sqs_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index fea42f40b3..dcb88f535b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; @@ -8,8 +8,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); @@ -51,8 +51,8 @@ public SqsSchedulingMessageViaFireSchedulerTest() }; } - [Fact] - public void When_Scheduling_A_Sqs_Message_Via_FireScheduler() + [Test] + public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() { var routingKey = new RoutingKey(_queueName); var message = new Message( @@ -70,17 +70,17 @@ public void When_Scheduling_A_Sqs_Message_Via_FireScheduler() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index 47242b271e..52aed8caa9 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.Tests.Helpers; using Paramore.Brighter.AWSScheduler.Tests.TestDoubles; @@ -8,8 +8,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -51,7 +51,7 @@ public SqsSchedulingAsyncMessageViaFireSchedulerTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() { var routingKey = new RoutingKey(_queueName); @@ -70,17 +70,17 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 100dbc67c1..3aa1e1ae5d 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; @@ -12,8 +12,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -65,20 +65,20 @@ public SnsSchedulingMessageViaFireSchedulerRequestTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -86,18 +86,18 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } @@ -108,10 +108,10 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -120,25 +120,25 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } @@ -149,85 +149,85 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_Delay(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)scheduler.ReScheduler(id, TimeSpan.FromMinutes(2))); + await Assert.That((bool)scheduler.ReScheduler(id, TimeSpan.FromMinutes(2))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)scheduler.ReScheduler(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2)))); + await Assert.That((bool)scheduler.ReScheduler(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] - public void When_Rescheduling_A_Sns_Request_That_Not_Exists() + [Test] + public async Task When_Rescheduling_A_Sns_Request_That_Not_Exists() { var scheduler = _factory.CreateSync(null!); - Assert.False((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1))); + await Assert.That((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1))).IsFalse(); - Assert.False((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1))); + await Assert.That((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sns_Request(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); scheduler.Cancel(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index 4e4530a0ee..4c0a0ce219 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; @@ -12,8 +12,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingRequestAsyncTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -65,20 +65,20 @@ public SnsSchedulingRequestAsyncTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -86,18 +86,18 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedule while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -108,10 +108,10 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedule Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -122,24 +122,24 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Asyn DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -150,34 +150,34 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Asyn Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -186,33 +186,33 @@ public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset_As var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] + [Test] public async Task When_Rescheduling_A_Sns_Request_That_Not_Exists_Async() { var scheduler = _factory.CreateAsync(null!); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))).IsFalse(); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -220,18 +220,18 @@ public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType scheduler var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await scheduler.CancelAsync(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 210b2c3bdb..6353ff2aca 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; using Paramore.Brighter.AWSScheduler.Tests.Helpers; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestTest : IDisposable { private const int BufferSize = 3; @@ -52,20 +52,20 @@ public SqsSchedulingRequestTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -73,18 +73,18 @@ public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedule while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -95,10 +95,10 @@ public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedule Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -109,24 +109,24 @@ public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Asyn DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -137,34 +137,34 @@ public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Asyn Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sqs_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -173,33 +173,33 @@ public async Task When_Rescheduling_A_Sqs_Request_With_SpecificDateTimeOffset_As var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] + [Test] public async Task When_Rescheduling_A_Sqs_Request_That_Not_Exists_Async() { var scheduler = _factory.CreateAsync(null!); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))).IsFalse(); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -207,18 +207,18 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await scheduler.CancelAsync(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index d426c83597..38e813c1f3 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Paramore.Brighter.AWSScheduler.Tests.Helpers; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -62,7 +62,7 @@ public SqsSchedulingRequestAsyncTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() { var routingKey = new RoutingKey(_queueName); @@ -81,17 +81,17 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj index 8d720987dc..c3d4c35822 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj @@ -1,29 +1,14 @@ - $(BrighterTestTargetFrameworks) enable false - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + Exe + - + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index efe9e4527a..3ced056be0 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS.V4; @@ -7,8 +7,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -59,8 +59,8 @@ public SnsSchedulingMessageTest() }; } - [Fact] - public void When_Scheduling_A_Sns_Message() + [Test] + public async Task When_Scheduling_A_Sns_Message() { var routingKey = new RoutingKey(_topicName); var message = new Message( @@ -78,13 +78,13 @@ public void When_Scheduling_A_Sns_Message() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(message.Header.MessageType, messages[0].Header.MessageType); - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index d60f4c4d4e..6505ec396b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS.V4; @@ -7,8 +7,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -60,7 +60,7 @@ public SnsSchedulingAsyncMessageTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sns_Message_Async() { var routingKey = new RoutingKey(_topicName); @@ -77,12 +77,12 @@ public async Task When_Scheduling_A_Sns_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index b1eef4a099..84a14304e2 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.JsonConverters; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -60,8 +60,8 @@ public SnsSchedulingMessageViaFireSchedulerTest() }; } - [Fact] - public void When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() + [Test] + public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() { var routingKey = new RoutingKey(_topicName); var message = new Message( @@ -79,17 +79,17 @@ public void When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index 4d55c7466a..128c704a00 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.JsonConverters; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); @@ -60,7 +60,7 @@ public SnsSchedulingMessageViaFireSchedulerAsyncTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sns_Message_Async() { var routingKey = new RoutingKey(_topicName); @@ -79,17 +79,17 @@ public async Task When_Scheduling_A_Sns_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 5443445b96..ef876d2276 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS.V4; @@ -6,8 +6,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -48,8 +48,8 @@ public SqsSchedulingMessageTest() }; } - [Fact] - public void When_Scheduling_A_Sqs_Message() + [Test] + public async Task When_Scheduling_A_Sqs_Message() { var routingKey = new RoutingKey(_queueName); var message = new Message( @@ -67,12 +67,12 @@ public void When_Scheduling_A_Sqs_Message() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index c88dbbba15..7687dd51fe 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; using Paramore.Brighter.MessageScheduler.AWS.V4; @@ -6,8 +6,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -47,7 +47,7 @@ public SqsSchedulingAsyncMessageTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Async() { var routingKey = new RoutingKey(_queueName); @@ -66,12 +66,12 @@ public async Task When_Scheduling_A_Sqs_Message_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal((string?)message.Body.Value, (string?)messages[0].Body.Value); - Assert.Equivalent(message.Header, messages[0].Header); + await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); + await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index 616934e94b..f9fbead0c5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; @@ -8,8 +8,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); @@ -51,8 +51,8 @@ public SqsSchedulingMessageViaFireSchedulerTest() }; } - [Fact] - public void When_Scheduling_A_Sqs_Message_Via_FireScheduler() + [Test] + public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() { var routingKey = new RoutingKey(_queueName); var message = new Message( @@ -70,17 +70,17 @@ public void When_Scheduling_A_Sqs_Message_Via_FireScheduler() while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index 37cd1007f4..73846f4c11 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; using Paramore.Brighter.AWSScheduler.V4.Tests.TestDoubles; @@ -8,8 +8,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -51,7 +51,7 @@ public SqsSchedulingAsyncMessageViaFireSchedulerTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() { var routingKey = new RoutingKey(_queueName); @@ -70,17 +70,17 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 52cf63bdac..ef9e4bf290 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; @@ -12,8 +12,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -65,20 +65,20 @@ public SnsSchedulingMessageViaFireSchedulerRequestTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -86,18 +86,18 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } @@ -108,10 +108,10 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -120,25 +120,25 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.False((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsFalse(); _consumer.Acknowledge(messages[0]); return; } @@ -149,85 +149,85 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_Delay(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)scheduler.ReScheduler(id, TimeSpan.FromMinutes(2))); + await Assert.That((bool)scheduler.ReScheduler(id, TimeSpan.FromMinutes(2))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)scheduler.ReScheduler(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2)))); + await Assert.That((bool)scheduler.ReScheduler(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] - public void When_Rescheduling_A_Sns_Request_That_Not_Exists() + [Test] + public async Task When_Rescheduling_A_Sns_Request_That_Not_Exists() { var scheduler = _factory.CreateSync(null!); - Assert.False((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1))); + await Assert.That((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1))).IsFalse(); - Assert.False((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1))); + await Assert.That((bool)scheduler.ReScheduler(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sns_Request(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateSync(null!); var id = scheduler.Schedule(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); scheduler.Cancel(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index 069a3ff558..c483f9e2af 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; @@ -12,8 +12,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SNS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SNS")] public class SnsSchedulingRequestAsyncTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -65,20 +65,20 @@ public SnsSchedulingRequestAsyncTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -86,18 +86,18 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedule while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -108,10 +108,10 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay_Async(RequestSchedule Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -122,24 +122,24 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Asyn DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -150,34 +150,34 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTimeOffset_Asyn Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -186,33 +186,33 @@ public async Task When_Rescheduling_A_Sns_Request_With_SpecificDateTimeOffset_As var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] + [Test] public async Task When_Rescheduling_A_Sns_Request_That_Not_Exists_Async() { var scheduler = _factory.CreateAsync(null!); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))).IsFalse(); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -220,18 +220,18 @@ public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType scheduler var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await scheduler.CancelAsync(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index f8ac5889ae..1ce20391f4 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using Amazon.Scheduler; using Amazon.Scheduler.Model; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestTest : IDisposable { private const int BufferSize = 3; @@ -52,20 +52,20 @@ public SqsSchedulingRequestTest() }; } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await Task.Delay(TimeSpan.FromMinutes(1)); @@ -73,18 +73,18 @@ public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedule while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -95,10 +95,10 @@ public async Task When_Scheduling_A_Sqs_Request_With_Delay_Async(RequestSchedule Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -109,24 +109,24 @@ public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Asyn DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True((bool?)(messages[0].Body.Value)?.Any()); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That((bool?)(messages[0].Body.Value)?.Any()).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equal(schedulerType, m.SchedulerType); - Assert.Equal(typeof(MyCommand).FullName, (string?)m.RequestType); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); + await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -137,34 +137,34 @@ public async Task When_Scheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Asyn Assert.Fail("The message wasn't fired"); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sqs_Request_With_Delay_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, TimeSpan.FromMinutes(1)); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, TimeSpan.FromMinutes(2)))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Rescheduling_A_Sqs_Request_With_SpecificDateTimeOffset_Async( RequestSchedulerType schedulerType) { @@ -173,33 +173,33 @@ public async Task When_Rescheduling_A_Sqs_Request_With_SpecificDateTimeOffset_As var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True(Enumerable.Any(id)); + await Assert.That(Enumerable.Any(id)).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); - Assert.True((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(id, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(2))))).IsTrue(); var awsReScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsReScheduler); - Assert.NotEqual(awsScheduler.ScheduleExpression, awsReScheduler.ScheduleExpression); + await Assert.That(awsReScheduler).IsNotNull(); + await Assert.That(awsReScheduler.ScheduleExpression).IsNotEqualTo(awsScheduler.ScheduleExpression); await _scheduler.DeleteScheduleAsync(new DeleteScheduleRequest { Name = id }); } - [Fact] + [Test] public async Task When_Rescheduling_A_Sqs_Request_That_Not_Exists_Async() { var scheduler = _factory.CreateAsync(null!); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), DateTimeOffset.UtcNow.AddHours(1)))).IsFalse(); - Assert.False((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))); + await Assert.That((bool)(await scheduler.ReSchedulerAsync(Guid.NewGuid().ToString("N"), TimeSpan.FromMinutes(1)))).IsFalse(); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType schedulerType) { var command = new MyCommand(); @@ -207,18 +207,18 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler var scheduler = _factory.CreateAsync(null!); var id = await scheduler.ScheduleAsync(command, schedulerType, DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(1))); - Assert.True((bool?)(id)?.Any()); + await Assert.That((bool?)(id)?.Any()).IsTrue(); var awsScheduler = await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id }); - Assert.NotNull(awsScheduler); + await Assert.That(awsScheduler).IsNotNull(); await scheduler.CancelAsync(id); var ex = await Catch.ExceptionAsync(async () => await _scheduler.GetScheduleAsync(new GetScheduleRequest { Name = id })); - Assert.NotNull(ex); - Assert.True((ex) is ResourceNotFoundException); + await Assert.That(ex).IsNotNull(); + await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index 3982ee9c3b..c9f06dc48a 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -1,4 +1,4 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Amazon.Scheduler; using Paramore.Brighter.AWSScheduler.V4.Tests.Helpers; @@ -9,8 +9,8 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sqs; -[Trait("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[Collection("Scheduler SQS")] +[Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) +[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -63,7 +63,7 @@ public SqsSchedulingRequestAsyncTest() }; } - [Fact] + [Test] public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() { var routingKey = new RoutingKey(_queueName); @@ -82,17 +82,17 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async() while (stopAt > DateTimeOffset.UtcNow) { var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.True(Enumerable.Any(messages[0].Body.Value)); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(Enumerable.Any(messages[0].Body.Value)).IsTrue(); var m = JsonSerializer.Deserialize(messages[0].Body.Value, JsonSerialisationOptions.Options); - Assert.NotNull((object?)m); - Assert.Equivalent(message, m.Message); - Assert.True((bool)m.Async); + await Assert.That((object?)m).IsNotNull(); + await Assert.That(m.Message).IsEquivalentTo(message); + await Assert.That((bool)m.Async).IsTrue(); await _consumer.AcknowledgeAsync(messages[0]); return; } diff --git a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/PublicationRequestTypeAssignmentAnalyzerTest.cs b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/PublicationRequestTypeAssignmentAnalyzerTest.cs index a8e904138a..45a16b486f 100644 --- a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/PublicationRequestTypeAssignmentAnalyzerTest.cs +++ b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/PublicationRequestTypeAssignmentAnalyzerTest.cs @@ -1,4 +1,4 @@ -using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis.Testing; using Paramore.Brighter.Analyzer.Analyzers; using Paramore.Brighter.Analyzer.Tests.Analyzers; @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Analyzer.Test.Analyzers public class PublicationRequestTypeAssignmentAnalyzerTest : BaseAnalyzerTest { - [Fact] + [Test] public async Task When_Initializing_Publication_WithOut_RequestType() { @@ -28,7 +28,7 @@ public class PublicationTest : Publication await testContext.RunAsync(); } - [Fact] + [Test] public async Task When_Initializing_Publication_With_Right_RequestType() { testContext.TestCode = /* lang=c#-test */ """ @@ -54,7 +54,7 @@ public EventSample(Id id) : base(id) await testContext.RunAsync(); } - [Fact] + [Test] public async Task When_Initializing_Publication_With_Wrong_RequestType() { testContext.TestCode = /* lang=c#-test */ """ @@ -76,7 +76,7 @@ public class EventSample{} await testContext.RunAsync(); } - [Fact] + [Test] public async Task When_Initializing_Non_Publication_Type() { testContext.TestCode = /* lang=c#-test */ """ diff --git a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/SubscriptionConstructorAnalyzerTest.cs b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/SubscriptionConstructorAnalyzerTest.cs index 8d2bf4d8a2..5f06231432 100644 --- a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/SubscriptionConstructorAnalyzerTest.cs +++ b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/SubscriptionConstructorAnalyzerTest.cs @@ -1,4 +1,4 @@ -using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis.Testing; using Paramore.Brighter.Analyzer.Analyzers; using Paramore.Brighter.Analyzer.Tests.Analyzers; @@ -6,7 +6,7 @@ namespace Paramore.Brighter.Analyzer.Test.Analyzers { public class SubscriptionConstructorAnalyzerTest : BaseAnalyzerTest { - [Fact] + [Test] public async Task When_Initializing_Subscription_With_MessagePump() { @@ -28,7 +28,7 @@ public SubscriptionTest(SubscriptionName subscriptionName, ChannelName channelNa await testContext.RunAsync(); } - [Fact] + [Test] public async Task When_Initializing_Subscription_WithOut_MessagePump() { @@ -50,7 +50,7 @@ public SubscriptionTest(SubscriptionName subscriptionName, ChannelName channelNa testContext.ExpectedDiagnostics.Add(new DiagnosticResult(SubscriptionConstructorAnalyzer.MessagePumpMissingRule).WithLocation(0).WithArguments("SubscriptionTest")); await testContext.RunAsync(); } - [Fact] + [Test] public async Task When_Initializing_SubscriptionNested_WithOut_MessagePump() { diff --git a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/WrapAttributeAnalyzerTest.cs b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/WrapAttributeAnalyzerTest.cs index 8ad50ccffd..5c0bcde062 100644 --- a/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/WrapAttributeAnalyzerTest.cs +++ b/tests/Paramore.Brighter.Analyzer.Tests/Analyzers/WrapAttributeAnalyzerTest.cs @@ -1,4 +1,4 @@ -using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis.Testing; using Paramore.Brighter.Analyzer.Analyzers; using Paramore.Brighter.Analyzer.Tests.Analyzers; @@ -7,7 +7,7 @@ namespace Paramore.Brighter.Analyzer.Test.Analyzers public class WrapAttributeAnalyzerTest: BaseAnalyzerTest { - [Fact] + [Test] public async Task When_Adding_Attribute_To_MessageMapper() { diff --git a/tests/Paramore.Brighter.Analyzer.Tests/Paramore.Brighter.Analyzer.Tests.csproj b/tests/Paramore.Brighter.Analyzer.Tests/Paramore.Brighter.Analyzer.Tests.csproj index 1eef7fe76a..cd2170c707 100644 --- a/tests/Paramore.Brighter.Analyzer.Tests/Paramore.Brighter.Analyzer.Tests.csproj +++ b/tests/Paramore.Brighter.Analyzer.Tests/Paramore.Brighter.Analyzer.Tests.csproj @@ -1,32 +1,17 @@ - - + $(BrighterTestNineOnlyTargetFrameworks) enable - false true + Exe - - - - - + - - - - - - - - - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Azure.Tests/AzureBlobArchiveProviderTests.cs b/tests/Paramore.Brighter.Azure.Tests/AzureBlobArchiveProviderTests.cs index f29b9525c1..a9227c086d 100644 --- a/tests/Paramore.Brighter.Azure.Tests/AzureBlobArchiveProviderTests.cs +++ b/tests/Paramore.Brighter.Azure.Tests/AzureBlobArchiveProviderTests.cs @@ -51,17 +51,17 @@ public async Task GivenARequestToArchiveAMessage_TheMessageIsArchived() _provider?.ArchiveMessage(commandMessage); - Assert.That((bool)await blobClient.ExistsAsync(), Is.True); + await Assert.That((bool)await blobClient.ExistsAsync()).IsTrue(); var tags = (await blobClient.GetTagsAsync()).Value.Tags; - Assert.That(tags.Count, Is.EqualTo(0)); + await Assert.That(tags.Count).IsEqualTo(0); var body = (await blobClient.DownloadContentAsync()).Value.Content.ToString(); - Assert.That(body, Is.EqualTo(commandMessage.Body.Value)); + await Assert.That(body).IsEqualTo(commandMessage.Body.Value); var tier = await blobClient.GetPropertiesAsync(); - Assert.That(tier.Value.AccessTier, Is.EqualTo(AccessTier.Cool.ToString())); + await Assert.That(tier.Value.AccessTier).IsEqualTo(AccessTier.Cool.ToString()); } @@ -81,15 +81,15 @@ public async Task GivenARequestToArchiveAMessage_WhenTagsAreTurnedOn_ThenTagsAre _provider?.ArchiveMessage(eventMessage); var tier = await blobClient.GetPropertiesAsync(); - Assert.That(tier.Value.AccessTier, Is.EqualTo(AccessTier.Hot.ToString())); + await Assert.That(tier.Value.AccessTier).IsEqualTo(AccessTier.Hot.ToString()); var tags = (await blobClient.GetTagsAsync()).Value.Tags; - Assert.That(tags["topic"], Is.EqualTo(eventMessage.Header.Topic.Value)); - Assert.That(tags["correlationId"], Is.EqualTo(eventMessage.Header.CorrelationId.Value)); - Assert.That(tags["message_type"], Is.EqualTo(eventMessage.Header.MessageType.ToString())); - Assert.That(DateTime.Parse(tags["timestamp"]), Is.EqualTo(eventMessage.Header.TimeStamp.DateTime)); - Assert.That(tags["content_type"], Is.EqualTo(eventMessage.Header.ContentType!.ToString())); + await Assert.That(tags["topic"]).IsEqualTo(eventMessage.Header.Topic.Value); + await Assert.That(tags["correlationId"]).IsEqualTo(eventMessage.Header.CorrelationId.Value); + await Assert.That(tags["message_type"]).IsEqualTo(eventMessage.Header.MessageType.ToString()); + await Assert.That(DateTime.Parse(tags["timestamp"])).IsEqualTo(eventMessage.Header.TimeStamp.DateTime); + await Assert.That(tags["content_type"]).IsEqualTo(eventMessage.Header.ContentType!.ToString()); } [Test] @@ -113,17 +113,17 @@ public async Task GivenARequestToArchiveAMessageAsync_TheMessageIsArchived() await _provider?.ArchiveMessageAsync(commandMessage, CancellationToken.None)!; - Assert.That((bool)await blobClient.ExistsAsync(), Is.True); + await Assert.That((bool)await blobClient.ExistsAsync()).IsTrue(); var tags = (await blobClient.GetTagsAsync()).Value.Tags; - Assert.That(tags.Count, Is.EqualTo(0)); + await Assert.That(tags.Count).IsEqualTo(0); var body = (await blobClient.DownloadContentAsync()).Value.Content.ToString(); - Assert.That(body, Is.EqualTo(commandMessage.Body.Value)); + await Assert.That(body).IsEqualTo(commandMessage.Body.Value); var tier = await blobClient.GetPropertiesAsync(); - Assert.That(tier.Value.AccessTier, Is.EqualTo(AccessTier.Cool.ToString())); + await Assert.That(tier.Value.AccessTier).IsEqualTo(AccessTier.Cool.ToString()); } @@ -162,10 +162,10 @@ public async Task GivenARequestToArchiveAMessageAsync_WhenParallel_TheMessageIsA foreach (var message in messages) { var blobClient = containerClient.GetBlobClient(_storageLocationFunction.Invoke(message)); - Assert.That((bool)await blobClient.ExistsAsync(), Is.True); + await Assert.That((bool)await blobClient.ExistsAsync()).IsTrue(); var tags = (await blobClient.GetTagsAsync()).Value.Tags; - Assert.That(tags.Count, Is.EqualTo(0)); + await Assert.That(tags.Count).IsEqualTo(0); var body = (await blobClient.DownloadContentAsync()).Value.Content.ToString(); @@ -175,10 +175,10 @@ public async Task GivenARequestToArchiveAMessageAsync_WhenParallel_TheMessageIsA else if (message.Header.MessageType == MessageType.MT_EVENT) brighterBody = JsonSerializer.Serialize(superAwesomeEvents.First(c => c.Id == message.Id)); - Assert.That(body, Is.EqualTo(brighterBody)); + await Assert.That(body).IsEqualTo(brighterBody); var tier = await blobClient.GetPropertiesAsync(); - Assert.That(tier.Value.AccessTier, Is.EqualTo(AccessTier.Cool.ToString())); + await Assert.That(tier.Value.AccessTier).IsEqualTo(AccessTier.Cool.ToString()); } } @@ -199,15 +199,15 @@ public async Task GivenARequestToArchiveAMessageAsync_WhenTagsAreTurnedOn_ThenTa await _provider?.ArchiveMessageAsync(eventMessage, CancellationToken.None)!; var tier = await blobClient.GetPropertiesAsync(); - Assert.That(tier.Value.AccessTier, Is.EqualTo(AccessTier.Hot.ToString())); + await Assert.That(tier.Value.AccessTier).IsEqualTo(AccessTier.Hot.ToString()); var tags = (await blobClient.GetTagsAsync()).Value.Tags; - Assert.That(tags["topic"], Is.EqualTo(eventMessage.Header.Topic.Value)); - Assert.That(tags["correlationId"], Is.EqualTo(eventMessage.Header.CorrelationId.Value)); - Assert.That(tags["message_type"], Is.EqualTo(eventMessage.Header.MessageType.ToString())); - Assert.That(DateTime.Parse(tags["timestamp"]), Is.EqualTo(eventMessage.Header.TimeStamp.DateTime)); - Assert.That(tags["content_type"], Is.EqualTo(eventMessage.Header.ContentType!.ToString())); + await Assert.That(tags["topic"]).IsEqualTo(eventMessage.Header.Topic.Value); + await Assert.That(tags["correlationId"]).IsEqualTo(eventMessage.Header.CorrelationId.Value); + await Assert.That(tags["message_type"]).IsEqualTo(eventMessage.Header.MessageType.ToString()); + await Assert.That(DateTime.Parse(tags["timestamp"])).IsEqualTo(eventMessage.Header.TimeStamp.DateTime); + await Assert.That(tags["content_type"]).IsEqualTo(eventMessage.Header.ContentType!.ToString()); } private BlobContainerClient GetClient(AccessTier tier , bool tags = false ) diff --git a/tests/Paramore.Brighter.Azure.Tests/AzureBlobLockingProviderTests.cs b/tests/Paramore.Brighter.Azure.Tests/AzureBlobLockingProviderTests.cs index ed15483717..5605326f80 100644 --- a/tests/Paramore.Brighter.Azure.Tests/AzureBlobLockingProviderTests.cs +++ b/tests/Paramore.Brighter.Azure.Tests/AzureBlobLockingProviderTests.cs @@ -23,8 +23,8 @@ public async Task GivenAnAzureBlobLockingProvider_WhenLockIsCalled_ItCanOnlyBeOb var firstLock = await _blobLocking.ObtainLockAsync(resourceName, CancellationToken.None); var secondLock = await _blobLocking.ObtainLockAsync(resourceName, CancellationToken.None); - Assert.That(firstLock, Is.Not.Null); - Assert.That(secondLock, Is.Null, "A Lock should not be able to be acquired"); + await Assert.That(firstLock).IsNotNull(); + await Assert.That(secondLock).IsNull(); } [Test] @@ -37,9 +37,9 @@ public async Task GivenAnAzureBlobLockingProviderWithALockedBlob_WhenReleaseLock var secondLock = await _blobLocking.ObtainLockAsync(resourceName, CancellationToken.None); var thirdLock = await _blobLocking.ObtainLockAsync(resourceName, CancellationToken.None); - Assert.That(firstLock, Is.Not.Null); - Assert.That(secondLock, Is.Not.Null, "A Lock should be able to be acquired"); - Assert.That(thirdLock, Is.Null, "A Lock should not be able to be acquired"); + await Assert.That(firstLock).IsNotNull(); + await Assert.That(secondLock).IsNotNull(); + await Assert.That(thirdLock).IsNull(); } } diff --git a/tests/Paramore.Brighter.Azure.Tests/Paramore.Brighter.Azure.Tests.csproj b/tests/Paramore.Brighter.Azure.Tests/Paramore.Brighter.Azure.Tests.csproj index 83a320efbc..8b68609723 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Paramore.Brighter.Azure.Tests.csproj +++ b/tests/Paramore.Brighter.Azure.Tests/Paramore.Brighter.Azure.Tests.csproj @@ -1,34 +1,21 @@ - - - $(BrighterTestTargetFrameworks) - enable - false - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + $(BrighterTestTargetFrameworks) + enable + false + Exe + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs index e1908ff8a0..6601a6b1f9 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -42,7 +42,7 @@ public LargeMessagePayloadAUnwrapTests() } [Test] - public void When_unwrapping_a_large_message_async() + public async Task When_unwrapping_a_large_message_async() { //arrange Thread.Sleep(3000); //allow bucket definition to propagate @@ -77,8 +77,8 @@ public void When_unwrapping_a_large_message_async() //assert //contents should be from storage - Assert.Equals(contents, transformedMessage.Value); - Assert.That(_luggageStore.HasClaim(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(_luggageStore.HasClaim(id)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs index 28f9c3a515..30fcfafa45 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message_async.cs @@ -78,8 +78,8 @@ public async Task When_unwrapping_a_large_message_async() //assert //contents should be from storage - Assert.Equals(contents, transformedMessage.Value); - Assert.That((await _luggageStore.HasClaimAsync(id, CancellationToken.None))); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(await _luggageStore.HasClaimAsync(id, CancellationToken.None)).IsTrue(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs index 31246ddefc..05ef14c074 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs @@ -1,4 +1,4 @@ -using Azure.Identity; +using Azure.Identity; using Azure.Storage.Blobs; using Paramore.Brighter.Azure.Tests.Helpers; using Paramore.Brighter.Transformers.Azure; @@ -20,7 +20,7 @@ public AzureBlobUploadTests() } [Test] - public void When_uploading_luggage_to_blob() + public async Task When_uploading_luggage_to_blob() { //arrange var luggageStore = new AzureBlobLuggageStore(new AzureBlobLuggageOptions @@ -44,12 +44,12 @@ public void When_uploading_luggage_to_blob() //assert //do we have a claim? - Assert.That(luggageStore.HasClaim(claim)); + await Assert.That(luggageStore.HasClaim(claim)).IsTrue(); //check for the contents indicated by the claim id on S3 var result = luggageStore.Retrieve(claim); var resultAsString = new StreamReader(result).ReadToEnd(); - Assert.Equals(testContent, resultAsString); + await Assert.That(resultAsString).IsEqualTo(testContent); luggageStore.Delete(claim); } diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob_async.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob_async.cs index bc71cd1089..8b7f799612 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob_async.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob_async.cs @@ -44,12 +44,12 @@ public async Task When_uploading_luggage_to_blob_async() //assert //do we have a claim? - Assert.That(await luggageStore.HasClaimAsync(claim, CancellationToken.None)); + await Assert.That(await luggageStore.HasClaimAsync(claim, CancellationToken.None)).IsTrue(); //check for the contents indicated by the claim id on S3 var result = await luggageStore.RetrieveAsync(claim, CancellationToken.None); var resultAsString = await new StreamReader(result).ReadToEndAsync(); - Assert.Equals(testContent, resultAsString); + await Assert.That(resultAsString).IsEqualTo(testContent); await luggageStore.DeleteAsync(claim, CancellationToken.None); diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs index f84915d61c..01325cae38 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs @@ -47,7 +47,7 @@ public LargeMessagePayloadWrapTests() } [Test] - public void When_wrapping_a_large_message() + public async Task When_wrapping_a_large_message() { _luggageStore.EnsureStoreExists(); @@ -56,14 +56,14 @@ public void When_wrapping_a_large_message() var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); //assert - Assert.That(message.Header.DataRef, Is.Not.Null); - Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.That(message.Header.DataRef, Is.EqualTo((string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK])); + await Assert.That(message.Header.DataRef).IsNotNull(); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsEqualTo((string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equals($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.That(_luggageStore.HasClaim(_id)); + await Assert.That(_luggageStore.HasClaim(_id)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs index 16c64dd8aa..a0defbb661 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message_async.cs @@ -57,14 +57,14 @@ public async Task When_wrapping_a_large_message_async() var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); //assert - Assert.That(message.Header.DataRef, Is.Not.Null); - Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.That(message.Header.DataRef, Is.EqualTo((string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK])); + await Assert.That(message.Header.DataRef).IsNotNull(); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsEqualTo((string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equals($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.That(await _luggageStore.HasClaimAsync(_id, CancellationToken.None)); + await Assert.That(await _luggageStore.HasClaimAsync(_id, CancellationToken.None)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Azure.Tests/Usings.cs b/tests/Paramore.Brighter.Azure.Tests/Usings.cs index 324456763a..a905505d18 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Usings.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Usings.cs @@ -1 +1 @@ -global using NUnit.Framework; +// NUnit global using removed during TUnit migration diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs index 2cbf452974..f4374ad7eb 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/AzureServiceBusChannelFactoryTests.cs @@ -1,40 +1,39 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; -using Xunit; using Paramore.Brighter.MessagingGateway.AzureServiceBus; namespace Paramore.Brighter.AzureServiceBus.Tests; public class AzureServiceBusChannelFactoryTests { - [Fact] - public void When_the_timeout_is_below_400_ms_it_should_throw_an_exception() + [Test] + public async Task When_the_timeout_is_below_400_ms_it_should_throw_an_exception() { var factory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(new AzureServiceBusConfiguration("Endpoint=sb://someString.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=oUWJw7777s7ydjdafqFqhk9O7TOs="))); var subscription = new AzureServiceBusSubscription(new SubscriptionName("name"), new ChannelName("name"), new RoutingKey("name"), bufferSize: 1, noOfPerformers: 1, messagePumpType: MessagePumpType.Proactor, timeOut: TimeSpan.FromMilliseconds(399)); - ArgumentException exception = Assert.Throws(() => factory.CreateSyncChannel(subscription)); + var exception = Assert.ThrowsExactly(() => factory.CreateSyncChannel(subscription)); - Assert.Equal("The minimum allowed timeout is 400 milliseconds", exception.Message); + await Assert.That(exception.Message).IsEqualTo("The minimum allowed timeout is 400 milliseconds"); } - [Fact] - public void When_the_timeout_is_below_400_ms_it_should_throw_an_exception_async_channel() + [Test] + public async Task When_the_timeout_is_below_400_ms_it_should_throw_an_exception_async_channel() { var factory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(new AzureServiceBusConfiguration("Endpoint=sb://someString.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=oUWJw7777s7ydjdafqFqhk9O7TOs="))); var subscription = new AzureServiceBusSubscription(new SubscriptionName("name"), new ChannelName("name"), new RoutingKey("name"), bufferSize:1, noOfPerformers:1, messagePumpType: MessagePumpType.Proactor, timeOut: TimeSpan.FromMilliseconds(399)); - ArgumentException exception = Assert.Throws(() => factory.CreateAsyncChannel(subscription)); + var exception = Assert.ThrowsExactly(() => factory.CreateAsyncChannel(subscription)); - Assert.Equal("The minimum allowed timeout is 400 milliseconds", exception.Message); + await Assert.That(exception.Message).IsEqualTo("The minimum allowed timeout is 400 milliseconds"); } - [Fact] + [Test] public async Task When_the_timeout_is_below_400_ms_it_should_throw_an_exception_async_channel_async() { var factory = new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(new AzureServiceBusConfiguration("Endpoint=sb://someString.servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=oUWJw7777s7ydjdafqFqhk9O7TOs="))); @@ -42,8 +41,8 @@ public async Task When_the_timeout_is_below_400_ms_it_should_throw_an_exception_ var subscription = new AzureServiceBusSubscription(new SubscriptionName("name"), new ChannelName("name"), new RoutingKey("name"), bufferSize:1, noOfPerformers:1, messagePumpType: MessagePumpType.Proactor, timeOut: TimeSpan.FromMilliseconds(399)); - ArgumentException exception = await Assert.ThrowsAsync(() => factory.CreateAsyncChannelAsync(subscription)); + var exception = await Assert.ThrowsAsync(() => factory.CreateAsyncChannelAsync(subscription)); - Assert.Equal("The minimum allowed timeout is 400 milliseconds", exception.Message); + await Assert.That(exception.Message).IsEqualTo("The minimum allowed timeout is 400 milliseconds"); } } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusBulkMessageProducerTestsAsync.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusBulkMessageProducerTestsAsync.cs index 9989eb0001..26ad64b22f 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusBulkMessageProducerTestsAsync.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusBulkMessageProducerTestsAsync.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; @@ -7,7 +7,6 @@ using Azure.Messaging.ServiceBus; using Paramore.Brighter.AzureServiceBus.Tests.Fakes; using Paramore.Brighter.MessagingGateway.AzureServiceBus; -using Xunit; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway.Proactor; @@ -38,7 +37,7 @@ public AzureServiceBusBulkMessageProducerTestsAsync() ); } - [Fact] + [Test] public async Task When_the_topic_exists_and_sending_a_batch_with_one_message_it_should_send_the_message_to_the_correct_topicclient() { @@ -61,14 +60,14 @@ public async Task ServiceBusMessage sentMessage = _topicClient.SentMessages.Single(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_EVENT", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(2, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_EVENT"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(2); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_sending_a_command_message_type_message_it_should_set_the_correct_messagetype_property( bool useQueues) { @@ -92,14 +91,14 @@ public async Task When_sending_a_command_message_type_message_it_should_set_the_ ServiceBusMessage sentMessage = _topicClient.SentMessages.Single(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_COMMAND", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(2, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(2); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_the_topic_does_not_exist_it_should_be_created_and_the_message_is_sent_to_the_correct_topicclient( bool useQueues) @@ -122,13 +121,13 @@ public async Task ServiceBusMessage sentMessage = _topicClient.SentMessages.Single(); - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_a_message_batch_is_created_and_an_exception_occurs_close_is_still_called(bool useQueues) { byte[] messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -158,12 +157,12 @@ public async Task When_a_message_batch_is_created_and_an_exception_occurs_close_ // ignored } - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_a_message_batch_is_send_and_an_exception_occurs_close_is_still_called(bool useQueues) { byte[] messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -192,10 +191,10 @@ public async Task When_a_message_batch_is_send_and_an_exception_occurs_close_is_ // ignored } - Assert.Equal(2, _topicClient.ClosedCount); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(2); } - [Fact] + [Test] public async Task When_a_message_batch_is_created_for_a_couple_message_that_exceeds_message_batch_size_a_new_batch_is_created() { @@ -227,14 +226,14 @@ public async Task ServiceBusMessage sentMessage1 = _topicClient.SentMessages.Single(x => x.MessageId == message1.Id.Value); ServiceBusMessage sentMessage2 = _topicClient.SentMessages.Single(x => x.MessageId == message2.Id.Value); - Assert.Equal(2, batches.Count()); - Assert.Equal(message1.Body.Value, sentMessage1.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage1.ApplicationProperties["MessageType"]); - Assert.Equal(message2.Body.Value, sentMessage2.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage2.ApplicationProperties["MessageType"]); + await Assert.That(batches.Count()).IsEqualTo(2); + await Assert.That(sentMessage1.Body.ToString()).IsEqualTo(message1.Body.Value); + await Assert.That(sentMessage1.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(sentMessage2.Body.ToString()).IsEqualTo(message2.Body.Value); + await Assert.That(sentMessage2.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); } - [Fact] + [Test] public async Task When_a_message_batch_is_created_for_a_single_message_that_exceeds_message_batch_size_a_single_message_batch_is_created() { @@ -254,13 +253,13 @@ public async Task ServiceBusMessage sentMessage1 = _topicClient.SentMessages.Single(x => x.MessageId == message1.Id.Value); AzureServiceBusSingleMessageBatch? singleMessageBatch = batches.First() as AzureServiceBusSingleMessageBatch; - Assert.Single(batches); - Assert.True(singleMessageBatch is not null); - Assert.Equal(message1.Body.Value, sentMessage1.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage1.ApplicationProperties["MessageType"]); + await Assert.That(batches).HasSingleItem(); + await Assert.That(singleMessageBatch is not null).IsTrue(); + await Assert.That(sentMessage1.Body.ToString()).IsEqualTo(message1.Body.Value); + await Assert.That(sentMessage1.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); } - [Fact] + [Test] public async Task When_a_message_batch_is_created_for_a_few_messages_with_1_that_exceeds_message_batch_size_a_new_batch_is_created() { @@ -296,12 +295,12 @@ public async Task ServiceBusMessage sentMessage2 = _topicClient.SentMessages.Single(x => x.MessageId == message2.Id.Value); ServiceBusMessage sentMessage3 = _topicClient.SentMessages.Single(x => x.MessageId == message3.Id.Value); - Assert.Equal(2, batches.Count()); - Assert.Equal(message1.Body.Value, sentMessage1.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage1.ApplicationProperties["MessageType"]); - Assert.Equal(message2.Body.Value, sentMessage2.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage2.ApplicationProperties["MessageType"]); - Assert.Equal(message3.Body.Value, sentMessage3.Body.ToString()); - Assert.Equal("MT_COMMAND", sentMessage3.ApplicationProperties["MessageType"]); + await Assert.That(batches.Count()).IsEqualTo(2); + await Assert.That(sentMessage1.Body.ToString()).IsEqualTo(message1.Body.Value); + await Assert.That(sentMessage1.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(sentMessage2.Body.ToString()).IsEqualTo(message2.Body.Value); + await Assert.That(sentMessage2.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(sentMessage3.Body.ToString()).IsEqualTo(message3.Body.Value); + await Assert.That(sentMessage3.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); } } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs index 404e7d4d84..d68aa1506b 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,7 +8,6 @@ using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AzureServiceBus; using Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrappers; -using Xunit; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway.Proactor; @@ -37,7 +36,7 @@ public AzureServiceBusConsumerTestsAsync() _nameSpaceManagerWrapper, _fakeMessageReceiver); } - [Fact] + [Test] public async Task When_a_subscription_exists_and_messages_are_in_the_queue_the_messages_are_returned() { _nameSpaceManagerWrapper.ResetState(); @@ -63,16 +62,16 @@ public async Task When_a_subscription_exists_and_messages_are_in_the_queue_the_m Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); - Assert.Equal("somebody2", result[1].Body.Value); - Assert.Equal("topic", result[1].Header.Topic); - Assert.Equal(MessageType.MT_DOCUMENT, result[1].Header.MessageType); + await Assert.That(result[1].Body.Value).IsEqualTo("somebody2"); + await Assert.That(result[1].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[1].Header.MessageType).IsEqualTo(MessageType.MT_DOCUMENT); } - [Fact] + [Test] public async Task When_a_subscription_does_not_exist_and_messages_are_in_the_queue_then_the_subscription_is_created_and_messages_are_returned() { _nameSpaceManagerWrapper.ResetState(); @@ -90,10 +89,10 @@ public async Task When_a_subscription_does_not_exist_and_messages_are_in_the_que Message[] result =await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await _nameSpaceManagerWrapper.SubscriptionExistsAsync("topic", "subscription"); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); } - [Fact] + [Test] public async Task When_a_message_is_a_command_type_then_the_message_type_is_set_correctly() { _nameSpaceManagerWrapper.ResetState(); @@ -111,12 +110,12 @@ public async Task When_a_message_is_a_command_type_then_the_message_type_is_set_ Message[] result =await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_COMMAND, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] + [Test] public async Task When_a_message_is_a_command_type_and_it_is_specified_in_funny_casing_then_the_message_type_is_set_correctly() { _nameSpaceManagerWrapper.ResetState(); @@ -134,12 +133,12 @@ public async Task When_a_message_is_a_command_type_and_it_is_specified_in_funny_ Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_COMMAND, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] + [Test] public async Task When_the_specified_message_type_is_unknown_then_it_should_default_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); @@ -157,10 +156,10 @@ public async Task When_the_specified_message_type_is_unknown_then_it_should_defa Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] + [Test] public async Task When_the_message_type_is_not_specified_it_should_default_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); @@ -178,12 +177,12 @@ public async Task When_the_message_type_is_not_specified_it_should_default_to_MT Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] + [Test] public async Task When_the_user_properties_on_the_azure_sb_message_is_null_it_should_default_to_message_type_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); @@ -202,12 +201,12 @@ public async Task When_the_user_properties_on_the_azure_sb_message_is_null_it_sh Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] + [Test] public async Task When_there_are_no_messages_then_it_returns_an_empty_array() { _nameSpaceManagerWrapper.ResetState(); @@ -217,10 +216,10 @@ public async Task When_there_are_no_messages_then_it_returns_an_empty_array() _messageReceiver.MessageQueue = brokeredMessageList; Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Empty(result); + await Assert.That(result).IsEmpty(); } - [Fact] + [Test] public async Task When_trying_to_create_a_subscription_which_was_already_created_by_another_thread_it_should_ignore_the_error() { _nameSpaceManagerWrapper.ResetState(); @@ -239,10 +238,10 @@ public async Task When_trying_to_create_a_subscription_which_was_already_created Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); } - [Fact] + [Test] public async Task When_dispose_is_called_the_close_method_is_called() { _nameSpaceManagerWrapper.ResetState(); @@ -250,10 +249,10 @@ public async Task When_dispose_is_called_the_close_method_is_called() await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.Zero); await _azureServiceBusConsumer.DisposeAsync(); - Assert.True(_messageReceiver.IsClosedOrClosing); + await Assert.That(_messageReceiver.IsClosedOrClosing).IsTrue(); } - [Fact] + [Test] public async Task When_requeue_is_called_and_the_delay_is_zero_the_send_method_is_called() { _nameSpaceManagerWrapper.ResetState(); @@ -266,11 +265,11 @@ public async Task When_requeue_is_called_and_the_delay_is_zero_the_send_method_i await _azureServiceBusConsumer.RequeueAsync(message, TimeSpan.Zero); - Assert.Single(_fakeMessageProducer.SentMessages); + await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } - [Fact] - public void When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithDelay_method_is_called() + [Test] + public async Task When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithDelay_method_is_called() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -283,34 +282,33 @@ public void When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithD _azureServiceBusConsumer.Requeue(message, TimeSpan.FromMilliseconds(100)); - Assert.Single(_fakeMessageProducer.SentMessages); + await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } - [Fact] - public void - When_there_is_an_error_talking_to_servicebus_when_checking_if_subscription_exist_then_a_ChannelFailureException_is_raised() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_checking_if_subscription_exist_then_a_ChannelFailureException_is_raised() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.CreateSubscriptionException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); } - [Fact] - public void When_there_is_an_error_talking_to_servicebus_when_creating_the_subscription_then_a_ChannelFailureException_is_raised_and_ManagementClientWrapper_is_reinitilised() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_creating_the_subscription_then_a_ChannelFailureException_is_raised_and_ManagementClientWrapper_is_reinitilised() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.CreateSubscriptionException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); - Assert.Equal(1, _nameSpaceManagerWrapper.ResetCount); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); + await Assert.That(_nameSpaceManagerWrapper.ResetCount).IsEqualTo(1); } /// /// TODO: review /// - [Fact] - public void When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_ChannelFailureException_is_raised_and_the_messageReceiver_is_recreated() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_ChannelFailureException_is_raised_and_the_messageReceiver_is_recreated() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -318,13 +316,13 @@ public void When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_C _messageReceiver.MessageQueue.Clear(); _messageReceiver.ReceiveException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); - Assert.Equal(2, _fakeMessageReceiver.CreationCount); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); + await Assert.That(_fakeMessageReceiver.CreationCount).IsEqualTo(2); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if_it_exists_every_time(bool subscriptionExists) { _nameSpaceManagerWrapper.ResetState(); @@ -345,13 +343,13 @@ public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); //Subscription is only created once - Assert.Equal(1, _nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))); + await Assert.That(_nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))).IsEqualTo(1); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Fact] - public void When_MessagingEntityAlreadyExistsException_does_not_check_if_subscription_exists() + [Test] + public async Task When_MessagingEntityAlreadyExistsException_does_not_check_if_subscription_exists() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -372,13 +370,13 @@ public void When_MessagingEntityAlreadyExistsException_does_not_check_if_subscri Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Fact] - public void When_a_message_contains_a_null_body_message_is_still_processed() + [Test] + public async Task When_a_message_contains_a_null_body_message_is_still_processed() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -398,23 +396,23 @@ public void When_a_message_contains_a_null_body_message_is_still_processed() Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal(string.Empty, result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo(string.Empty); } - [Fact] - public void When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() + [Test] + public async Task When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() { _nameSpaceManagerWrapper.Topics.Add("topic", new ()); _messageReceiver.Close(); Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal(MessageType.MT_QUIT, result[0].Header.MessageType); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_QUIT); } - [Fact] - public void When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_Channel_Failure_is_Raised() + [Test] + public async Task When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_Channel_Failure_is_Raised() { _nameSpaceManagerWrapper.ResetState(); @@ -424,6 +422,6 @@ public void When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_ var azureServiceBusConsumerValidate = new AzureServiceBusTopicConsumer(sub, _fakeMessageProducer, _nameSpaceManagerWrapper, _fakeMessageReceiver); - Assert.Throws(() => azureServiceBusConsumerValidate.Receive(TimeSpan.FromMilliseconds(400))); + await Assert.That(() => azureServiceBusConsumerValidate.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); } } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs index 6893c2525f..ddfd58553f 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using System.Text; @@ -6,7 +6,6 @@ using Azure.Messaging.ServiceBus; using Paramore.Brighter.AzureServiceBus.Tests.Fakes; using Paramore.Brighter.MessagingGateway.AzureServiceBus; -using Xunit; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway.Proactor { @@ -38,7 +37,7 @@ public AzureServiceBusMessageProducerTestsAsync() ); } - [Fact] + [Test] public async Task When_the_topic_exists_and_sending_a_message_with_no_delay_it_should_send_the_message_to_the_correct_topicclient() { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -53,14 +52,14 @@ await _producer.SendAsync(new Message( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_EVENT", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_EVENT"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_sending_a_command_message_type_message_with_no_delay_it_should_set_the_correct_messagetype_property(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -78,14 +77,14 @@ await producer.SendAsync(new Message( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_COMMAND", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_the_topic_does_not_exist_it_should_be_created_and_the_message_is_sent_to_the_correct_topicclient(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -100,13 +99,13 @@ await producer.SendAsync(new Message( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_a_message_is_send_and_an_exception_occurs_close_is_still_called(bool useQueues) { _nameSpaceManagerWrapper.ResetState(); @@ -128,12 +127,12 @@ await producer.SendAsync(new Message( // ignored } - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_the_topic_exists_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -151,14 +150,14 @@ await producer.SendWithDelayAsync( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_EVENT", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_EVENT"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_sending_a_command_message_type_message_with_delay_it_should_set_the_correct_messagetype_property(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -175,14 +174,14 @@ await producer.SendWithDelayAsync(new Message( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_COMMAND", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_the_topic_does_not_exist_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -197,17 +196,17 @@ await producer.SendWithDelayAsync(new Message( ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(true, true)] - [InlineData(false, true)] - [InlineData(true, false)] - [InlineData(false, false)] + [Test] + [Arguments(true, true)] + [Arguments(false, true)] + [Arguments(true, false)] + [Arguments(false, false)] public async Task Once_the_topic_is_created_it_then_does_not_check_if_it_exists_every_time(bool topicExists, bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -231,14 +230,14 @@ await producer.SendWithDelayAsync(new Message( new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); if (topicExists == false) - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_there_is_an_error_talking_to_servicebus_when_creating_the_topic_the_ManagementClientWrapper_is_reinitilised(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -252,14 +251,14 @@ await Assert.ThrowsAsync(() => producer.SendWithDelayAsync( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)) ); - Assert.Equal(1, _nameSpaceManagerWrapper.ResetCount); + await Assert.That(_nameSpaceManagerWrapper.ResetCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void When_there_is_an_error_getting_a_topic_client_the_connection_for_topic_client_is_retried(bool useQueues) + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_there_is_an_error_getting_a_topic_client_the_connection_for_topic_client_is_retried(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -276,10 +275,10 @@ public void When_there_is_an_error_getting_a_topic_client_the_connection_for_top new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) ); - Assert.Single(_topicClient.SentMessages); + await Assert.That(_topicClient.SentMessages).HasSingleItem(); } - [Fact] + [Test] public async Task When_the_topic_does_not_exist_and_Missing_is_set_to_Validate_an_exception_is_raised() { var messageBody = Encoding.UTF8.GetBytes("A message body"); diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs index 0216ee10c7..f8061dfcf2 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,7 +8,6 @@ using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.AzureServiceBus; using Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrappers; -using Xunit; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway.Reactor; @@ -37,8 +36,8 @@ public AzureServiceBusConsumerTests() _nameSpaceManagerWrapper, _fakeMessageReceiver); } - [Fact] - public void When_a_subscription_exists_and_messages_are_in_the_queue_the_messages_are_returned() + [Test] + public async Task When_a_subscription_exists_and_messages_are_in_the_queue_the_messages_are_returned() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -63,16 +62,16 @@ public void When_a_subscription_exists_and_messages_are_in_the_queue_the_message Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); - Assert.Equal("somebody2", result[1].Body.Value); - Assert.Equal("topic", result[1].Header.Topic); - Assert.Equal(MessageType.MT_DOCUMENT, result[1].Header.MessageType); + await Assert.That(result[1].Body.Value).IsEqualTo("somebody2"); + await Assert.That(result[1].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[1].Header.MessageType).IsEqualTo(MessageType.MT_DOCUMENT); } - [Fact] + [Test] public async Task When_a_subscription_does_not_exist_and_messages_are_in_the_queue_then_the_subscription_is_created_and_messages_are_returned() { _nameSpaceManagerWrapper.ResetState(); @@ -91,11 +90,11 @@ public async Task When_a_subscription_does_not_exist_and_messages_are_in_the_que await _nameSpaceManagerWrapper.SubscriptionExistsAsync("topic", "subscription"); //A.CallTo(() => _nameSpaceManagerWrapper.f => f.CreateSubscription("topic", "subscription", _subConfig)).MustHaveHappened(); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); } - [Fact] - public void When_a_message_is_a_command_type_then_the_message_type_is_set_correctly() + [Test] + public async Task When_a_message_is_a_command_type_then_the_message_type_is_set_correctly() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -112,13 +111,13 @@ public void When_a_message_is_a_command_type_then_the_message_type_is_set_correc Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_COMMAND, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void When_a_message_is_a_command_type_and_it_is_specified_in_funny_casing_then_the_message_type_is_set_correctly() + [Test] + public async Task When_a_message_is_a_command_type_and_it_is_specified_in_funny_casing_then_the_message_type_is_set_correctly() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -135,13 +134,13 @@ public void When_a_message_is_a_command_type_and_it_is_specified_in_funny_casing Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_COMMAND, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void When_the_specified_message_type_is_unknown_then_it_should_default_to_MT_EVENT() + [Test] + public async Task When_the_specified_message_type_is_unknown_then_it_should_default_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -158,11 +157,11 @@ public void When_the_specified_message_type_is_unknown_then_it_should_default_to Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] - public void When_the_message_type_is_not_specified_it_should_default_to_MT_EVENT() + [Test] + public async Task When_the_message_type_is_not_specified_it_should_default_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -179,13 +178,13 @@ public void When_the_message_type_is_not_specified_it_should_default_to_MT_EVENT Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] - public void When_the_user_properties_on_the_azure_sb_message_is_null_it_should_default_to_message_type_to_MT_EVENT() + [Test] + public async Task When_the_user_properties_on_the_azure_sb_message_is_null_it_should_default_to_message_type_to_MT_EVENT() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -203,13 +202,13 @@ public void When_the_user_properties_on_the_azure_sb_message_is_null_it_should_d Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); - Assert.Equal("topic", result[0].Header.Topic); - Assert.Equal(MessageType.MT_EVENT, result[0].Header.MessageType); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); + await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] - public void When_there_are_no_messages_then_it_returns_an_empty_array() + [Test] + public async Task When_there_are_no_messages_then_it_returns_an_empty_array() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -218,11 +217,11 @@ public void When_there_are_no_messages_then_it_returns_an_empty_array() _messageReceiver.MessageQueue = brokeredMessageList; Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Empty(result); + await Assert.That(result).IsEmpty(); } - [Fact] - public void When_trying_to_create_a_subscription_which_was_already_created_by_another_thread_it_should_ignore_the_error() + [Test] + public async Task When_trying_to_create_a_subscription_which_was_already_created_by_another_thread_it_should_ignore_the_error() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.CreateSubscriptionException = @@ -240,22 +239,22 @@ public void When_trying_to_create_a_subscription_which_was_already_created_by_an Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); } - [Fact] - public void When_dispose_is_called_the_close_method_is_called() + [Test] + public async Task When_dispose_is_called_the_close_method_is_called() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); _azureServiceBusConsumer.Receive(TimeSpan.Zero); _azureServiceBusConsumer.Dispose(); - Assert.True(_messageReceiver.IsClosedOrClosing); + await Assert.That(_messageReceiver.IsClosedOrClosing).IsTrue(); } - [Fact] - public void When_requeue_is_called_and_the_delay_is_zero_the_send_method_is_called() + [Test] + public async Task When_requeue_is_called_and_the_delay_is_zero_the_send_method_is_called() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -267,11 +266,11 @@ public void When_requeue_is_called_and_the_delay_is_zero_the_send_method_is_call _azureServiceBusConsumer.Requeue(message, TimeSpan.Zero); - Assert.Single(_fakeMessageProducer.SentMessages); + await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } - [Fact] - public void When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithDelay_method_is_called() + [Test] + public async Task When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithDelay_method_is_called() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -284,34 +283,33 @@ public void When_requeue_is_called_and_the_delay_is_more_than_zero_the_sendWithD _azureServiceBusConsumer.Requeue(message, TimeSpan.FromMilliseconds(100)); - Assert.Single(_fakeMessageProducer.SentMessages); + await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } - [Fact] - public void - When_there_is_an_error_talking_to_servicebus_when_checking_if_subscription_exist_then_a_ChannelFailureException_is_raised() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_checking_if_subscription_exist_then_a_ChannelFailureException_is_raised() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.CreateSubscriptionException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); } - [Fact] - public void When_there_is_an_error_talking_to_servicebus_when_creating_the_subscription_then_a_ChannelFailureException_is_raised_and_ManagementClientWrapper_is_reinitilised() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_creating_the_subscription_then_a_ChannelFailureException_is_raised_and_ManagementClientWrapper_is_reinitilised() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.CreateSubscriptionException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); - Assert.Equal(1, _nameSpaceManagerWrapper.ResetCount); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); + await Assert.That(_nameSpaceManagerWrapper.ResetCount).IsEqualTo(1); } /// /// TODO: review /// - [Fact] - public void When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_ChannelFailureException_is_raised_and_the_messageReceiver_is_recreated() + [Test] + public async Task When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_ChannelFailureException_is_raised_and_the_messageReceiver_is_recreated() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", ["subscription"]); @@ -319,13 +317,13 @@ public void When_there_is_an_error_talking_to_servicebus_when_receiving_then_a_C _messageReceiver.MessageQueue.Clear(); _messageReceiver.ReceiveException = new Exception(); - Assert.Throws(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))); - Assert.Equal(2, _fakeMessageReceiver.CreationCount); + await Assert.That(() => _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); + await Assert.That(_fakeMessageReceiver.CreationCount).IsEqualTo(2); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if_it_exists_every_time(bool subscriptionExists) { _nameSpaceManagerWrapper.ResetState(); @@ -346,13 +344,13 @@ public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); //Subscription is only created once - Assert.Equal(1, _nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))); + await Assert.That(_nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))).IsEqualTo(1); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Fact] - public void When_MessagingEntityAlreadyExistsException_does_not_check_if_subscription_exists() + [Test] + public async Task When_MessagingEntityAlreadyExistsException_does_not_check_if_subscription_exists() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -373,13 +371,13 @@ public void When_MessagingEntityAlreadyExistsException_does_not_check_if_subscri Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal("somebody", result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Fact] - public void When_a_message_contains_a_null_body_message_is_still_processed() + [Test] + public async Task When_a_message_contains_a_null_body_message_is_still_processed() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); @@ -399,23 +397,23 @@ public void When_a_message_contains_a_null_body_message_is_still_processed() Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal(string.Empty, result[0].Body.Value); + await Assert.That(result[0].Body.Value).IsEqualTo(string.Empty); } - [Fact] - public void When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() + [Test] + public async Task When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() { _nameSpaceManagerWrapper.Topics.Add("topic", new ()); _messageReceiver.Close(); Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - Assert.Equal(MessageType.MT_QUIT, result[0].Header.MessageType); + await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_QUIT); } - [Fact] - public void When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_Channel_Failure_is_Raised() + [Test] + public async Task When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_Channel_Failure_is_Raised() { _nameSpaceManagerWrapper.ResetState(); @@ -425,6 +423,6 @@ public void When_a_subscription_does_not_exist_and_Missing_is_set_to_Validate_a_ var azureServiceBusConsumerValidate = new AzureServiceBusTopicConsumer(sub, _fakeMessageProducer, _nameSpaceManagerWrapper, _fakeMessageReceiver); - Assert.Throws(() => azureServiceBusConsumerValidate.Receive(TimeSpan.FromMilliseconds(400))); + await Assert.That(() => azureServiceBusConsumerValidate.Receive(TimeSpan.FromMilliseconds(400))).ThrowsExactly(); } } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs index 3a0233dba6..3af1753d55 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using System.Text; @@ -6,7 +6,6 @@ using Azure.Messaging.ServiceBus; using Paramore.Brighter.AzureServiceBus.Tests.Fakes; using Paramore.Brighter.MessagingGateway.AzureServiceBus; -using Xunit; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway.Reactor { @@ -38,8 +37,8 @@ public AzureServiceBusMessageProducerTests() ); } - [Fact] - public void When_the_topic_exists_and_sending_a_message_with_no_delay_it_should_send_the_message_to_the_correct_topicclient() + [Test] + public async Task When_the_topic_exists_and_sending_a_message_with_no_delay_it_should_send_the_message_to_the_correct_topicclient() { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -53,15 +52,15 @@ public void When_the_topic_exists_and_sending_a_message_with_no_delay_it_should_ ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_EVENT", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_EVENT"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void When_sending_a_command_message_type_message_with_no_delay_it_should_set_the_correct_messagetype_property(bool useQueues) + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_sending_a_command_message_type_message_with_no_delay_it_should_set_the_correct_messagetype_property(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -78,15 +77,15 @@ public void When_sending_a_command_message_type_message_with_no_delay_it_should_ ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_COMMAND", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void When_the_topic_does_not_exist_it_should_be_created_and_the_message_is_sent_to_the_correct_topicclient(bool useQueues) + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_the_topic_does_not_exist_it_should_be_created_and_the_message_is_sent_to_the_correct_topicclient(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -100,14 +99,14 @@ public void When_the_topic_does_not_exist_it_should_be_created_and_the_message_i ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void When_a_message_is_send_and_an_exception_occurs_close_is_still_called(bool useQueues) + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_a_message_is_send_and_an_exception_occurs_close_is_still_called(bool useQueues) { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", []); @@ -128,15 +127,14 @@ public void When_a_message_is_send_and_an_exception_occurs_close_is_still_called // ignored } - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void - When_the_topic_exists_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient(bool useQueues) - { + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_the_topic_exists_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient(bool useQueues) + { var messageBody = Encoding.UTF8.GetBytes("A message body"); _nameSpaceManagerWrapper.ResetState(); @@ -152,18 +150,17 @@ public void ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_EVENT", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_EVENT"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void - When_sending_a_command_message_type_message_with_delay_it_should_set_the_correct_messagetype_property( + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_sending_a_command_message_type_message_with_delay_it_should_set_the_correct_messagetype_property( bool useQueues) - { + { var messageBody = Encoding.UTF8.GetBytes("A message body"); _nameSpaceManagerWrapper.ResetState(); @@ -178,18 +175,17 @@ public void ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal("MT_COMMAND", sentMessage.ApplicationProperties["MessageType"]); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(sentMessage.ApplicationProperties["MessageType"]).IsEqualTo("MT_COMMAND"); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void - When_the_topic_does_not_exist_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient( + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_the_topic_does_not_exist_and_sending_a_message_with_a_delay_it_should_send_the_message_to_the_correct_topicclient( bool useQueues) - { + { var messageBody = Encoding.UTF8.GetBytes("A message body"); _nameSpaceManagerWrapper.ResetState(); @@ -202,18 +198,18 @@ public void ServiceBusMessage sentMessage = _topicClient.SentMessages.First(); - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); - Assert.Equal(messageBody, sentMessage.Body.ToArray()); - Assert.Equal(1, _topicClient.ClosedCount); + await Assert.That(sentMessage.Body.ToArray()).IsEqualTo(messageBody); + await Assert.That(_topicClient.ClosedCount).IsEqualTo(1); } - [Theory] - [InlineData(true, true)] - [InlineData(false, true)] - [InlineData(true, false)] - [InlineData(false, false)] - public void Once_the_topic_is_created_it_then_does_not_check_if_it_exists_every_time(bool topicExists, bool useQueues) + [Test] + [Arguments(true, true)] + [Arguments(false, true)] + [Arguments(true, false)] + [Arguments(false, false)] + public async Task Once_the_topic_is_created_it_then_does_not_check_if_it_exists_every_time(bool topicExists, bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -236,14 +232,14 @@ public void Once_the_topic_is_created_it_then_does_not_check_if_it_exists_every_ new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); if (topicExists == false) - Assert.Equal(1, _nameSpaceManagerWrapper.CreateCount); + await Assert.That(_nameSpaceManagerWrapper.CreateCount).IsEqualTo(1); - Assert.Equal(1, _nameSpaceManagerWrapper.ExistCount); + await Assert.That(_nameSpaceManagerWrapper.ExistCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] + [Test] + [Arguments(false)] + [Arguments(true)] public async Task When_there_is_an_error_talking_to_servicebus_when_creating_the_topic_the_ManagementClientWrapper_is_reinitilised(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -257,14 +253,14 @@ await Assert.ThrowsAsync(() => producer.SendWithDelayAsync( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)) ); - Assert.Equal(1, _nameSpaceManagerWrapper.ResetCount); + await Assert.That(_nameSpaceManagerWrapper.ResetCount).IsEqualTo(1); } - [Theory] - [InlineData(false)] - [InlineData(true)] - public void When_there_is_an_error_getting_a_topic_client_the_connection_for_topic_client_is_retried(bool useQueues) + [Test] + [Arguments(false)] + [Arguments(true)] + public async Task When_there_is_an_error_getting_a_topic_client_the_connection_for_topic_client_is_retried(bool useQueues) { var messageBody = Encoding.UTF8.GetBytes("A message body"); @@ -281,10 +277,10 @@ public void When_there_is_an_error_getting_a_topic_client_the_connection_for_top new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) ); - Assert.Single(_topicClient.SentMessages); + await Assert.That(_topicClient.SentMessages).HasSingleItem(); } - [Fact] + [Test] public async Task When_the_topic_does_not_exist_and_Missing_is_set_to_Validate_an_exception_is_raised() { var messageBody = Encoding.UTF8.GetBytes("A message body"); diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs index 7d73b7def3..1c3ea5b675 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; -using Xunit; using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AzureServiceBus; @@ -13,7 +12,7 @@ namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { - [Trait("Category", "ASB")] + [Category("ASB")] public class ASBConsumerTests : IDisposable { private readonly Message _message; @@ -110,7 +109,7 @@ public ASBConsumerTests() .Create(); } - [Fact] + [Test] public async Task When_receiving_a_message_via_the_consumer() { //arrange @@ -122,34 +121,34 @@ public async Task When_receiving_a_message_via_the_consumer() var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //assert - Assert.Equal(_message.Id, message.Id); - Assert.Equal(_message.Header.Topic, message.Header.Topic); - Assert.Equal(_message.Header.MessageType, message.Header.MessageType); - Assert.Equal(_message.Header.Source.ToString(), message.Header.Source.ToString()); - Assert.Equal(_message.Header.Type, message.Header.Type); - Assert.Equal(_message.Header.TimeStamp, message.Header.TimeStamp, TimeSpan.FromSeconds(5)); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo?.Value, message.Header.ReplyTo?.Value); - Assert.Equal(_message.Header.ContentType, message.Header.ContentType); - Assert.Equal(_message.Header.PartitionKey.Value, message.Header.PartitionKey.Value); - Assert.Equal(_message.Header.DataSchema, message.Header.DataSchema); - Assert.Equal(_message.Header.Subject, message.Header.Subject); - Assert.Equal(_message.Header.HandledCount, message.Header.HandledCount); - Assert.Equal(_message.Header.Delayed.TotalMilliseconds, message.Header.Delayed.TotalMilliseconds) ; - Assert.Equal(_message.Header.TraceParent?.Value, message.Header.TraceParent?.Value); - Assert.Equal(_message.Header.TraceState?.Value, message.Header.TraceState?.Value); - Assert.Equal(MessageHeader.DefaultSpecVersion, message.Header.SpecVersion); - Assert.Equal(_message.Header.Baggage, message.Header.Baggage); + await Assert.That(message.Id).IsEqualTo(_message.Id); + await Assert.That(message.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(message.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(message.Header.Source.ToString()).IsEqualTo(_message.Header.Source.ToString()); + await Assert.That(message.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(message.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(5)); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo?.Value).IsEqualTo(_message.Header.ReplyTo?.Value); + await Assert.That(message.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(message.Header.PartitionKey.Value).IsEqualTo(_message.Header.PartitionKey.Value); + await Assert.That(message.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(message.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(message.Header.Delayed.TotalMilliseconds).IsEqualTo(_message.Header.Delayed.TotalMilliseconds) ; + await Assert.That(message.Header.TraceParent?.Value).IsEqualTo(_message.Header.TraceParent?.Value); + await Assert.That(message.Header.TraceState?.Value).IsEqualTo(_message.Header.TraceState?.Value); + await Assert.That(message.Header.SpecVersion).IsEqualTo(MessageHeader.DefaultSpecVersion); + await Assert.That(message.Header.Baggage).IsEqualTo(_message.Header.Baggage); - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); - Assert.False(message.Redelivered); + await Assert.That(message.Redelivered).IsFalse(); //clear the channel _channel.Acknowledge(message); } - [Fact] + [Test] public async Task When_rejecting_a_message_via_the_consumer() { //arrange @@ -168,15 +167,15 @@ public async Task When_rejecting_a_message_via_the_consumer() var deadLetter = await deadLetterReceiver.ReceiveMessageAsync(); - Assert.Equal(message.Id, deadLetter.MessageId); - Assert.Equal(_correlationId, deadLetter.CorrelationId); - Assert.Equal(MessageType.MT_COMMAND, _message.Header.MessageType); - Assert.Equal(message.Body.Value, deadLetter.Body.ToString()); - Assert.Equal(_message.Header.Topic.ToString(), _topicName); - Assert.Equal(TimeSpan.Zero, _message.Header.Delayed); + await Assert.That(deadLetter.MessageId).IsEqualTo(message.Id); + await Assert.That(deadLetter.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(_message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(deadLetter.Body.ToString()).IsEqualTo(message.Body.Value); + await Assert.That(_topicName).IsEqualTo(_message.Header.Topic.ToString()); + await Assert.That(_message.Header.Delayed).IsEqualTo(TimeSpan.Zero); } - [Fact] + [Test] public async Task When_requeueing_a_message_via_the_consumer() { //arrange @@ -192,23 +191,23 @@ public async Task When_requeueing_a_message_via_the_consumer() var requeuedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(message.Id, requeuedMessage.Id); - Assert.False(requeuedMessage.Redelivered); - Assert.Equal(new RoutingKey(_topicName), requeuedMessage.Header.Topic); - Assert.Equal(_correlationId, requeuedMessage.Header.CorrelationId); - Assert.Equal(_contentType, requeuedMessage.Header.ContentType); - Assert.Equal(1, requeuedMessage.Header.HandledCount); + await Assert.That(requeuedMessage.Id).IsEqualTo(message.Id); + await Assert.That(requeuedMessage.Redelivered).IsFalse(); + await Assert.That(requeuedMessage.Header.Topic).IsEqualTo(new RoutingKey(_topicName)); + await Assert.That(requeuedMessage.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(requeuedMessage.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(requeuedMessage.Header.HandledCount).IsEqualTo(1); } - [Fact] + [Test] public async Task When_A_Subscription_is_created_the_properties_are_set_as_Expected() { var sub = await _administrationClient.GetSubscriptionAsync(_topicName, _channelName, CancellationToken.None); - Assert.Equal(_subscriptionConfiguration.DeadLetteringOnMessageExpiration, sub.DeadLetteringOnMessageExpiration); - Assert.Equal(_subscriptionConfiguration.DefaultMessageTimeToLive, sub.DefaultMessageTimeToLive); - Assert.Equal(_subscriptionConfiguration.LockDuration, sub.LockDuration); - Assert.Equal(_subscriptionConfiguration.MaxDeliveryCount, sub.MaxDeliveryCount); + await Assert.That(sub.DeadLetteringOnMessageExpiration).IsEqualTo(_subscriptionConfiguration.DeadLetteringOnMessageExpiration); + await Assert.That(sub.DefaultMessageTimeToLive).IsEqualTo(_subscriptionConfiguration.DefaultMessageTimeToLive); + await Assert.That(sub.LockDuration).IsEqualTo(_subscriptionConfiguration.LockDuration); + await Assert.That(sub.MaxDeliveryCount).IsEqualTo(_subscriptionConfiguration.MaxDeliveryCount); //ToDo: Need to Add Test for Filter } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs index 2649aa9e95..12dfb7bbfe 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using System.Text.Json; using System.Threading; using System.Threading.Tasks; -using Xunit; using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AzureServiceBus; @@ -12,8 +11,8 @@ namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { - [Trait("Category", "ASB")] - [Trait("Fragile", "CI")] + [Category("ASB")] + [Property("Fragile", "CI")] public class LargeAsbMessageProducerTests : IDisposable { private readonly IAmAChannelSync _topicChannel; @@ -84,9 +83,9 @@ public LargeAsbMessageProducerTests() .Create(); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_large_message_via_the_bulk_producer(bool testQueues) { //arrange @@ -109,21 +108,21 @@ public async Task When_posting_a_large_message_via_the_bulk_producer(bool testQu //clear the queue channel.Acknowledge(message); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(_command.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_command.Id, message.Header.MessageId); - Assert.Contains(testQueues ? _queueName : _topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Id).IsEqualTo(_command.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_command.Id); + await Assert.That(message.Header.Topic.Value).Contains(testQueues ? _queueName : _topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(commandMessage.Body.Value, message.Body.Value); - Assert.Contains(testHeader, message.Header.Bag.Keys); - Assert.Equal(testHeaderValue, message.Header.Bag[testHeader]); + await Assert.That(message.Body.Value).IsEqualTo(commandMessage.Body.Value); + await Assert.That(message.Header.Bag.Keys).Contains(testHeader); + await Assert.That(message.Header.Bag[testHeader]).IsEqualTo(testHeaderValue); } private Message GenerateMessage(string topicName) => new Message( diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs index ccadd8ae3f..d37308f7f0 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using System.Text.Json; using System.Threading; using System.Threading.Tasks; -using Xunit; using Paramore.Brighter.AzureServiceBus.Tests.TestDoubles; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AzureServiceBus; @@ -12,7 +11,7 @@ namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { - [Trait("Category", "ASB")] + [Category("ASB")] public class ASBProducerTests : IDisposable { private readonly IAmAChannelSync _topicChannel; @@ -81,9 +80,9 @@ public ASBProducerTests() .Create(); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_producer(bool testQueues) { //arrange @@ -104,26 +103,26 @@ public async Task When_posting_a_message_via_the_producer(bool testQueues) //clear the queue channel.Acknowledge(message); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(_command.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_command.Id, message.Header.MessageId); - Assert.Contains(testQueues ? _queueName : _topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Id).IsEqualTo(_command.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_command.Id); + await Assert.That(message.Header.Topic.Value).Contains(testQueues ? _queueName : _topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(commandMessage.Body.Value, message.Body.Value); - Assert.Contains(testHeader, message.Header.Bag.Keys); - Assert.Equal(testHeaderValue, message.Header.Bag[testHeader]); + await Assert.That(message.Body.Value).IsEqualTo(commandMessage.Body.Value); + await Assert.That(message.Header.Bag.Keys).Contains(testHeader); + await Assert.That(message.Header.Bag[testHeader]).IsEqualTo(testHeaderValue); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_posting_a_message_via_the_bulk_producer(bool testQueues) { //arrange @@ -145,21 +144,21 @@ public async Task When_posting_a_message_via_the_bulk_producer(bool testQueues) //clear the queue channel.Acknowledge(message); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(_command.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_command.Id, message.Header.MessageId); - Assert.Contains(testQueues ? _queueName : _topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Id).IsEqualTo(_command.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_command.Id); + await Assert.That(message.Header.Topic.Value).Contains(testQueues ? _queueName : _topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); //allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That(message.Header.TimeStamp > RoundToSeconds(DateTime.UtcNow.AddMinutes(-1))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); //{"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(commandMessage.Body.Value, message.Body.Value); - Assert.Contains(testHeader, message.Header.Bag.Keys); - Assert.Equal(testHeaderValue, message.Header.Bag[testHeader]); + await Assert.That(message.Body.Value).IsEqualTo(commandMessage.Body.Value); + await Assert.That(message.Header.Bag.Keys).Contains(testHeader); + await Assert.That(message.Header.Bag[testHeader]).IsEqualTo(testHeaderValue); } private Message GenerateMessage(string topicName) => new Message( diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj b/tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj index bacf3fbe1f..53cb8b5adb 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj @@ -1,29 +1,12 @@ - $(BrighterTestTargetFrameworks) false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + Exe + + - - + - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs index 5ac55b73d1..106cdffc05 100644 --- a/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs @@ -1,22 +1,24 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Base.Test.Requests; using Paramore.Brighter.Inbox.Exceptions; -using Xunit; namespace Paramore.Brighter.Base.Test.Inbox; -public abstract class InboxAsyncTest : IAsyncLifetime +public abstract class InboxAsyncTest { protected abstract IAmAnInboxAsync Inbox { get; } protected List CreatedCommands { get; } = []; - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await BeforeEachTestAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await AfterEachTestAsync(); } @@ -50,7 +52,7 @@ protected virtual MyCommand CreateCommand() return command; } - [Fact] + [Test] public async Task When_Adding_A_Command_To_The_Inbox_It_Can_Be_Retrieved() { // Arrange @@ -62,12 +64,12 @@ public async Task When_Adding_A_Command_To_The_Inbox_It_Can_Be_Retrieved() var loadedCommand = await Inbox.GetAsync(command.Id, contextKey, null); // Assert - Assert.NotNull(loadedCommand); - Assert.Equal(command.Value, loadedCommand.Value); - Assert.Equal(command.Id, loadedCommand.Id); + await Assert.That(loadedCommand).IsNotNull(); + await Assert.That(loadedCommand.Value).IsEqualTo(command.Value); + await Assert.That(loadedCommand.Id).IsEqualTo(command.Id); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Command_With_Same_Context_Key_It_Should_Not_Throw() { // Arrange @@ -80,10 +82,10 @@ public async Task When_Adding_A_Duplicate_Command_With_Same_Context_Key_It_Shoul // Assert var exists = await Inbox.ExistsAsync(command.Id, contextKey, null); - Assert.True(exists, $"A command with '{command.Id.Value}' Id should exists"); + await Assert.That(exists).IsTrue(); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Command_With_Different_Context_Key_It_Should_Not_Throw() { // Arrange @@ -96,10 +98,10 @@ public async Task When_Adding_A_Duplicate_Command_With_Different_Context_Key_It_ // Assert var exists = await Inbox.ExistsAsync(command.Id, contextKey, null); - Assert.True(exists, $"A command with '{command.Id.Value}' Id should exists"); + await Assert.That(exists).IsTrue(); } - [Fact] + [Test] public async Task When_Getting_A_Non_Existent_Command_It_Should_Throw_RequestNotFoundException() { // Arrange @@ -110,7 +112,7 @@ public async Task When_Getting_A_Non_Existent_Command_It_Should_Throw_RequestNot await Assert.ThrowsAsync>(() => Inbox.GetAsync(commandId, contextKey, null)); } - [Fact] + [Test] public async Task When_Getting_A_Command_With_Wrong_Context_Key_It_Should_Throw_RequestNotFoundException() { // Arrange @@ -121,13 +123,13 @@ public async Task When_Getting_A_Command_With_Wrong_Context_Key_It_Should_Throw_ await Assert.ThrowsAsync>(() => Inbox.GetAsync(command.Id, Uuid.NewAsString(), null)); } - [Fact] + [Test] public async Task When_Checking_If_A_Non_Existent_Command_Exists_It_Should_Return_False() { // Act var exists = await Inbox.ExistsAsync(Uuid.NewAsString(), Uuid.NewAsString(), null); // Assert - Assert.False(exists, "A command should not exists"); + await Assert.That(exists).IsFalse(); } } diff --git a/tests/Paramore.Brighter.Base.Test/Inbox/InboxTests.cs b/tests/Paramore.Brighter.Base.Test/Inbox/InboxTests.cs index ccb8009968..dc90039b62 100644 --- a/tests/Paramore.Brighter.Base.Test/Inbox/InboxTests.cs +++ b/tests/Paramore.Brighter.Base.Test/Inbox/InboxTests.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Collections.Generic; using Paramore.Brighter.Base.Test.Requests; using Paramore.Brighter.Inbox.Exceptions; -using Xunit; namespace Paramore.Brighter.Base.Test.Inbox; @@ -49,8 +48,8 @@ protected virtual MyCommand CreateCommand() return command; } - [Fact] - public void When_Adding_A_Command_To_The_Inbox_It_Can_Be_Retrieved() + [Test] + public async Task When_Adding_A_Command_To_The_Inbox_It_Can_Be_Retrieved() { // Arrange var contextKey = Uuid.NewAsString(); @@ -61,13 +60,13 @@ public void When_Adding_A_Command_To_The_Inbox_It_Can_Be_Retrieved() var loadedCommand = Inbox.Get(command.Id, contextKey, null); // Assert - Assert.NotNull(loadedCommand); - Assert.Equal(command.Value, loadedCommand.Value); - Assert.Equal(command.Id, loadedCommand.Id); + await Assert.That(loadedCommand).IsNotNull(); + await Assert.That(loadedCommand.Value).IsEqualTo(command.Value); + await Assert.That(loadedCommand.Id).IsEqualTo(command.Id); } - [Fact] - public void When_Adding_A_Duplicate_Command_With_Same_Context_Key_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Command_With_Same_Context_Key_It_Should_Not_Throw() { // Arrange var contextKey = Uuid.NewAsString(); @@ -80,11 +79,11 @@ public void When_Adding_A_Duplicate_Command_With_Same_Context_Key_It_Should_Not_ // Assert var exists = Inbox.Exists(command.Id, contextKey, null); - Assert.True(exists, $"A command with '{command.Id.Value}' Id should exists"); + await Assert.That(exists).IsTrue(); } - [Fact] - public void When_Adding_A_Duplicate_Command_With_Different_Context_Key_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Command_With_Different_Context_Key_It_Should_Not_Throw() { // Arrange var contextKey = Uuid.NewAsString(); @@ -97,38 +96,40 @@ public void When_Adding_A_Duplicate_Command_With_Different_Context_Key_It_Should // Assert var exists = Inbox.Exists(command.Id, contextKey, null); - Assert.True(exists, $"A command with '{command.Id.Value}' Id should exists"); + await Assert.That(exists).IsTrue(); } - [Fact] - public void When_Getting_A_Non_Existent_Command_It_Should_Throw_RequestNotFoundException() + [Test] + public Task When_Getting_A_Non_Existent_Command_It_Should_Throw_RequestNotFoundException() { // Arrange var contextKey = Uuid.NewAsString(); var commandId = Uuid.NewAsString(); // Act & Assert - Assert.Throws>(() => Inbox.Get(commandId, contextKey, null)); + Assert.ThrowsExactly>(() => Inbox.Get(commandId, contextKey, null)); + return Task.CompletedTask; } - [Fact] - public void When_Getting_A_Command_With_Wrong_Context_Key_It_Should_Throw_RequestNotFoundException() + [Test] + public Task When_Getting_A_Command_With_Wrong_Context_Key_It_Should_Throw_RequestNotFoundException() { // Arrange var command = CreateCommand(); Inbox.Add(command, Uuid.NewAsString(), null); // Act & Assert - Assert.Throws>(() => Inbox.Get(command.Id, Uuid.NewAsString(), null)); + Assert.ThrowsExactly>(() => Inbox.Get(command.Id, Uuid.NewAsString(), null)); + return Task.CompletedTask; } - [Fact] - public void When_Checking_If_A_Non_Existent_Command_Exists_It_Should_Return_False() + [Test] + public async Task When_Checking_If_A_Non_Existent_Command_Exists_It_Should_Return_False() { // Act var exists = Inbox.Exists(Uuid.NewAsString(), Uuid.NewAsString(), null); // Assert - Assert.False(exists, "A command should not exists"); + await Assert.That(exists).IsFalse(); } } diff --git a/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs index 021ac7f173..e4a187d9cb 100644 --- a/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs @@ -1,18 +1,19 @@ using System; using System.Threading; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Base.Test.Locking; -public abstract class DistributedLockingAsyncTest : IAsyncLifetime +public abstract class DistributedLockingAsyncTest { - public async Task InitializeAsync() + [Before(HookType.Test)] public async Task Setup() { await BeforeEachTestAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await AfterEachTestAsync(); } @@ -32,7 +33,7 @@ protected virtual Task AfterEachTestAsync() protected virtual TimeSpan DelayBetweenTryAcquireLockOnSameResource { get; } = TimeSpan.Zero; - [Fact] + [Test] public async Task When_Obtaining_A_Lock_On_A_Resource_It_Should_Succeed() { // Arrange @@ -43,11 +44,11 @@ public async Task When_Obtaining_A_Lock_On_A_Resource_It_Should_Succeed() var @lock = await provider.ObtainLockAsync(resource, CancellationToken.None); // Assert - Assert.NotNull(@lock); - Assert.NotEmpty(@lock); + await Assert.That(@lock).IsNotNull(); + await Assert.That(@lock).IsNotEmpty(); } - [Fact] + [Test] public async Task When_Trying_To_Obtain_Same_Lock_Twice_With_Same_Instance_It_Should_Fail_Second_Time() { // Arrange @@ -59,12 +60,12 @@ public async Task When_Trying_To_Obtain_Same_Lock_Twice_With_Same_Instance_It_Sh var lock2 = await provider.ObtainLockAsync(resource, CancellationToken.None); // Assert - Assert.NotNull(lock1); - Assert.NotEmpty(lock1); - Assert.Null(lock2); + await Assert.That(lock1).IsNotNull(); + await Assert.That(lock1).IsNotEmpty(); + await Assert.That(lock2).IsNull(); } - [Fact] + [Test] public async Task When_Trying_To_Obtain_Same_Lock_With_Different_Instances_It_Should_Fail_Second_Time() { // Arrange @@ -77,12 +78,12 @@ public async Task When_Trying_To_Obtain_Same_Lock_With_Different_Instances_It_Sh var lock2 = await provider2.ObtainLockAsync(resource, CancellationToken.None); // Assert - Assert.NotNull(lock1); - Assert.NotEmpty(lock1); - Assert.Null(lock2); + await Assert.That(lock1).IsNotNull(); + await Assert.That(lock1).IsNotEmpty(); + await Assert.That(lock2).IsNull(); } - [Fact] + [Test] public async Task When_Lock_Is_Released_It_Can_Be_Obtained_Again() { // Arrange @@ -94,9 +95,9 @@ public async Task When_Lock_Is_Released_It_Can_Be_Obtained_Again() var lock2 = await provider.ObtainLockAsync(resource, CancellationToken.None); // Assert - Initial locks - Assert.NotNull(lock1); - Assert.NotEmpty(lock1); - Assert.Null(lock2); + await Assert.That(lock1).IsNotNull(); + await Assert.That(lock1).IsNotEmpty(); + await Assert.That(lock2).IsNull(); // Act - Release lock await provider.ReleaseLockAsync(resource, lock1, CancellationToken.None); @@ -108,7 +109,7 @@ public async Task When_Lock_Is_Released_It_Can_Be_Obtained_Again() // Assert - Lock can be obtained again var lock3 = await provider.ObtainLockAsync(resource, CancellationToken.None); - Assert.NotNull(lock3); - Assert.NotEmpty(lock3); + await Assert.That(lock3).IsNotNull(); + await Assert.That(lock3).IsNotEmpty(); } } diff --git a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs index acecb07de0..87383311cb 100644 --- a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs @@ -1,25 +1,27 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Base.Test.Outbox; -public abstract class OutboxAsyncTest : IAsyncLifetime +public abstract class OutboxAsyncTest { protected abstract IAmAnOutboxAsync Outbox { get; } protected List CreatedMessages { get; } = []; - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await BeforeEachTestAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await AfterEachTestAsync(); } @@ -89,7 +91,7 @@ protected virtual Message CreateRandomMessage(DateTimeOffset? timestamp = null) return message; } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange @@ -110,12 +112,12 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange @@ -136,12 +138,12 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Header.MessageId)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Header.MessageId)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Header.MessageId)); + await Assert.That(messages.Select(x => x.Header.MessageId)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Header.MessageId)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Header.MessageId)).DoesNotContain(thirdMessage.Id); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange @@ -158,13 +160,13 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange @@ -183,13 +185,13 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange @@ -206,11 +208,11 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await Outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(dispatched.Id, message.Id); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Id).IsEqualTo(dispatched.Id); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange @@ -229,23 +231,23 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = (await Outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, $"Expecting at least 2 messages, but it got {allDispatched.Length}"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); - - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); - - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange @@ -265,22 +267,22 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = (await Outbox.OutstandingMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allUndispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allUndispatched.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, allUndispatched.Select(x => x.Id)); - Assert.Contains(undispatched.Id, allUndispatched.Select(x => x.Id)); - - Assert.True(allUndispatched.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); - - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(allUndispatched.Length >= 2).IsTrue(); + await Assert.That(allUndispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allUndispatched.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(allUndispatched.Select(x => x.Id)).Contains(undispatched.Id); + + await Assert.That(allUndispatched.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange @@ -290,10 +292,10 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await Outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange @@ -306,10 +308,10 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert var storedMessage = await Outbox.GetAsync(message.Id, context); - Assert.Equal(message.Id, storedMessage.Id); + await Assert.That(storedMessage.Id).IsEqualTo(message.Id); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange @@ -321,41 +323,41 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties( var storedMessage = await Outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - [Fact] + [Test] public virtual async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange @@ -373,42 +375,43 @@ public virtual async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_ var storedMessage = await Outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); + // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - [Fact] + [Test] public virtual async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange @@ -424,6 +427,6 @@ public virtual async Task When_Adding_A_Message_Within_Transaction_And_Rollback_ var storedMessage = await Outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs index d07533be31..0631914e88 100644 --- a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Base.Test.Outbox; @@ -81,8 +80,8 @@ protected virtual Message CreateRandomMessage(DateTimeOffset? timestamp = null) return message; } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -102,13 +101,13 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -128,13 +127,13 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -150,14 +149,14 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -175,14 +174,14 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -198,12 +197,12 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = Outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(dispatched.Id, message.Id); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Id).IsEqualTo(dispatched.Id); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -221,24 +220,24 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = Outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); - - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); - - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -255,23 +254,23 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = Outbox.OutstandingMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allUndispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allUndispatched.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, allUndispatched.Select(x => x.Id)); - Assert.Contains(undispatched.Id, allUndispatched.Select(x => x.Id)); - - Assert.True(allUndispatched.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); - - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(allUndispatched.Length >= 2).IsTrue(); + await Assert.That(allUndispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allUndispatched.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(allUndispatched.Select(x => x.Id)).Contains(undispatched.Id); + + await Assert.That(allUndispatched.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); + + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -280,11 +279,11 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = Outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -296,11 +295,11 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -311,42 +310,42 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = Outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - [Fact] - public virtual void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public virtual async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var transaction = CreateTransactionProvider(); @@ -363,42 +362,43 @@ public virtual void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored var storedMessage = Outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); + // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - [Fact] - public virtual void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public virtual async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var transaction = CreateTransactionProvider(); @@ -413,6 +413,6 @@ public virtual void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Sho var storedMessage = Outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Base.Test/Paramore.Brighter.Base.Test.csproj b/tests/Paramore.Brighter.Base.Test/Paramore.Brighter.Base.Test.csproj index de9129e624..37a623d817 100644 --- a/tests/Paramore.Brighter.Base.Test/Paramore.Brighter.Base.Test.csproj +++ b/tests/Paramore.Brighter.Base.Test/Paramore.Brighter.Base.Test.csproj @@ -1,16 +1,12 @@ - - - - $(BrighterTestTargetFrameworks) - false - - - - - - - - - - - + + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs index 735790e8a5..87f7e9bbf6 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs @@ -5,14 +5,13 @@ using Amazon.Runtime; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbDropNonKeyAttributesForCreationTests { - [Fact] - public void When_Building_A_Table_Omit_Non_Key_Schema_Attributes() + [Test] + public async Task When_Building_A_Table_Omit_Non_Key_Schema_Attributes() { var tableRequestFactory = new DynamoDbTableFactory(); var builder = new DynamoDbTableBuilder(CreateClient()); @@ -34,14 +33,14 @@ public void When_Building_A_Table_Omit_Non_Key_Schema_Attributes() var modifiedTableRequest = builder.RemoveNonSchemaAttributes(tableRequest); //assert - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "RangeKey" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GlobalSecondaryId" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GlobalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "LocalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "RangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GlobalSecondaryId" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GlobalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "LocalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); } private AmazonDynamoDBClient CreateClient() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs index acc95fefb3..81a7faf2a0 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs @@ -2,21 +2,21 @@ using Amazon.DynamoDBv2.DataModel; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynanmoDbMissingHashKeyTests { - [Fact] - public void When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key() + [Test] + public Task When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key() { //arrange, act, assert - Assert.Throws(() => + Assert.ThrowsExactly(() => { var tableRequestFactory = new DynamoDbTableFactory(); tableRequestFactory.GenerateCreateTableRequest(new DynamoDbCreateProvisionedThroughput()); }); + return Task.CompletedTask; } [DynamoDBTable("DnyamoDbEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs index 03d288a9d5..c758cd3600 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs @@ -1,21 +1,21 @@ using System; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbFactoryMissingTableAttributeTests { - [Fact] - public void When_Creating_A_Table_From_A_Class_Missing_Table_Attribute() + [Test] + public Task When_Creating_A_Table_From_A_Class_Missing_Table_Attribute() { //arrange, act, assert - Assert.Throws(() => + Assert.ThrowsExactly(() => { var tableRequestFactory = new DynamoDbTableFactory(); tableRequestFactory.GenerateCreateTableRequest(new DynamoDbCreateProvisionedThroughput()); }); + return Task.CompletedTask; } private sealed class DynamoDbEntity; diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs index 89f27725e4..32fcd6e34a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs @@ -5,14 +5,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamboDbFactoryGenerateCreateRequestTests { - [Fact] - public void When_Creating_A_Table_From_An_Attributed_Class() + [Test] + public async Task When_Creating_A_Table_From_An_Attributed_Class() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -32,19 +31,19 @@ public void When_Creating_A_Table_From_An_Attributed_Class() ); //assert - Assert.Equal("MyEntity", tableRequest.TableName); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); - Assert.DoesNotContain(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "UnmarkedProperty"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "MappedName" && attr.AttributeType == ScalarAttributeType.S); - Assert.DoesNotContain(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "IgnoredProperty"); - Assert.Contains(tableRequest.KeySchema, kse => kse.AttributeName == "Id" && kse.KeyType == KeyType.HASH); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.TableName).IsEqualTo("MyEntity"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); + await Assert.That(tableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "UnmarkedProperty"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "MappedName" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "IgnoredProperty"); + await Assert.That(tableRequest.KeySchema).Contains(kse => kse.AttributeName == "Id" && kse.KeyType == KeyType.HASH); + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "GlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); - Assert.Contains(tableRequest.LocalSecondaryIndexes, lsi => lsi.IndexName == "LocalSecondaryIndex" + await Assert.That(tableRequest.LocalSecondaryIndexes).Contains(lsi => lsi.IndexName == "LocalSecondaryIndex" && Enumerable.Any(lsi.KeySchema, kse => kse.AttributeName == "LocalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs index 0315dd2a3b..7a9d68175f 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs @@ -4,14 +4,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbFactoryOtherTableAttributesTests { - [Fact] - public void When_Creating_A_Table_With_Admin_Attributes() + [Test] + public async Task When_Creating_A_Table_With_Admin_Attributes() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -25,11 +24,11 @@ public void When_Creating_A_Table_With_Admin_Attributes() tags: new List {new Tag{Key="beta", Value = "True"}, new Tag{Key="paramore", Value = "Brighter"}}); //assert - Assert.Equal(BillingMode.PAY_PER_REQUEST, tableRequest.BillingMode); - Assert.False(tableRequest.SSESpecification.Enabled); - Assert.False(tableRequest.SSESpecification.Enabled); - Assert.Contains(tableRequest.Tags, tag => tag.Key == "beta" && tag.Value == "True"); - Assert.Contains(tableRequest.Tags, tag => tag.Key == "paramore" && tag.Value == "Brighter"); + await Assert.That(tableRequest.BillingMode).IsEqualTo(BillingMode.PAY_PER_REQUEST); + await Assert.That(tableRequest.SSESpecification.Enabled).IsFalse(); + await Assert.That(tableRequest.SSESpecification.Enabled).IsFalse(); + await Assert.That(tableRequest.Tags).Contains(tag => tag.Key == "beta" && tag.Value == "True"); + await Assert.That(tableRequest.Tags).Contains(tag => tag.Key == "paramore" && tag.Value == "Brighter"); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs index 782f4a1e60..8da7eb7a22 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs @@ -4,14 +4,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbCollectionProperties { - [Fact] - public void When_Creating_A_Table_With_Collection_Properties() + [Test] + public async Task When_Creating_A_Table_With_Collection_Properties() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -25,12 +24,12 @@ public void When_Creating_A_Table_With_Collection_Properties() ); //assert - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringArray" && attr.AttributeType.Value == "SS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "IntArray" && attr.AttributeType.Value == "NS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "DoubleArray" && attr.AttributeType.Value == "NS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GenericList" && attr.AttributeType.Value == "L"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GenericMap" && attr.AttributeType.Value == "M"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "StringArray" && attr.AttributeType.Value == "SS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "IntArray" && attr.AttributeType.Value == "NS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "DoubleArray" && attr.AttributeType.Value == "NS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GenericList" && attr.AttributeType.Value == "L"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GenericMap" && attr.AttributeType.Value == "M"); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs index 79646fc01e..7e034847e9 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using Amazon.DynamoDBv2; @@ -8,14 +8,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbCustomProperties { - [Fact] - public void When_Creating_A_Table_With_Custom_Properties() + [Test] + public async Task When_Creating_A_Table_With_Custom_Properties() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -36,8 +35,8 @@ public void When_Creating_A_Table_With_Custom_Properties() ); //assert - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Amount" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Amount" && attr.AttributeType == ScalarAttributeType.S); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs index 29e74556a2..d7afbb3bec 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs @@ -5,14 +5,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamboDbFactoryMultipleGSIIndexesTests { - [Fact] - public void When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() + [Test] + public async Task When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -32,12 +31,12 @@ public void When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() ); //assert - Assert.Equal("MyEntity", tableRequest.TableName); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.TableName).IsEqualTo("MyEntity"); + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "GlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "AnotherGlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs index ecf6bd2c36..918ee0c7a3 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs @@ -5,14 +5,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbFactoryProjectionsTests { - [Fact] - public void When_Creating_A_Table_With_Projections() + [Test] + public async Task When_Creating_A_Table_With_Projections() { var tableRequestFactory = new DynamoDbTableFactory(); var gsiProjection = new DynamoGSIProjections @@ -38,10 +37,8 @@ public void When_Creating_A_Table_With_Projections() ); //assert - Assert.Equal(ProjectionType.KEYS_ONLY, tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.ProjectionType); - Assert.Equal( - new List{"Id", "Version"}, - tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.NonKeyAttributes); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.ProjectionType).IsEqualTo(ProjectionType.KEYS_ONLY); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.NonKeyAttributes).IsEquivalentTo(new List{"Id", "Version"}); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs index fba7db2bb1..df63afc91a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs @@ -4,14 +4,13 @@ using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.Tests.DynamoDbExtensions { public class DynamoDbDFactoryProvisionedThroughputTests { - [Fact] - public void When_Creating_A_Table_With_Provisioned_Throughput() + [Test] + public async Task When_Creating_A_Table_With_Provisioned_Throughput() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -28,10 +27,10 @@ public void When_Creating_A_Table_With_Provisioned_Throughput() CreateTableRequest tableRequest = tableRequestFactory.GenerateCreateTableRequest(provisonedThroughput); //assert - Assert.Equal(10, tableRequest.ProvisionedThroughput.ReadCapacityUnits); - Assert.Equal(10, tableRequest.ProvisionedThroughput.WriteCapacityUnits); - Assert.Equal(11,tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.ReadCapacityUnits); - Assert.Equal(11,tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.WriteCapacityUnits); + await Assert.That(tableRequest.ProvisionedThroughput.ReadCapacityUnits).IsEqualTo(10); + await Assert.That(tableRequest.ProvisionedThroughput.WriteCapacityUnits).IsEqualTo(10); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.ReadCapacityUnits).IsEqualTo(11); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.WriteCapacityUnits).IsEqualTo(11); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index f1851dc4a1..35fe867b41 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 774671ee4a..b130771171 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index c93d15b02b..99eafbaa81 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 80fc0db0eb..060e50eedf 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 9a9578c1b8..5f87466a36 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 6bc8afd328..8d545146c4 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 2a6b9ec32b..3b251c93d1 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 356dec31e5..df8f2c06c2 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index ffb43a0b9f..d45a8e455c 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index eef6fb5933..cdde79e2fd 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 2d11b3d4a5..31b1d3c0da 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 2126742f83..559ce49ff0 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 50c71630be..d09b4a541b 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index f0d3923fca..72020eecbc 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 91f71f8e02..ceab9ea574 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 0d8de03ab4..b7e3e7dd4c 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 919e89dfdf..636e5be85b 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 8299e616e6..2d6ad9b717 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index fbc0c8616c..eef41e08a6 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 5e9cc0ec04..6d94750a2a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 184ceefd04..66a11e22ad 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index a21429ffae..8b63ae2406 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index ace19615e1..0be35f6e0a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 930cb00a81..8f2d833baf 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj b/tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj index 9eb78f8f47..1e665d1b7c 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj @@ -1,33 +1,17 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs index 61abf10a87..394468ad6e 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Building_A_Table_Omit_Non_Key_Schema_Attributes.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbDropNonKeyAttributesForCreationTests { - [Fact] - public void When_Building_A_Table_Omit_Non_Key_Schema_Attributes() + [Test] + public async Task When_Building_A_Table_Omit_Non_Key_Schema_Attributes() { var tableRequestFactory = new DynamoDbTableFactory(); var builder = new DynamoDbTableBuilder(CreateClient()); @@ -35,14 +34,14 @@ public void When_Building_A_Table_Omit_Non_Key_Schema_Attributes() var modifiedTableRequest = builder.RemoveNonSchemaAttributes(tableRequest); //assert - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); - Assert.DoesNotContain(modifiedTableRequest.AttributeDefinitions, attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "RangeKey" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GlobalSecondaryId" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GlobalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "LocalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); + await Assert.That(modifiedTableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "RangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GlobalSecondaryId" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GlobalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "LocalSecondaryRangeKey" && attr.AttributeType == ScalarAttributeType.S); } private AmazonDynamoDBClient CreateClient() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs index cd8fa90e04..fad115a754 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key.cs @@ -3,21 +3,21 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynanmoDbMissingHashKeyTests { - [Fact] - public void When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key() + [Test] + public Task When_Creating_A_Table_From_A_Class_Missing_A_Hash_Key() { //arrange, act, assert - Assert.Throws(() => + Assert.ThrowsExactly(() => { var tableRequestFactory = new DynamoDbTableFactory(); tableRequestFactory.GenerateCreateTableRequest(new DynamoDbCreateProvisionedThroughput()); }); + return Task.CompletedTask; } [DynamoDBTable("DnyamoDbEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs index 1c3b4c3105..13cb8183a9 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_A_Class_Missing_Table_Attribute.cs @@ -2,21 +2,21 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbFactoryMissingTableAttributeTests { - [Fact] - public void When_Creating_A_Table_From_A_Class_Missing_Table_Attribute() + [Test] + public Task When_Creating_A_Table_From_A_Class_Missing_Table_Attribute() { //arrange, act, assert - Assert.Throws(() => + Assert.ThrowsExactly(() => { var tableRequestFactory = new DynamoDbTableFactory(); tableRequestFactory.GenerateCreateTableRequest(new DynamoDbCreateProvisionedThroughput()); }); + return Task.CompletedTask; } private sealed class DynamoDbEntity; diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs index 5ad6dbde91..98d2bd7644 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_From_An_Attributed_Class.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamboDbFactoryGenerateCreateRequestTests { - [Fact] - public void When_Creating_A_Table_From_An_Attributed_Class() + [Test] + public async Task When_Creating_A_Table_From_An_Attributed_Class() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -33,20 +32,20 @@ public void When_Creating_A_Table_From_An_Attributed_Class() ); //assert - Assert.Equal("MyEntity", tableRequest.TableName); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); - Assert.DoesNotContain(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "UnmarkedProperty"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "MappedName" && attr.AttributeType == ScalarAttributeType.S); - Assert.DoesNotContain(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "IgnoredProperty"); - Assert.Contains(tableRequest.KeySchema, kse => kse.AttributeName == "Id" && kse.KeyType == KeyType.HASH); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.TableName).IsEqualTo("MyEntity"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "StringProperty" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "NumberProperty" && attr.AttributeType == ScalarAttributeType.N); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "ByteArrayProperty" && attr.AttributeType == ScalarAttributeType.B); + await Assert.That(tableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "UnmarkedProperty"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "MappedName" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).DoesNotContain(attr => attr.AttributeName == "IgnoredProperty"); + await Assert.That(tableRequest.KeySchema).Contains(kse => kse.AttributeName == "Id" && kse.KeyType == KeyType.HASH); + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "GlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); - Assert.Contains(tableRequest.LocalSecondaryIndexes, lsi => lsi.IndexName == "LocalSecondaryIndex" - && Enumerable.Any(lsi.KeySchema, kse => kse.AttributeName == "LocalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); + await Assert.That(tableRequest.LocalSecondaryIndexes).Contains(lsi => lsi.IndexName == "LocalSecondaryIndex" + && Enumerable.Any(lsi.KeySchema, kse => kse.AttributeName == "LocalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); } //Required diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs index e93c7a2d9a..32bf138524 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Admin_Attributes.cs @@ -5,14 +5,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbFactoryOtherTableAttributesTests { - [Fact] - public void When_Creating_A_Table_With_Admin_Attributes() + [Test] + public async Task When_Creating_A_Table_With_Admin_Attributes() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -26,11 +25,11 @@ public void When_Creating_A_Table_With_Admin_Attributes() tags: new List {new Tag{Key="beta", Value = "True"}, new Tag{Key="paramore", Value = "Brighter"}}); //assert - Assert.Equal(BillingMode.PAY_PER_REQUEST, tableRequest.BillingMode); - Assert.False(tableRequest.SSESpecification.Enabled); - Assert.False(tableRequest.SSESpecification.Enabled); - Assert.Contains(tableRequest.Tags, tag => tag.Key == "beta" && tag.Value == "True"); - Assert.Contains(tableRequest.Tags, tag => tag.Key == "paramore" && tag.Value == "Brighter"); + await Assert.That(tableRequest.BillingMode).IsEqualTo(BillingMode.PAY_PER_REQUEST); + await Assert.That(tableRequest.SSESpecification.Enabled).IsFalse(); + await Assert.That(tableRequest.SSESpecification.Enabled).IsFalse(); + await Assert.That(tableRequest.Tags).Contains(tag => tag.Key == "beta" && tag.Value == "True"); + await Assert.That(tableRequest.Tags).Contains(tag => tag.Key == "paramore" && tag.Value == "Brighter"); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs index ab44d13fde..bdef4dd0e3 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Collection_Properties.cs @@ -5,14 +5,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbCollectionProperties { - [Fact] - public void When_Creating_A_Table_With_Collection_Properties() + [Test] + public async Task When_Creating_A_Table_With_Collection_Properties() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -26,12 +25,12 @@ public void When_Creating_A_Table_With_Collection_Properties() ); //assert - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "StringArray" && attr.AttributeType.Value == "SS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "IntArray" && attr.AttributeType.Value == "NS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "DoubleArray" && attr.AttributeType.Value == "NS"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GenericList" && attr.AttributeType.Value == "L"); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "GenericMap" && attr.AttributeType.Value == "M"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "StringArray" && attr.AttributeType.Value == "SS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "IntArray" && attr.AttributeType.Value == "NS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "DoubleArray" && attr.AttributeType.Value == "NS"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GenericList" && attr.AttributeType.Value == "L"); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "GenericMap" && attr.AttributeType.Value == "M"); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs index 27b2e9bd97..52d3a657c6 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Custom_Properties.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using Amazon.DynamoDBv2; @@ -9,14 +9,13 @@ using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbCustomProperties { - [Fact] - public void When_Creating_A_Table_With_Custom_Properties() + [Test] + public async Task When_Creating_A_Table_With_Custom_Properties() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -37,8 +36,8 @@ public void When_Creating_A_Table_With_Custom_Properties() ); //assert - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); - Assert.Contains(tableRequest.AttributeDefinitions, attr => attr.AttributeName == "Amount" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Id" && attr.AttributeType == ScalarAttributeType.S); + await Assert.That(tableRequest.AttributeDefinitions).Contains(attr => attr.AttributeName == "Amount" && attr.AttributeType == ScalarAttributeType.S); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs index 59b4431ede..87aca0d1c1 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Multple_GSI_Indexes_Per_Field.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamboDbFactoryMultipleGSIIndexesTests { - [Fact] - public void When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() + [Test] + public async Task When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -33,12 +32,12 @@ public void When_Creating_A_Table_With_Multiple_GSI_Inxdexes_Per_Field() ); //assert - Assert.Equal("MyEntity", tableRequest.TableName); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.TableName).IsEqualTo("MyEntity"); + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "GlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); - Assert.Contains(tableRequest.GlobalSecondaryIndexes, + await Assert.That(tableRequest.GlobalSecondaryIndexes).Contains( gsi => gsi.IndexName == "AnotherGlobalSecondaryIndex" && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryId" && kse.KeyType == KeyType.HASH) && Enumerable.Any(gsi.KeySchema, kse => kse.AttributeName == "GlobalSecondaryRangeKey" && kse.KeyType == KeyType.RANGE)); diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs index 0b799e21ab..7b1c573f8a 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Projections.cs @@ -6,14 +6,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbFactoryProjectionsTests { - [Fact] - public void When_Creating_A_Table_With_Projections() + [Test] + public async Task When_Creating_A_Table_With_Projections() { var tableRequestFactory = new DynamoDbTableFactory(); var gsiProjection = new DynamoGSIProjections @@ -39,10 +38,8 @@ public void When_Creating_A_Table_With_Projections() ); //assert - Assert.Equal(ProjectionType.KEYS_ONLY, tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.ProjectionType); - Assert.Equal( - new List{"Id", "Version"}, - tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.NonKeyAttributes); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.ProjectionType).IsEqualTo(ProjectionType.KEYS_ONLY); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").Projection.NonKeyAttributes).IsEquivalentTo(new List{"Id", "Version"}); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs index 2b78f0f3c0..05f7b36e15 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/DynamoDbExtensions/When_Creating_A_Table_With_Provisioned_Throughput.cs @@ -5,14 +5,13 @@ using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.Outbox.DynamoDB; -using Xunit; namespace Paramore.Brighter.DynamoDB.V4.Tests.DynamoDbExtensions; public class DynamoDbDFactoryProvisionedThroughputTests { - [Fact] - public void When_Creating_A_Table_With_Provisioned_Throughput() + [Test] + public async Task When_Creating_A_Table_With_Provisioned_Throughput() { //arrange var tableRequestFactory = new DynamoDbTableFactory(); @@ -29,10 +28,10 @@ public void When_Creating_A_Table_With_Provisioned_Throughput() CreateTableRequest tableRequest = tableRequestFactory.GenerateCreateTableRequest(provisonedThroughput); //assert - Assert.Equal(10, tableRequest.ProvisionedThroughput.ReadCapacityUnits); - Assert.Equal(10, tableRequest.ProvisionedThroughput.WriteCapacityUnits); - Assert.Equal(11,tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.ReadCapacityUnits); - Assert.Equal(11,tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.WriteCapacityUnits); + await Assert.That(tableRequest.ProvisionedThroughput.ReadCapacityUnits).IsEqualTo(10); + await Assert.That(tableRequest.ProvisionedThroughput.WriteCapacityUnits).IsEqualTo(10); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.ReadCapacityUnits).IsEqualTo(11); + await Assert.That(tableRequest.GlobalSecondaryIndexes.First(gsi => gsi.IndexName == "GlobalSecondaryIndex").ProvisionedThroughput.WriteCapacityUnits).IsEqualTo(11); } [DynamoDBTable("MyEntity")] diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 84539548d9..476106683a 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 52b4a5b50e..ca1067ab64 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index fdb6fcb9cd..8903c9c1c7 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 9d2f13a17a..6db03bd723 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 8347e42fd7..a574e95c97 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index e0fa1895ae..5763e98ef8 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 45394c23ca..a6124f2dc0 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 4fd19424df..9562ba20c6 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index bc39344678..9ac498c238 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 2ad3820622..1179b44e82 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 254f2ac5cc..3367ae5d59 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index e12d15b49e..9c7e400e2f 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 14a34f0689..8dfc1420de 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index bb13aedc13..5fcef4ce7d 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index a00a2967cc..f1e4c34761 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 896785bcfb..518b943659 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 85b5426eb0..365b5a43f9 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 6bb06f1683..9d789d10a4 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 975cb11306..a81e939590 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 18c25a74ab..26c8148463 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index dd50e509d7..e2cfce4575 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 104f31c09a..3de905966b 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 2fc063ee85..deef5b551e 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 61d782f941..b464820406 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj index 1483528aed..1b811056c0 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj @@ -1,33 +1,17 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionDefaultTransientTests.cs b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionDefaultTransientTests.cs index 986d10944f..c6f04123f2 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionDefaultTransientTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionDefaultTransientTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.Tests.TestDoubles; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; using Tests; -using Xunit; namespace Paramore.Brighter.Extensions.Tests { @@ -27,61 +26,61 @@ public AssemblyResolutionDefaultTransientTests() _provider = _services.BuildServiceProvider(); } - [Fact] - public void ShouldHaveCommandProcessorRegisteredCorrectly() + [Test] + public async Task ShouldHaveCommandProcessorRegisteredCorrectly() { - TestRegistration(typeof(IAmACommandProcessor), ServiceLifetime.Singleton); + await TestRegistration(typeof(IAmACommandProcessor), ServiceLifetime.Singleton); } - [Fact] - public void ShouldHaveServiceActivatorRegisteredCorrectly() + [Test] + public async Task ShouldHaveServiceActivatorRegisteredCorrectly() { - TestRegistration(typeof(IDispatcher), ServiceLifetime.Singleton); + await TestRegistration(typeof(IDispatcher), ServiceLifetime.Singleton); } - [Fact] - public void ShouldHaveTestHandlerRegisteredCorrectly() + [Test] + public async Task ShouldHaveTestHandlerRegisteredCorrectly() { - TestRegistration(typeof(TestEventHandler), ServiceLifetime.Transient); + await TestRegistration(typeof(TestEventHandler), ServiceLifetime.Transient); } - [Fact] - public void ShouldHaveTestMapperRegisteredCorrectly() + [Test] + public async Task ShouldHaveTestMapperRegisteredCorrectly() { - TestRegistration(typeof(TestEventMessageMapper), ServiceLifetime.Transient); + await TestRegistration(typeof(TestEventMessageMapper), ServiceLifetime.Transient); } - [Fact] - public void ShouldHaveDefaultHandlerRegisteredCorrectly() + [Test] + public async Task ShouldHaveDefaultHandlerRegisteredCorrectly() { - TestRegistration(typeof(ExceptionPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(FallbackPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(TimeoutPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(MonitorHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(UseInboxHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(RequestLoggingHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(ExceptionPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(FallbackPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(TimeoutPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(MonitorHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(UseInboxHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(RequestLoggingHandler<>), ServiceLifetime.Transient); } - private void TestRegistration(Type expected, ServiceLifetime serviceLifetime) + private async Task TestRegistration(Type expected, ServiceLifetime serviceLifetime) { var serviceDescriptor = _services.SingleOrDefault(x => x.ServiceType == expected); - Assert.Equal(expected, serviceDescriptor.ServiceType); - Assert.Equal(serviceLifetime, serviceDescriptor.Lifetime); + await Assert.That(serviceDescriptor.ServiceType).IsEqualTo(expected); + await Assert.That(serviceDescriptor.Lifetime).IsEqualTo(serviceLifetime); } - [Fact] - public void ShouldHaveCommandProcessor() + [Test] + public async Task ShouldHaveCommandProcessor() { - Assert.Equal(typeof(CommandProcessor), _provider.GetService().GetType()); + await Assert.That(_provider.GetService().GetType()).IsEqualTo(typeof(CommandProcessor)); } - [Fact] - public void ShouldHaveServiceActivator() + [Test] + public async Task ShouldHaveServiceActivator() { - Assert.Equal(typeof(Dispatcher), _provider.GetService().GetType()); + await Assert.That(_provider.GetService().GetType()).IsEqualTo(typeof(Dispatcher)); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionHandlerLifetimeScopedAndMapperLifetimeSingletonTests.cs b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionHandlerLifetimeScopedAndMapperLifetimeSingletonTests.cs index df5eca91fc..1142bd8e81 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionHandlerLifetimeScopedAndMapperLifetimeSingletonTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionHandlerLifetimeScopedAndMapperLifetimeSingletonTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter; @@ -9,7 +9,6 @@ using Paramore.Brighter.Policies.Handlers; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Tests { @@ -28,66 +27,66 @@ public AssemblyResolutionHandlerLifetimeScopedAndMapperLifetimeSingletonTests() _provider = _services.BuildServiceProvider(); } - [Fact] - public void ShouldHaveCommandProcessorRegisteredCorrectly() + [Test] + public async Task ShouldHaveCommandProcessorRegisteredCorrectly() { - TestRegistration(typeof(IAmACommandProcessor), ServiceLifetime.Singleton); + await TestRegistration(typeof(IAmACommandProcessor), ServiceLifetime.Singleton); } - [Fact] - public void ShouldHaveServiceActivatorRegisteredCorrectly() + [Test] + public async Task ShouldHaveServiceActivatorRegisteredCorrectly() { - TestRegistration(typeof(IDispatcher), ServiceLifetime.Singleton); + await TestRegistration(typeof(IDispatcher), ServiceLifetime.Singleton); } - [Fact] - public void ShouldHaveTestHandlerRegisteredCorrectly() + [Test] + public async Task ShouldHaveTestHandlerRegisteredCorrectly() { - TestRegistration(typeof(TestEventHandler), ServiceLifetime.Transient); + await TestRegistration(typeof(TestEventHandler), ServiceLifetime.Transient); } - [Fact] - public void ShouldHaveTestMapperRegisteredCorrectly() + [Test] + public async Task ShouldHaveTestMapperRegisteredCorrectly() { - TestRegistration(typeof(TestEventMessageMapper), ServiceLifetime.Transient); + await TestRegistration(typeof(TestEventMessageMapper), ServiceLifetime.Transient); } - [Fact] - public void ShouldHaveDefaultHandlerRegisteredCorrectly() + [Test] + public async Task ShouldHaveDefaultHandlerRegisteredCorrectly() { - TestRegistration(typeof(ExceptionPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(FallbackPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(TimeoutPolicyHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(MonitorHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(UseInboxHandler<>), ServiceLifetime.Transient); - TestRegistration(typeof(RequestLoggingHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(ExceptionPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(FallbackPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(TimeoutPolicyHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(MonitorHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(UseInboxHandler<>), ServiceLifetime.Transient); + await TestRegistration(typeof(RequestLoggingHandler<>), ServiceLifetime.Transient); } - private void TestRegistration(Type expected, ServiceLifetime serviceLifetime) + private async Task TestRegistration(Type expected, ServiceLifetime serviceLifetime) { var serviceDescriptor = _services.SingleOrDefault(x => x.ServiceType == expected); - Assert.Equal(expected, serviceDescriptor.ServiceType); - Assert.Equal(serviceLifetime, serviceDescriptor.Lifetime); + await Assert.That(serviceDescriptor.ServiceType).IsEqualTo(expected); + await Assert.That(serviceDescriptor.Lifetime).IsEqualTo(serviceLifetime); } - [Fact] - public void ShouldHaveCommandProcessor() + [Test] + public async Task ShouldHaveCommandProcessor() { - Assert.Equal(typeof(CommandProcessor), _provider.GetService().GetType()); + await Assert.That(_provider.GetService().GetType()).IsEqualTo(typeof(CommandProcessor)); } - [Fact] - public void ShouldHaveHandler() + [Test] + public async Task ShouldHaveHandler() { - Assert.NotNull(_provider.GetService()); + await Assert.That(_provider.GetService()).IsNotNull(); } - [Fact] - public void ShouldHaveMapper() + [Test] + public async Task ShouldHaveMapper() { - Assert.NotNull(_provider.GetService()); + await Assert.That(_provider.GetService()).IsNotNull(); } } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionMissingDependenciesTests.cs b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionMissingDependenciesTests.cs index f33f184ea2..205ed673d6 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionMissingDependenciesTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/AssemblyResolutionMissingDependenciesTests.cs @@ -1,14 +1,13 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class AssemblyResolutionMissingDependenciesTests { - [Fact] - public void When_we_auto_register_handlers_from_assemblies_with_missing_dependencies() + [Test] + public async Task When_we_auto_register_handlers_from_assemblies_with_missing_dependencies() { //arrange var factory = @@ -29,12 +28,12 @@ public void When_we_auto_register_handlers_from_assemblies_with_missing_dependen } catch (AggregateException ae) { - Assert.Contains("Some services are not able", ae.Message); + await Assert.That(ae.Message).Contains("Some services are not able"); caught = true; } //assert - Assert.True(caught); + await Assert.That(caught).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorIsolationTests.cs b/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorIsolationTests.cs index 58ff79237d..6614ae68f0 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorIsolationTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorIsolationTests.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.JsonConverters; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -39,8 +38,8 @@ namespace Paramore.Brighter.Extensions.Tests; /// public class CommandProcessorIsolationTests { - [Fact] - public void TwoCommandProcessors_HaveIsolatedState() + [Test] + public async Task TwoCommandProcessors_HaveIsolatedState() { // Arrange - Create two independent service providers var services1 = new ServiceCollection(); @@ -56,10 +55,10 @@ public void TwoCommandProcessors_HaveIsolatedState() var cp2 = provider2.GetRequiredService(); // Assert - They should be different instances - Assert.NotSame(cp1, cp2); + await Assert.That(cp2).IsNotSameReferenceAs(cp1); } - [Fact] + [Test] public async Task ParallelTests_DoNotInterfere() { // This test demonstrates that parallel execution is safe @@ -85,7 +84,7 @@ public async Task ParallelTests_DoNotInterfere() { for (int j = i + 1; j < 10; j++) { - Assert.NotSame(processors[i], processors[j]); + await Assert.That(processors[j]).IsNotSameReferenceAs(processors[i]); } } } @@ -95,7 +94,7 @@ public async Task ParallelTests_DoNotInterfere() /// Multiple test classes creating full Brighter setups with producers and outboxes in parallel. /// Previously, the static singleton pattern caused all tests to share the same outbox. /// - [Fact] + [Test] public async Task ParallelBrighterSetups_WithProducers_HaveIsolatedOutboxes() { // Arrange - simulate 5 parallel test setups @@ -150,7 +149,7 @@ public async Task ParallelBrighterSetups_WithProducers_HaveIsolatedOutboxes() { for (int j = i + 1; j < parallelTests; j++) { - Assert.NotSame(commandProcessors[i], commandProcessors[j]); + await Assert.That(commandProcessors[j]).IsNotSameReferenceAs(commandProcessors[i]); } } @@ -159,7 +158,7 @@ public async Task ParallelBrighterSetups_WithProducers_HaveIsolatedOutboxes() { for (int j = i + 1; j < parallelTests; j++) { - Assert.NotSame(outboxes[i], outboxes[j]); + await Assert.That(outboxes[j]).IsNotSameReferenceAs(outboxes[i]); } } } @@ -169,7 +168,7 @@ public async Task ParallelBrighterSetups_WithProducers_HaveIsolatedOutboxes() /// Brighter configuration using the new Func overloads. /// This is the recommended pattern for test isolation. /// - [Fact] + [Test] public async Task ParallelBrighterSetups_WithFuncOverloads_AreIsolated() { const int parallelTests = 5; @@ -225,8 +224,8 @@ public async Task ParallelBrighterSetups_WithFuncOverloads_AreIsolated() { for (int j = i + 1; j < parallelTests; j++) { - Assert.NotSame(results[i].Processor, results[j].Processor); - Assert.NotSame(results[i].Outbox, results[j].Outbox); + await Assert.That(results[j].Processor).IsNotSameReferenceAs(results[i].Processor); + await Assert.That(results[j].Outbox).IsNotSameReferenceAs(results[i].Outbox); } } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorSingletonTests.cs b/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorSingletonTests.cs index 3d970c875f..7a8e70278a 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorSingletonTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/CommandProcessorSingletonTests.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -45,8 +44,8 @@ public class CommandProcessorSingletonTests /// Verifies that resolving IAmACommandProcessor twice from the same /// service provider returns the exact same instance. /// - [Fact] - public void SameProvider_MultipleResolutions_ReturnsSameInstance() + [Test] + public async Task SameProvider_MultipleResolutions_ReturnsSameInstance() { // Arrange var services = new ServiceCollection(); @@ -59,16 +58,16 @@ public void SameProvider_MultipleResolutions_ReturnsSameInstance() var processor3 = provider.GetRequiredService(); // Assert - All should be the exact same instance - Assert.Same(processor1, processor2); - Assert.Same(processor2, processor3); + await Assert.That(processor2).IsSameReferenceAs(processor1); + await Assert.That(processor3).IsSameReferenceAs(processor2); } /// /// Verifies that resolving IAmACommandProcessor from different scopes /// within the same service provider returns the same singleton instance. /// - [Fact] - public void SameProvider_DifferentScopes_ReturnsSameInstance() + [Test] + public async Task SameProvider_DifferentScopes_ReturnsSameInstance() { // Arrange var services = new ServiceCollection(); @@ -94,15 +93,15 @@ public void SameProvider_DifferentScopes_ReturnsSameInstance() } // Assert - All should be the same singleton instance - Assert.Same(processor1, processor2); - Assert.Same(processor2, processor3); + await Assert.That(processor2).IsSameReferenceAs(processor1); + await Assert.That(processor3).IsSameReferenceAs(processor2); } /// /// Verifies that concurrent resolution of IAmACommandProcessor from multiple /// threads returns the same singleton instance to all threads. /// - [Fact] + [Test] public async Task SameProvider_ConcurrentResolutions_ReturnsSameInstance() { // Arrange @@ -128,15 +127,15 @@ public async Task SameProvider_ConcurrentResolutions_ReturnsSameInstance() // Assert - All 100 resolutions should return the same instance var distinctProcessors = processors.Distinct().ToList(); - Assert.Single(distinctProcessors); + await Assert.That(distinctProcessors).HasSingleItem(); } /// /// Verifies that the command processor singleton is preserved when resolved /// alongside other services in the same scope. /// - [Fact] - public void SameProvider_ResolvedWithOtherServices_ReturnsSameInstance() + [Test] + public async Task SameProvider_ResolvedWithOtherServices_ReturnsSameInstance() { // Arrange var services = new ServiceCollection(); @@ -161,16 +160,16 @@ public void SameProvider_ResolvedWithOtherServices_ReturnsSameInstance() } // Assert - Assert.Same(processorFromRoot, processorFromScope1); - Assert.Same(processorFromScope1, processorFromScope2); + await Assert.That(processorFromScope1).IsSameReferenceAs(processorFromRoot); + await Assert.That(processorFromScope2).IsSameReferenceAs(processorFromScope1); } /// /// Verifies that the command processor instance is the same when resolved /// sequentially many times in a loop. /// - [Fact] - public void SameProvider_ManySequentialResolutions_ReturnsSameInstance() + [Test] + public async Task SameProvider_ManySequentialResolutions_ReturnsSameInstance() { // Arrange var services = new ServiceCollection(); @@ -185,7 +184,7 @@ public void SameProvider_ManySequentialResolutions_ReturnsSameInstance() var processor = provider.GetRequiredService(); // Assert each one is the same - Assert.Same(firstProcessor, processor); + await Assert.That(processor).IsSameReferenceAs(firstProcessor); } } @@ -193,8 +192,8 @@ public void SameProvider_ManySequentialResolutions_ReturnsSameInstance() /// Verifies that when producers are configured, the command processor /// is still a singleton across multiple resolutions. /// - [Fact] - public void WithProducers_MultipleResolutions_ReturnsSameInstance() + [Test] + public async Task WithProducers_MultipleResolutions_ReturnsSameInstance() { // Arrange var timeProvider = new FakeTimeProvider(); @@ -230,16 +229,16 @@ public void WithProducers_MultipleResolutions_ReturnsSameInstance() var processor3 = scope.ServiceProvider.GetRequiredService(); // Assert - Assert.Same(processor1, processor2); - Assert.Same(processor2, processor3); + await Assert.That(processor2).IsSameReferenceAs(processor1); + await Assert.That(processor3).IsSameReferenceAs(processor2); } /// /// Verifies that using the Func overloads still results in a singleton /// command processor. /// - [Fact] - public void WithFuncOverloads_MultipleResolutions_ReturnsSameInstance() + [Test] + public async Task WithFuncOverloads_MultipleResolutions_ReturnsSameInstance() { // Arrange var timeProvider = new FakeTimeProvider(); @@ -282,15 +281,15 @@ public void WithFuncOverloads_MultipleResolutions_ReturnsSameInstance() var processor3 = scope.ServiceProvider.GetRequiredService(); // Assert - Assert.Same(processor1, processor2); - Assert.Same(processor2, processor3); + await Assert.That(processor2).IsSameReferenceAs(processor1); + await Assert.That(processor3).IsSameReferenceAs(processor2); } /// /// Verifies that concurrent resolutions with producers configured /// all return the same singleton instance. /// - [Fact] + [Test] public async Task WithProducers_ConcurrentResolutions_ReturnsSameInstance() { // Arrange @@ -337,14 +336,14 @@ public async Task WithProducers_ConcurrentResolutions_ReturnsSameInstance() // Assert - All should be the same instance var distinctProcessors = processors.Distinct().ToList(); - Assert.Single(distinctProcessors); + await Assert.That(distinctProcessors).HasSingleItem(); } /// /// Verifies that concurrent resolutions from different scopes /// all return the same singleton instance. /// - [Fact] + [Test] public async Task SameProvider_ConcurrentScopedResolutions_ReturnsSameInstance() { // Arrange @@ -371,14 +370,14 @@ public async Task SameProvider_ConcurrentScopedResolutions_ReturnsSameInstance() // Assert - All should be the same singleton instance var distinctProcessors = processors.Distinct().ToList(); - Assert.Single(distinctProcessors); + await Assert.That(distinctProcessors).HasSingleItem(); } /// /// Verifies that the command processor is only instantiated once even under /// heavy concurrent load using an instantiation counter. /// - [Fact] + [Test] public async Task SameProvider_ConcurrentResolutions_OnlyInstantiatesOnce() { // This test verifies that the singleton is truly only created once @@ -426,15 +425,15 @@ public async Task SameProvider_ConcurrentResolutions_OnlyInstantiatesOnce() await Task.WhenAll(tasks); // Assert - Assert.Equal(1, instantiationCount); - Assert.Single(processors.Distinct()); + await Assert.That(instantiationCount).IsEqualTo(1); + await Assert.That(processors.Distinct()).HasSingleItem(); } /// /// Verifies that the GetHashCode of all resolved processors is identical, /// providing another confirmation they are the same object instance. /// - [Fact] + [Test] public async Task SameProvider_AllResolutions_HaveSameHashCode() { // Arrange @@ -458,15 +457,15 @@ public async Task SameProvider_AllResolutions_HaveSameHashCode() // Assert - All hash codes should be the same var distinctHashCodes = hashCodes.Distinct().ToList(); - Assert.Single(distinctHashCodes); + await Assert.That(distinctHashCodes).HasSingleItem(); } /// /// Verifies that even when resolving from nested scopes, /// the same singleton instance is returned. /// - [Fact] - public void SameProvider_NestedScopes_ReturnsSameInstance() + [Test] + public async Task SameProvider_NestedScopes_ReturnsSameInstance() { // Arrange var services = new ServiceCollection(); @@ -494,9 +493,9 @@ public void SameProvider_NestedScopes_ReturnsSameInstance() } // Assert - Assert.Same(processorFromRoot, processorFromLevel1); - Assert.Same(processorFromLevel1, processorFromLevel2); - Assert.Same(processorFromLevel2, processorFromLevel3); + await Assert.That(processorFromLevel1).IsSameReferenceAs(processorFromRoot); + await Assert.That(processorFromLevel2).IsSameReferenceAs(processorFromLevel1); + await Assert.That(processorFromLevel3).IsSameReferenceAs(processorFromLevel2); } private class SingletonTestCommand : Command diff --git a/tests/Paramore.Brighter.Extensions.Tests/DispatcherResolutionScopedDependencyTests.cs b/tests/Paramore.Brighter.Extensions.Tests/DispatcherResolutionScopedDependencyTests.cs index 689a0b6a68..5dc207a3ca 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/DispatcherResolutionScopedDependencyTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/DispatcherResolutionScopedDependencyTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -11,7 +11,6 @@ using Paramore.Brighter.ServiceActivator.Extensions.Hosting; using Paramore.Brighter.Sqlite; using Paramore.Brighter.Sqlite.EntityFrameworkCore; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -19,22 +18,22 @@ public class DispatcherResolutionScopedDependencyTests { private IServiceProvider? _provider; - [Fact] - public void ShouldResolveIDispatcherCorrectly() + [Test] + public async Task ShouldResolveIDispatcherCorrectly() { Build(new InternalBus()); - Assert.NotNull(_provider); + await Assert.That(_provider).IsNotNull(); //will throw if cannot be found _provider.GetRequiredService(); } - [Fact] - public void ShouldResolveIDispatcherCorrectlyWithHost() + [Test] + public async Task ShouldResolveIDispatcherCorrectlyWithHost() { BuildHost(new InternalBus()); - Assert.NotNull(_provider); + await Assert.That(_provider).IsNotNull(); //will throw if cannot be found _provider.GetRequiredService(); } diff --git a/tests/Paramore.Brighter.Extensions.Tests/FactoryErrorHandlingTests.cs b/tests/Paramore.Brighter.Extensions.Tests/FactoryErrorHandlingTests.cs index fbc27b78cb..4b65df9626 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/FactoryErrorHandlingTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/FactoryErrorHandlingTests.cs @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -33,8 +32,8 @@ namespace Paramore.Brighter.Extensions.Tests; /// public class FactoryErrorHandlingTests { - [Fact] - public void Factory_UnregisteredHandler_ReturnsNull() + [Test] + public async Task Factory_UnregisteredHandler_ReturnsNull() { // Arrange var services = new ServiceCollection(); @@ -52,11 +51,11 @@ public void Factory_UnregisteredHandler_ReturnsNull() var handler = ((IAmAHandlerFactorySync)factory).Create(typeof(UnregisteredHandler), lifetime); // Assert - Should return null for unregistered handler - Assert.Null(handler); + await Assert.That(handler).IsNull(); } - [Fact] - public void Factory_NullLifetime_HandlesGracefullyForTransient() + [Test] + public async Task Factory_NullLifetime_HandlesGracefullyForTransient() { // Arrange var services = new ServiceCollection(); @@ -74,18 +73,18 @@ public void Factory_NullLifetime_HandlesGracefullyForTransient() { var handler = ((IAmAHandlerFactorySync)factory).Create(typeof(SimpleHandler), null!); // If it doesn't throw, it should return a valid handler - Assert.NotNull(handler); + await Assert.That(handler).IsNotNull(); } catch (ArgumentNullException) { // Acceptable - throwing ArgumentNullException for null lifetime - Assert.True(true); + await Assert.That(true).IsTrue(); } // Note: NullReferenceException would indicate a bug - null should be validated explicitly } - [Fact] - public void Factory_InvalidHandlerType_ReturnsNull() + [Test] + public async Task Factory_InvalidHandlerType_ReturnsNull() { // Arrange var services = new ServiceCollection(); @@ -102,11 +101,11 @@ public void Factory_InvalidHandlerType_ReturnsNull() var result = ((IAmAHandlerFactorySync)factory).Create(typeof(string), lifetime); // Assert - Should return null for non-handler types - Assert.Null(result); + await Assert.That(result).IsNull(); } - [Fact] - public void Factory_MissingBrighterOptions_UsesDefaultTransient() + [Test] + public async Task Factory_MissingBrighterOptions_UsesDefaultTransient() { // Arrange - Don't register IBrighterOptions var services = new ServiceCollection(); @@ -121,7 +120,7 @@ public void Factory_MissingBrighterOptions_UsesDefaultTransient() var handler = ((IAmAHandlerFactorySync)factory).Create(typeof(SimpleHandler), lifetime); // Assert - Should use default Transient lifetime and work - Assert.NotNull(handler); + await Assert.That(handler).IsNotNull(); } private class UnregisteredHandler : RequestHandler diff --git a/tests/Paramore.Brighter.Extensions.Tests/FactoryLifetimeTests.cs b/tests/Paramore.Brighter.Extensions.Tests/FactoryLifetimeTests.cs index 3185ccbcfb..96d738a4f5 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/FactoryLifetimeTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/FactoryLifetimeTests.cs @@ -26,14 +26,13 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class FactoryLifetimeTests { - [Fact] - public void Factory_WithScopedLifetime_ReturnsSameInstanceWithinScope() + [Test] + public async Task Factory_WithScopedLifetime_ReturnsSameInstanceWithinScope() { // Arrange var services = new ServiceCollection(); @@ -52,11 +51,11 @@ public void Factory_WithScopedLifetime_ReturnsSameInstanceWithinScope() var handler2 = ((IAmAHandlerFactorySync)factory).Create(typeof(TestHandler), lifetime); // Assert - Same scope should return same instance - Assert.Same(handler1, handler2); + await Assert.That(handler2).IsSameReferenceAs(handler1); } - [Fact] - public void Factory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScopes() + [Test] + public async Task Factory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScopes() { // Arrange var services = new ServiceCollection(); @@ -76,11 +75,11 @@ public void Factory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScopes() var handler2 = ((IAmAHandlerFactorySync)factory).Create(typeof(TestHandler), lifetime2); // Assert - Different scopes should return different instances - Assert.NotSame(handler1, handler2); + await Assert.That(handler2).IsNotSameReferenceAs(handler1); } - [Fact] - public void Factory_WithTransientLifetime_ReturnsDifferentInstancesEachTime() + [Test] + public async Task Factory_WithTransientLifetime_ReturnsDifferentInstancesEachTime() { // Arrange var services = new ServiceCollection(); @@ -99,11 +98,11 @@ public void Factory_WithTransientLifetime_ReturnsDifferentInstancesEachTime() var handler2 = ((IAmAHandlerFactorySync)factory).Create(typeof(TestHandler), lifetime); // Assert - Transient should return new instance each time - Assert.NotSame(handler1, handler2); + await Assert.That(handler2).IsNotSameReferenceAs(handler1); } - [Fact] - public void Factory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() + [Test] + public async Task Factory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() { // Arrange var services = new ServiceCollection(); @@ -123,11 +122,11 @@ public void Factory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() var handler2 = ((IAmAHandlerFactorySync)factory).Create(typeof(TestHandler), lifetime2); // Assert - Singleton should return same instance regardless of scope - Assert.Same(handler1, handler2); + await Assert.That(handler2).IsSameReferenceAs(handler1); } - [Fact] - public void AsyncFactory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() + [Test] + public async Task AsyncFactory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() { // Arrange var services = new ServiceCollection(); @@ -147,11 +146,11 @@ public void AsyncFactory_WithSingletonLifetime_ReturnsSameInstanceAcrossScopes() var handler2 = ((IAmAHandlerFactoryAsync)factory).Create(typeof(TestAsyncHandler), lifetime2); // Assert - Singleton should return same instance regardless of scope - Assert.Same(handler1, handler2); + await Assert.That(handler2).IsSameReferenceAs(handler1); } - [Fact] - public void AsyncFactory_WithScopedLifetime_ReturnsSameInstanceWithinScope() + [Test] + public async Task AsyncFactory_WithScopedLifetime_ReturnsSameInstanceWithinScope() { // Arrange var services = new ServiceCollection(); @@ -170,11 +169,11 @@ public void AsyncFactory_WithScopedLifetime_ReturnsSameInstanceWithinScope() var handler2 = ((IAmAHandlerFactoryAsync)factory).Create(typeof(TestAsyncHandler), lifetime); // Assert - Assert.Same(handler1, handler2); + await Assert.That(handler2).IsSameReferenceAs(handler1); } - [Fact] - public void AsyncFactory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScopes() + [Test] + public async Task AsyncFactory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScopes() { // Arrange var services = new ServiceCollection(); @@ -194,11 +193,11 @@ public void AsyncFactory_WithScopedLifetime_ReturnsDifferentInstancesAcrossScope var handler2 = ((IAmAHandlerFactoryAsync)factory).Create(typeof(TestAsyncHandler), lifetime2); // Assert - Assert.NotSame(handler1, handler2); + await Assert.That(handler2).IsNotSameReferenceAs(handler1); } - [Fact] - public void AsyncFactory_WithTransientLifetime_ReturnsDifferentInstances() + [Test] + public async Task AsyncFactory_WithTransientLifetime_ReturnsDifferentInstances() { // Arrange var services = new ServiceCollection(); @@ -217,11 +216,11 @@ public void AsyncFactory_WithTransientLifetime_ReturnsDifferentInstances() var handler2 = ((IAmAHandlerFactoryAsync)factory).Create(typeof(TestAsyncHandler), lifetime); // Assert - Assert.NotSame(handler1, handler2); + await Assert.That(handler2).IsNotSameReferenceAs(handler1); } - [Fact] - public void Factory_HandlerWithDependency_ResolvesBothCorrectly() + [Test] + public async Task Factory_HandlerWithDependency_ResolvesBothCorrectly() { // Arrange var services = new ServiceCollection(); @@ -240,12 +239,12 @@ public void Factory_HandlerWithDependency_ResolvesBothCorrectly() var handler = (HandlerWithDependency)((IAmAHandlerFactorySync)factory).Create(typeof(HandlerWithDependency), lifetime)!; // Assert - Assert.NotNull(handler); - Assert.NotNull(handler.Dependency); + await Assert.That(handler).IsNotNull(); + await Assert.That(handler.Dependency).IsNotNull(); } - [Fact] - public void Factory_Release_ClearsHandlerFromCache() + [Test] + public async Task Factory_Release_ClearsHandlerFromCache() { // Arrange var services = new ServiceCollection(); @@ -265,12 +264,12 @@ public void Factory_Release_ClearsHandlerFromCache() var handler2 = ((IAmAHandlerFactorySync)factory).Create(typeof(TestHandler), lifetime); // Assert - After release, we should get a new handler instance - Assert.NotNull(handler2); - Assert.NotSame(handler1, handler2); + await Assert.That(handler2).IsNotNull(); + await Assert.That(handler2).IsNotSameReferenceAs(handler1); } - [Fact] - public void Factory_WithScopedLifetime_TracksDisposableHandler() + [Test] + public async Task Factory_WithScopedLifetime_TracksDisposableHandler() { // Arrange var services = new ServiceCollection(); @@ -288,8 +287,8 @@ public void Factory_WithScopedLifetime_TracksDisposableHandler() var handler = (DisposableTestHandler)((IAmAHandlerFactorySync)factory).Create(typeof(DisposableTestHandler), lifetime)!; // Assert - Handler should be created and not disposed initially - Assert.NotNull(handler); - Assert.False(handler.IsDisposed); + await Assert.That(handler).IsNotNull(); + await Assert.That(handler.IsDisposed).IsFalse(); } private class TestHandler : RequestHandler diff --git a/tests/Paramore.Brighter.Extensions.Tests/FactoryThreadSafetyTests.cs b/tests/Paramore.Brighter.Extensions.Tests/FactoryThreadSafetyTests.cs index e9d8044d4b..65181e3cb5 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/FactoryThreadSafetyTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/FactoryThreadSafetyTests.cs @@ -28,7 +28,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -37,7 +36,7 @@ namespace Paramore.Brighter.Extensions.Tests; /// public class FactoryThreadSafetyTests { - [Fact] + [Test] public async Task ConcurrentSingletonResolution_ReturnsSameInstance() { // Arrange @@ -68,10 +67,10 @@ public async Task ConcurrentSingletonResolution_ReturnsSameInstance() // Assert - All should be the same instance var distinctHandlers = handlers.Distinct().ToList(); - Assert.Single(distinctHandlers); + await Assert.That(distinctHandlers).HasSingleItem(); } - [Fact] + [Test] public async Task ConcurrentScopedResolution_SameScopeReturnsSameInstance() { // Arrange @@ -102,10 +101,10 @@ public async Task ConcurrentScopedResolution_SameScopeReturnsSameInstance() // Assert - All should be the same instance (same scope) var distinctHandlers = handlers.Distinct().ToList(); - Assert.Single(distinctHandlers); + await Assert.That(distinctHandlers).HasSingleItem(); } - [Fact] + [Test] public async Task ConcurrentTransientResolution_ReturnsDifferentInstances() { // Arrange @@ -136,10 +135,10 @@ public async Task ConcurrentTransientResolution_ReturnsDifferentInstances() // Assert - All should be different instances var distinctHandlers = handlers.Distinct().ToList(); - Assert.Equal(50, distinctHandlers.Count); + await Assert.That(distinctHandlers.Count).IsEqualTo(50); } - [Fact] + [Test] public async Task ConcurrentSingletonResolution_OnlyCreatesOneInstance() { // Arrange - Use a handler that tracks instantiation count @@ -173,8 +172,8 @@ public async Task ConcurrentSingletonResolution_OnlyCreatesOneInstance() await Task.WhenAll(tasks); // Assert - Only ONE instance should have been created - Assert.Equal(1, CountingHandler.InstanceCount); - Assert.Single(handlers.Distinct()); + await Assert.That(CountingHandler.InstanceCount).IsEqualTo(1); + await Assert.That(handlers.Distinct()).HasSingleItem(); } private class ThreadSafetyTestHandler : RequestHandler diff --git a/tests/Paramore.Brighter.Extensions.Tests/LifetimeConfigurationTests.cs b/tests/Paramore.Brighter.Extensions.Tests/LifetimeConfigurationTests.cs index 2e0fc456cd..c594b977aa 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/LifetimeConfigurationTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/LifetimeConfigurationTests.cs @@ -27,7 +27,6 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -40,8 +39,8 @@ namespace Paramore.Brighter.Extensions.Tests; /// public class LifetimeConfigurationTests { - [Fact] - public void AddBrighter_WithDefaultLifetimes_RegistersAllAsTransient() + [Test] + public async Task AddBrighter_WithDefaultLifetimes_RegistersAllAsTransient() { // Arrange var services = new ServiceCollection(); @@ -52,15 +51,15 @@ public void AddBrighter_WithDefaultLifetimes_RegistersAllAsTransient() // Assert - All components are registered as Transient in DI // (Actual handler lifetime is managed by ServiceProviderHandlerFactory at runtime) var handlerDescriptor = services.FirstOrDefault(x => x.ServiceType == typeof(TestEventHandler)); - Assert.NotNull(handlerDescriptor); - Assert.Equal(ServiceLifetime.Transient, handlerDescriptor.Lifetime); + await Assert.That(handlerDescriptor).IsNotNull(); + await Assert.That(handlerDescriptor.Lifetime).IsEqualTo(ServiceLifetime.Transient); var mapperDescriptor = services.FirstOrDefault(x => x.ServiceType == typeof(TestEventMessageMapper)); - Assert.NotNull(mapperDescriptor); - Assert.Equal(ServiceLifetime.Transient, mapperDescriptor.Lifetime); + await Assert.That(mapperDescriptor).IsNotNull(); + await Assert.That(mapperDescriptor.Lifetime).IsEqualTo(ServiceLifetime.Transient); var transformerDescriptor = services.FirstOrDefault(x => x.ServiceType == typeof(TestTransform)); - Assert.NotNull(transformerDescriptor); - Assert.Equal(ServiceLifetime.Transient, transformerDescriptor.Lifetime); + await Assert.That(transformerDescriptor).IsNotNull(); + await Assert.That(transformerDescriptor.Lifetime).IsEqualTo(ServiceLifetime.Transient); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj b/tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj index de101fbf53..363f694f02 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj +++ b/tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj @@ -1,27 +1,16 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers - + - @@ -29,5 +18,4 @@ - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Extensions.Tests/ServiceProviderLambdaTests.cs b/tests/Paramore.Brighter.Extensions.Tests/ServiceProviderLambdaTests.cs index 48dd611232..dac14b6a44 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/ServiceProviderLambdaTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/ServiceProviderLambdaTests.cs @@ -29,14 +29,13 @@ THE SOFTWARE. */ using Microsoft.Extensions.Options; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ServiceProviderLambdaTests { - [Fact] - public void AddBrighter_WithServiceProviderFunc_ResolvesServicesCorrectly() + [Test] + public async Task AddBrighter_WithServiceProviderFunc_ResolvesServicesCorrectly() { // Arrange var services = new ServiceCollection(); @@ -52,12 +51,12 @@ public void AddBrighter_WithServiceProviderFunc_ResolvesServicesCorrectly() var options = provider.GetRequiredService(); // Assert - Assert.NotNull(options); - Assert.IsType(options.RequestContextFactory); + await Assert.That(options).IsNotNull(); + await Assert.That(options.RequestContextFactory).IsTypeOf(); } - [Fact] - public void AddBrighter_SupportsPostConfigure_ForTestOverrides() + [Test] + public async Task AddBrighter_SupportsPostConfigure_ForTestOverrides() { // Arrange var services = new ServiceCollection(); @@ -79,12 +78,12 @@ public void AddBrighter_SupportsPostConfigure_ForTestOverrides() var options = provider.GetRequiredService(); // Assert - PostConfigure should have applied - Assert.Same(customFactory, options.RequestContextFactory); - Assert.Equal(ServiceLifetime.Scoped, options.HandlerLifetime); + await Assert.That(options.RequestContextFactory).IsSameReferenceAs(customFactory); + await Assert.That(options.HandlerLifetime).IsEqualTo(ServiceLifetime.Scoped); } - [Fact] - public void AddProducers_WithServiceProviderFunc_DefersConfiguration() + [Test] + public async Task AddProducers_WithServiceProviderFunc_DefersConfiguration() { // Arrange var services = new ServiceCollection(); @@ -102,12 +101,12 @@ public void AddProducers_WithServiceProviderFunc_DefersConfiguration() var config = provider.GetService(); // Assert - Assert.NotNull(config); - Assert.Same(producerRegistry, config.ProducerRegistry); + await Assert.That(config).IsNotNull(); + await Assert.That(config.ProducerRegistry).IsSameReferenceAs(producerRegistry); } - [Fact] - public void AddConsumers_WithServiceProviderFunc_ResolvesServicesCorrectly() + [Test] + public async Task AddConsumers_WithServiceProviderFunc_ResolvesServicesCorrectly() { // Arrange var services = new ServiceCollection(); @@ -125,12 +124,12 @@ public void AddConsumers_WithServiceProviderFunc_ResolvesServicesCorrectly() var options = provider.GetService(); // Assert - Assert.NotNull(options); - Assert.Same(channelFactory, options.DefaultChannelFactory); + await Assert.That(options).IsNotNull(); + await Assert.That(options.DefaultChannelFactory).IsSameReferenceAs(channelFactory); } - [Fact] - public void AddBrighter_WithActionOverload_StillWorks() + [Test] + public async Task AddBrighter_WithActionOverload_StillWorks() { // Arrange var services = new ServiceCollection(); @@ -145,11 +144,11 @@ public void AddBrighter_WithActionOverload_StillWorks() var options = provider.GetRequiredService(); // Assert - Assert.Equal(ServiceLifetime.Scoped, options.HandlerLifetime); + await Assert.That(options.HandlerLifetime).IsEqualTo(ServiceLifetime.Scoped); } - [Fact] - public void AddBrighter_WithNoConfiguration_UsesDefaults() + [Test] + public async Task AddBrighter_WithNoConfiguration_UsesDefaults() { // Arrange var services = new ServiceCollection(); @@ -161,6 +160,6 @@ public void AddBrighter_WithNoConfiguration_UsesDefaults() var options = provider.GetRequiredService(); // Assert - Assert.Equal(ServiceLifetime.Transient, options.HandlerLifetime); + await Assert.That(options.HandlerLifetime).IsEqualTo(ServiceLifetime.Transient); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/TestDifferentSetups.cs b/tests/Paramore.Brighter.Extensions.Tests/TestDifferentSetups.cs index 1b0771e540..556e1c6c3d 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/TestDifferentSetups.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/TestDifferentSetups.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Data; using System.Data.Common; @@ -12,14 +12,13 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Tests { public class TestBrighterExtension { - [Fact] - public void BasicSetup() + [Test] + public async Task BasicSetup() { var serviceCollection = new ServiceCollection(); @@ -29,13 +28,13 @@ public void BasicSetup() var commandProcessor = serviceProvider.GetService(); - Assert.NotNull(commandProcessor); + await Assert.That(commandProcessor).IsNotNull(); } - [Theory] - [InlineData(typeof(SomeSqlConnectionProvider), typeof(StubSqlTransactionProvider))] - [InlineData(typeof(StubSqlTransactionProvider), typeof(StubSqlTransactionProvider))] - public void WithExternalBus(Type connectionProvider, Type transactionProvider) + [Test] + [Arguments(typeof(SomeSqlConnectionProvider), typeof(StubSqlTransactionProvider))] + [Arguments(typeof(StubSqlTransactionProvider), typeof(StubSqlTransactionProvider))] + public async Task WithExternalBus(Type connectionProvider, Type transactionProvider) { var serviceCollection = new ServiceCollection(); const string mytopic = "MyTopic"; @@ -79,11 +78,11 @@ public void WithExternalBus(Type connectionProvider, Type transactionProvider) var commandProcessor = serviceProvider.GetService(); - Assert.NotNull(commandProcessor); + await Assert.That(commandProcessor).IsNotNull(); } - [Fact] - public void WithCustomPolicy() + [Test] + public async Task WithCustomPolicy() { var serviceCollection = new ServiceCollection(); @@ -107,24 +106,24 @@ public void WithCustomPolicy() var commandProcessor = serviceProvider.GetService(); - Assert.NotNull(commandProcessor); + await Assert.That(commandProcessor).IsNotNull(); } - [Fact] - public void WithScopedLifetime() + [Test] + public async Task WithScopedLifetime() { var serviceCollection = new ServiceCollection(); serviceCollection.AddBrighter( ).AutoFromAssemblies(); - Assert.Equal(ServiceLifetime.Singleton, serviceCollection.SingleOrDefault(x => x.ServiceType == typeof(IAmACommandProcessor))?.Lifetime); + await Assert.That(serviceCollection.SingleOrDefault(x => x.ServiceType == typeof(IAmACommandProcessor))?.Lifetime).IsEqualTo(ServiceLifetime.Singleton); var serviceProvider = serviceCollection.BuildServiceProvider(); var commandProcessor = serviceProvider.GetService(); - Assert.NotNull(commandProcessor); + await Assert.That(commandProcessor).IsNotNull(); } public class SomeSqlConnectionProvider : RelationalDbConnectionProvider diff --git a/tests/Paramore.Brighter.Extensions.Tests/TransformerFactoryTests.cs b/tests/Paramore.Brighter.Extensions.Tests/TransformerFactoryTests.cs index 6459747650..b76afbed75 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/TransformerFactoryTests.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/TransformerFactoryTests.cs @@ -1,7 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; @@ -10,8 +9,8 @@ public class TransformerFactoryTests private ServiceProviderTransformerFactory _transformFactory; private ServiceProviderTransformerFactoryAsync _transformFactoryAsync; - [Fact] - public void When_resolving_a_transformer_from_the_factory() + [Test] + public async Task When_resolving_a_transformer_from_the_factory() { //arrange var collection = new ServiceCollection(); @@ -25,11 +24,11 @@ public void When_resolving_a_transformer_from_the_factory() var testTransform = _transformFactory.Create(typeof(TestTransform)); //assert - Assert.NotNull(testTransform); + await Assert.That(testTransform).IsNotNull(); } - [Fact] - public void When_resolving_a_transformer_from_the_factory_async() + [Test] + public async Task When_resolving_a_transformer_from_the_factory_async() { //arrange var collection = new ServiceCollection(); @@ -43,11 +42,11 @@ public void When_resolving_a_transformer_from_the_factory_async() var testTransform = _transformFactoryAsync.Create(typeof(TestTransform)); //assert - Assert.NotNull(testTransform); + await Assert.That(testTransform).IsNotNull(); } - [Fact] - public void When_resolving_a_missing_transformer_from_the_factory() + [Test] + public async Task When_resolving_a_missing_transformer_from_the_factory() { //arrange var collection = new ServiceCollection(); @@ -60,11 +59,11 @@ public void When_resolving_a_missing_transformer_from_the_factory() var testTransform = _transformFactory.Create(typeof(TestTransform)); //assert - Assert.Null(testTransform); + await Assert.That(testTransform).IsNull(); } - [Fact] - public void When_resolving_a_missing_transformer_from_the_factory_async() + [Test] + public async Task When_resolving_a_missing_transformer_from_the_factory_async() { //arrange var collection = new ServiceCollection(); @@ -77,6 +76,6 @@ public void When_resolving_a_missing_transformer_from_the_factory_async() var testTransform = _transformFactoryAsync.Create(typeof(TestTransform)); //assert - Assert.Null(testTransform); + await Assert.That(testTransform).IsNull(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_add_consumers_with_validation_should_set_consumer_owns_flag.cs b/tests/Paramore.Brighter.Extensions.Tests/When_add_consumers_with_validation_should_set_consumer_owns_flag.cs index d8b810043d..b4f3713539 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_add_consumers_with_validation_should_set_consumer_owns_flag.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_add_consumers_with_validation_should_set_consumer_owns_flag.cs @@ -26,14 +26,13 @@ THE SOFTWARE. */ using Microsoft.Extensions.Options; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class AddConsumersValidationFlagTests { - [Fact] - public void When_validate_pipelines_then_add_consumers_should_set_consumer_owns_validation_true() + [Test] + public async Task When_validate_pipelines_then_add_consumers_should_set_consumer_owns_validation_true() { // Arrange var services = new ServiceCollection(); @@ -46,11 +45,11 @@ public void When_validate_pipelines_then_add_consumers_should_set_consumer_owns_ // Assert var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.True(options.ConsumerOwnsValidation); + await Assert.That(options.ConsumerOwnsValidation).IsTrue(); } - [Fact] - public void When_add_consumers_then_validate_pipelines_should_set_consumer_owns_validation_true() + [Test] + public async Task When_add_consumers_then_validate_pipelines_should_set_consumer_owns_validation_true() { // Arrange var services = new ServiceCollection(); @@ -62,11 +61,11 @@ public void When_add_consumers_then_validate_pipelines_should_set_consumer_owns_ // Assert var provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>().Value; - Assert.True(options.ConsumerOwnsValidation); + await Assert.That(options.ConsumerOwnsValidation).IsTrue(); } - [Fact] - public void When_add_consumers_without_validate_pipelines_should_not_register_validation_options() + [Test] + public async Task When_add_consumers_without_validate_pipelines_should_not_register_validation_options() { // Arrange var services = new ServiceCollection(); @@ -79,6 +78,6 @@ public void When_add_consumers_without_validate_pipelines_should_not_register_va // ValidatePipelines, no IAmAPipelineValidator is registered. var provider = services.BuildServiceProvider(); var validator = provider.GetService(); - Assert.Null(validator); + await Assert.That(validator).IsNull(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_channel_factory.cs b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_channel_factory.cs index 46ff04eaa7..2fced10eec 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_channel_factory.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_channel_factory.cs @@ -27,14 +27,13 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ChannelFactorySchedulerTests { - [Fact] - public void Should_set_scheduler_on_channel_factory_that_implements_scheduler_interface() + [Test] + public async Task Should_set_scheduler_on_channel_factory_that_implements_scheduler_interface() { // Arrange — configure AddConsumers with an InMemoryChannelFactory (which implements IAmAChannelFactoryWithScheduler) var bus = new InternalBus(); @@ -71,13 +70,13 @@ public void Should_set_scheduler_on_channel_factory_that_implements_scheduler_in var dispatcher = provider.GetRequiredService(); // Assert — the channel factory should now have its Scheduler property set from DI - Assert.NotNull(dispatcher); - Assert.NotNull(channelFactory.Scheduler); - Assert.IsAssignableFrom(channelFactory.Scheduler); + await Assert.That(dispatcher).IsNotNull(); + await Assert.That(channelFactory.Scheduler).IsNotNull(); + await Assert.That(channelFactory.Scheduler).IsAssignableTo(); } - [Fact] - public void Should_set_custom_scheduler_on_channel_factory_when_UseScheduler_configured() + [Test] + public async Task Should_set_custom_scheduler_on_channel_factory_when_UseScheduler_configured() { // Arrange — configure with a custom scheduler factory var bus = new InternalBus(); @@ -116,9 +115,9 @@ public void Should_set_custom_scheduler_on_channel_factory_when_UseScheduler_con var dispatcher = provider.GetRequiredService(); // Assert — the channel factory should have the custom scheduler set - Assert.NotNull(dispatcher); - Assert.NotNull(channelFactory.Scheduler); - Assert.IsType(channelFactory.Scheduler); + await Assert.That(dispatcher).IsNotNull(); + await Assert.That(channelFactory.Scheduler).IsNotNull(); + await Assert.That(channelFactory.Scheduler).IsTypeOf(); } private class StubSchedulerFactory : IAmAMessageSchedulerFactory, IAmARequestSchedulerFactory diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_per_subscription_channel_factory.cs b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_per_subscription_channel_factory.cs index 0c7c248a0d..d20b6bdf74 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_per_subscription_channel_factory.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_should_set_scheduler_on_per_subscription_channel_factory.cs @@ -29,14 +29,13 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class PerSubscriptionChannelFactorySchedulerTests { - [Fact] - public void Should_set_scheduler_on_per_subscription_channel_factory() + [Test] + public async Task Should_set_scheduler_on_per_subscription_channel_factory() { // Arrange — one subscription uses a per-subscription channel factory var bus = new InternalBus(); @@ -81,14 +80,14 @@ public void Should_set_scheduler_on_per_subscription_channel_factory() var dispatcher = provider.GetRequiredService(); // Assert — both the default and per-subscription factory should have the scheduler - Assert.NotNull(dispatcher); - Assert.NotNull(defaultFactory.Scheduler); - Assert.NotNull(perSubFactory.Scheduler); - Assert.IsAssignableFrom(perSubFactory.Scheduler); + await Assert.That(dispatcher).IsNotNull(); + await Assert.That(defaultFactory.Scheduler).IsNotNull(); + await Assert.That(perSubFactory.Scheduler).IsNotNull(); + await Assert.That(perSubFactory.Scheduler).IsAssignableTo(); } - [Fact] - public void Should_set_scheduler_on_combined_channel_factory_and_propagate_to_inner_factories() + [Test] + public async Task Should_set_scheduler_on_combined_channel_factory_and_propagate_to_inner_factories() { // Arrange — use a CombinedChannelFactory as the default (multi-bus scenario) var bus = new InternalBus(); @@ -126,9 +125,9 @@ public void Should_set_scheduler_on_combined_channel_factory_and_propagate_to_in var dispatcher = provider.GetRequiredService(); // Assert — the inner factory should have the scheduler propagated through CombinedChannelFactory - Assert.NotNull(dispatcher); - Assert.NotNull(innerFactory.Scheduler); - Assert.IsAssignableFrom(innerFactory.Scheduler); + await Assert.That(dispatcher).IsNotNull(); + await Assert.That(innerFactory.Scheduler).IsNotNull(); + await Assert.That(innerFactory.Scheduler).IsAssignableTo(); } private class SchedulerAwareChannelFactory : IAmAChannelFactory, IAmAChannelFactoryWithScheduler diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_with_non_scheduler_channel_factory_should_work.cs b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_with_non_scheduler_channel_factory_should_work.cs index 6b0cf396e6..bfb0d32e4c 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_with_non_scheduler_channel_factory_should_work.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_building_dispatcher_with_non_scheduler_channel_factory_should_work.cs @@ -29,14 +29,13 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class When_building_dispatcher_with_non_scheduler_channel_factory_should_work { - [Fact] - public void Should_build_dispatcher_without_errors() + [Test] + public async Task Should_build_dispatcher_without_errors() { // Arrange — configure with a channel factory that does NOT implement IAmAChannelFactoryWithScheduler var bus = new InternalBus(); @@ -73,8 +72,8 @@ public void Should_build_dispatcher_without_errors() var dispatcher = provider.GetRequiredService(); // Assert — dispatcher should build successfully; no scheduler-related exceptions thrown - Assert.NotNull(dispatcher); - Assert.IsNotType(channelFactory); + await Assert.That(dispatcher).IsNotNull(); + await Assert.That(channelFactory).IsNotTypeOf(); } /// diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_no_scheduler_configured_should_default_to_InMemorySchedulerFactory.cs b/tests/Paramore.Brighter.Extensions.Tests/When_no_scheduler_configured_should_default_to_InMemorySchedulerFactory.cs index 8cde9a0c53..9646233667 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_no_scheduler_configured_should_default_to_InMemorySchedulerFactory.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_no_scheduler_configured_should_default_to_InMemorySchedulerFactory.cs @@ -22,14 +22,13 @@ THE SOFTWARE. */ using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class When_no_scheduler_configured_should_default_to_InMemorySchedulerFactory { - [Fact] - public void Should_resolve_InMemorySchedulerFactory_as_default() + [Test] + public async Task Should_resolve_InMemorySchedulerFactory_as_default() { // Arrange — AddBrighter with no explicit UseScheduler or UseMessageScheduler var services = new ServiceCollection(); @@ -40,12 +39,12 @@ public void Should_resolve_InMemorySchedulerFactory_as_default() var factory = provider.GetService(); // Assert — the default factory should be InMemorySchedulerFactory - Assert.NotNull(factory); - Assert.IsType(factory); + await Assert.That(factory).IsNotNull(); + await Assert.That(factory).IsTypeOf(); } - [Fact] - public void Should_resolve_IAmAMessageScheduler_from_default_factory() + [Test] + public async Task Should_resolve_IAmAMessageScheduler_from_default_factory() { // Arrange — AddBrighter with no explicit UseScheduler var services = new ServiceCollection(); @@ -56,12 +55,12 @@ public void Should_resolve_IAmAMessageScheduler_from_default_factory() var scheduler = provider.GetService(); // Assert — a scheduler should be resolvable from the default factory - Assert.NotNull(scheduler); - Assert.IsAssignableFrom(scheduler); + await Assert.That(scheduler).IsNotNull(); + await Assert.That(scheduler).IsAssignableTo(); } - [Fact] - public void Should_resolve_IAmARequestSchedulerFactory_as_default() + [Test] + public async Task Should_resolve_IAmARequestSchedulerFactory_as_default() { // Arrange — AddBrighter with no explicit UseScheduler var services = new ServiceCollection(); @@ -72,7 +71,7 @@ public void Should_resolve_IAmARequestSchedulerFactory_as_default() var factory = provider.GetService(); // Assert — the default request scheduler factory should also be InMemorySchedulerFactory - Assert.NotNull(factory); - Assert.IsType(factory); + await Assert.That(factory).IsNotNull(); + await Assert.That(factory).IsTypeOf(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_scheduler_explicitly_configured_should_override_default.cs b/tests/Paramore.Brighter.Extensions.Tests/When_scheduler_explicitly_configured_should_override_default.cs index 5b0f1cf3ff..c8276d894b 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_scheduler_explicitly_configured_should_override_default.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_scheduler_explicitly_configured_should_override_default.cs @@ -25,14 +25,13 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class When_scheduler_explicitly_configured_should_override_default { - [Fact] - public void Should_resolve_custom_factory_instead_of_InMemorySchedulerFactory() + [Test] + public async Task Should_resolve_custom_factory_instead_of_InMemorySchedulerFactory() { // Arrange — configure a custom scheduler factory via UseScheduler var customFactory = new StubSchedulerFactory(); @@ -46,13 +45,13 @@ public void Should_resolve_custom_factory_instead_of_InMemorySchedulerFactory() var resolvedFactory = provider.GetRequiredService(); // Assert — the custom factory should be resolved, not the default InMemorySchedulerFactory - Assert.NotNull(resolvedFactory); - Assert.IsType(resolvedFactory); - Assert.Same(customFactory, resolvedFactory); + await Assert.That(resolvedFactory).IsNotNull(); + await Assert.That(resolvedFactory).IsTypeOf(); + await Assert.That(resolvedFactory).IsSameReferenceAs(customFactory); } - [Fact] - public void Should_resolve_scheduler_from_custom_factory() + [Test] + public async Task Should_resolve_scheduler_from_custom_factory() { // Arrange — configure a custom scheduler factory via UseScheduler var customFactory = new StubSchedulerFactory(); @@ -66,12 +65,12 @@ public void Should_resolve_scheduler_from_custom_factory() var scheduler = provider.GetRequiredService(); // Assert — the scheduler should come from the custom factory - Assert.NotNull(scheduler); - Assert.IsType(scheduler); + await Assert.That(scheduler).IsNotNull(); + await Assert.That(scheduler).IsTypeOf(); } - [Fact] - public void Should_resolve_custom_request_scheduler_factory() + [Test] + public async Task Should_resolve_custom_request_scheduler_factory() { // Arrange — configure a custom scheduler factory via UseScheduler var customFactory = new StubSchedulerFactory(); @@ -85,9 +84,9 @@ public void Should_resolve_custom_request_scheduler_factory() var resolvedFactory = provider.GetRequiredService(); // Assert — the custom factory should be resolved for request scheduling too - Assert.NotNull(resolvedFactory); - Assert.IsType(resolvedFactory); - Assert.Same(customFactory, resolvedFactory); + await Assert.That(resolvedFactory).IsNotNull(); + await Assert.That(resolvedFactory).IsTypeOf(); + await Assert.That(resolvedFactory).IsSameReferenceAs(customFactory); } private class StubSchedulerFactory : IAmAMessageSchedulerFactory, IAmARequestSchedulerFactory diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_has_warnings_should_log_them.cs b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_has_warnings_should_log_them.cs index 7f70ff181c..6a91da59c4 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_has_warnings_should_log_them.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_has_warnings_should_log_them.cs @@ -32,13 +32,12 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator.Extensions.Hosting; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ServiceActivatorWarningLoggingTests { - [Fact] + [Test] public async Task When_service_activator_has_warnings_should_log_them_at_warning_level() { // Arrange — warnings only, no errors @@ -61,13 +60,13 @@ public async Task When_service_activator_has_warnings_should_log_them_at_warning // Assert — each warning is logged at Warning level with source and message var warningEntries = logger.WarningEntries.ToList(); - Assert.Equal(2, warningEntries.Count); - Assert.Contains("HandlerA", warningEntries[0].Message); - Assert.Contains("Backstop ordering suboptimal", warningEntries[0].Message); - Assert.Contains("HandlerB", warningEntries[1].Message); - Assert.Contains("Attribute mismatch suggestion", warningEntries[1].Message); + await Assert.That(warningEntries.Count).IsEqualTo(2); + await Assert.That(warningEntries[0].Message).Contains("HandlerA"); + await Assert.That(warningEntries[0].Message).Contains("Backstop ordering suboptimal"); + await Assert.That(warningEntries[1].Message).Contains("HandlerB"); + await Assert.That(warningEntries[1].Message).Contains("Attribute mismatch suggestion"); // Assert — Receive was still called (warnings don't prevent startup) - Assert.True(dispatcher.ReceiveWasCalled); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_single_constructor_should_resolve_optional_deps.cs b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_single_constructor_should_resolve_optional_deps.cs index 9cef83c75b..b754dc5782 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_single_constructor_should_resolve_optional_deps.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_single_constructor_should_resolve_optional_deps.cs @@ -32,13 +32,12 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator.Extensions.Hosting; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ServiceActivatorSingleConstructorTests { - [Fact] + [Test] public async Task When_consumer_owns_validation_and_validator_registered_should_validate_before_receive() { // Arrange @@ -60,12 +59,12 @@ public async Task When_consumer_owns_validation_and_validator_registered_should_ await service.StartAsync(CancellationToken.None); // Assert — validation and diagnostics run before Receive - Assert.True(validator.ValidateWasCalled); - Assert.True(diagnosticWriter.DescribeWasCalled); - Assert.Equal(new List { "Describe", "Validate", "Receive" }, actionLog); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(diagnosticWriter.DescribeWasCalled).IsTrue(); + await Assert.That(actionLog).IsEquivalentTo(new List { "Describe", "Validate", "Receive" }); } - [Fact] + [Test] public async Task When_consumer_owns_validation_and_validator_not_registered_should_go_to_receive() { // Arrange — no validator or diagnostic writer registered @@ -83,11 +82,11 @@ public async Task When_consumer_owns_validation_and_validator_not_registered_sho await service.StartAsync(CancellationToken.None); // Assert — straight to Receive, no error - Assert.True(dispatcher.ReceiveWasCalled); - Assert.Equal(new List { "Receive" }, actionLog); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); + await Assert.That(actionLog).IsEquivalentTo(new List { "Receive" }); } - [Fact] + [Test] public async Task When_consumer_does_not_own_validation_should_go_straight_to_receive() { // Arrange — consumer does not own validation; defers to BrighterValidationHostedService @@ -107,7 +106,7 @@ public async Task When_consumer_does_not_own_validation_should_go_straight_to_re await service.StartAsync(CancellationToken.None); // Assert — skips validation, goes straight to Receive - Assert.False(validator.ValidateWasCalled); - Assert.Equal(new List { "Receive" }, actionLog); + await Assert.That(validator.ValidateWasCalled).IsFalse(); + await Assert.That(actionLog).IsEquivalentTo(new List { "Receive" }); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_starts_with_validator_should_validate_before_receive.cs b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_starts_with_validator_should_validate_before_receive.cs index c24889e507..4a8c4eeae1 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_starts_with_validator_should_validate_before_receive.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_starts_with_validator_should_validate_before_receive.cs @@ -32,13 +32,12 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator.Extensions.Hosting; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ServiceActivatorValidationTests { - [Fact] + [Test] public async Task When_validator_registered_should_validate_before_receive() { // Arrange @@ -60,12 +59,12 @@ public async Task When_validator_registered_should_validate_before_receive() await service.StartAsync(CancellationToken.None); // Assert — validation and diagnostics run before Receive, in correct order - Assert.True(validator.ValidateWasCalled); - Assert.True(diagnosticWriter.DescribeWasCalled); - Assert.Equal(new List { "Describe", "Validate", "Receive" }, actionLog); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(diagnosticWriter.DescribeWasCalled).IsTrue(); + await Assert.That(actionLog).IsEquivalentTo(new List { "Describe", "Validate", "Receive" }); } - [Fact] + [Test] public async Task When_validator_not_registered_should_go_straight_to_receive() { // Arrange — no validator registered, consumer does not own validation @@ -83,11 +82,11 @@ public async Task When_validator_not_registered_should_go_straight_to_receive() await service.StartAsync(CancellationToken.None); // Assert — only Receive is called, backward compatible - Assert.True(dispatcher.ReceiveWasCalled); - Assert.Equal(new List { "Receive" }, actionLog); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); + await Assert.That(actionLog).IsEquivalentTo(new List { "Receive" }); } - [Fact] + [Test] public async Task When_validation_has_errors_should_not_call_receive() { // Arrange @@ -109,6 +108,6 @@ public async Task When_validation_has_errors_should_not_call_receive() // Act & Assert — validation error prevents Receive from being called await Assert.ThrowsAsync( () => service.StartAsync(CancellationToken.None)); - Assert.False(dispatcher.ReceiveWasCalled); + await Assert.That(dispatcher.ReceiveWasCalled).IsFalse(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_throw_on_error_false_should_log_not_throw.cs b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_throw_on_error_false_should_log_not_throw.cs index a4b7062970..09306da199 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_throw_on_error_false_should_log_not_throw.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_service_activator_throw_on_error_false_should_log_not_throw.cs @@ -33,13 +33,12 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator.Extensions.Hosting; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ServiceActivatorThrowOnErrorTests { - [Fact] + [Test] public async Task When_throw_on_error_false_and_errors_should_log_and_still_receive() { // Arrange @@ -66,12 +65,12 @@ public async Task When_throw_on_error_false_and_errors_should_log_and_still_rece await service.StartAsync(CancellationToken.None); // Assert — errors logged, Receive was called - Assert.True(validator.ValidateWasCalled); - Assert.True(dispatcher.ReceiveWasCalled); - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); } - [Fact] + [Test] public async Task When_throw_on_error_true_and_errors_should_throw_and_not_receive() { // Arrange @@ -97,10 +96,10 @@ public async Task When_throw_on_error_true_and_errors_should_throw_and_not_recei // Act & Assert — should throw, Receive should NOT be called await Assert.ThrowsAsync( () => service.StartAsync(CancellationToken.None)); - Assert.False(dispatcher.ReceiveWasCalled); + await Assert.That(dispatcher.ReceiveWasCalled).IsFalse(); } - [Fact] + [Test] public async Task When_throw_on_error_false_and_no_errors_should_receive_normally() { // Arrange @@ -126,12 +125,12 @@ public async Task When_throw_on_error_false_and_no_errors_should_receive_normall await service.StartAsync(CancellationToken.None); // Assert — no errors, Receive called normally - Assert.True(validator.ValidateWasCalled); - Assert.True(dispatcher.ReceiveWasCalled); - Assert.DoesNotContain(logger.Entries, e => e.LogLevel == LogLevel.Error); + await Assert.That(validator.ValidateWasCalled).IsTrue(); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); + await Assert.That(logger.Entries).DoesNotContain(e => e.LogLevel == LogLevel.Error); } - [Fact] + [Test] public async Task When_throw_on_error_false_should_still_log_warnings() { // Arrange @@ -159,8 +158,8 @@ public async Task When_throw_on_error_false_should_still_log_warnings() await service.StartAsync(CancellationToken.None); // Assert — both errors and warnings logged - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); - Assert.Contains(logger.Entries, e => e.LogLevel == LogLevel.Warning && e.Message.Contains("suboptimal")); - Assert.True(dispatcher.ReceiveWasCalled); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Error && e.Message.Contains("misconfigured")); + await Assert.That(logger.Entries).Contains(e => e.LogLevel == LogLevel.Warning && e.Message.Contains("suboptimal")); + await Assert.That(dispatcher.ReceiveWasCalled).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Extensions.Tests/When_validate_pipelines_with_consumers_should_receive_subscriptions.cs b/tests/Paramore.Brighter.Extensions.Tests/When_validate_pipelines_with_consumers_should_receive_subscriptions.cs index cf5b04f710..4da884fdb4 100644 --- a/tests/Paramore.Brighter.Extensions.Tests/When_validate_pipelines_with_consumers_should_receive_subscriptions.cs +++ b/tests/Paramore.Brighter.Extensions.Tests/When_validate_pipelines_with_consumers_should_receive_subscriptions.cs @@ -30,14 +30,13 @@ THE SOFTWARE. */ using Paramore.Brighter.ServiceActivator; using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection; using Paramore.Brighter.Validation; -using Xunit; namespace Paramore.Brighter.Extensions.Tests; public class ValidatePipelinesWithConsumersTests { - [Fact] - public void When_validate_pipelines_with_consumers_should_detect_missing_handler() + [Test] + public async Task When_validate_pipelines_with_consumers_should_detect_missing_handler() { // Arrange — set up a subscription for a request type with no handler registered var services = new ServiceCollection(); @@ -61,12 +60,12 @@ public void When_validate_pipelines_with_consumers_should_detect_missing_handler var result = validator.Validate(); // Assert — should detect the subscription has no handler registered - Assert.False(result.IsValid); - Assert.Contains(result.Errors, e => e.Message.Contains("No handler registered")); + await Assert.That(result.IsValid).IsFalse(); + await Assert.That(result.Errors).Contains(e => e.Message.Contains("No handler registered")); } - [Fact] - public void When_add_consumers_should_register_consumer_validation_specs() + [Test] + public async Task When_add_consumers_should_register_consumer_validation_specs() { // Arrange var services = new ServiceCollection(); @@ -78,7 +77,7 @@ public void When_add_consumers_should_register_consumer_validation_specs() var specs = provider.GetServices>().ToList(); // Assert — AddConsumers should register 3 consumer validation specs - Assert.Equal(3, specs.Count); + await Assert.That(specs.Count).IsEqualTo(3); } private class UnhandledEvent : Event diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 7675decd90..32ef4d6601 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; @@ -7,7 +7,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); @@ -45,7 +45,7 @@ public PubSubBufferedConsumerTestsAsync() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_topicName); @@ -84,7 +84,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() { //retrieve messages var message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await _channel.AcknowledgeAsync(message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index b829a16672..5a4ec1a55d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerSendAsyncTests : IDisposable { private readonly Message _message; @@ -56,7 +56,7 @@ public MessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -71,22 +71,22 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_queues_missing_verify_throws_async.cs index 1b1f97919a..459170fe6a 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_queues_missing_verify_throws_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Gcp.Tests.TestDoubles; @@ -6,7 +6,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class ValidateQueuesTestsAsync : IDisposable { private readonly GcpPubSubSubscription _pubSubSubscription; @@ -28,16 +28,16 @@ public ValidateQueuesTestsAsync() ); } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // We have no topic so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = GatewayFactory.CreateChannelFactory(); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_subscription_missing_verify_throws_async() { // We have no topic so we should throw @@ -49,7 +49,7 @@ await _channelFactory.EnsureTopicExistAsync(new TopicAttributes Name = _pubSubSubscription.RoutingKey, ProjectId = GatewayFactory.GetProjectId() }, OnMissingChannel.Create); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_a_message_async.cs index b91401d15b..36052bedbb 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerRequeueTestsAsync : IDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -56,7 +56,7 @@ public MessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(_pubSubSubscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -67,7 +67,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 942bf77f18..3e52482229 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -11,8 +11,8 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; -[Trait("Category", "GCP")] -[Trait("Fragile", "CI")] +[Category("GCP")] +[Property("Fragile", "CI")] public class MessageProducerDlqTestsAsync : IDisposable { private const int MaxDeliveryAttempts = 5; @@ -67,7 +67,7 @@ public MessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(_pubSubSubscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -80,7 +80,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() await Task.Delay(5000); int dlqCount = await GetDLQCountAsync(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs index c1fe8d0654..9ae0513a5d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Threading; using Paramore.Brighter.Gcp.Tests.Helper; @@ -7,7 +7,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); @@ -45,8 +45,8 @@ public PubSubBufferedConsumerTestsAsync() }); } - [Fact] - public void When_a_message_consumer_reads_multiple_messages() + [Test] + public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_topicName); @@ -84,7 +84,7 @@ public void When_a_message_consumer_reads_multiple_messages() { //retrieve messages var message = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); _channel.Acknowledge(message); Thread.Sleep(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 8222ea5989..be2fd34f78 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerSendAsyncTests : IDisposable { private readonly Message _message; @@ -60,8 +60,8 @@ public MessageProducerSendAsyncTests() }); } - [Fact] - public void When_posting_a_message_via_the_producer() + [Test] + public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; @@ -75,22 +75,22 @@ public void When_posting_a_message_via_the_producer() _channel.Acknowledge(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_queues_missing_verify_throws.cs index 190c436a70..d123d362f4 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_queues_missing_verify_throws.cs @@ -1,11 +1,11 @@ -using System; +using System; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Gcp.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.GcpPubSub; namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class ValidateQueuesTestsAsync : IDisposable { private readonly GcpMessagingGatewayConnection _connection; @@ -30,13 +30,13 @@ public ValidateQueuesTestsAsync() _connection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { // We have no topic so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = GatewayFactory.CreateChannelFactory(); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_pubSubSubscription)).ThrowsExactly(); } diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_a_message.cs index 1945f82e3d..19d8eda835 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.Gcp.Tests.Helper; @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerRequeueTestsAsync : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -57,8 +57,8 @@ public MessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateSyncChannel(_pubSubSubscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -68,7 +68,7 @@ public void When_requeueing_a_message() _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs index 94428c28e2..6a7e511336 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading; @@ -11,7 +11,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerDlqTestsAsync : IDisposable { private const int MaxDeliveryAttempts = 5; @@ -68,8 +68,8 @@ public MessageProducerDlqTestsAsync() _channel = _channelFactory.CreateSyncChannel(_pubSubSubscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); for (var i = 0; i <= MaxDeliveryAttempts; i++) @@ -81,7 +81,7 @@ public void When_requeueing_redrives_to_the_queue() Thread.Sleep(5000); var dlqCount = GetDLQCount(); - Assert.Equal(1, dlqCount); + await Assert.That(dlqCount).IsEqualTo(1); } private int GetDLQCount() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 5ac2f29214..24e9deefb4 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; @@ -7,7 +7,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); @@ -45,7 +45,7 @@ public PubSubBufferedConsumerTestsAsync() }); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { var routingKey = new RoutingKey(_topicName); @@ -84,7 +84,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() { //retrieve messages var message = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await _channel.AcknowledgeAsync(message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 0adc072a19..7222f953ef 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerSendAsyncTests : IDisposable { private readonly Message _message; @@ -56,7 +56,7 @@ public MessageProducerSendAsyncTests() }); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -71,22 +71,22 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_queues_missing_verify_throws_async.cs index c0d3f6a985..589d72a935 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_queues_missing_verify_throws_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Gcp.Tests.TestDoubles; @@ -6,7 +6,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class ValidateQueuesTestsAsync : IDisposable { private readonly GcpPubSubSubscription _pubSubSubscription; @@ -28,16 +28,16 @@ public ValidateQueuesTestsAsync() ); } - [Fact] + [Test] public async Task When_topic_missing_verify_throws_async() { // We have no topic so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = GatewayFactory.CreateChannelFactory(); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)).ThrowsExactly(); } - [Fact] + [Test] public async Task When_subscription_missing_verify_throws_async() { // We have no topic so we should throw @@ -49,7 +49,7 @@ await _channelFactory.EnsureTopicExistAsync(new TopicAttributes Name = _pubSubSubscription.RoutingKey, ProjectId = GatewayFactory.GetProjectId() }, OnMissingChannel.Create); - await Assert.ThrowsAsync(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_a_message_async.cs index c7a6078040..2fbab3b9eb 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerRequeueTestsAsync : IDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -56,7 +56,7 @@ public MessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateAsyncChannel(_pubSubSubscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _sender.SendAsync(_message); @@ -67,7 +67,7 @@ public async Task When_requeueing_a_message_async() await _channel.AcknowledgeAsync(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 8ecec4dfec..172176c48e 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; @@ -11,8 +11,8 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; -[Trait("Category", "GCP")] -[Trait("Fragile", "CI")] +[Category("GCP")] +[Property("Fragile", "CI")] public class MessageProducerDlqTestsAsync : IDisposable { private const int MaxDeliveryAttempts = 5; @@ -66,7 +66,7 @@ public MessageProducerDlqTestsAsync() _channel = _channelFactory.CreateAsyncChannel(_pubSubSubscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _sender.SendAsync(_message); @@ -77,7 +77,7 @@ public async Task When_requeueing_redrives_to_the_queue_async() } int dlqCount = await GetDLQCountAsync(); - Assert.True(dlqCount >= 1); + await Assert.That(dlqCount >= 1).IsTrue(); } private async Task GetDLQCountAsync() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs index c6d3cbc66c..aece9818a8 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Threading; using Paramore.Brighter.Gcp.Tests.Helper; @@ -7,7 +7,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); @@ -45,8 +45,8 @@ public PubSubBufferedConsumerTestsAsync() }); } - [Fact] - public void When_a_message_consumer_reads_multiple_messages() + [Test] + public async Task When_a_message_consumer_reads_multiple_messages() { var routingKey = new RoutingKey(_topicName); @@ -84,7 +84,7 @@ public void When_a_message_consumer_reads_multiple_messages() { //retrieve messages var message = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); _channel.Acknowledge(message); Thread.Sleep(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 8d95972509..84b9e63250 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading; @@ -9,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerSendAsyncTests : IDisposable { private readonly Message _message; @@ -60,8 +60,8 @@ public MessageProducerSendAsyncTests() }); } - [Fact] - public void When_posting_a_message_via_the_producer() + [Test] + public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; @@ -75,22 +75,22 @@ public void When_posting_a_message_via_the_producer() _channel.Acknowledge(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_topicName, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(_contentType, message.Header.ContentType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_topicName); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.ContentType).IsEqualTo(_contentType); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_queues_missing_verify_throws.cs index e4029b6a81..ae6bc15fb6 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_queues_missing_verify_throws.cs @@ -1,11 +1,11 @@ -using System; +using System; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Gcp.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.GcpPubSub; namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class ValidateQueuesTestsAsync : IDisposable { private readonly GcpMessagingGatewayConnection _connection; @@ -30,13 +30,13 @@ public ValidateQueuesTestsAsync() _connection = GatewayFactory.CreateFactory(); } - [Fact] - public void When_topic_missing_verify_throws() + [Test] + public async Task When_topic_missing_verify_throws() { // We have no topic so we should throw // We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = GatewayFactory.CreateChannelFactory(); - Assert.Throws(() => _channelFactory.CreateSyncChannel(_pubSubSubscription)); + await Assert.That(() => _channelFactory.CreateSyncChannel(_pubSubSubscription)).ThrowsExactly(); } diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_a_message.cs index 1b27bf12e6..9d3f812fd2 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.Gcp.Tests.Helper; @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; -[Trait("Category", "GCP")] +[Category("GCP")] public class MessageProducerRequeueTestsAsync : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -57,8 +57,8 @@ public MessageProducerRequeueTestsAsync() _channel = _channelFactory.CreateSyncChannel(_pubSubSubscription); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { _sender.Send(_message); _receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -68,7 +68,7 @@ public void When_requeueing_a_message() _channel.Acknowledge(_requeuedMessage); - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs index 0ca2153b48..a7a917ff47 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using Google.Cloud.PubSub.V1; @@ -10,8 +10,8 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; -[Trait("Category", "GCP")] -[Trait("Fragile", "CI")] +[Category("GCP")] +[Property("Fragile", "CI")] public class MessageProducerDlqTestsAsync : IDisposable { private const int MaxDeliveryAttempts = 5; @@ -68,8 +68,8 @@ public MessageProducerDlqTestsAsync() _channel = _channelFactory.CreateSyncChannel(_pubSubSubscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _sender.Send(_message); for (var i = 0; i <= MaxDeliveryAttempts; i++) @@ -84,7 +84,7 @@ public void When_requeueing_redrives_to_the_queue() } var dlqCount = GetDLQCount(); - Assert.True(dlqCount >= 1); + await Assert.That(dlqCount >= 1).IsTrue(); } private int GetDLQCount() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 28435ffc43..3bb995f004 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 7b661ded5a..1013a506ee 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 4b52130c3b..87e08f4cc5 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 74373c8507..6f22972d08 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index e6e7ceccad..e98d018b39 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 7b8bb0c693..80cf120890 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 95ecc036de..da84334da2 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 602cbab31f..979f9c34aa 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 93bb372345..8e6946e717 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 2502f5f8f5..4e6cc330ba 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 0f7bf1aa1b..c9cbd91477 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 143f780290..20ef4b362d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.Firestore.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 20d5dbc819..78392eacdc 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index d94b10a3ec..86dfbc0327 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 360e2bafa9..4c5a4ee359 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index d67e233c5f..84135c6b9c 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 7bd1a001f4..35b92f9b1d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 0a9d0ff729..b147527c6b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 51784f16de..b625b619ad 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 0034cbb390..7b70855c8a 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 9b4aab4082..56e38ffab6 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 10b74a91b6..8e21bff18a 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 50879431dc..3c7286503b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 24e3474137..7c4e26087f 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 61ba679b0b..a4ef7c3115 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -48,6 +50,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 4b10b341f9..6e76fe4c05 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -50,37 +52,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index b3e8f3f2b0..46c58e6e55 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -55,6 +57,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index f2a7e7a2bb..7ed24abb69 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -55,37 +57,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 2a678b393d..f44289d6b3 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -59,8 +61,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 84b9af2820..79927398e9 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -85,8 +87,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 2900f54b08..fefbfe00c0 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -81,38 +83,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 7832eca840..3ea6e8700b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -46,6 +48,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 21fe0c227d..1af3b9c242 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -81,9 +83,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index aafba4bf8d..44d0b0ccea 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +60,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index e0ca0033c2..31d0c5d96e 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -83,9 +85,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 55f39561b0..02faf924f7 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +60,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 1cf10532e5..1a7f0a32d3 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -64,7 +63,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index acf8472eae..1aaafd5aec 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -65,38 +64,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 0196265c3c..5343234ba7 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,7 +69,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 3a8c10fd70..83d9044c35 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,38 +69,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index ef55e1269d..0040c9a2c7 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,9 +74,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 0a89bd1227..3203e52ffe 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,9 +74,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index a408fab0fd..af892e1f77 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -71,39 +70,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 574a90e896..397bf3c02f 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -61,7 +60,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 369b9a1d1f..05dd31aef5 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -71,10 +70,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index e8d24083c3..076d514269 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,19 +72,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index c05d518631..5d16f73c1d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -73,10 +72,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 28efbc779e..27dfdeb3a6 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerBinary.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,19 +72,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 7d65909e4b..6fd942793b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -48,6 +50,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 8aec8c282a..be356e045d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -50,37 +52,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index f5462fc4cc..0e658bdd2e 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -55,6 +57,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 58255df4f0..75f92198b4 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -55,37 +57,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 3652c38cd4..1383966cd4 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -59,8 +61,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 9463dc9f8e..5c84b8a4ef 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -85,8 +87,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index ff04c7032b..c258912321 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -81,38 +83,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 2cbaac3c70..44578f8a6f 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -46,6 +48,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 879990c7f6..58f577e895 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -81,9 +83,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 472641d346..28123a3be6 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +60,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index a67ae8eda4..fe3e2b6876 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,8 +34,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -49,17 +48,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -83,9 +85,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 993f53a42d..d8c80ade9a 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,8 +9,8 @@ namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Async; -[Trait("Category", "Spanner")] -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +[Category("Spanner")] +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -24,17 +23,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -58,18 +60,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 6e1cfe72f8..1f88fcbe28 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -64,7 +63,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index e7d9dedee7..7b9582a875 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -65,38 +64,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 36263f0c6c..38239fba30 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,7 +69,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index dfa8434d21..2a50f3f82d 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -70,38 +69,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 26d64e2780..1079812b75 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,9 +74,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index f12e33ad45..ccda3b4e22 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -75,9 +74,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index f83b0e9872..ddc05480fc 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -71,39 +70,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 405062e544..45c18a78eb 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -61,7 +60,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index e00a370e1d..48b76b5198 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -71,10 +70,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 1c79b796f5..a5e0872dc9 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,19 +72,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index f178a93084..e4182f6b5a 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -73,10 +72,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 45a701ff20..385f370929 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,14 +27,13 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; namespace Paramore.Brighter.Gcp.Tests.Outbox.SpannerText.Sync; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable { private readonly IAmAnOutboxProviderSync _outboxProvider; @@ -49,8 +48,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -73,19 +72,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj b/tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj index 478ca4ec32..5ad4ecaa5f 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj +++ b/tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj @@ -1,36 +1,16 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + + + @@ -40,9 +20,7 @@ - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxAsyncTest.cs b/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxAsyncTest.cs index 1acb53953a..a1be6f2eaa 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxAsyncTest.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxAsyncTest.cs @@ -1,11 +1,11 @@ -using System.Threading.Tasks; +using System.Threading.Tasks; using Google.Cloud.Spanner.Data; using Paramore.Brighter.Base.Test.Inbox; using Paramore.Brighter.Inbox.Spanner; namespace Paramore.Brighter.Gcp.Tests.Spanner.Inbox; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class SpannerInboxAsyncTest : RelationalDatabaseInboxAsyncTests { protected override string DefaultConnectingString => Const.ConnectionString; diff --git a/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxTest.cs b/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxTest.cs index edffe3a067..5aa6c55070 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxTest.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Spanner/Inbox/SpannerInboxTest.cs @@ -1,10 +1,10 @@ -using Google.Cloud.Spanner.Data; +using Google.Cloud.Spanner.Data; using Paramore.Brighter.Base.Test.Inbox; using Paramore.Brighter.Inbox.Spanner; namespace Paramore.Brighter.Gcp.Tests.Spanner.Inbox; -[Trait("Category", "Spanner")] +[Category("Spanner")] public class SpannerInboxTest : RelationalDatabaseInboxTests { protected override string DefaultConnectingString => Const.ConnectionString; diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs index c086a63af6..88f9ec1724 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_creating_luggagestore_missing_parameters.cs @@ -1,34 +1,33 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Transformers.Gcp; namespace Paramore.Brighter.Gcp.Tests.Transformers; -[Trait("Category", "GCS")] +[Category("GCS")] public class LuggageUploadMissingParametersTests { private readonly string _bucketName = $"brightertestbucket-{Guid.NewGuid()}"; - [Fact] - public void When_creating_luggagestore_missing_projectId() + [Test] + public Task When_creating_luggagestore_missing_projectId() { //arrange - var exception = Assert.Throws(() => + Assert.ThrowsExactly(() => { var gcs = new GcsLuggageStore(new GcsLuggageOptions()); gcs.EnsureStoreExists(); }); - - Assert.NotNull(exception); + return Task.CompletedTask; } - [Theory] - [InlineData("")] - [InlineData(null)] - public void When_creating_luggagestore_missing_bucketName(string? bucketName) + [Test] + [Arguments("")] + [Arguments(null)] + public Task When_creating_luggagestore_missing_bucketName(string? bucketName) { //arrange - var exception = Assert.Throws(() => + Assert.ThrowsExactly(() => { var gcs = new GcsLuggageStore(new GcsLuggageOptions { @@ -38,10 +37,9 @@ public void When_creating_luggagestore_missing_bucketName(string? bucketName) gcs.EnsureStoreExists(); }); - - Assert.NotNull(exception); + return Task.CompletedTask; } - [Fact] + [Test] public async Task When_creating_luggagestore_missing_projectId_async() { //arrange @@ -51,12 +49,12 @@ public async Task When_creating_luggagestore_missing_projectId_async() await gcs.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); + await Assert.That(exception).IsNotNull(); } - [Theory] - [InlineData("")] - [InlineData(null)] + [Test] + [Arguments("")] + [Arguments(null)] public async Task When_creating_luggagestore_missing_bucketName_async(string? bucketName) { //arrange @@ -71,6 +69,6 @@ public async Task When_creating_luggagestore_missing_bucketName_async(string? bu await gcs.EnsureStoreExistsAsync(); }); - Assert.NotNull(exception); + await Assert.That(exception).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs index de0e4cd83f..629a7e8b05 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.Gcp.Tests.Transformers; -[Trait("Category", "GCS")] +[Category("GCS")] public class LargeMessagePaylodUnwrapTests : IDisposable { private readonly TransformPipelineBuilderAsync _pipelineBuilder; @@ -48,7 +48,7 @@ public LargeMessagePaylodUnwrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.None); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message() { //arrange @@ -87,8 +87,8 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(await _luggageStore.HasClaimAsync(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(await _luggageStore.HasClaimAsync(id)).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_uploading_luggage_to_S3.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_uploading_luggage_to_S3.cs index c7f6122700..678110bbcd 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_uploading_luggage_to_S3.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_uploading_luggage_to_S3.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; @@ -6,7 +6,7 @@ namespace Paramore.Brighter.Gcp.Tests.Transformers; -[Trait("Category", "GCS")] +[Category("GCS")] public class LuggageUploadTests : IDisposable { private readonly string _bucketName; @@ -28,7 +28,7 @@ public LuggageUploadTests() } - [Fact] + [Test] public async Task When_uploading_luggage_to_S3() { //arrange @@ -47,12 +47,12 @@ public async Task When_uploading_luggage_to_S3() //assert //do we have a claim? - Assert.True(await _luggageStore.HasClaimAsync(claim)); + await Assert.That(await _luggageStore.HasClaimAsync(claim)).IsTrue(); //check for the contents indicated by the claim id on S3 var result = await _luggageStore.RetrieveAsync(claim); var resultAsString = await new StreamReader(result).ReadToEndAsync(); - Assert.Equal(testContent, resultAsString); + await Assert.That(resultAsString).IsEqualTo(testContent); await _luggageStore.DeleteAsync(claim); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_validating_a_luggage_store_exists.cs index d933ce0e91..c920d55b6e 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_validating_a_luggage_store_exists.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Gcp.Tests.Helper; using Paramore.Brighter.Transformers.Gcp; @@ -6,10 +6,10 @@ namespace Paramore.Brighter.Gcp.Tests.Transformers; -[Trait("Category", "GCS")] +[Category("GCS")] public class LuggageStoreExistsTests { - [Fact] + [Test] public async Task When_checking_store_that_exists() { var bucketName = $"brightertestbucket-{Guid.NewGuid()}"; @@ -34,7 +34,7 @@ public async Task When_checking_store_that_exists() await client.DeleteBucketAsync(bucketName); } - [Fact] + [Test] public async Task When_checking_store_that_does_not_exist() { //act @@ -52,6 +52,6 @@ public async Task When_checking_store_that_does_not_exist() await luggageStore.EnsureStoreExistsAsync(); }); - Assert.NotNull(doesNotExist); + await Assert.That(doesNotExist).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs index 9e135f6310..695d3b91d3 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Transformers/When_wrapping_a_large_message.cs @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Gcp.Tests.Transformers; -[Trait("Category", "GCS")] +[Category("GCS")] public class LargeMessagePayloadWrapTests : IDisposable { private string? _id; @@ -51,7 +51,7 @@ public LargeMessagePayloadWrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, transformerFactoryAsync, InstrumentationOptions.None); } - [Fact] + [Test] public async Task When_wrapping_a_large_message() { //act @@ -59,12 +59,12 @@ public async Task When_wrapping_a_large_message() var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.True(await _luggageStore.HasClaimAsync(_id)); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj b/tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj index f95db5a413..160f148654 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj +++ b/tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj @@ -1,39 +1,18 @@ - $(BrighterTestTargetFrameworks) enable false true + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + + + - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs index 9cbee61f89..981b998b9f 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using System.Transactions; using Hangfire; using Hangfire.InMemory; @@ -13,7 +13,7 @@ namespace Paramore.Brighter.Hangfire.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class HangfireSchedulerMessageTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; @@ -97,8 +97,8 @@ public HangfireSchedulerMessageTests() BrighterActivator.Processor = _processor; } - [Fact] - public void When_scheduler_a_message_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -110,19 +110,19 @@ public void When_scheduler_a_message_with_a_datetimeoffset() var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, _outbox.Get(message.Id, new RequestContext())); + await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_a_message_with_a_timespan() + [Test] + public async Task When_scheduler_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -133,19 +133,19 @@ public void When_scheduler_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] - public void When_reschedule_a_message_with_a_datetimeoffset() + [Test] + public async Task When_reschedule_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -156,23 +156,23 @@ public void When_reschedule_a_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); - Assert.True(scheduler - .ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))); + await Assert.That(scheduler + .ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))).IsTrue(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(6)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] - public void When_reschedule_a_message_with_a_timespan() + [Test] + public async Task When_reschedule_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -183,22 +183,22 @@ public void When_reschedule_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); - Assert.True(scheduler.ReScheduler(id, TimeSpan.FromSeconds(5))); + await Assert.That(scheduler.ReScheduler(id, TimeSpan.FromSeconds(5))).IsTrue(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] - public void When_cancel_scheduler_message_with_a_datetimeoffset() + [Test] + public async Task When_cancel_scheduler_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -209,7 +209,7 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -218,23 +218,23 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_cancel_scheduler_request_with_a_timespan() + [Test] + public async Task When_cancel_scheduler_request_with_a_timespan() { var req = new MyEvent(); var message = @@ -245,7 +245,7 @@ public void When_cancel_scheduler_request_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -254,18 +254,18 @@ public void When_cancel_scheduler_request_with_a_timespan() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } public void Dispose() diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs index 6f41bfbb63..c4ec1c900a 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using System.Transactions; using Hangfire; using Hangfire.InMemory; @@ -13,7 +13,7 @@ namespace Paramore.Brighter.Hangfire.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class HangfireSchedulerMessageAsyncTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; @@ -103,7 +103,7 @@ public HangfireSchedulerMessageAsyncTests() BrighterActivator.Processor = _processor; } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -116,18 +116,18 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, _outbox.Get(message.Id, new RequestContext())); + await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -139,18 +139,18 @@ public async Task When_scheduler_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -162,21 +162,21 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); - Assert.True(await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))); + await Assert.That(await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))).IsTrue(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -188,21 +188,21 @@ public async Task When_reschedule_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); - Assert.True(await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5))); + await Assert.That(await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5))).IsTrue(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] + [Test] public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -214,7 +214,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); await scheduler.CancelAsync(id); @@ -223,22 +223,22 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_cancel_scheduler_request_with_a_timespan_async() { var req = new MyEvent(); @@ -250,7 +250,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); await scheduler.CancelAsync(id); @@ -259,18 +259,18 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } public void Dispose() diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs index 2fdfa9b9b2..e308e3db04 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs @@ -1,4 +1,4 @@ -using System.Transactions; +using System.Transactions; using Hangfire; using Hangfire.InMemory; using Paramore.Brighter.Extensions; @@ -12,7 +12,7 @@ namespace Paramore.Brighter.Hangfire.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class HangfireSchedulerRequestTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; @@ -99,327 +99,327 @@ public HangfireSchedulerRequestTests() #region Scheduler - [Fact] - public void When_scheduler_send_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_send_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_send_request_with_a_timespan() + [Test] + public async Task When_scheduler_send_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_publish_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_timespan() + [Test] + public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_post_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_post_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] - public void When_scheduler_post_request_with_a_timespan() + [Test] + public async Task When_scheduler_post_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.True(scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))); + await Assert.That(scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5)))).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); - Assert.True(scheduler.ReScheduler(id, TimeSpan.FromSeconds(5))); + await Assert.That(scheduler.ReScheduler(id, TimeSpan.FromSeconds(5))).IsTrue(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs index 1aa3ae4989..bda99ca19f 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs @@ -1,4 +1,4 @@ -using System.Transactions; +using System.Transactions; using Hangfire; using Hangfire.InMemory; using Paramore.Brighter.Extensions; @@ -13,7 +13,7 @@ namespace Paramore.Brighter.Hangfire.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class HangfireSchedulerRequestAsyncTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; @@ -107,7 +107,7 @@ public HangfireSchedulerRequestAsyncTests() #region Scheduler - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -115,64 +115,64 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_timespan_asc() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -180,64 +180,64 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -245,122 +245,122 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty, await _outbox.GetAsync(req.Id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_timespan_async() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, await _outbox.GetAsync(req.Id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.True((await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))))); + await Assert.That((await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))))).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_send_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); - Assert.True((await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)))); + await Assert.That((await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)))).IsTrue(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); @@ -368,65 +368,65 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_accessing_messages_on_an_empty_bus.cs b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_accessing_messages_on_an_empty_bus.cs index 6da399510d..61b7e11b8e 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_accessing_messages_on_an_empty_bus.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_accessing_messages_on_an_empty_bus.cs @@ -1,11 +1,10 @@ -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Bus; public class InternalBusStreamTests { - [Fact] - public void When_accessing_messages_on_an_empty_bus() + [Test] + public async Task When_accessing_messages_on_an_empty_bus() { //arrange //creste an instance of the InternalBus @@ -17,6 +16,6 @@ public void When_accessing_messages_on_an_empty_bus() //assert //should be empty - Assert.Empty(messages); + await Assert.That(messages).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_dequeing_messages_from_an_internal_bus.cs b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_dequeing_messages_from_an_internal_bus.cs index ee4b0b9cb7..8242305b2f 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_dequeing_messages_from_an_internal_bus.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_dequeing_messages_from_an_internal_bus.cs @@ -1,12 +1,11 @@ -using System; -using Xunit; +using System; namespace Paramore.Brighter.InMemory.Tests.Bus; public class InternalBusDequeueTests { - [Fact] - public void When_dequeing_messages_from_an_internal_bus () + [Test] + public async Task When_dequeing_messages_from_an_internal_bus () { // arrange var routingKey = new RoutingKey("test"); @@ -24,15 +23,15 @@ public void When_dequeing_messages_from_an_internal_bus () var message = internalBus.Dequeue(routingKey); //assert - Assert.NotNull(message); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(body, message.Body.Value); - Assert.Equal(routingKey, message.Header.Topic); - Assert.Equal(messageId, message.Header.MessageId); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Body.Value).IsEqualTo(body); + await Assert.That(message.Header.Topic).IsEqualTo(routingKey); + await Assert.That(message.Header.MessageId).IsEqualTo(messageId); } - [Fact] - public void When_dequeing_messages_from_an_internal_bus_and_no_messages() + [Test] + public async Task When_dequeing_messages_from_an_internal_bus_and_no_messages() { // arrange const string topic = "test"; @@ -42,7 +41,7 @@ public void When_dequeing_messages_from_an_internal_bus_and_no_messages() var message = internalBus.Dequeue(new RoutingKey(topic)); //assert - Assert.NotNull(message); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_enqueueing_messages_on_an_internal_bus.cs b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_enqueueing_messages_on_an_internal_bus.cs index 5612834afb..ab280f30de 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Bus/When_enqueueing_messages_on_an_internal_bus.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Bus/When_enqueueing_messages_on_an_internal_bus.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Linq; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Bus; public class InternalBusEnqueueTests { - [Fact] - public void When_enqueueing_messages_on_an_internal_bus() + [Test] + public async Task When_enqueueing_messages_on_an_internal_bus() { //arrange var internalBus = new InternalBus(); @@ -19,10 +18,10 @@ public void When_enqueueing_messages_on_an_internal_bus() //assert var message = internalBus.Stream(routingKey).Single(); - Assert.NotNull(message); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal("test_content", message.Body.Value); - Assert.Equal(routingKey, message.Header.Topic); - Assert.Equal(messageId, message.Header.MessageId); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Body.Value).IsEqualTo("test_content"); + await Assert.That(message.Header.Topic).IsEqualTo(routingKey); + await Assert.That(message.Header.MessageId).IsEqualTo(messageId); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs index 481dec375e..4a60823985 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryConsumerAcknowledgeTests { - [Fact] - public void When_a_dequeud_item_lock_expires() + [Test] + public async Task When_a_dequeud_item_lock_expires() { //arrange const string myTopic = "my topic"; @@ -30,12 +29,12 @@ public void When_a_dequeud_item_lock_expires() timeProvider.Advance(TimeSpan.FromSeconds(2)); //assert - Assert.Single(bus.Stream(routingKey)); //-- the message should be returned to the bus if there is no Acknowledge or Reject + await Assert.That(bus.Stream(routingKey)).HasSingleItem(); //-- the message should be returned to the bus if there is no Acknowledge or Reject } - [Fact] - public void When_a_dequeued_item_is_acknowledged() + [Test] + public async Task When_a_dequeued_item_is_acknowledged() { //arrange const string myTopic = "my topic"; @@ -58,6 +57,6 @@ public void When_a_dequeued_item_is_acknowledged() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged_async.cs index 786d7f0a44..303e23a7aa 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class AsyncInMemoryConsumerAcknowledgeTests { - [Fact] + [Test] public async Task When_a_dequeud_item_lock_expires() { //arrange @@ -31,11 +30,11 @@ public async Task When_a_dequeud_item_lock_expires() timeProvider.Advance(TimeSpan.FromSeconds(2)); //assert - Assert.Single(bus.Stream(routingKey)); //-- the message should be returned to the bus if there is no Acknowledge or Reject + await Assert.That(bus.Stream(routingKey)).HasSingleItem(); //-- the message should be returned to the bus if there is no Acknowledge or Reject } - [Fact] + [Test] public async Task When_a_dequeued_item_is_acknowledged() { //arrange @@ -59,6 +58,6 @@ public async Task When_a_dequeued_item_is_acknowledged() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs index f5595d775a..25f48c8cbc 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryConsumerRejectTests { - [Fact] - public void When_a_dequeued_item_is_rejected() + [Test] + public async Task When_a_dequeued_item_is_rejected() { //arrange const string myTopic = "my topic"; @@ -31,6 +30,6 @@ public void When_a_dequeued_item_is_rejected() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected_async.cs index 6894a1f746..65f3edf332 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class AsyncInMemoryConsumerRejectTests { - [Fact] + [Test] public async Task When_a_dequeued_item_is_rejected() { //arrange @@ -32,6 +31,6 @@ public async Task When_a_dequeued_item_is_rejected() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_an_inmemory_channelfactory_is_called.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_an_inmemory_channelfactory_is_called.cs index 47f10cb390..19ee0b4fe7 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_an_inmemory_channelfactory_is_called.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_an_inmemory_channelfactory_is_called.cs @@ -1,13 +1,12 @@ -using System; +using System; using Paramore.Brighter.InMemory.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryChannelFactoryTests { - [Fact] - public void When_an_inmemory_channelfactory_is_called() + [Test] + public async Task When_an_inmemory_channelfactory_is_called() { //arrange var internalBus = new InternalBus(); @@ -17,6 +16,6 @@ public void When_an_inmemory_channelfactory_is_called() var channel = inMemoryChannelFactory.CreateSyncChannel(new Subscription(messagePumpType: MessagePumpType.Reactor)); //assert - Assert.NotNull(channel); + await Assert.That(channel).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs index 06dbb53f70..81e8fb36ef 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs @@ -1,13 +1,12 @@ -using System.Linq; +using System.Linq; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryProducerRegistryFactoryTests { - [Fact] - public void When_creating_an_inmemory_producer_registry() + [Test] + public async Task When_creating_an_inmemory_producer_registry() { // arrange var bus = new InternalBus(); @@ -18,7 +17,7 @@ public void When_creating_an_inmemory_producer_registry() var producerRegistry = inMemoryProducerRegistryFactory.Create(); //assert - Assert.NotNull(producerRegistry); - Assert.Contains(producerRegistry.Producers, p => p.Publication.Topic == publication.Topic); + await Assert.That(producerRegistry).IsNotNull(); + await Assert.That(producerRegistry.Producers).Contains(p => p.Publication.Topic == publication.Topic); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs index 9856a1f5bd..50d001c90f 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -35,8 +34,8 @@ namespace Paramore.Brighter.InMemory.Tests.Consumer; /// public class AsyncInMemoryMessageConsumerDisposeTests { - [Fact] - public void Should_dispose_without_error_when_producer_was_never_created() + [Test] + public async Task Should_dispose_without_error_when_producer_was_never_created() { // Arrange var bus = new InternalBus(); @@ -45,12 +44,11 @@ public void Should_dispose_without_error_when_producer_was_never_created() var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider); // Act & Assert - should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] - public void Should_dispose_producer_when_it_was_created_during_requeue() + [Test] + public async Task Should_dispose_producer_when_it_was_created_during_requeue() { // Arrange var bus = new InternalBus(); @@ -69,11 +67,10 @@ public void Should_dispose_producer_when_it_was_created_during_requeue() consumer.Requeue(message, TimeSpan.FromSeconds(30)); // Act & Assert - should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] + [Test] public async Task Should_dispose_async_without_error_when_producer_was_never_created() { // Arrange @@ -83,11 +80,10 @@ public async Task Should_dispose_async_without_error_when_producer_was_never_cre var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider); // Act & Assert - should not throw - var exception = await Record.ExceptionAsync(async () => await consumer.DisposeAsync()); - Assert.Null(exception); + await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); } - [Fact] + [Test] public async Task Should_dispose_async_producer_when_it_was_created_during_requeue() { // Arrange @@ -107,8 +103,7 @@ public async Task Should_dispose_async_producer_when_it_was_created_during_reque consumer.Requeue(message, TimeSpan.FromSeconds(30)); // Act & Assert - should not throw - var exception = await Record.ExceptionAsync(async () => await consumer.DisposeAsync()); - Assert.Null(exception); + await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs index 11c39cf099..b2c7415955 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -73,19 +72,19 @@ public InMemoryConsumerRequeueWithDelayTests() _consumer.Receive(); } - [Fact] - public void Should_not_have_message_immediately_available_after_requeue_with_delay() + [Test] + public async Task Should_not_have_message_immediately_available_after_requeue_with_delay() { // Act - handler defers the message (simulated by calling Requeue with delay) _consumer.Requeue(_message, _delay); // Assert - message should NOT be immediately available on bus (scheduler holds it) var messagesOnBus = _bus.Stream(_routingKey); - Assert.Empty(messagesOnBus); + await Assert.That(messagesOnBus).IsEmpty(); } - [Fact] - public void Should_have_message_available_after_delay_expires() + [Test] + public async Task Should_have_message_available_after_delay_expires() { // Act - handler defers the message _consumer.Requeue(_message, _delay); @@ -95,11 +94,11 @@ public void Should_have_message_available_after_delay_expires() // Assert - message should now be available on bus var messagesOnBus = _bus.Stream(_routingKey); - Assert.Single(messagesOnBus); + await Assert.That(messagesOnBus).HasSingleItem(); } - [Fact] - public void Should_be_able_to_receive_message_again_after_delay() + [Test] + public async Task Should_be_able_to_receive_message_again_after_delay() { // Act - handler defers the message _consumer.Requeue(_message, _delay); @@ -111,12 +110,12 @@ public void Should_be_able_to_receive_message_again_after_delay() var receivedMessages = _consumer.Receive(); // Assert - should receive the same message - Assert.Single(receivedMessages); - Assert.Equal(_message.Id, receivedMessages.First().Id); + await Assert.That(receivedMessages).HasSingleItem(); + await Assert.That(receivedMessages.First().Id).IsEqualTo(_message.Id); } - [Fact] - public void Should_preserve_message_content_through_delayed_requeue() + [Test] + public async Task Should_preserve_message_content_through_delayed_requeue() { // Act - handler defers the message _consumer.Requeue(_message, _delay); @@ -128,10 +127,10 @@ public void Should_preserve_message_content_through_delayed_requeue() var receivedMessages = _consumer.Receive(); // Assert - message content should be preserved through the scheduler flow - Assert.Single(receivedMessages); - Assert.Equal(_message.Body.Value, receivedMessages.First().Body.Value); - Assert.Equal(_message.Header.Topic, receivedMessages.First().Header.Topic); - Assert.Equal(_message.Header.MessageType, receivedMessages.First().Header.MessageType); + await Assert.That(receivedMessages).HasSingleItem(); + await Assert.That(receivedMessages.First().Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(receivedMessages.First().Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(receivedMessages.First().Header.MessageType).IsEqualTo(_message.Header.MessageType); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs index 0a03cb521f..3056b6e11f 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -63,33 +62,33 @@ public AsyncInMemoryConsumerMissingSchedulerTests() _consumer.Receive(); } - [Fact] - public void Should_throw_configuration_exception_on_delayed_requeue() + [Test] + public async Task Should_throw_configuration_exception_on_delayed_requeue() { // Act & Assert - requeue with delay should throw when no scheduler configured - var exception = Assert.Throws( + var exception = Assert.ThrowsExactly( () => _consumer.Requeue(_message, TimeSpan.FromSeconds(30))); - Assert.Contains("no scheduler is configured", exception.Message); + await Assert.That(exception.Message).Contains("no scheduler is configured"); } - [Fact] - public void Should_succeed_when_requeue_has_no_delay() + [Test] + public async Task Should_succeed_when_requeue_has_no_delay() { // Act - requeue without delay should still work (no scheduler needed) var result = _consumer.Requeue(_message); // Assert - Assert.True(result); + await Assert.That(result).IsTrue(); } - [Fact] - public void Should_succeed_when_requeue_has_zero_delay() + [Test] + public async Task Should_succeed_when_requeue_has_zero_delay() { // Act - requeue with zero delay should still work (no scheduler needed) var result = _consumer.Requeue(_message, TimeSpan.Zero); // Assert - Assert.True(result); + await Assert.That(result).IsTrue(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs index 0301949f74..55e61deb0c 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -11,8 +10,8 @@ public class InMemoryConsumerReceiveTests private readonly InMemoryConsumerAcknowledgeTests _inMemoryConsumerAcknowledgeTests = new InMemoryConsumerAcknowledgeTests(); private readonly InMemoryConsumerRejectTests _inMemoryConsumerRejectTests = new InMemoryConsumerRejectTests(); - [Fact] - public void When_reading_messages_via_a_consumer() + [Test] + public async Task When_reading_messages_via_a_consumer() { //arrange const string myTopic = "my topic"; @@ -33,7 +32,7 @@ public void When_reading_messages_via_a_consumer() consumer.Acknowledge(receivedMessage); //assert - Assert.Equal(expectedMessage, receivedMessage); - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(receivedMessage).IsEqualTo(expectedMessage); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer_async.cs index ad941a799d..171a8e9492 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer_async.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -12,7 +11,7 @@ public class AsyncInMemoryConsumerReceiveTests private readonly InMemoryConsumerAcknowledgeTests _inMemoryConsumerAcknowledgeTests = new InMemoryConsumerAcknowledgeTests(); private readonly InMemoryConsumerRejectTests _inMemoryConsumerRejectTests = new InMemoryConsumerRejectTests(); - [Fact] + [Test] public async Task When_reading_messages_via_a_consumer() { //arrange @@ -35,7 +34,7 @@ public async Task When_reading_messages_via_a_consumer() await consumer.AcknowledgeAsync(message); //assert - Assert.Equal(expectedMessage, message); - Assert.Empty(bus.Stream(routingKey)); + await Assert.That(message).IsEqualTo(expectedMessage); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel.cs index c52dd4023c..31a163dfe9 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryConsumerRejectWithDeadLetterTests { - [Fact] - public void When_rejecting_a_message_with_a_dead_letter_channel() + [Test] + public async Task When_rejecting_a_message_with_a_dead_letter_channel() { //arrange const string myTopic = "my topic"; @@ -34,7 +33,7 @@ public void When_rejecting_a_message_with_a_dead_letter_channel() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); - Assert.NotEmpty(bus.Stream(deadLetterRoutingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); + await Assert.That(bus.Stream(deadLetterRoutingKey)).IsNotEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel_async.cs index 8fa307156d..02953c7d40 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_rejecting_a_message_with_a_dead_letter_channel_async.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Extensions; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; public class InMemoryConsumerRejectWithDeadLetterTestsAsync { - [Fact] + [Test] public async Task When_rejecting_a_message_with_a_dead_letter_channel_async() { //arrange @@ -35,8 +34,8 @@ public async Task When_rejecting_a_message_with_a_dead_letter_channel_async() timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject //assert - Assert.Empty(bus.Stream(routingKey)); - Assert.NotEmpty(bus.Stream(deadLetterRoutingKey)); + await Assert.That(bus.Stream(routingKey)).IsEmpty(); + await Assert.That(bus.Stream(deadLetterRoutingKey)).IsNotEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs index abc4526cfb..d3cd813a76 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Transactions; @@ -9,7 +9,6 @@ using Paramore.Brighter.Scheduler.Events; using Paramore.Brighter.Scheduler.Handlers; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -85,8 +84,8 @@ public InMemoryConsumerRequeueTests() _scheduler = schedulerFactory.Create(_processor); } - [Fact] - public void When_requeueing_a_message_it_should_be_available_again() + [Test] + public async Task When_requeueing_a_message_it_should_be_available_again() { //arrange var expectedMessage = new Message( @@ -103,12 +102,12 @@ public void When_requeueing_a_message_it_should_be_available_again() consumer.Requeue(receivedMessage, TimeSpan.Zero); //assert - Assert.Single(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).HasSingleItem(); } - [Fact] - public void When_requeueing_a_message_with_a_delay_it_should_not_be_available_immediately() + [Test] + public async Task When_requeueing_a_message_with_a_delay_it_should_not_be_available_immediately() { //arrange @@ -123,15 +122,15 @@ public void When_requeueing_a_message_with_a_delay_it_should_not_be_available_im //act var receivedMessage = consumer.Receive().Single(); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); consumer.Requeue(receivedMessage, TimeSpan.FromMilliseconds(1000)); //assert - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Single(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).HasSingleItem(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again_async.cs index 31b8cf403e..78e9ef6adf 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -11,7 +11,6 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -98,7 +97,7 @@ public AsyncInMemoryConsumerRequeueTests() } - [Fact] + [Test] public async Task When_requeueing_a_message_it_should_be_available_again() { //arrange @@ -117,11 +116,11 @@ public async Task When_requeueing_a_message_it_should_be_available_again() await consumer.RequeueAsync(receivedMessage.Single(), TimeSpan.Zero); //assert - Assert.Single(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).HasSingleItem(); } - [Fact] + [Test] public async Task When_requeueing_a_message_with_a_delay_it_should_not_be_available_immediately() { //arrange @@ -136,15 +135,15 @@ public async Task When_requeueing_a_message_with_a_delay_it_should_not_be_availa //act var receivedMessage = await consumer.ReceiveAsync(); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await consumer.RequeueAsync(receivedMessage.Single(), TimeSpan.FromMilliseconds(1000)); //assert - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Single(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).HasSingleItem(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_async_with_delay_should_delegate_to_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_async_with_delay_should_delegate_to_producer.cs index 9c99da8097..ded20afd80 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_async_with_delay_should_delegate_to_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_async_with_delay_should_delegate_to_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -65,17 +64,17 @@ public AsyncInMemoryConsumerRequeueWithDelayTests() _consumer.Receive(); } - [Fact] + [Test] public async Task Should_use_async_scheduler_when_requeuing_with_delay() { // Act await _consumer.RequeueAsync(_message, _delay); // Assert - Assert.True(_scheduler.ScheduleAsyncCalled, "Scheduler.ScheduleAsync should have been called via producer"); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsTrue(); } - [Fact] + [Test] public async Task Should_not_have_message_immediately_available_on_bus() { // Act @@ -83,17 +82,17 @@ public async Task Should_not_have_message_immediately_available_on_bus() // Assert - message should not be immediately available (scheduler holds it) var messagesOnBus = _bus.Stream(_routingKey); - Assert.Empty(messagesOnBus); + await Assert.That(messagesOnBus).IsEmpty(); } - [Fact] + [Test] public async Task Should_return_true_on_successful_requeue() { // Act var result = await _consumer.RequeueAsync(_message, _delay); // Assert - Assert.True(result, "RequeueAsync should return true"); + await Assert.That(result).IsTrue(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs index 0f6eb77f95..61e985bf95 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -64,35 +63,35 @@ public InMemoryConsumerRequeueWithDelayProducerTests() _consumer.Receive(); } - [Fact] - public void Should_use_scheduler_when_requeuing_with_delay() + [Test] + public async Task Should_use_scheduler_when_requeuing_with_delay() { // Act _consumer.Requeue(_message, _delay); // Assert - Assert.True(_scheduler.ScheduleCalled, "Scheduler.Schedule should have been called via producer"); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); } - [Fact] - public void Should_not_have_message_immediately_available_on_bus() + [Test] + public async Task Should_not_have_message_immediately_available_on_bus() { // Act _consumer.Requeue(_message, _delay); // Assert - message should not be immediately available (scheduler holds it) var messagesOnBus = _bus.Stream(_routingKey); - Assert.Empty(messagesOnBus); + await Assert.That(messagesOnBus).IsEmpty(); } - [Fact] - public void Should_remove_message_from_locked_messages() + [Test] + public async Task Should_remove_message_from_locked_messages() { // Act var result = _consumer.Requeue(_message, _delay); // Assert - Assert.True(result, "Requeue should return true"); + await Assert.That(result).IsTrue(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs index eb3f988bcb..2620b665b5 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Consumer; @@ -62,38 +61,38 @@ public InMemoryConsumerRequeueWithZeroDelayTests() _consumer.Receive(); } - [Fact] - public void Should_enqueue_message_directly_when_delay_is_zero() + [Test] + public async Task Should_enqueue_message_directly_when_delay_is_zero() { // Act _consumer.Requeue(_message, TimeSpan.Zero); // Assert - message should be immediately on the bus var messagesOnBus = _bus.Stream(_routingKey); - Assert.Single(messagesOnBus); - Assert.Equal(_message.Id, messagesOnBus.First().Id); + await Assert.That(messagesOnBus).HasSingleItem(); + await Assert.That(messagesOnBus.First().Id).IsEqualTo(_message.Id); } - [Fact] - public void Should_enqueue_message_directly_when_delay_is_null() + [Test] + public async Task Should_enqueue_message_directly_when_delay_is_null() { // Act _consumer.Requeue(_message, null); // Assert - message should be immediately on the bus var messagesOnBus = _bus.Stream(_routingKey); - Assert.Single(messagesOnBus); - Assert.Equal(_message.Id, messagesOnBus.First().Id); + await Assert.That(messagesOnBus).HasSingleItem(); + await Assert.That(messagesOnBus.First().Id).IsEqualTo(_message.Id); } - [Fact] - public void Should_not_invoke_scheduler_when_delay_is_zero() + [Test] + public async Task Should_not_invoke_scheduler_when_delay_is_zero() { // Act _consumer.Requeue(_message, TimeSpan.Zero); // Assert - Assert.False(_scheduler.ScheduleCalled, "Scheduler should NOT have been called for zero delay"); + await Assert.That(_scheduler.ScheduleCalled).IsFalse(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_expiring_messages_in_inbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_expiring_messages_in_inbox.cs index 757406cea9..87a4ef27ca 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_expiring_messages_in_inbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_expiring_messages_in_inbox.cs @@ -1,16 +1,15 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Inbox.Exceptions; using Paramore.Brighter.InMemory.Tests.Data; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Inbox { - [Trait("Category", "InMemory")] + [Category("InMemory")] public class InboxEntryTimeToLiveTests { - [Fact] + [Test] public async Task When_expiring_a_cache_entry_no_longer_there() { //Arrange @@ -47,11 +46,11 @@ public async Task When_expiring_a_cache_entry_no_longer_there() var afterExpiryExists = await inbox.ExistsAsync(command.Id, contextKey, null); //Assert - Assert.NotNull(foundCommand); - Assert.False(afterExpiryExists); + await Assert.That(foundCommand).IsNotNull(); + await Assert.That(afterExpiryExists).IsFalse(); } - [Fact] + [Test] public async Task When_expiring_some_but_not_all() { //Arrange @@ -93,7 +92,7 @@ public async Task When_expiring_some_but_not_all() } //Assert - Assert.Equal(3, inbox.EntryCount); + await Assert.That(inbox.EntryCount).IsEqualTo(3); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs index cd04576fcc..e3599c2ca4 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2020 Ian Cooper @@ -26,16 +26,15 @@ THE SOFTWARE. */ using System; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.InMemory.Tests.Data; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Inbox { - [Trait("Category", "InMemory")] + [Category("InMemory")] public class InMemoryInboxTests { - [Fact] - public void When_storing_a_seen_message_in_the_inbox() + [Test] + public async Task When_storing_a_seen_message_in_the_inbox() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -49,13 +48,13 @@ public void When_storing_a_seen_message_in_the_inbox() var storedCommand = inbox.Get(command.Id, contextKey, null); //Assert - Assert.NotNull(storedCommand); - Assert.Equal(command.Id, storedCommand.Id); + await Assert.That(storedCommand).IsNotNull(); + await Assert.That(storedCommand.Id).IsEqualTo(command.Id); } - [Fact] - public void When_testing_for_a_message_in_the_inbox() + [Test] + public async Task When_testing_for_a_message_in_the_inbox() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -69,11 +68,11 @@ public void When_testing_for_a_message_in_the_inbox() var exists = inbox.Exists(command.Id, contextKey, null); //Assert - Assert.True(exists); + await Assert.That(exists).IsTrue(); } - [Fact] - public void When_testing_for_a_missing_command() + [Test] + public async Task When_testing_for_a_missing_command() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -85,12 +84,12 @@ public void When_testing_for_a_missing_command() var exists = inbox.Exists(command.Id, contextKey, null); //Assert - Assert.False(exists); + await Assert.That(exists).IsFalse(); } - [Fact] - public void When_storing_multiple_entries_retrieve_the_right_one() + [Test] + public async Task When_storing_multiple_entries_retrieve_the_right_one() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -107,16 +106,16 @@ public void When_storing_multiple_entries_retrieve_the_right_one() var lastCommand = inbox.Get(commands[4].Id, contextKey, null); //Assert - Assert.NotNull(firstCommand); - Assert.NotNull(lastCommand); + await Assert.That(firstCommand).IsNotNull(); + await Assert.That(lastCommand).IsNotNull(); - Assert.Equal(commands[0].Id, firstCommand.Id); - Assert.Equal(commands[4].Id, lastCommand.Id); + await Assert.That(firstCommand.Id).IsEqualTo(commands[0].Id); + await Assert.That(lastCommand.Id).IsEqualTo(commands[4].Id); } - [Fact] - public void When_storing_multiple_entries_exists_should_find() + [Test] + public async Task When_storing_multiple_entries_exists_should_find() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -133,13 +132,13 @@ public void When_storing_multiple_entries_exists_should_find() var lastCommandExists = inbox.Exists(commands[4].Id, contextKey, null); //Assert - Assert.True(firstCommandExists); - Assert.True(lastCommandExists); + await Assert.That(firstCommandExists).IsTrue(); + await Assert.That(lastCommandExists).IsTrue(); } - [Fact] - public void When_storing_many_but_not_requested_exists_should_not_find() + [Test] + public async Task When_storing_many_but_not_requested_exists_should_not_find() { //Arrange var inbox = new InMemoryInbox(new FakeTimeProvider()); @@ -155,7 +154,7 @@ public void When_storing_many_but_not_requested_exists_should_not_find() var firstCommandExists = inbox.Exists(Guid.NewGuid().ToString(), contextKey, null); //Assert - Assert.False(firstCommandExists); + await Assert.That(firstCommandExists).IsFalse(); } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs index a7a3f0fb68..e53f1b3d26 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -6,15 +6,14 @@ using Paramore.Brighter; using Paramore.Brighter.InMemory.Tests.Builders; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Outbox; -[Trait("Category", "InMemory")] +[Category("InMemory")] public class When_Retrieving_Messages_based_on_Age { - [Fact] - public void When_outstanding_in_outbox_they_are_retrieved_correctly() + [Test] + public async Task When_outstanding_in_outbox_they_are_retrieved_correctly() { var timeProvider = new FakeTimeProvider(); var outbox = new InMemoryOutbox(timeProvider) { Tracer = new BrighterTracer(timeProvider) }; @@ -38,12 +37,12 @@ public void When_outstanding_in_outbox_they_are_retrieved_correctly() var messagesAfterDispatch = outbox.OutstandingMessages(TimeSpan.Zero, context); - Assert.Equal(2, messagesToDispatch.Count()); - Assert.Equal(4, allMessages.Length); - Assert.Empty(messagesAfterDispatch); + await Assert.That(messagesToDispatch.Count()).IsEqualTo(2); + await Assert.That(allMessages.Length).IsEqualTo(4); + await Assert.That(messagesAfterDispatch).IsEmpty(); } - [Fact] + [Test] public async Task When_outstanding_in_outbox_they_are_retrieved_correctly_async() { var timeProvider = new FakeTimeProvider(); @@ -68,8 +67,8 @@ public async Task When_outstanding_in_outbox_they_are_retrieved_correctly_async( var messagesAfterDispatch = await outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); - Assert.Equal(2, messagesToDispatch.Count()); - Assert.Equal(4, allMessages.Length); - Assert.Empty(messagesAfterDispatch); + await Assert.That(messagesToDispatch.Count()).IsEqualTo(2); + await Assert.That(allMessages.Length).IsEqualTo(4); + await Assert.That(messagesAfterDispatch).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs index 9171c79cb0..ce3903f9c6 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs @@ -1,16 +1,15 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.InMemory.Tests.Builders; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Outbox { - [Trait("Category", "InMemory")] + [Category("InMemory")] public class OutboxMaxSize { - [Fact] + [Test] public async Task When_max_size_is_exceeded_shrink() { //Arrange @@ -29,7 +28,7 @@ public async Task When_max_size_is_exceeded_shrink() outbox.Add(new MessageTestDataBuilder(), context); //Act - Assert.Equal(5, outbox.EntryCount); + await Assert.That(outbox.EntryCount).IsEqualTo(5); outbox.Add(new MessageTestDataBuilder(), context); @@ -42,10 +41,10 @@ public async Task When_max_size_is_exceeded_shrink() } //should clear compaction percentage from the outbox, and then add the new one - Assert.Equal(3, outbox.EntryCount); + await Assert.That(outbox.EntryCount).IsEqualTo(3); } - [Fact] + [Test] public async Task When_shrinking_evict_oldest_messages_first() { //Arrange @@ -69,7 +68,7 @@ public async Task When_shrinking_evict_oldest_messages_first() } //Act - Assert.Equal(5, outbox.EntryCount); + await Assert.That(outbox.EntryCount).IsEqualTo(5); await outbox.AddAsync(new MessageTestDataBuilder(), context); @@ -82,11 +81,11 @@ public async Task When_shrinking_evict_oldest_messages_first() } //should clear compaction percentage from the outbox, and then add the new one - Assert.True((await outbox.GetAsync(messageIds[0], context)).IsEmpty); - Assert.True((await outbox.GetAsync(messageIds[1], context)).IsEmpty); - Assert.True((await outbox.GetAsync(messageIds[2], context)).IsEmpty); - Assert.False((await outbox.GetAsync(messageIds[3], context)).IsEmpty); - Assert.False(((await outbox.GetAsync(messageIds[4], context)).IsEmpty)); + await Assert.That((await outbox.GetAsync(messageIds[0], context)).IsEmpty).IsTrue(); + await Assert.That((await outbox.GetAsync(messageIds[1], context)).IsEmpty).IsTrue(); + await Assert.That((await outbox.GetAsync(messageIds[2], context)).IsEmpty).IsTrue(); + await Assert.That((await outbox.GetAsync(messageIds[3], context)).IsEmpty).IsFalse(); + await Assert.That(((await outbox.GetAsync(messageIds[4], context)).IsEmpty)).IsFalse(); } } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs index af3ec3c25d..226075f37d 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Outbox { - [Trait("Category", "InMemory")] + [Category("InMemory")] public class OutboxEntryTimeToLiveTests { - [Fact] + [Test] public async Task When_expiring_a_cache_entry_no_longer_there() { //Arrange @@ -41,10 +40,10 @@ public async Task When_expiring_a_cache_entry_no_longer_there() var message = await outbox.GetAsync(messageId, new RequestContext()); //Assert - Assert.True(message.IsEmpty); + await Assert.That(message.IsEmpty).IsTrue(); } - [Fact] + [Test] public async Task When_over_ttl_but_no_sweep_run() { //Arrange @@ -71,8 +70,8 @@ public async Task When_over_ttl_but_no_sweep_run() var message = await outbox.GetAsync(messageId, new RequestContext()); //Assert - Assert.NotNull(message); - Assert.Equal(messageId, message.Id); + await Assert.That(message).IsNotNull(); + await Assert.That(message.Id).IsEqualTo(messageId); } } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs index 6101aa8907..b8c93efab3 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs @@ -4,17 +4,16 @@ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.InMemory.Tests.Builders; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Outbox { - [Trait("Category", "InMemory")] + [Category("InMemory")] public class InMemoryOutboxTests { private FakeTimeProvider _timeProvider = new(); - [Fact] - public void When_reading_from_outbox() + [Test] + public async Task When_reading_from_outbox() { //Arrange var outbox = new InMemoryOutbox(_timeProvider) { Tracer = new BrighterTracer() }; @@ -31,16 +30,16 @@ public void When_reading_from_outbox() var retrievedMessage = outbox.Get(messageId, context); //Assert - Assert.NotNull(retrievedMessage); - Assert.Equal(messageId, retrievedMessage.Id); - Assert.Equal(messageToAdd.Header.Topic, retrievedMessage.Header.Topic); - Assert.Equal(messageToAdd.Header.MessageType, retrievedMessage.Header.MessageType); - Assert.Equal(messageToAdd.Body.Value, retrievedMessage.Body.Value); + await Assert.That(retrievedMessage).IsNotNull(); + await Assert.That(retrievedMessage.Id).IsEqualTo(messageId); + await Assert.That(retrievedMessage.Header.Topic).IsEqualTo(messageToAdd.Header.Topic); + await Assert.That(retrievedMessage.Header.MessageType).IsEqualTo(messageToAdd.Header.MessageType); + await Assert.That(retrievedMessage.Body.Value).IsEqualTo(messageToAdd.Body.Value); } - [Fact] - public void When_marking_dispatched_in_outbox() + [Test] + public async Task When_marking_dispatched_in_outbox() { //Arrange var outbox = new InMemoryOutbox(_timeProvider){Tracer = new BrighterTracer()}; @@ -63,13 +62,13 @@ public void When_marking_dispatched_in_outbox() //Assert IEnumerable collection = dispatchedMessages as Message[] ?? dispatchedMessages.ToArray(); - Assert.Single(collection); - Assert.Equal(messageId, collection.First().Id); + await Assert.That(collection).HasSingleItem(); + await Assert.That(collection.First().Id).IsEqualTo(messageId); } - [Fact] - public void When_looking_for_undispatched_messages_in_outbox() + [Test] + public async Task When_looking_for_undispatched_messages_in_outbox() { //Arrange var outbox = new InMemoryOutbox(_timeProvider){Tracer = new BrighterTracer()}; @@ -90,13 +89,13 @@ public void When_looking_for_undispatched_messages_in_outbox() //Assert IEnumerable collection = outstandingMessages as Message[] ?? outstandingMessages.ToArray(); - Assert.Single(collection); - Assert.Equal(messageId, collection.First().Id); + await Assert.That(collection).HasSingleItem(); + await Assert.That(collection.First().Id).IsEqualTo(messageId); } - [Fact] - public void When_there_are_multiple_items_retrieve_by_id() + [Test] + public async Task When_there_are_multiple_items_retrieve_by_id() { //Arrange var outbox = new InMemoryOutbox( _timeProvider){Tracer = new BrighterTracer()}; @@ -113,11 +112,11 @@ public void When_there_are_multiple_items_retrieve_by_id() var message = outbox.Get(messageIds[2], context); //Assert - Assert.Equal(messageIds[2], message.Id); + await Assert.That(message.Id).IsEqualTo(messageIds[2]); } - [Fact] - public void When_there_are_multiple_items_and_some_are_dispatched() + [Test] + public async Task When_there_are_multiple_items_and_some_are_dispatched() { //Arrange var outbox = new InMemoryOutbox(_timeProvider){Tracer = new BrighterTracer()}; @@ -142,14 +141,14 @@ public void When_there_are_multiple_items_and_some_are_dispatched() //Assert var messages = sentMessages as Message[] ?? sentMessages.ToArray(); - Assert.Equal(2, messages.Length); - Assert.Contains(messages, msg => msg.Id == messageIds[0]); - Assert.Contains(messages, msg => msg.Id == messageIds[4]); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages).Contains(msg => msg.Id == messageIds[0]); + await Assert.That(messages).Contains(msg => msg.Id == messageIds[4]); var collection = outstandingMessages as Message[] ?? outstandingMessages.ToArray(); - Assert.Equal(3, collection.Length); - Assert.Contains(collection, msg => msg.Id == messageIds[1]); - Assert.Contains(collection, msg => msg.Id == messageIds[2]); - Assert.Contains(collection, msg => msg.Id == messageIds[3]); } + await Assert.That(collection.Length).IsEqualTo(3); + await Assert.That(collection).Contains(msg => msg.Id == messageIds[1]); + await Assert.That(collection).Contains(msg => msg.Id == messageIds[2]); + await Assert.That(collection).Contains(msg => msg.Id == messageIds[3]); } } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj b/tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj index f0b83afadc..64d838ef88 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj +++ b/tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj @@ -1,31 +1,15 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs index 96a5803463..516279e396 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Linq; using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Producer; public class InMemoryMessageProducerTests { - [Fact] - public void When_adding_messages_to_the_producer() + [Test] + public async Task When_adding_messages_to_the_producer() { // arrange const string topic = "test_topic"; @@ -22,7 +21,7 @@ public void When_adding_messages_to_the_producer() // assert var messages = bus.Stream(new RoutingKey(topic)); - Assert.Single(messages); - Assert.Equal(message.Id, messages.First().Id); + await Assert.That(messages).HasSingleItem(); + await Assert.That(messages.First().Id).IsEqualTo(message.Id); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_async_with_delay_and_scheduler_configured_should_use_scheduler.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_async_with_delay_and_scheduler_configured_should_use_scheduler.cs index 0c8234b675..689a88cb19 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_async_with_delay_and_scheduler_configured_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_async_with_delay_and_scheduler_configured_should_use_scheduler.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Producer; @@ -57,19 +56,19 @@ public When_sending_async_with_delay_and_scheduler_configured_should_use_schedul _delay = TimeSpan.FromSeconds(30); } - [Fact] + [Test] public async Task Should_call_scheduler_schedule_async_method() { // Act await _producer.SendWithDelayAsync(_message, _delay); // Assert - Assert.True(_scheduler.ScheduleAsyncCalled, "Scheduler.ScheduleAsync should have been called"); - Assert.Equal(_message, _scheduler.ScheduledMessage); - Assert.Equal(_delay, _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage).IsEqualTo(_message); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(_delay); } - [Fact] + [Test] public async Task Should_not_send_message_immediately_to_bus() { // Act @@ -77,7 +76,7 @@ public async Task Should_not_send_message_immediately_to_bus() // Assert var messagesOnBus = _bus.Stream(new RoutingKey("test.topic")); - Assert.Empty(messagesOnBus); + await Assert.That(messagesOnBus).IsEmpty(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_no_scheduler_should_use_timer_fallback.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_no_scheduler_should_use_timer_fallback.cs index 4d86137887..9dbf6bdafa 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_no_scheduler_should_use_timer_fallback.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_no_scheduler_should_use_timer_fallback.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Producer; @@ -52,18 +51,19 @@ public SchedulerNotConfiguredTests() _delay = TimeSpan.FromSeconds(30); } - [Fact] - public void When_sending_with_delay_and_no_scheduler_should_throw_exception() + [Test] + public Task When_sending_with_delay_and_no_scheduler_should_throw_exception() { // Assert - Assert.Throws(() => + Assert.ThrowsExactly(() => { // Act _producer.SendWithDelay(_message, _delay); }); + return Task.CompletedTask; } - [Fact] + [Test] public async Task When_sending_async_with_delay_and_no_scheduler_should_throw_exception() { // Assert diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_scheduler_configured_should_use_scheduler.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_scheduler_configured_should_use_scheduler.cs index 1c13982e33..7073b5c35e 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_scheduler_configured_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_delay_and_scheduler_configured_should_use_scheduler.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Producer; @@ -55,27 +54,27 @@ public When_sending_with_delay_and_scheduler_configured_should_use_scheduler() _delay = TimeSpan.FromSeconds(30); } - [Fact] - public void Should_call_scheduler_schedule_method() + [Test] + public async Task Should_call_scheduler_schedule_method() { // Act _producer.SendWithDelay(_message, _delay); // Assert - Assert.True(_scheduler.ScheduleCalled, "Scheduler.Schedule should have been called"); - Assert.Equal(_message, _scheduler.ScheduledMessage); - Assert.Equal(_delay, _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage).IsEqualTo(_message); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(_delay); } - [Fact] - public void Should_not_send_message_immediately_to_bus() + [Test] + public async Task Should_not_send_message_immediately_to_bus() { // Act _producer.SendWithDelay(_message, _delay); // Assert var messagesOnBus = _bus.Stream(new RoutingKey("test.topic")); - Assert.Empty(messagesOnBus); + await Assert.That(messagesOnBus).IsEmpty(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_zero_delay_should_send_immediately_without_scheduler.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_zero_delay_should_send_immediately_without_scheduler.cs index 6d432dd777..16f32f8540 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_zero_delay_should_send_immediately_without_scheduler.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_sending_with_zero_delay_should_send_immediately_without_scheduler.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Linq; using Microsoft.Extensions.Time.Testing; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Producer; @@ -55,38 +54,38 @@ public When_sending_with_zero_delay_should_send_immediately_without_scheduler() new MessageBody("test content")); } - [Fact] - public void Should_send_message_directly_to_bus_when_delay_is_zero() + [Test] + public async Task Should_send_message_directly_to_bus_when_delay_is_zero() { // Act _producer.SendWithDelay(_message, TimeSpan.Zero); // Assert var messagesOnBus = _bus.Stream(_routingKey); - Assert.Single(messagesOnBus); - Assert.Equal(_message.Id, messagesOnBus.First().Id); + await Assert.That(messagesOnBus).HasSingleItem(); + await Assert.That(messagesOnBus.First().Id).IsEqualTo(_message.Id); } - [Fact] - public void Should_send_message_directly_to_bus_when_delay_is_null() + [Test] + public async Task Should_send_message_directly_to_bus_when_delay_is_null() { // Act _producer.SendWithDelay(_message, null); // Assert var messagesOnBus = _bus.Stream(_routingKey); - Assert.Single(messagesOnBus); - Assert.Equal(_message.Id, messagesOnBus.First().Id); + await Assert.That(messagesOnBus).HasSingleItem(); + await Assert.That(messagesOnBus.First().Id).IsEqualTo(_message.Id); } - [Fact] - public void Should_not_invoke_scheduler_when_delay_is_zero() + [Test] + public async Task Should_not_invoke_scheduler_when_delay_is_zero() { // Act _producer.SendWithDelay(_message, TimeSpan.Zero); // Assert - Assert.False(_scheduler.ScheduleCalled, "Scheduler should NOT have been called for zero delay"); + await Assert.That(_scheduler.ScheduleCalled).IsFalse(); } /// diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs index dc4b568c59..09671f5f0c 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using System.Transactions; @@ -10,12 +10,11 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Scheduler; -[Trait("Category", "InMemory")] -[Collection("CommandProcess")] +[Category("InMemory")] +[NotInParallel("CommandProcess")] public class InMemorySchedulerMessageTests { private readonly InMemorySchedulerFactory _scheduler; @@ -90,8 +89,8 @@ public InMemorySchedulerMessageTests() ); } - [Fact] - public void When_scheduler_a_message_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -103,32 +102,32 @@ public void When_scheduler_a_message_with_a_datetimeoffset() var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(message.Id, new RequestContext()); - Assert.Equivalent(message.Body, actual.Body); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(message.Body); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] - public void When_scheduler_a_message_with_a_timespan() + [Test] + public async Task When_scheduler_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -139,32 +138,32 @@ public void When_scheduler_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(message.Body, actual.Body); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(message.Body); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] - public void When_reschedule_a_message_with_a_datetimeoffset() + [Test] + public async Task When_reschedule_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -175,36 +174,36 @@ public void When_reschedule_a_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromHours(1))); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(message.Body, actual.Body); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(message.Body); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] - public void When_reschedule_a_message_with_a_timespan() + [Test] + public async Task When_reschedule_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -215,28 +214,28 @@ public void When_reschedule_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); scheduler.ReScheduler(id, TimeSpan.FromHours(1)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.NotEqual(expected.Body, actual.Body); - Assert.NotEqual(expected.Id, actual.Id); - Assert.NotEqual(expected.Header.MessageType, actual.Header.MessageType); - Assert.NotEqual(expected.Header.Topic, actual.Header.Topic); + await Assert.That(actual.Body).IsNotEqualTo(expected.Body); + await Assert.That(actual.Id).IsNotEqualTo(expected.Id); + await Assert.That(actual.Header.MessageType).IsNotEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsNotEqualTo(expected.Header.Topic); } - [Fact] - public void When_cancel_scheduler_message_with_a_datetimeoffset() + [Test] + public async Task When_cancel_scheduler_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -247,7 +246,7 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -257,15 +256,15 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equal(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); + await Assert.That(actual.Body).IsEqualTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); } - [Fact] - public void When_cancel_scheduler_request_with_a_timespan() + [Test] + public async Task When_cancel_scheduler_request_with_a_timespan() { var req = new MyEvent(); var message = @@ -276,7 +275,7 @@ public void When_cancel_scheduler_request_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -285,17 +284,17 @@ public void When_cancel_scheduler_request_with_a_timespan() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs index 4f1f7cd636..5c49b6a7a5 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -12,12 +12,11 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Scheduler; -[Trait("Category", "InMemory")] -[Collection("CommandProcess")] +[Category("InMemory")] +[NotInParallel("CommandProcess")] public class InMemorySchedulerMessageAsyncTests { private readonly InMemorySchedulerFactory _scheduler; @@ -99,7 +98,7 @@ public InMemorySchedulerMessageAsyncTests() ); } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -112,32 +111,32 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(message.Id, new RequestContext()); - Assert.Equivalent(message.Body, actual.Body); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(message.Body); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -149,31 +148,31 @@ public async Task When_scheduler_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(message.Body, actual.Body); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(message.Body); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -185,35 +184,35 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromHours(1))); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(message.Body.Value, actual.Body.Value); - Assert.Equal(message.Id, actual.Id); - Assert.Equal(message.Persist, actual.Persist); - Assert.Equal(message.Redelivered, actual.Redelivered); - Assert.Equal(message.DeliveryTag, actual.DeliveryTag); - Assert.Equal(message.Header.MessageType, actual.Header.MessageType); - Assert.Equal(message.Header.Topic, actual.Header.Topic); - Assert.Equal(message.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(message.Header.ContentType, actual.Header.ContentType); - Assert.Equal(message.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body.Value).IsEquivalentTo(message.Body.Value); + await Assert.That(actual.Id).IsEqualTo(message.Id); + await Assert.That(actual.Persist).IsEqualTo(message.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(message.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(message.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(message.Header.HandledCount); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -225,21 +224,21 @@ public async Task When_reschedule_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); await scheduler.ReSchedulerAsync(id, TimeSpan.FromHours(1)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] + [Test] public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -251,7 +250,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); await scheduler.CancelAsync(id); @@ -260,22 +259,22 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_cancel_scheduler_request_with_a_timespan_async() { var req = new MyEvent(); @@ -287,7 +286,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); await scheduler.CancelAsync(id); @@ -296,17 +295,17 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs index 7c67f3586e..a7deb3efc8 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Transactions; @@ -10,12 +10,11 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Scheduler; -[Trait("Category", "InMemory")] -[Collection("CommandProcess")] +[Category("InMemory")] +[NotInParallel("CommandProcess")] public class InMemorySchedulerRequestTests { private readonly InMemorySchedulerFactory _scheduler; @@ -90,327 +89,327 @@ public InMemorySchedulerRequestTests() #region Scheduler - [Fact] - public void When_scheduler_send_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_send_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_send_request_with_a_timespan() + [Test] + public async Task When_scheduler_send_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_publish_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_timespan() + [Test] + public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_post_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_post_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty,_outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_post_request_with_a_timespan() + [Test] + public async Task When_scheduler_post_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty,_outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromHours(1))); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.ReScheduler(id, TimeSpan.FromHours(1)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs index ff69b5be9c..0ab44fc2bc 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -11,13 +11,12 @@ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; using MyEventHandlerAsync = Paramore.Brighter.InMemory.Tests.TestDoubles.MyEventHandlerAsync; namespace Paramore.Brighter.InMemory.Tests.Scheduler; -[Trait("Category", "InMemory")] -[Collection("CommandProcess")] +[Category("InMemory")] +[NotInParallel("CommandProcess")] public class InMemorySchedulerRequestAsyncTests { private readonly InMemorySchedulerFactory _scheduler; @@ -98,7 +97,7 @@ public InMemorySchedulerRequestAsyncTests() #region Scheduler - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -106,64 +105,64 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_timespan_asc() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -171,64 +170,64 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -236,122 +235,122 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty,_outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_timespan_async() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromHours(1))); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_send_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.ReSchedulerAsync(id, TimeSpan.FromHours(1)); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); _timeProvider.Advance(TimeSpan.FromHours(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); @@ -359,67 +358,67 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); _timeProvider.Advance(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_message_with_existing_id_should_atomically_replace_timer.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_message_with_existing_id_should_atomically_replace_timer.cs index d7bf79f187..d2ff2d4f7c 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_message_with_existing_id_should_atomically_replace_timer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_message_with_existing_id_should_atomically_replace_timer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Ian Cooper @@ -36,7 +36,6 @@ THE SOFTWARE. */ using Paramore.Brighter.Scheduler.Handlers; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Scheduler; @@ -44,8 +43,8 @@ namespace Paramore.Brighter.InMemory.Tests.Scheduler; /// Tests that the InMemoryScheduler uses atomic operations when replacing timers /// for messages with the same scheduler ID, preventing race conditions. /// -[Trait("Category", "InMemory")] -[Collection("CommandProcess")] +[Category("InMemory")] +[NotInParallel("CommandProcess")] public class When_scheduling_message_with_existing_id_should_atomically_replace_timer { private readonly InMemorySchedulerFactory _schedulerFactory; @@ -125,7 +124,7 @@ public When_scheduling_message_with_existing_id_should_atomically_replace_timer( ); } - [Fact] + [Test] public async Task When_scheduling_same_id_concurrently_should_not_have_race_condition() { // Arrange @@ -160,11 +159,11 @@ public async Task When_scheduling_same_id_concurrently_should_not_have_race_cond await Task.WhenAll(tasks); // Assert - No exceptions should occur during concurrent scheduling - Assert.Empty(exceptions); + await Assert.That(exceptions).IsEmpty(); } - [Fact] - public void When_replacing_timer_should_dispose_old_timer_before_creating_new() + [Test] + public async Task When_replacing_timer_should_dispose_old_timer_before_creating_new() { // Arrange var scheduler = (IAmAMessageSchedulerSync)_schedulerFactory.Create(_processor); @@ -178,8 +177,8 @@ public void When_replacing_timer_should_dispose_old_timer_before_creating_new() var secondId = scheduler.Schedule(secondMessage, TimeSpan.FromMinutes(5)); // Assert - Both calls return the same scheduler ID - Assert.Equal(FixedSchedulerId, firstId); - Assert.Equal(FixedSchedulerId, secondId); + await Assert.That(firstId).IsEqualTo(FixedSchedulerId); + await Assert.That(secondId).IsEqualTo(FixedSchedulerId); // Advance time past the second delay (5 minutes) but not the first (10 minutes) _timeProvider.Advance(TimeSpan.FromMinutes(6)); @@ -187,11 +186,11 @@ public void When_replacing_timer_should_dispose_old_timer_before_creating_new() // The second message should have been delivered (timer was replaced with shorter delay) // Only one message should be in the bus (no orphaned timer delivering the first message) var messages = _internalBus.Stream(_routingKey); - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); } - [Fact] - public void When_scheduling_same_id_multiple_times_should_only_deliver_last_message() + [Test] + public async Task When_scheduling_same_id_multiple_times_should_only_deliver_last_message() { // Arrange var scheduler = (IAmAMessageSchedulerSync)_schedulerFactory.Create(_processor); @@ -209,7 +208,7 @@ public void When_scheduling_same_id_multiple_times_should_only_deliver_last_mess // Assert - Only ONE message should be delivered (no orphaned timers) var deliveredMessages = _internalBus.Stream(_routingKey); - Assert.Single(deliveredMessages); + await Assert.That(deliveredMessages).HasSingleItem(); } private Message CreateMessage(int index) diff --git a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs index fe334f78c1..491f2086f1 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -8,17 +8,16 @@ using Paramore.Brighter.InMemory.Tests.TestDoubles; using Paramore.Brighter.Observability; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Sweeper { - [Trait("Category", "InMemory")] - [Collection("CommandProcess")] + [Category("InMemory")] + [NotInParallel("CommandProcess")] public class SweeperTests { private const string MyTopic = "MyTopic"; - [Fact] + [Test] public async Task When_outstanding_in_outbox_sweep_clears_them() { //Arrange @@ -84,11 +83,11 @@ public async Task When_outstanding_in_outbox_sweep_clears_them() await Task.Delay(1000); //Give the sweep time to run //Assert - Assert.Equal(3, internalBus.Stream(routingKey).Count()); - Assert.Empty(await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext())); + await Assert.That(internalBus.Stream(routingKey).Count()).IsEqualTo(3); + await Assert.That(await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext())).IsEmpty(); } - [Fact] + [Test] public async Task When_outstanding_in_outbox_sweep_clears_them_async() { //Arrange @@ -155,11 +154,11 @@ public async Task When_outstanding_in_outbox_sweep_clears_them_async() await Task.Delay(1000); //Give the sweep time to run //Assert - Assert.Equal(3, internalBus.Stream(routingKey).Count()); - Assert.Empty((await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext()))); + await Assert.That(internalBus.Stream(routingKey).Count()).IsEqualTo(3); + await Assert.That((await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext()))).IsEmpty(); } - [Fact] + [Test] public async Task When_too_new_to_sweep_leaves_them() { //Arrange @@ -233,11 +232,11 @@ public async Task When_too_new_to_sweep_leaves_them() await Task.Delay(1000); //Give the sweep time to run //Assert - Assert.Single(internalBus.Stream(routingKey)); - Assert.Equal(3, outbox.OutstandingMessages(TimeSpan.Zero, new RequestContext()).Count()); + await Assert.That(internalBus.Stream(routingKey)).HasSingleItem(); + await Assert.That(outbox.OutstandingMessages(TimeSpan.Zero, new RequestContext()).Count()).IsEqualTo(3); } - [Fact] + [Test] public async Task When_too_new_to_sweep_leaves_them_async() { //Arrange @@ -308,8 +307,8 @@ public async Task When_too_new_to_sweep_leaves_them_async() await Task.Delay(1000); //Give the sweep time to run //Assert - Assert.Single(internalBus.Stream(routingKey)); - Assert.Equal(3, (await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext())).Count()); + await Assert.That(internalBus.Stream(routingKey)).HasSingleItem(); + await Assert.That((await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext())).Count()).IsEqualTo(3); } } } diff --git a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox_with_circuit_breaker.cs b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox_with_circuit_breaker.cs index 2b486070c1..48a5e14170 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox_with_circuit_breaker.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox_with_circuit_breaker.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -13,11 +13,10 @@ using Paramore.Brighter.Observability; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.InMemory.Tests.Sweeper { - [Collection("CommandProcess")] + [NotInParallel("CommandProcess")] public class SweeperTestsWithCircuitBreaker { private readonly Message _messageOne; @@ -111,9 +110,9 @@ public SweeperTestsWithCircuitBreaker() } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_outstanding_in_outbox_with_trippedTopic_sweep_clears_them_async(bool useBulk) { // Arrange @@ -127,13 +126,13 @@ public async Task When_outstanding_in_outbox_with_trippedTopic_sweep_clears_them // Act (clear non tripped) await _sweeper.SweepAsync(); await Task.Delay(1000); - Assert.True(_internalBus.Stream(_routingKeyOne).Any()); - Assert.False(_internalBus.Stream(_routingKeyTwo).Any()); + await Assert.That(_internalBus.Stream(_routingKeyOne).Any()).IsTrue(); + await Assert.That(_internalBus.Stream(_routingKeyTwo).Any()).IsFalse(); var sentMessage = _internalBus.Dequeue(_routingKeyOne); - Assert.NotNull(sentMessage); - Assert.Equal(_messageOne.Id, sentMessage.Id); - Assert.Equal(_messageOne.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_messageOne.Body.Value, sentMessage.Body.Value); + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_messageOne.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_messageOne.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_messageOne.Body.Value); // Act (clear tripped) await _sweeper.SweepAsync(); @@ -141,15 +140,15 @@ public async Task When_outstanding_in_outbox_with_trippedTopic_sweep_clears_them // Assert var sentMessage2 = _internalBus.Dequeue(_routingKeyTwo, TimeSpan.FromSeconds(1)); - Assert.NotNull(sentMessage2); - Assert.Equal(_messageTwo.Id, sentMessage2.Id); - Assert.Equal(_messageTwo.Header.Topic, sentMessage2.Header.Topic); - Assert.Equal(_messageTwo.Body.Value, sentMessage2.Body.Value); + await Assert.That(sentMessage2).IsNotNull(); + await Assert.That(sentMessage2.Id).IsEqualTo(_messageTwo.Id); + await Assert.That(sentMessage2.Header.Topic).IsEqualTo(_messageTwo.Header.Topic); + await Assert.That(sentMessage2.Body.Value).IsEqualTo(_messageTwo.Body.Value); } - [Theory] - [InlineData(true)] - [InlineData(false)] + [Test] + [Arguments(true)] + [Arguments(false)] public async Task When_outstanding_in_outbox_and_one_topic_trips_Then_nonTripped_are_cleared_on_second_sweep(bool useBulk) { // Arrange @@ -165,25 +164,25 @@ public async Task When_outstanding_in_outbox_and_one_topic_trips_Then_nonTripped // first sweep trips failing topics await _sweeper.SweepAsync(); await Task.Delay(1000); //Give the sweep time to run - Assert.False(_internalBus.Stream(_routingKeyOne).Any()); - Assert.False(_internalBus.Stream(_routingKeyTwo).Any()); + await Assert.That(_internalBus.Stream(_routingKeyOne).Any()).IsFalse(); + await Assert.That(_internalBus.Stream(_routingKeyTwo).Any()).IsFalse(); // second sweep skips tripped topics await _sweeper.SweepAsync(); await Task.Delay(1000); - Assert.True(_internalBus.Stream(_routingKeyOne).Any()); - Assert.True(_internalBus.Stream(_routingKeyTwo).Any()); + await Assert.That(_internalBus.Stream(_routingKeyOne).Any()).IsTrue(); + await Assert.That(_internalBus.Stream(_routingKeyTwo).Any()).IsTrue(); var sentMessage = _internalBus.Dequeue(_routingKeyOne); - Assert.NotNull(sentMessage); - Assert.Equal(_messageOne.Id, sentMessage.Id); - Assert.Equal(_messageOne.Header.Topic, sentMessage.Header.Topic); - Assert.Equal(_messageOne.Body.Value, sentMessage.Body.Value); + await Assert.That(sentMessage).IsNotNull(); + await Assert.That(sentMessage.Id).IsEqualTo(_messageOne.Id); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_messageOne.Header.Topic); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_messageOne.Body.Value); var sentMessage2 = _internalBus.Dequeue(_routingKeyTwo, TimeSpan.FromSeconds(1)); - Assert.NotNull(sentMessage2); - Assert.Equal(_messageTwo.Id, sentMessage2.Id); - Assert.Equal(_messageTwo.Header.Topic, sentMessage2.Header.Topic); - Assert.Equal(_messageTwo.Body.Value, sentMessage2.Body.Value); + await Assert.That(sentMessage2).IsNotNull(); + await Assert.That(sentMessage2.Id).IsEqualTo(_messageTwo.Id); + await Assert.That(sentMessage2.Header.Topic).IsEqualTo(_messageTwo.Header.Topic); + await Assert.That(sentMessage2.Body.Value).IsEqualTo(_messageTwo.Body.Value); } } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs index 91766908db..2f898bbb3a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; @@ -6,25 +6,21 @@ using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Trait("Fragile", "CI")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[Property("Fragile", "CI")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerUpdateOffsetAsync : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerUpdateOffsetAsync(ITestOutputHelper output) + public KafkaMessageConsumerUpdateOffsetAsync() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", BootStrapServers = new[] { "localhost:9092" } }, [ @@ -40,8 +36,8 @@ public KafkaMessageConsumerUpdateOffsetAsync(ITestOutputHelper output) ]).Create(); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_a_message_is_acknowledged_update_offset() { //Let topic propagate in the broker @@ -77,16 +73,16 @@ await producerAsync.SendAsync( ((KafkaMessageProducer)producerAsync).Flush(); //check we sent everything - Assert.DoesNotContain(sentMessages, dr => dr.Value == false); + await Assert.That(sentMessages).DoesNotContain(dr => dr.Value == false); //This will create, then dispose the consumer (flushing offsets) Message[] messages = await ConsumeMessagesAsync(groupId, batchLimit: 5); //check we read the first 5 messages - Assert.Equal(5, messages.Length); + await Assert.That(messages.Length).IsEqualTo(5); for (int i = 0; i < 5; i++) { - Assert.Equal(sentMessageIds[i], messages[i].Id); + await Assert.That(messages[i].Id).IsEqualTo(sentMessageIds[i]); } //allow time for committed offsets to propagate in the broker @@ -96,10 +92,10 @@ await producerAsync.SendAsync( Message[] newMessages = await ConsumeMessagesAsync(groupId, batchLimit: 5); //check we read the next 5 messages - Assert.Equal(5, newMessages.Length); + await Assert.That(newMessages.Length).IsEqualTo(5); for (int i = 0; i < 5; i++) { - Assert.Equal(sentMessageIds[i + 5], newMessages[i].Id); + await Assert.That(newMessages[i].Id).IsEqualTo(sentMessageIds[i + 5]); } } @@ -144,7 +140,7 @@ async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consumer) catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs index 627d6f1429..83ce619399 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs @@ -1,17 +1,15 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerPreservesOrderAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -19,11 +17,9 @@ public class KafkaMessageConsumerPreservesOrderAsync : IDisposable private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); private readonly string _kafkaGroupId = Guid.NewGuid().ToString(); - private readonly ITestOutputHelper _output; - public KafkaMessageConsumerPreservesOrderAsync(ITestOutputHelper output) + public KafkaMessageConsumerPreservesOrderAsync() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -45,8 +41,8 @@ public KafkaMessageConsumerPreservesOrderAsync(ITestOutputHelper output) ]).Create(); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_a_message_is_sent_keep_order() { //Let topic propagate in the broker @@ -77,22 +73,22 @@ public async Task When_a_message_is_sent_keep_order() var firstMessage = await ConsumeMessagesAsync(consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); await consumer.AcknowledgeAsync(message); var secondMessage = await ConsumeMessagesAsync(consumer); message = secondMessage.First(); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId2); await consumer.AcknowledgeAsync(message); var thirdMessages = await ConsumeMessagesAsync(consumer); message = thirdMessages.First(); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId3); await consumer.AcknowledgeAsync(message); var fourthMessage = await ConsumeMessagesAsync(consumer); message = fourthMessage.First(); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId4); await consumer.AcknowledgeAsync(message); } finally @@ -142,7 +138,7 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs index fe88e18bf3..fe84515033 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs @@ -1,13 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaProducerAssumeTestsAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -40,8 +38,8 @@ public KafkaProducerAssumeTestsAsync() //Watch your local Docker container when checking failures for this test, should be //KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" - [Fact] - [Trait("Fragile", "CI")] + [Test] + [Property("Fragile", "CI")] public async Task When_a_consumer_declares_topics() { //Let topic propagate in the broker @@ -73,7 +71,7 @@ public async Task When_a_consumer_declares_topics() //allow callback to run await Task.Delay(3000); - Assert.False(messagePublished); + await Assert.That(messagePublished).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs index 742426cce7..82fe343e39 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs @@ -1,27 +1,23 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaConsumerDeclareTestsAsync : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerAsync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaConsumerDeclareTestsAsync(ITestOutputHelper output) + public KafkaConsumerDeclareTestsAsync() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -57,8 +53,8 @@ public KafkaConsumerDeclareTestsAsync(ITestOutputHelper output) } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_a_consumer_declares_topics() { //Let topic propagate in the broker @@ -104,16 +100,16 @@ public async Task When_a_consumer_declares_topics() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); - Assert.Single(messages); - Assert.Equal(MessageType.MT_COMMAND, messages[0].Header.MessageType); - Assert.Equal(_partitionKey, messages[0].Header.PartitionKey); - Assert.Equal(message.Body.Value, messages[0].Body.Value); + await Assert.That(messages).HasSingleItem(); + await Assert.That(messages[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(messages[0].Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(messages[0].Body.Value).IsEqualTo(message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs index e37de730a6..9710d8980e 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; @@ -36,21 +34,19 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; /// via a lazily-created producer. Previously RequeueAsync was a no-op; now it delegates to the producer /// so that requeued messages are actually redelivered. /// -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaConsumerRequeueAsyncTests : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _channelName = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerAsync _consumer; private readonly Message _message; - public KafkaConsumerRequeueAsyncTests(ITestOutputHelper output) + public KafkaConsumerRequeueAsyncTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; _message = new Message( new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(_topic), MessageType.MT_COMMAND), @@ -91,7 +87,7 @@ public KafkaConsumerRequeueAsyncTests(ITestOutputHelper output) )); } - [Fact] + [Test] public async Task When_requeuing_async_should_publish_message_via_producer() { // Arrange - send a message and receive it @@ -100,19 +96,19 @@ public async Task When_requeuing_async_should_publish_message_via_producer() ((KafkaMessageProducer)producer).Flush(); var received = await GetMessageAsync(); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); - _output.WriteLine($"Received body length: {received.Body.Bytes.Length}, value: '{received.Body.Value}'"); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + Console.WriteLine($"Received body length: {received.Body.Bytes.Length}, value: '{received.Body.Value}'"); // Act - requeue the message asynchronously (no delay, so producer sends immediately) var result = await _consumer.RequeueAsync(received); // Assert - requeue should return true - Assert.True(result, "RequeueAsync should succeed"); + await Assert.That(result).IsTrue(); // Assert - message should be available again on the topic (published via producer) var requeued = await GetMessageAsync(); - _output.WriteLine($"Requeued body length: {requeued.Body.Bytes.Length}, value: '{requeued.Body.Value}'"); - Assert.Equal(_message.Body.Value, requeued.Body.Value); + Console.WriteLine($"Requeued body length: {requeued.Body.Bytes.Length}, value: '{requeued.Body.Value}'"); + await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } private async Task GetMessageAsync() @@ -134,7 +130,7 @@ private async Task GetMessageAsync() } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs index 81ba9eb877..68677494e7 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs @@ -3,24 +3,20 @@ using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerNackRedeliveryAsync : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerNackRedeliveryAsync(ITestOutputHelper output) + public KafkaMessageConsumerNackRedeliveryAsync() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -39,7 +35,7 @@ public KafkaMessageConsumerNackRedeliveryAsync(ITestOutputHelper output) ]).Create(); } - [Fact] + [Test] public async Task When_nacking_a_message_async_it_should_be_redelivered() { // let topic propagate in the broker @@ -64,18 +60,18 @@ await producer.SendAsync( //Act - receive the message, nack it, then receive again var firstReceive = await ReceiveMessageAsync(consumer); - Assert.Equal(sentMessageId, firstReceive.Id); + await Assert.That(firstReceive.Id).IsEqualTo(sentMessageId); await consumer.NackAsync(firstReceive); var secondReceive = await ReceiveMessageAsync(consumer); //Assert - the same message should be redelivered - Assert.Equal(sentMessageId, secondReceive.Id); - Assert.Equal(sentBody, secondReceive.Body.Value); + await Assert.That(secondReceive.Id).IsEqualTo(sentMessageId); + await Assert.That(secondReceive.Body.Value).IsEqualTo(sentBody); } - [Fact] + [Test] public async Task When_acking_later_message_async_it_should_not_skip_nacked_message() { // let topic propagate in the broker @@ -105,7 +101,7 @@ await producer.SendAsync( //Act - receive message 1, nack it; receive message 1 again (redelivered), then ack it var firstReceive = await ReceiveMessageAsync(consumer); - Assert.Equal(firstMessageId, firstReceive.Id); + await Assert.That(firstReceive.Id).IsEqualTo(firstMessageId); await consumer.NackAsync(firstReceive); @@ -113,14 +109,14 @@ await producer.SendAsync( var redelivered = await ReceiveMessageAsync(consumer); //Assert - the nacked message is redelivered, not skipped by the second message's existence - Assert.Equal(firstMessageId, redelivered.Id); + await Assert.That(redelivered.Id).IsEqualTo(firstMessageId); // Now ack the redelivered message and confirm we get the second message await consumer.AcknowledgeAsync(redelivered); var secondReceive = await ReceiveMessageAsync(consumer); - Assert.NotEqual(MessageType.MT_NONE, secondReceive.Header.MessageType); - Assert.Equal(secondMessageId, secondReceive.Id); + await Assert.That(secondReceive.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(secondReceive.Id).IsEqualTo(secondMessageId); } private async Task ReceiveMessageAsync(IAmAMessageConsumerAsync consumer) @@ -141,7 +137,7 @@ private async Task ReceiveMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs index 7a3ef34228..c3f5a19b25 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs @@ -1,28 +1,24 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerSweepOffsetsAsync : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly KafkaMessageConsumer _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerSweepOffsetsAsync(ITestOutputHelper output) + public KafkaMessageConsumerSweepOffsetsAsync() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -59,8 +55,8 @@ public KafkaMessageConsumerSweepOffsetsAsync(ITestOutputHelper output) numOfPartitions: 1, replicationFactor: 1, makeChannels: OnMissingChannel.Create)); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_a_message_is_acknowledged_but_no_batch_sent_sweep_offsets() { //allow time for topic to propogate @@ -93,7 +89,7 @@ await producerAsync.SendAsync(new Message( consumedMessages.Add(await ReadMessageAsync()); } - Assert.Equal(9, consumedMessages.Count); + await Assert.That(consumedMessages.Count).IsEqualTo(9); //Let time elapse with no activity await Task.Delay(10000); @@ -110,7 +106,7 @@ await producerAsync.SendAsync(new Message( } //Sweeper will commit these - Assert.Equal(0,_consumer.StoredOffsets()); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(0); _consumer.Close(); return; @@ -140,7 +136,7 @@ async Task ReadMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs index 1491f61235..f34b14476c 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net.Mime; using System.Text.Json; @@ -6,26 +6,22 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerSendTestsAsync : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerAsync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageProducerSendTestsAsync(ITestOutputHelper output) + public KafkaMessageProducerSendTestsAsync() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -59,8 +55,8 @@ public KafkaMessageProducerSendTestsAsync(ITestOutputHelper output) ); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_posting_a_message() { //Let topic propagate in the broker @@ -102,19 +98,19 @@ public async Task When_posting_a_message() //allow the message publication callback to run await Task.Delay(10000); - Assert.True(messagePublished); + await Assert.That(messagePublished).IsTrue(); var receivedMessage = await GetMessageAsync(); var receivedCommand = JsonSerializer.Deserialize(receivedMessage.Body.Value, JsonSerialisationOptions.Options); - Assert.Equal(MessageType.MT_COMMAND, receivedMessage.Header.MessageType); - Assert.Equal(_partitionKey, receivedMessage.Header.PartitionKey); - Assert.Equal(message.Body.Bytes, receivedMessage.Body.Bytes); - Assert.Equal(message.Body.Value, receivedMessage.Body.Value); - Assert.Equal(message.Header.TimeStamp, receivedMessage.Header.TimeStamp, TimeSpan.FromSeconds(5)); - Assert.Equal(command.Id, receivedCommand.Id); - Assert.Equal(command.Value, receivedCommand.Value); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(receivedMessage.Body.Bytes).IsEqualTo(message.Body.Bytes); + await Assert.That(receivedMessage.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(receivedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(5)); + await Assert.That(receivedCommand.Id).IsEqualTo(command.Id); + await Assert.That(receivedCommand.Value).IsEqualTo(command.Value); } private async Task GetMessageAsync() @@ -142,7 +138,7 @@ private async Task GetMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs index 0b73658c15..bdb322a990 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net; using System.Net.Mime; @@ -8,16 +8,13 @@ using Confluent.SchemaRegistry.Serdes; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerHeaderBytesSendTestsAsync : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; @@ -27,10 +24,9 @@ public class KafkaMessageProducerHeaderBytesSendTestsAsync : IAsyncDisposable, I private readonly IAsyncDeserializer _deserializer; private readonly SerializationContext _serializationContext; - public KafkaMessageProducerHeaderBytesSendTestsAsync(ITestOutputHelper output) + public KafkaMessageProducerHeaderBytesSendTestsAsync() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -73,8 +69,8 @@ public KafkaMessageProducerHeaderBytesSendTestsAsync(ITestOutputHelper output) _serializationContext = new SerializationContext(MessageComponentType.Value, _topic); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway() { //Let topic propagate in the broker @@ -112,19 +108,19 @@ public async Task When_posting_a_message_via_the_messaging_gateway() var received = await GetMessageAsync(); - Assert.True(received.Body.Bytes.Length > 5); + await Assert.That(received.Body.Bytes.Length > 5).IsTrue(); var receivedSchemaId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(received.Body.Bytes.Skip(1).Take(4).ToArray())); var receivedCommand =await _deserializer.DeserializeAsync(received.Body.Bytes, received.Body.Bytes is null, _serializationContext); //assert - Assert.Equal(MessageType.MT_COMMAND, received.Header.MessageType); - Assert.Equal(_partitionKey, received.Header.PartitionKey); - Assert.Equal(body, received.Body.Bytes); - Assert.Equal(schemaId, receivedSchemaId); - Assert.Equal(myCommand.Id, receivedCommand.Id); - Assert.Equal(myCommand.Value, receivedCommand.Value); + await Assert.That(received.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(received.Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(received.Body.Bytes).IsEqualTo(body); + await Assert.That(receivedSchemaId).IsEqualTo(schemaId); + await Assert.That(receivedCommand.Id).IsEqualTo(myCommand.Id); + await Assert.That(receivedCommand.Value).IsEqualTo(myCommand.Value); } private async Task GetMessageAsync() @@ -151,7 +147,7 @@ private async Task GetMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs index 530a1bc340..f67285943b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text; using System.Text.Json; using System.Threading.Tasks; @@ -6,26 +6,22 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; using Acks = Confluent.Kafka.Acks; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerMissingHeaderTestsAsync : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAMessageConsumerAsync _consumer; private readonly IProducer _producer; - public KafkaMessageProducerMissingHeaderTestsAsync(ITestOutputHelper output) + public KafkaMessageProducerMissingHeaderTestsAsync() { string groupId = Guid.NewGuid().ToString(); - _output = output; var clientConfig = new ClientConfig { @@ -52,7 +48,7 @@ public KafkaMessageProducerMissingHeaderTestsAsync(ITestOutputHelper output) _producer = new ProducerBuilder(producerConfig) .SetErrorHandler((_, error) => { - output.WriteLine($"Kafka producer failed with Code: {error.Code}, Reason: { error.Reason}, Fatal: {error.IsFatal}", error.Code, error.Reason, error.IsFatal); + Console.WriteLine($"Kafka producer failed with Code: {error.Code}, Reason: { error.Reason}, Fatal: {error.IsFatal}"); }) .Build(); @@ -69,8 +65,8 @@ public KafkaMessageProducerMissingHeaderTestsAsync(ITestOutputHelper output) numOfPartitions: 1, replicationFactor: 1, makeChannels: OnMissingChannel.Create)); } - //[Fact(Skip = "As it has to wait for the messages to flush, only tends to run well in debug")] - [Fact] + //[Test, Skip("As it has to wait for the messages to flush, only tends to run well in debug")] + [Test] public async Task When_recieving_a_message_without_partition_key_header() { await Task.Delay(500); //Let topic propagate in the broker @@ -97,8 +93,8 @@ public async Task When_recieving_a_message_without_partition_key_header() var receivedMessage = await GetMessageAsync(); //Where we lack a partition key header, assume non-Brighter header and set to message key - Assert.Equal(kafkaMessage.Key, receivedMessage.Header.PartitionKey); - Assert.Equal(value, receivedMessage.Body.Bytes); + await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(kafkaMessage.Key); + await Assert.That(receivedMessage.Body.Bytes).IsEqualTo(value); } private async Task GetMessageAsync() @@ -125,7 +121,7 @@ private async Task GetMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index cf28488f77..9ccce67d4e 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerDLQAsyncTests : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerDLQAsyncTests(ITestOutputHelper output) + public KafkaMessageConsumerDLQAsyncTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerDLQAsyncTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { //Arrange - let topics propagate in the broker @@ -96,20 +92,20 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ await using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { receivedMessage = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with DeliveryError"); + Console.WriteLine($"About to reject message {messageId} with DeliveryError"); //reject with DeliveryError reason await consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -117,17 +113,17 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ //Assert - verify message appears on DLQ await using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = await ConsumeMessageAsync(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); } } @@ -193,7 +189,7 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs index 929ac270e5..a411ce3427 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs @@ -26,24 +26,20 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerNoChannelsAsyncTests : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerNoChannelsAsyncTests(ITestOutputHelper output) + public KafkaMessageConsumerNoChannelsAsyncTests() { - _output = output; // Create producer directly for the data topic var publication = new KafkaPublication @@ -67,7 +63,7 @@ public KafkaMessageConsumerNoChannelsAsyncTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async() { //Arrange - let topics propagate in the broker @@ -99,23 +95,23 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn await using (var consumer = CreateConsumerWithNoChannels(groupId)) { var receivedMessage1 = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId1, receivedMessage1.Id); + await Assert.That(receivedMessage1.Id).IsEqualTo(messageId1); - _output.WriteLine($"About to reject message {messageId1} with no channels configured"); + Console.WriteLine($"About to reject message {messageId1} with no channels configured"); //reject with no channels configured - should acknowledge and log warning var rejected = await consumer.RejectAsync(receivedMessage1, new MessageRejectionReason(RejectionReason.DeliveryError, "Test rejection with no channels async")); - _output.WriteLine($"Message {messageId1} rejected, attempting to consume next message"); + Console.WriteLine($"Message {messageId1} rejected, attempting to consume next message"); //Assert - verify rejection returned true and we can consume the next message - Assert.True(rejected, "RejectAsync should return true even with no channels"); + await Assert.That(rejected).IsTrue(); //verify we can consume the next message (proving first was acknowledged) var receivedMessage2 = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId2, receivedMessage2.Id); + await Assert.That(receivedMessage2.Id).IsEqualTo(messageId2); - _output.WriteLine($"Successfully consumed message {messageId2} after rejection"); + Console.WriteLine($"Successfully consumed message {messageId2} after rejection"); } //Additional verification: ensure no messages were sent to non-existent DLQ @@ -163,7 +159,7 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs index e5a00f14f5..28f867e86f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageFallbackAsyncTests : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerInvalidMessageFallbackAsyncTests(ITestOutputHelper output) + public KafkaMessageConsumerInvalidMessageFallbackAsyncTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerInvalidMessageFallbackAsyncTests(ITestOutputHelper ou _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async() { //Arrange - let topics propagate in the broker @@ -96,20 +92,20 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe await using (var consumer = CreateConsumerWithDlqOnly(groupId, dlqRoutingKey)) { receivedMessage = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with Unacceptable reason (no invalid channel configured)"); + Console.WriteLine($"About to reject message {messageId} with Unacceptable reason (no invalid channel configured)"); //reject with Unacceptable reason - should fall back to DLQ since no invalid channel configured await consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Test unacceptable message fallback async")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -117,18 +113,18 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe //Assert - verify message appears on DLQ (not invalid message channel) await using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = await ConsumeMessageAsync(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("Unacceptable", dlqMessage.Header.Bag["RejectionReason"]); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["RejectionReason"]).IsEqualTo("Unacceptable"); } } @@ -195,7 +191,7 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs index 19bfc78945..71e1471e1a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageAsyncTests : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _invalidMessageTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerInvalidMessageAsyncTests(ITestOutputHelper output) + public KafkaMessageConsumerInvalidMessageAsyncTests() { - _output = output; _invalidMessageTopic = $"{_topic}.invalid"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerInvalidMessageAsyncTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async() { //Arrange - let topics propagate in the broker @@ -96,20 +92,20 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to await using (var consumer = CreateConsumer(groupId, invalidMessageRoutingKey)) { receivedMessage = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with Unacceptable reason"); + Console.WriteLine($"About to reject message {messageId} with Unacceptable reason"); //reject with Unacceptable reason await consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Test unacceptable message async")); - _output.WriteLine($"Message {messageId} rejected, waiting for invalid message channel propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for invalid message channel propagation"); //yield to allow invalid message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating invalid message channel consumer"); + Console.WriteLine("Creating invalid message channel consumer"); //yield to allow invalid message topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -117,18 +113,18 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to //Assert - verify message appears on invalid message channel await using (var invalidMessageConsumer = CreateInvalidMessageConsumer(groupId)) { - _output.WriteLine("Attempting to consume from invalid message channel"); + Console.WriteLine("Attempting to consume from invalid message channel"); var invalidMessage = await ConsumeMessageAsync(invalidMessageConsumer); - Assert.NotNull(invalidMessage); - Assert.Equal(MessageType.MT_COMMAND, invalidMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage).IsNotNull(); + await Assert.That(invalidMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(invalidMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, invalidMessage.Header.Bag["OriginalTopic"]); - Assert.True(invalidMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("Unacceptable", invalidMessage.Header.Bag["RejectionReason"]); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["RejectionReason"]).IsEqualTo("Unacceptable"); } } @@ -194,7 +190,7 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs index 78c04ecec7..3a449b27c3 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerUnknownReasonAsyncTests : IAsyncDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerUnknownReasonAsyncTests(ITestOutputHelper output) + public KafkaMessageConsumerUnknownReasonAsyncTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerUnknownReasonAsyncTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq_async() { //Arrange - let topics propagate in the broker @@ -96,20 +92,20 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq_ await using (var consumer = CreateConsumerAsync(groupId, dlqRoutingKey)) { receivedMessage = await ConsumeMessageAsync(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with unknown reason (None)"); + Console.WriteLine($"About to reject message {messageId} with unknown reason (None)"); //reject with None reason - should route to DLQ via default case await consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.None, "Test unknown rejection reason async")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -117,18 +113,18 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq_ //Assert - verify message appears on DLQ (default routing behavior) await using (var dlqConsumer = CreateDLQConsumerAsync(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = await ConsumeMessageAsync(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("None", dlqMessage.Header.Bag["RejectionReason"]); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["RejectionReason"]).IsEqualTo("None"); } } @@ -194,7 +190,7 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index 3e652f9df8..e7d6a79edf 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Rafael Andrade @@ -27,16 +27,13 @@ THE SOFTWARE. */ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; @@ -44,10 +41,9 @@ public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync : IAsy private readonly string _partitionKey = Guid.NewGuid().ToString(); private readonly FakeTimeProvider _fakeTimeProvider; - public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync(ITestOutputHelper output) + public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync() { var groupId = Uuid.New().ToString("N"); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration @@ -93,7 +89,7 @@ public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync(ITestOutputH .CreateAsync(subscription); } - [Fact] + [Test] public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async() { //Arrange @@ -128,8 +124,8 @@ await producerAsync.SendAsync(new Message( } //Assert - messages consumed and acknowledged but not yet committed - Assert.Equal(5, consumedMessages.Count); - Assert.Equal(5, _consumer.StoredOffsets()); + await Assert.That(consumedMessages.Count).IsEqualTo(5); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(5); //Act - Advance time beyond the sweeper interval (30 seconds) _fakeTimeProvider.Advance(TimeSpan.FromSeconds(31)); @@ -138,7 +134,7 @@ await producerAsync.SendAsync(new Message( await Task.Delay(2000); //Assert - Sweeper should have committed the offsets - Assert.Equal(0, _consumer.StoredOffsets()); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(0); _consumer.Close(); } @@ -168,7 +164,7 @@ private async Task ReadMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs index 80c451aab1..04ac9f30aa 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs @@ -1,27 +1,23 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerUpdateOffset : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerUpdateOffset(ITestOutputHelper output) + public KafkaMessageConsumerUpdateOffset() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -42,8 +38,8 @@ public KafkaMessageConsumerUpdateOffset(ITestOutputHelper output) ]).Create(); } - //[Fact(Skip = "Fragile as commit thread needs to be scheduled to run")] - [Fact] + //[Test, Skip("Fragile as commit thread needs to be scheduled to run")] + [Test] public async Task When_a_message_is_acknowldgede_update_offset() { // let topic propogate in the broker @@ -74,20 +70,20 @@ public async Task When_a_message_is_acknowldgede_update_offset() Message[] messages = await ConsumeMessages(groupId: groupId, batchLimit: 5); //check we read the first 5 messages - Assert.Equal(5, messages.Length); + await Assert.That(messages.Length).IsEqualTo(5); for (int i = 0; i < 5; i++) { - Assert.Equal(sentMessages[i], messages[i].Id); + await Assert.That(messages[i].Id).IsEqualTo(sentMessages[i]); } //This will create a new consumer for the same group Message[] newMessages = await ConsumeMessages(groupId, batchLimit: 5); //check we read the next 5 messages - Assert.Equal(5, newMessages.Length); + await Assert.That(newMessages.Length).IsEqualTo(5); for (int i = 0; i < 5; i++) { - Assert.Equal(sentMessages[i + 5], newMessages[i].Id); + await Assert.That(newMessages[i].Id).IsEqualTo(sentMessages[i + 5]); } } @@ -128,7 +124,7 @@ Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs index 337647c25e..5ba6e7391d 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs @@ -1,20 +1,17 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerPreservesOrder : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly RoutingKey _topic = new(Guid.NewGuid().ToString()); private readonly IAmAProducerRegistry _producerRegistry; @@ -22,9 +19,8 @@ public class KafkaMessageConsumerPreservesOrder : IDisposable private readonly string _kafkaGroupId = Guid.NewGuid().ToString(); - public KafkaMessageConsumerPreservesOrder (ITestOutputHelper output) + public KafkaMessageConsumerPreservesOrder () { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -46,7 +42,7 @@ public KafkaMessageConsumerPreservesOrder (ITestOutputHelper output) ]).Create(); } - [Fact] + [Test] public async Task When_a_message_is_sent_keep_order() { //Let topic propogate @@ -71,22 +67,22 @@ public async Task When_a_message_is_sent_keep_order() //Now read messages in order var firstMessage = ConsumeMessages(consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); consumer.Acknowledge(message); var secondMessage = ConsumeMessages(consumer); message = secondMessage.First(); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId2); consumer.Acknowledge(message); var thirdMessages = ConsumeMessages(consumer); message = thirdMessages.First(); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId3); consumer.Acknowledge(message); var fourthMessage = ConsumeMessages(consumer); message = fourthMessage.First(); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId4); consumer.Acknowledge(message); } @@ -130,7 +126,7 @@ private IEnumerable ConsumeMessages(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs index 1000888f52..b5e1b00ec1 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs @@ -4,25 +4,21 @@ using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Trait("Fragile", "CI")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[Property("Fragile", "CI")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerCommitRevokeConcurrency : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _groupId = Guid.NewGuid().ToString(); - public KafkaMessageConsumerCommitRevokeConcurrency(ITestOutputHelper output) + public KafkaMessageConsumerCommitRevokeConcurrency() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -55,9 +51,9 @@ public KafkaMessageConsumerCommitRevokeConcurrency(ITestOutputHelper output) /// This test is inherently timing-dependent — it maximises the chance of overlap between background /// commits and the revoke handler by using commitBatchSize: 1 and rapid message acknowledgement. /// - [Theory] - [InlineData(PartitionAssignmentStrategy.RoundRobin)] - [InlineData(PartitionAssignmentStrategy.CooperativeSticky)] + [Test] + [Arguments(PartitionAssignmentStrategy.RoundRobin)] + [Arguments(PartitionAssignmentStrategy.CooperativeSticky)] public async Task When_committing_offsets_during_revoke_should_not_race_with_background_commit( PartitionAssignmentStrategy partitionAssignmentStrategy) { @@ -94,7 +90,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac } } - _output.WriteLine("Consumer A established, starting rapid consume + acknowledge"); + Console.WriteLine("Consumer A established, starting rapid consume + acknowledge"); //now start a rapid consume-acknowledge cycle while simultaneously triggering a rebalance //by adding consumer B to the group @@ -117,14 +113,14 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac catch (Exception ex) { caughtException = ex; - _output.WriteLine($"Consumer A exception during consume: {ex.Message}"); + Console.WriteLine($"Consumer A exception during consume: {ex.Message}"); } }); //give consumer A a moment to start consuming, then trigger rebalance await Task.Delay(500); - _output.WriteLine("Adding consumer B to trigger rebalance"); + Console.WriteLine("Adding consumer B to trigger rebalance"); using var consumerB = CreateConsumer(commitBatchSize: 10, partitionAssignmentStrategy: partitionAssignmentStrategy); //consumer B polls to join the group and trigger rebalance @@ -140,12 +136,12 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac await consumeTask; //the key assertion: consumer A should not have thrown during the rebalance - Assert.Null(caughtException); + await Assert.That(caughtException).IsNull(); //consumer A should still be functional after the rebalance _ = consumerA.Receive(TimeSpan.FromMilliseconds(2000)); - _output.WriteLine("Test completed - no race condition errors"); + Console.WriteLine("Test completed - no race condition errors"); } private KafkaMessageConsumer CreateConsumer(int commitBatchSize, @@ -189,7 +185,7 @@ private Message ReadMessage(KafkaMessageConsumer consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(500).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs index 1c12bc55cb..394e50b903 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs @@ -1,24 +1,20 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaProducerAssumeTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaProducerAssumeTests(ITestOutputHelper output) + public KafkaProducerAssumeTests() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -43,8 +39,8 @@ public KafkaProducerAssumeTests(ITestOutputHelper output) //Watch your local Docker container when checking failures for this test, should be //KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" - [Fact] - [Trait("Fragile", "CI")] + [Test] + [Property("Fragile", "CI")] public async Task When_a_consumer_declares_topics() { //Let topic propogate @@ -72,7 +68,7 @@ public async Task When_a_consumer_declares_topics() ((KafkaMessageProducer)producer).Flush(); - Assert.False(messagePublished); + await Assert.That(messagePublished).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs index 3010cdf37d..dc3891afe5 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs @@ -1,27 +1,23 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaConsumerDeclareTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerSync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaConsumerDeclareTests (ITestOutputHelper output) + public KafkaConsumerDeclareTests () { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -61,7 +57,7 @@ public KafkaConsumerDeclareTests (ITestOutputHelper output) } - [Fact] + [Test] public async Task When_a_consumer_declares_topics() { //Let topic propogate @@ -85,9 +81,9 @@ public async Task When_a_consumer_declares_topics() Message receivedMessage = ConsumeMessage(); - Assert.Equal(MessageType.MT_COMMAND, receivedMessage.Header.MessageType); - Assert.Equal(_partitionKey, receivedMessage.Header.PartitionKey); - Assert.Equal(message.Body.Value, receivedMessage.Body.Value); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(receivedMessage.Body.Value).IsEqualTo(message.Body.Value); } private Message ConsumeMessage() @@ -109,7 +105,7 @@ private Message ConsumeMessage() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs index 41c29707c5..c66209f9df 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs @@ -1,19 +1,18 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Net.Mime; using Confluent.Kafka; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] // +[Category("Kafka")] +[NotInParallel("Kafka")] // public class KafkaDefaultMessageHeaderBuilderTests { - [Fact] - public void When_converting_brighterheader_to_kafkaheader() + [Test] + public async Task When_converting_brighterheader_to_kafkaheader() { //arrange var message = new Message( @@ -54,27 +53,27 @@ public void When_converting_brighterheader_to_kafkaheader() //assert //known properties - Assert.Equal(message.Header.MessageType.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.MESSAGE_TYPE)); - Assert.Equal(message.Header.MessageId.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.MESSAGE_ID)); - Assert.Equal(message.Header.Topic.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.TOPIC)); - Assert.Equal(message.Header.TimeStamp.DateTime.ToString(CultureInfo.InvariantCulture).ToByteArray(), headers.GetLastBytes(HeaderNames.TIMESTAMP)); - Assert.Equal(message.Header.CorrelationId.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.CORRELATION_ID)); - Assert.Equal(message.Header.PartitionKey.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.PARTITIONKEY)); - Assert.Equal(message.Header.ContentType!.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.CONTENT_TYPE)); - Assert.Equal(message.Header.ReplyTo!.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.REPLY_TO)); - Assert.Equal(message.Header.Delayed.TotalMilliseconds.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.DELAYED_MILLISECONDS)); - Assert.Equal(message.Header.HandledCount.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.HANDLED_COUNT)); - Assert.Equal(message.Header.Type.Value.ToByteArray(), headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_TYPE)); - Assert.Equal(message.Header.Subject!.ToByteArray(), headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_SUBJECT)); - Assert.Equal(message.Header.Source.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_SOURCE)); - Assert.Equal(message.Header.DataSchema!.ToString().ToByteArray(), headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_DATA_SCHEMA)); + await Assert.That(headers.GetLastBytes(HeaderNames.MESSAGE_TYPE)).IsEqualTo(message.Header.MessageType.ToString().ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.MESSAGE_ID)).IsEqualTo(message.Header.MessageId.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.TOPIC)).IsEqualTo(message.Header.Topic.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.TIMESTAMP)).IsEqualTo(message.Header.TimeStamp.DateTime.ToString(CultureInfo.InvariantCulture).ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CORRELATION_ID)).IsEqualTo(message.Header.CorrelationId.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.PARTITIONKEY)).IsEqualTo(message.Header.PartitionKey.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CONTENT_TYPE)).IsEqualTo(message.Header.ContentType!.ToString().ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.REPLY_TO)).IsEqualTo(message.Header.ReplyTo!.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.DELAYED_MILLISECONDS)).IsEqualTo(message.Header.Delayed.TotalMilliseconds.ToString().ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.HANDLED_COUNT)).IsEqualTo(message.Header.HandledCount.ToString().ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_TYPE)).IsEqualTo(message.Header.Type.Value.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_SUBJECT)).IsEqualTo(message.Header.Subject!.ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_SOURCE)).IsEqualTo(message.Header.Source.ToString().ToByteArray()); + await Assert.That(headers.GetLastBytes(HeaderNames.CLOUD_EVENTS_DATA_SCHEMA)).IsEqualTo(message.Header.DataSchema!.ToString().ToByteArray()); //bag properties - Assert.Equal(bag["myguid"].ToString()!.ToByteArray(), headers.GetLastBytes("myguid")); - Assert.Equal(bag["mystring"].ToString()!.ToByteArray(), headers.GetLastBytes("mystring")); - Assert.Equal(bag["myint"].ToString()!.ToByteArray(), headers.GetLastBytes("myint")); - Assert.Equal(bag["mydouble"].ToString()!.ToByteArray(), headers.GetLastBytes("mydouble")); - Assert.Equal(myDateTime.ToByteArray(), headers.GetLastBytes("mydatetime")); + await Assert.That(headers.GetLastBytes("myguid")).IsEqualTo(bag["myguid"].ToString()!.ToByteArray()); + await Assert.That(headers.GetLastBytes("mystring")).IsEqualTo(bag["mystring"].ToString()!.ToByteArray()); + await Assert.That(headers.GetLastBytes("myint")).IsEqualTo(bag["myint"].ToString()!.ToByteArray()); + await Assert.That(headers.GetLastBytes("mydouble")).IsEqualTo(bag["mydouble"].ToString()!.ToByteArray()); + await Assert.That(headers.GetLastBytes("mydatetime")).IsEqualTo(myDateTime.ToByteArray()); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs index f9acebe5ac..a693591f0c 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs @@ -1,20 +1,19 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Net.Mime; using Confluent.Kafka; using Paramore.Brighter.Extensions; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] // +[Category("Kafka")] +[NotInParallel("Kafka")] // public class KafkaHeaderToBrighterTests { - [Fact] - public void When_converting_kafkaheader_to_brighterheader() + [Test] + public async Task When_converting_kafkaheader_to_brighterheader() { //arrange @@ -58,22 +57,22 @@ public void When_converting_kafkaheader_to_brighterheader() var readMessage = new KafkaMessageCreator().CreateMessage(result); //assert - Assert.Equal(message.Id, readMessage.Id); - Assert.Equal(message.Header.MessageType, readMessage.Header.MessageType); - Assert.Equal(message.Header.MessageId, readMessage.Header.MessageId); - Assert.Equal(message.Header.CorrelationId, readMessage.Header.CorrelationId); - Assert.Equal(message.Header.ContentType, readMessage.Header.ContentType); - Assert.Equal(message.Header.Topic, readMessage.Header.Topic); - Assert.Equal(message.Header.Delayed, readMessage.Header.Delayed); - Assert.Equal(message.Header.HandledCount, readMessage.Header.HandledCount); - Assert.Equal(message.Header.TimeStamp, readMessage.Header.TimeStamp, TimeSpan.FromSeconds(5)); + await Assert.That(readMessage.Id).IsEqualTo(message.Id); + await Assert.That(readMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(readMessage.Header.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(readMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(readMessage.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(readMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(readMessage.Header.Delayed).IsEqualTo(message.Header.Delayed); + await Assert.That(readMessage.Header.HandledCount).IsEqualTo(message.Header.HandledCount); + await Assert.That(readMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(5)); //NOTE: Because we can only coerce the byte[] to a string for a unknown bag key, coercing to a specific //type has to be done by the user of the bag. - Assert.Equal(bag["myguid"].ToString(), readMessage.Header.Bag["myguid"]); - Assert.Equal(bag["mystring"].ToString(), readMessage.Header.Bag["mystring"]); - Assert.Equal(bag["myint"].ToString(), readMessage.Header.Bag["myint"]); - Assert.Equal(bag["mydouble"].ToString(), readMessage.Header.Bag["mydouble"]); - Assert.Equal(((DateTime)bag["mydatetime"]).ToString(CultureInfo.InvariantCulture), readMessage.Header.Bag["mydatetime"]); + await Assert.That(readMessage.Header.Bag["myguid"]).IsEqualTo(bag["myguid"].ToString()); + await Assert.That(readMessage.Header.Bag["mystring"]).IsEqualTo(bag["mystring"].ToString()); + await Assert.That(readMessage.Header.Bag["myint"]).IsEqualTo(bag["myint"].ToString()); + await Assert.That(readMessage.Header.Bag["mydouble"]).IsEqualTo(bag["mydouble"].ToString()); + await Assert.That(readMessage.Header.Bag["mydatetime"]).IsEqualTo(((DateTime)bag["mydatetime"]).ToString(CultureInfo.InvariantCulture)); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs index b8dfb6106a..19b49e10dc 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerMakeChannelsTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerMakeChannelsTests(ITestOutputHelper output) + public KafkaMessageConsumerMakeChannelsTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerMakeChannelsTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_creating_dlq_producer_with_make_channels_create_should_create_topic() { //Arrange - let topics propagate in the broker @@ -94,20 +90,20 @@ public async Task When_creating_dlq_producer_with_make_channels_create_should_cr using (var consumer = CreateConsumer(groupId, dlqRoutingKey, OnMissingChannel.Create)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} - DLQ topic should be created automatically"); + Console.WriteLine($"About to reject message {messageId} - DLQ topic should be created automatically"); //reject with DeliveryError - DLQ producer will inherit MakeChannels.Create and create topic consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test MakeChannels inheritance")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer to verify topic was created"); + Console.WriteLine("Creating DLQ consumer to verify topic was created"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -116,18 +112,18 @@ public async Task When_creating_dlq_producer_with_make_channels_create_should_cr //If MakeChannels inheritance didn't work, the topic wouldn't exist and this would fail using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ - this proves topic was auto-created"); + Console.WriteLine("Attempting to consume from DLQ - this proves topic was auto-created"); var dlqMessage = ConsumeMessage(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify the DLQ topic was created and message was sent successfully - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); - _output.WriteLine("DLQ topic was successfully created via MakeChannels.Create inheritance"); + Console.WriteLine("DLQ topic was successfully created via MakeChannels.Create inheritance"); } } @@ -193,7 +189,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs index 9b6297c8c3..eabc974c54 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; @@ -35,20 +33,18 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// When the Kafka consumer is disposed, it should dispose the lazily-created requeue producer. /// If no requeue was ever performed, disposal should succeed without error. /// -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaConsumerDisposesRequeueProducerTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _channelName = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerSync _consumer; - public KafkaConsumerDisposesRequeueProducerTests(ITestOutputHelper output) + public KafkaConsumerDisposesRequeueProducerTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration @@ -85,8 +81,8 @@ public KafkaConsumerDisposesRequeueProducerTests(ITestOutputHelper output) )); } - [Fact] - public void When_consumer_requeues_then_disposes_should_dispose_producer() + [Test] + public async Task When_consumer_requeues_then_disposes_should_dispose_producer() { // Arrange - send a message and receive it to have something to requeue var message = new Message( @@ -98,22 +94,20 @@ public void When_consumer_requeues_then_disposes_should_dispose_producer() ((KafkaMessageProducer)producer).Flush(); var received = GetMessage(); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue to trigger lazy producer creation, then dispose _consumer.Requeue(received); // Assert - disposing should not throw (producer cleanup succeeds) - var exception = Record.Exception(() => _consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); } - [Fact] - public void When_consumer_disposes_without_requeue_should_not_throw() + [Test] + public async Task When_consumer_disposes_without_requeue_should_not_throw() { // Act + Assert - disposing without ever requeuing should succeed - var exception = Record.Exception(() => _consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); } private Message GetMessage() @@ -135,7 +129,7 @@ private Message GetMessage() } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs index 24d4381feb..a7cf4bb934 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; @@ -36,21 +34,19 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// via a lazily-created producer. Previously Requeue was a no-op; now it delegates to the producer /// so that requeued messages are actually redelivered. /// -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaConsumerRequeueTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _channelName = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerSync _consumer; private readonly Message _message; - public KafkaConsumerRequeueTests(ITestOutputHelper output) + public KafkaConsumerRequeueTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; _message = new Message( new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(_topic), MessageType.MT_COMMAND), @@ -91,8 +87,8 @@ public KafkaConsumerRequeueTests(ITestOutputHelper output) )); } - [Fact] - public void When_requeuing_should_publish_message_via_producer() + [Test] + public async Task When_requeuing_should_publish_message_via_producer() { // Arrange - send a message and receive it var producer = (IAmAMessageProducerSync)_producerRegistry.LookupBy(new RoutingKey(_topic)); @@ -100,21 +96,21 @@ public void When_requeuing_should_publish_message_via_producer() ((KafkaMessageProducer)producer).Flush(); var received = GetMessage(); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); - _output.WriteLine($"Received body length: {received.Body.Bytes.Length}, value: '{received.Body.Value}'"); - _output.WriteLine($"Received topic: {received.Header.Topic}"); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + Console.WriteLine($"Received body length: {received.Body.Bytes.Length}, value: '{received.Body.Value}'"); + Console.WriteLine($"Received topic: {received.Header.Topic}"); // Act - requeue the message (no delay, so producer sends immediately) var result = _consumer.Requeue(received); // Assert - requeue should return true - Assert.True(result, "Requeue should succeed"); + await Assert.That(result).IsTrue(); // Assert - message should be available again on the topic (published via producer) var requeued = GetMessage(); - _output.WriteLine($"Requeued body length: {requeued.Body.Bytes.Length}, value: '{requeued.Body.Value}'"); - _output.WriteLine($"Requeued topic: {requeued.Header.Topic}, type: {requeued.Header.MessageType}"); - Assert.Equal(_message.Body.Value, requeued.Body.Value); + Console.WriteLine($"Requeued body length: {requeued.Body.Bytes.Length}, value: '{requeued.Body.Value}'"); + Console.WriteLine($"Requeued topic: {requeued.Header.Topic}, type: {requeued.Header.MessageType}"); + await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } private Message GetMessage() @@ -136,7 +132,7 @@ private Message GetMessage() } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs index 347fcfda8e..c29ff063f3 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; @@ -36,21 +34,19 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// should delegate to the scheduler. This test verifies that the scheduler passed to the consumer /// constructor is wired through to the producer's Scheduler property. /// -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaConsumerRequeueSchedulerTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly KafkaMessageConsumer _consumer; private readonly SpySchedulerSync _scheduler; private readonly Message _message; - public KafkaConsumerRequeueSchedulerTests(ITestOutputHelper output) + public KafkaConsumerRequeueSchedulerTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; _message = new Message( new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(_topic), MessageType.MT_COMMAND), @@ -91,8 +87,8 @@ public KafkaConsumerRequeueSchedulerTests(ITestOutputHelper output) scheduler: _scheduler); } - [Fact] - public void When_requeuing_with_delay_should_use_scheduler() + [Test] + public async Task When_requeuing_with_delay_should_use_scheduler() { // Arrange - send a message and receive it var producer = (IAmAMessageProducerSync)_producerRegistry.LookupBy(new RoutingKey(_topic)); @@ -100,15 +96,14 @@ public void When_requeuing_with_delay_should_use_scheduler() ((KafkaMessageProducer)producer).Flush(); var received = GetMessage(); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with non-zero delay (should use scheduler via producer) _consumer.Requeue(received, TimeSpan.FromSeconds(5)); // Assert - scheduler should have been called (proves producer has scheduler configured) - Assert.True(_scheduler.ScheduleCalled, - "Scheduler.Schedule should have been called via the lazily created producer"); - Assert.Equal(TimeSpan.FromSeconds(5), _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } private Message GetMessage() @@ -130,7 +125,7 @@ private Message GetMessage() } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs index 3947ceffb3..198a65e048 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs @@ -3,24 +3,20 @@ using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerNackRedelivery : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerNackRedelivery(ITestOutputHelper output) + public KafkaMessageConsumerNackRedelivery() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -39,7 +35,7 @@ public KafkaMessageConsumerNackRedelivery(ITestOutputHelper output) ]).Create(); } - [Fact] + [Test] public async Task When_nacking_a_message_it_should_be_redelivered() { // let topic propagate in the broker @@ -64,18 +60,18 @@ public async Task When_nacking_a_message_it_should_be_redelivered() //Act - receive the message, nack it, then receive again var firstReceive = await ReceiveMessageAsync(consumer); - Assert.Equal(sentMessageId, firstReceive.Id); + await Assert.That(firstReceive.Id).IsEqualTo(sentMessageId); consumer.Nack(firstReceive); var secondReceive = await ReceiveMessageAsync(consumer); //Assert - the same message should be redelivered - Assert.Equal(sentMessageId, secondReceive.Id); - Assert.Equal(sentBody, secondReceive.Body.Value); + await Assert.That(secondReceive.Id).IsEqualTo(sentMessageId); + await Assert.That(secondReceive.Body.Value).IsEqualTo(sentBody); } - [Fact] + [Test] public async Task When_acking_later_message_it_should_not_skip_nacked_message() { // let topic propagate in the broker @@ -105,7 +101,7 @@ public async Task When_acking_later_message_it_should_not_skip_nacked_message() //Act - receive message 1, nack it; receive message 1 again (redelivered), then ack it var firstReceive = await ReceiveMessageAsync(consumer); - Assert.Equal(firstMessageId, firstReceive.Id); + await Assert.That(firstReceive.Id).IsEqualTo(firstMessageId); consumer.Nack(firstReceive); @@ -113,14 +109,14 @@ public async Task When_acking_later_message_it_should_not_skip_nacked_message() var redelivered = await ReceiveMessageAsync(consumer); //Assert - the nacked message is redelivered, not skipped by the second message's existence - Assert.Equal(firstMessageId, redelivered.Id); + await Assert.That(redelivered.Id).IsEqualTo(firstMessageId); // Now ack the redelivered message and confirm we get the second message consumer.Acknowledge(redelivered); var secondReceive = await ReceiveMessageAsync(consumer); - Assert.NotEqual(MessageType.MT_NONE, secondReceive.Header.MessageType); - Assert.Equal(secondMessageId, secondReceive.Id); + await Assert.That(secondReceive.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(secondReceive.Id).IsEqualTo(secondMessageId); } private async Task ReceiveMessageAsync(IAmAMessageConsumerSync consumer) @@ -141,7 +137,7 @@ private async Task ReceiveMessageAsync(IAmAMessageConsumerSync consumer } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs index 1d1eaf13af..84150ba458 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs @@ -1,28 +1,24 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerSweepOffsets : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly KafkaMessageConsumer _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerSweepOffsets(ITestOutputHelper output) + public KafkaMessageConsumerSweepOffsets() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -63,7 +59,7 @@ public KafkaMessageConsumerSweepOffsets(ITestOutputHelper output) ); } - [Fact] + [Test] public async Task When_a_message_is_acknowldeged_but_no_batch_sent_sweep_offsets() { //allow topic to propogate on the broker @@ -93,8 +89,8 @@ public async Task When_a_message_is_acknowldeged_but_no_batch_sent_sweep_offsets consumedMessages.Add(await ReadMessageAsync()); } - Assert.Equal(9, consumedMessages.Count); - Assert.Equal(9, _consumer.StoredOffsets()); + await Assert.That(consumedMessages.Count).IsEqualTo(9); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(9); //Let time elapse with no activity await Task.Delay(10000); @@ -111,7 +107,7 @@ public async Task When_a_message_is_acknowldeged_but_no_batch_sent_sweep_offsets } //Sweeper will commit these - Assert.Equal(0, _consumer.StoredOffsets()); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(0); return; async Task ReadMessageAsync() @@ -135,7 +131,7 @@ async Task ReadMessageAsync() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs index 0c3f3f1ee4..0613e5fb29 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net.Mime; using System.Text.Json; @@ -8,26 +8,22 @@ using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; using Paramore.Brighter.Observability; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerSendTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _channelName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly IAmAMessageConsumerSync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageProducerSendTests(ITestOutputHelper output) + public KafkaMessageProducerSendTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", BootStrapServers = new[] { "localhost:9092" } }, [ @@ -58,7 +54,7 @@ public KafkaMessageProducerSendTests(ITestOutputHelper output) ); } - [Fact] + [Test] public async Task When_posting_a_message() { //Let topic propagate in the broker @@ -125,38 +121,38 @@ public async Task When_posting_a_message() //allow propagation of callback await Task.Delay(1000); - Assert.True(messagePublished); + await Assert.That(messagePublished).IsTrue(); var receivedMessage = GetMessage(); var receivedCommand = JsonSerializer.Deserialize(receivedMessage.Body.Value, JsonSerialisationOptions.Options); - Assert.Equal(MessageType.MT_COMMAND, receivedMessage.Header.MessageType); - Assert.Equal(_partitionKey, receivedMessage.Header.PartitionKey); - Assert.Equal(message.Body.Bytes, receivedMessage.Body.Bytes); - Assert.Equal(message.Body.Value, receivedMessage.Body.Value); - Assert.Equal(command.Id, receivedCommand.Id); - Assert.Equal(command.Value, receivedCommand.Value); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(receivedMessage.Body.Bytes).IsEqualTo(message.Body.Bytes); + await Assert.That(receivedMessage.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(receivedCommand.Id).IsEqualTo(command.Id); + await Assert.That(receivedCommand.Value).IsEqualTo(command.Value); // Assert header values - Assert.Equal(message.Header.MessageId, receivedMessage.Header.MessageId); - Assert.Equal(message.Header.Topic, receivedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, receivedMessage.Header.MessageType); - Assert.Equal(message.Header.Source,receivedMessage.Header.Source); - Assert.Equal(message.Header.Type,receivedMessage.Header.Type); - Assert.Equal(message.Header.TimeStamp, receivedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(message.Header.CorrelationId,receivedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, receivedMessage.Header.ReplyTo); - Assert.Equal(message.Header.ContentType,receivedMessage.Header.ContentType); - Assert.Equal(message.Header.HandledCount, receivedMessage.Header.HandledCount); - Assert.Equal(message.Header.DataSchema,receivedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject,receivedMessage.Header.Subject); - Assert.Equal(delayMilliseconds, receivedMessage.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(message.Header.TraceParent,receivedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, receivedMessage.Header.TraceState); - Assert.Equal(message.Header.Baggage, receivedMessage.Header.Baggage); - Assert.True(message.Header.Bag.ContainsKey("Test Header")); - Assert.Equal("Test Value", message.Header.Bag["Test Header"]); + await Assert.That(receivedMessage.Header.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(receivedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(receivedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(receivedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(receivedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(receivedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(receivedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(receivedMessage.Header.ContentType).IsEqualTo(message.Header.ContentType); + await Assert.That(receivedMessage.Header.HandledCount).IsEqualTo(message.Header.HandledCount); + await Assert.That(receivedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(receivedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(receivedMessage.Header.Delayed).IsEqualTo(delayMilliseconds); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(receivedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(receivedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); + await Assert.That(receivedMessage.Header.Baggage).IsEqualTo(message.Header.Baggage); + await Assert.That(message.Header.Bag.ContainsKey("Test Header")).IsTrue(); + await Assert.That(message.Header.Bag["Test Header"]).IsEqualTo("Test Value"); } private Message GetMessage() @@ -179,7 +175,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs index 319b51c603..8a97b146d3 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net; using System.Threading.Tasks; @@ -8,16 +8,13 @@ using Confluent.SchemaRegistry.Serdes; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerHeaderBytesSendTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; @@ -28,10 +25,9 @@ public class KafkaMessageProducerHeaderBytesSendTests : IDisposable private readonly SerializationContext _serializationContext; - public KafkaMessageProducerHeaderBytesSendTests (ITestOutputHelper output) + public KafkaMessageProducerHeaderBytesSendTests () { string groupId = Guid.NewGuid().ToString(); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -81,7 +77,7 @@ public KafkaMessageProducerHeaderBytesSendTests (ITestOutputHelper output) /// NOTE: This test needs the schema registry to be running, and has hardcoded it's port to 8081. Both of those /// may cause this test to fail, so check them if in doubt /// - [Fact] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway() { @@ -118,20 +114,20 @@ public async Task When_posting_a_message_via_the_messaging_gateway() var received = GetMessage(); - Assert.True(received.Body.Bytes.Length > 5); + await Assert.That(received.Body.Bytes.Length > 5).IsTrue(); var receivedSchemaId = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(received.Body.Bytes.Skip(1).Take(4).ToArray())); var receivedCommand = _deserializer.Deserialize(received.Body.Bytes, received.Body.Bytes is null, _serializationContext); //assert - Assert.Equal(MessageType.MT_COMMAND, received.Header.MessageType); - Assert.Equal(_partitionKey, received.Header.PartitionKey); - Assert.Equal(received.Body.Bytes, received.Body.Bytes); - Assert.Equal(received.Body.Value, received.Body.Value); - Assert.Equal(schemaId, receivedSchemaId); - Assert.Equal(myCommand.Id, receivedCommand.Id); - Assert.Equal(myCommand.Value, receivedCommand.Value); + await Assert.That(received.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(received.Header.PartitionKey).IsEqualTo(_partitionKey); + await Assert.That(received.Body.Bytes).IsEqualTo(received.Body.Bytes); + await Assert.That(received.Body.Value).IsEqualTo(received.Body.Value); + await Assert.That(receivedSchemaId).IsEqualTo(schemaId); + await Assert.That(receivedCommand.Id).IsEqualTo(myCommand.Id); + await Assert.That(receivedCommand.Value).IsEqualTo(myCommand.Value); } private Message GetMessage() @@ -155,7 +151,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs index 168956137d..c160d3e6cd 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text; using System.Text.Json; using System.Threading.Tasks; @@ -6,26 +6,22 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; using Acks = Confluent.Kafka.Acks; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] // +[Category("Kafka")] +[NotInParallel("Kafka")] // public class KafkaMessageProducerMissingHeaderTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAMessageConsumerSync _consumer; private readonly IProducer _producer; - public KafkaMessageProducerMissingHeaderTests(ITestOutputHelper output) + public KafkaMessageProducerMissingHeaderTests() { string groupId = Guid.NewGuid().ToString(); - _output = output; var clientConfig = new ClientConfig @@ -53,7 +49,7 @@ public KafkaMessageProducerMissingHeaderTests(ITestOutputHelper output) _producer = new ProducerBuilder(producerConfig) .SetErrorHandler((_, error) => { - output.WriteLine($"Kafka producer failed with Code: {error.Code}, Reason: { error.Reason}, Fatal: {error.IsFatal}", error.Code, error.Reason, error.IsFatal); + Console.WriteLine($"Kafka producer failed with Code: {error.Code}, Reason: { error.Reason}, Fatal: {error.IsFatal}"); }) .Build(); @@ -74,7 +70,7 @@ public KafkaMessageProducerMissingHeaderTests(ITestOutputHelper output) ); } - [Fact] + [Test] public async Task When_recieving_a_message_without_partition_key_header() { await Task.Delay(500); //Let topic propagate in the broker @@ -90,7 +86,7 @@ public async Task When_recieving_a_message_without_partition_key_header() Value = value }; - _producer.Produce(_topic, kafkaMessage, report => _output.WriteLine(report.ToString()) ); + _producer.Produce(_topic, kafkaMessage, report => Console.WriteLine(report.ToString()) ); //ensure any messages are flushed _producer.Flush(); @@ -101,8 +97,8 @@ public async Task When_recieving_a_message_without_partition_key_header() var receivedMessage = GetMessage(); //Where we lack a partition key header, assume non-Brighter header and set to message key - Assert.Equal(command.Id, receivedMessage.Header.PartitionKey); - Assert.Equal(value, receivedMessage.Body.Bytes); + await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(command.Id); + await Assert.That(receivedMessage.Body.Bytes).IsEqualTo(value); } private Message GetMessage() @@ -128,7 +124,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs index 6167c31dc2..237f1a928f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerMetadataTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerMetadataTests(ITestOutputHelper output) + public KafkaMessageConsumerMetadataTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; //Arrange - create producer for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerMetadataTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_should_include_metadata() { //Arrange - let topics propagate in the broker @@ -94,20 +90,20 @@ public async Task When_rejecting_message_should_include_metadata() using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with DeliveryError"); + Console.WriteLine($"About to reject message {messageId} with DeliveryError"); //reject with DeliveryError reason and description consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, rejectionDescription)); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer to verify metadata"); + Console.WriteLine("Creating DLQ consumer to verify metadata"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -115,41 +111,41 @@ public async Task When_rejecting_message_should_include_metadata() //Assert - verify message appears on DLQ with all required metadata using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = ConsumeMessage(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify OriginalTopic metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey(HeaderNames.ORIGINAL_TOPIC), "OriginalTopic metadata missing"); - Assert.Equal(_topic, dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TOPIC]); - _output.WriteLine($"✓ OriginalTopic: {dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TOPIC]}"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey(HeaderNames.ORIGINAL_TOPIC)).IsTrue(); + await Assert.That(dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TOPIC]).IsEqualTo(_topic); + Console.WriteLine($"✓ OriginalTopic: {dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TOPIC]}"); //verify RejectionTimestamp metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_TIMESTAMP), "RejectionTimestamp metadata missing"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_TIMESTAMP)).IsTrue(); var rejectionTimestamp = dlqMessage.Header.Bag[HeaderNames.REJECTION_TIMESTAMP] as string; - Assert.NotNull(rejectionTimestamp); - Assert.True(DateTimeOffset.TryParse(rejectionTimestamp, out var parsedTimestamp), "RejectionTimestamp should be parseable ISO format"); - Assert.True(DateTimeOffset.UtcNow - parsedTimestamp < TimeSpan.FromMinutes(1), "RejectionTimestamp should be recent"); - _output.WriteLine($"✓ RejectionTimestamp: {rejectionTimestamp}"); + await Assert.That(rejectionTimestamp).IsNotNull(); + await Assert.That(DateTimeOffset.TryParse(rejectionTimestamp, out var parsedTimestamp)).IsTrue(); + await Assert.That(DateTimeOffset.UtcNow - parsedTimestamp < TimeSpan.FromMinutes(1), "RejectionTimestamp should be recent").IsTrue(); + Console.WriteLine($"✓ RejectionTimestamp: {rejectionTimestamp}"); //verify RejectionReason metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_REASON), "RejectionReason metadata missing"); - Assert.Equal("DeliveryError", dlqMessage.Header.Bag[HeaderNames.REJECTION_REASON]); - _output.WriteLine($"✓ RejectionReason: {dlqMessage.Header.Bag[HeaderNames.REJECTION_REASON]}"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_REASON)).IsTrue(); + await Assert.That(dlqMessage.Header.Bag[HeaderNames.REJECTION_REASON]).IsEqualTo("DeliveryError"); + Console.WriteLine($"✓ RejectionReason: {dlqMessage.Header.Bag[HeaderNames.REJECTION_REASON]}"); //verify RejectionMessage metadata (optional description) - Assert.True(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_MESSAGE), "RejectionMessage metadata missing"); - Assert.Equal(rejectionDescription, dlqMessage.Header.Bag[HeaderNames.REJECTION_MESSAGE]); - _output.WriteLine($"✓ RejectionMessage: {dlqMessage.Header.Bag[HeaderNames.REJECTION_MESSAGE]}"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey(HeaderNames.REJECTION_MESSAGE)).IsTrue(); + await Assert.That(dlqMessage.Header.Bag[HeaderNames.REJECTION_MESSAGE]).IsEqualTo(rejectionDescription); + Console.WriteLine($"✓ RejectionMessage: {dlqMessage.Header.Bag[HeaderNames.REJECTION_MESSAGE]}"); //verify MessageType metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey(HeaderNames.ORIGINAL_TYPE), "MessageType metadata missing"); - Assert.Equal("MT_COMMAND", dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TYPE]); - _output.WriteLine($"✓ MessageType: {dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TYPE]}"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey(HeaderNames.ORIGINAL_TYPE)).IsTrue(); + await Assert.That(dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TYPE]).IsEqualTo("MT_COMMAND"); + Console.WriteLine($"✓ MessageType: {dlqMessage.Header.Bag[HeaderNames.ORIGINAL_TYPE]}"); - _output.WriteLine("All metadata fields verified successfully"); + Console.WriteLine("All metadata fields verified successfully"); } } @@ -215,7 +211,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index ddfb0e6dc3..ec1aba0836 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerDLQTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerDLQTests(ITestOutputHelper output) + public KafkaMessageConsumerDLQTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerDLQTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange - let topics propagate in the broker @@ -93,20 +89,20 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with DeliveryError"); + Console.WriteLine($"About to reject message {messageId} with DeliveryError"); //reject with DeliveryError reason consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -114,17 +110,17 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( //Assert - verify message appears on DLQ using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = ConsumeMessage(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); } } @@ -190,7 +186,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 80e51614c6..51420a6693 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -26,24 +26,20 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerNoChannelsTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerNoChannelsTests(ITestOutputHelper output) + public KafkaMessageConsumerNoChannelsTests() { - _output = output; // Create producer directly for the data topic var publication = new KafkaPublication @@ -67,7 +63,7 @@ public KafkaMessageConsumerNoChannelsTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() { //Arrange - let topics propagate in the broker @@ -96,23 +92,23 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn using (var consumer = CreateConsumerWithNoChannels(groupId)) { var receivedMessage1 = ConsumeMessage(consumer); - Assert.Equal(messageId1, receivedMessage1.Id); + await Assert.That(receivedMessage1.Id).IsEqualTo(messageId1); - _output.WriteLine($"About to reject message {messageId1} with no channels configured"); + Console.WriteLine($"About to reject message {messageId1} with no channels configured"); //reject with no channels configured - should acknowledge and log warning var rejected = consumer.Reject(receivedMessage1, new MessageRejectionReason(RejectionReason.DeliveryError, "Test rejection with no channels")); - _output.WriteLine($"Message {messageId1} rejected, attempting to consume next message"); + Console.WriteLine($"Message {messageId1} rejected, attempting to consume next message"); //Assert - verify rejection returned true and we can consume the next message - Assert.True(rejected, "Reject should return true even with no channels"); + await Assert.That(rejected).IsTrue(); //verify we can consume the next message (proving first was acknowledged) var receivedMessage2 = ConsumeMessage(consumer); - Assert.Equal(messageId2, receivedMessage2.Id); + await Assert.That(receivedMessage2.Id).IsEqualTo(messageId2); - _output.WriteLine($"Successfully consumed message {messageId2} after rejection"); + Console.WriteLine($"Successfully consumed message {messageId2} after rejection"); } //Additional verification: ensure no messages were sent to non-existent DLQ @@ -160,7 +156,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 6dadd2475a..3adec4c0c4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageFallbackTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerInvalidMessageFallbackTests(ITestOutputHelper output) + public KafkaMessageConsumerInvalidMessageFallbackTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerInvalidMessageFallbackTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange - let topics propagate in the broker @@ -93,20 +89,20 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe using (var consumer = CreateConsumerWithDlqOnly(groupId, dlqRoutingKey)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with Unacceptable reason (no invalid channel configured)"); + Console.WriteLine($"About to reject message {messageId} with Unacceptable reason (no invalid channel configured)"); //reject with Unacceptable reason - should fall back to DLQ since no invalid channel configured consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Test unacceptable message fallback")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -114,18 +110,18 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe //Assert - verify message appears on DLQ (not invalid message channel) using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = ConsumeMessage(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("Unacceptable", dlqMessage.Header.Bag["RejectionReason"]); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["RejectionReason"]).IsEqualTo("Unacceptable"); } } @@ -192,7 +188,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index d7a9ea7078..bb7d5a3fde 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _invalidMessageTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerInvalidMessageTests(ITestOutputHelper output) + public KafkaMessageConsumerInvalidMessageTests() { - _output = output; _invalidMessageTopic = $"{_topic}.invalid"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerInvalidMessageTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange - let topics propagate in the broker @@ -93,20 +89,20 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to using (var consumer = CreateConsumer(groupId, invalidMessageRoutingKey)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with Unacceptable reason"); + Console.WriteLine($"About to reject message {messageId} with Unacceptable reason"); //reject with Unacceptable reason consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Test unacceptable message")); - _output.WriteLine($"Message {messageId} rejected, waiting for invalid message channel propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for invalid message channel propagation"); //yield to allow invalid message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating invalid message channel consumer"); + Console.WriteLine("Creating invalid message channel consumer"); //yield to allow invalid message topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -114,18 +110,18 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to //Assert - verify message appears on invalid message channel using (var invalidMessageConsumer = CreateInvalidMessageConsumer(groupId)) { - _output.WriteLine("Attempting to consume from invalid message channel"); + Console.WriteLine("Attempting to consume from invalid message channel"); var invalidMessage = ConsumeMessage(invalidMessageConsumer); - Assert.NotNull(invalidMessage); - Assert.Equal(MessageType.MT_COMMAND, invalidMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage).IsNotNull(); + await Assert.That(invalidMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(invalidMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, invalidMessage.Header.Bag["OriginalTopic"]); - Assert.True(invalidMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("Unacceptable", invalidMessage.Header.Bag["RejectionReason"]); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["RejectionReason"]).IsEqualTo("Unacceptable"); } } @@ -191,7 +187,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs index 0a89922330..437c4e6a52 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs @@ -26,25 +26,21 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class KafkaMessageConsumerUnknownReasonTests : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _dlqTopic; private readonly KafkaMessageProducer _producer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerUnknownReasonTests(ITestOutputHelper output) + public KafkaMessageConsumerUnknownReasonTests() { - _output = output; _dlqTopic = $"{_topic}.dlq"; // Create producer directly for the data topic @@ -69,7 +65,7 @@ public KafkaMessageConsumerUnknownReasonTests(ITestOutputHelper output) _producer.Init(); } - [Fact] + [Test] public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq() { //Arrange - let topics propagate in the broker @@ -93,20 +89,20 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq( using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { receivedMessage = ConsumeMessage(consumer); - Assert.Equal(messageId, receivedMessage.Id); + await Assert.That(receivedMessage.Id).IsEqualTo(messageId); - _output.WriteLine($"About to reject message {messageId} with unknown reason (None)"); + Console.WriteLine($"About to reject message {messageId} with unknown reason (None)"); //reject with None reason - should route to DLQ via default case consumer.Reject(receivedMessage, new MessageRejectionReason(RejectionReason.None, "Test unknown rejection reason")); - _output.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); + Console.WriteLine($"Message {messageId} rejected, waiting for DLQ propagation"); //yield to allow DLQ message to be produced and topic to be created await Task.Delay(TimeSpan.FromMilliseconds(3000)); } - _output.WriteLine("Creating DLQ consumer"); + Console.WriteLine("Creating DLQ consumer"); //yield to allow DLQ topic to propagate await Task.Delay(TimeSpan.FromMilliseconds(1000)); @@ -114,18 +110,18 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq( //Assert - verify message appears on DLQ (default routing behavior) using (var dlqConsumer = CreateDLQConsumer(groupId)) { - _output.WriteLine("Attempting to consume from DLQ"); + Console.WriteLine("Attempting to consume from DLQ"); var dlqMessage = ConsumeMessage(dlqConsumer); - Assert.NotNull(dlqMessage); - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(receivedMessage.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage).IsNotNull(); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); //verify rejection metadata was added - Assert.True(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")); - Assert.Equal(_topic, dlqMessage.Header.Bag["OriginalTopic"]); - Assert.True(dlqMessage.Header.Bag.ContainsKey("RejectionReason")); - Assert.Equal("None", dlqMessage.Header.Bag["RejectionReason"]); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("OriginalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["OriginalTopic"]).IsEqualTo(_topic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("RejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["RejectionReason"]).IsEqualTo("None"); } } @@ -191,7 +187,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs index 6591aa748f..c8f03eedb1 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs @@ -5,25 +5,21 @@ using Confluent.Kafka; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Trait("Fragile", "CI")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[Property("Fragile", "CI")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerCommitOnRevoke : IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; private readonly string _groupId = Guid.NewGuid().ToString(); - public KafkaMessageConsumerCommitOnRevoke(ITestOutputHelper output) + public KafkaMessageConsumerCommitOnRevoke() { - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { @@ -57,9 +53,9 @@ public KafkaMessageConsumerCommitOnRevoke(ITestOutputHelper output) /// 3. The revoke handler on A should commit the outstanding offsets from the second batch /// 4. A new consumer C verifies it reads from the fully committed position (no replay) /// - [Theory] - [InlineData(PartitionAssignmentStrategy.RoundRobin)] - [InlineData(PartitionAssignmentStrategy.CooperativeSticky)] + [Test] + [Arguments(PartitionAssignmentStrategy.RoundRobin)] + [Arguments(PartitionAssignmentStrategy.CooperativeSticky)] public async Task When_a_partition_is_revoked_offsets_are_committed( PartitionAssignmentStrategy partitionAssignmentStrategy) { @@ -101,7 +97,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( } } - _output.WriteLine($"Consumer A first batch: {firstBatchIds.Count} messages acknowledged and batch-committed"); + Console.WriteLine($"Consumer A first batch: {firstBatchIds.Count} messages acknowledged and batch-committed"); //wait for the background batch commit to complete await Task.Delay(3000); @@ -118,11 +114,11 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( } } - _output.WriteLine($"Consumer A second batch: {secondBatchIds.Count} messages acknowledged but not batch-committed"); - _output.WriteLine($"Consumer A stored offsets: {consumerA.StoredOffsets()}"); + Console.WriteLine($"Consumer A second batch: {secondBatchIds.Count} messages acknowledged but not batch-committed"); + Console.WriteLine($"Consumer A stored offsets: {consumerA.StoredOffsets()}"); var allConsumedIds = firstBatchIds.Concat(secondBatchIds).ToHashSet(); - _output.WriteLine($"Total unique messages consumed by A: {allConsumedIds.Count}"); + Console.WriteLine($"Total unique messages consumed by A: {allConsumedIds.Count}"); //Phase 3: Consumer B joins the group — triggers rebalance and revoke on A //The revoke handler on A should commit the outstanding offsets from the second batch @@ -163,11 +159,11 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( if (allConsumedIds.Contains(msg.Id)) { replayedIds.Add(msg.Id); - _output.WriteLine($"Consumer C replayed message: {msg.Id}"); + Console.WriteLine($"Consumer C replayed message: {msg.Id}"); } else { - _output.WriteLine($"Consumer C read new message: {msg.Id}"); + Console.WriteLine($"Consumer C read new message: {msg.Id}"); } } } @@ -175,9 +171,9 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( //the second batch offsets should have been committed during revoke — no replays var secondBatchReplays = replayedIds.Where(id => secondBatchIds.Contains(id)).ToList(); - _output.WriteLine($"Second batch messages replayed: {secondBatchReplays.Count} of {secondBatchIds.Count}"); + Console.WriteLine($"Second batch messages replayed: {secondBatchReplays.Count} of {secondBatchIds.Count}"); - Assert.Empty(secondBatchReplays); + await Assert.That(secondBatchReplays).IsEmpty(); } private KafkaMessageConsumer CreateConsumer(int commitBatchSize, @@ -221,7 +217,7 @@ private Message ReadMessage(KafkaMessageConsumer consumer) } catch (ChannelFailureException cfx) { - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index ef04eea8d2..53120400c6 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2025 Rafael Andrade @@ -27,16 +27,13 @@ THE SOFTWARE. */ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; -[Trait("Category", "Kafka")] -[Collection("Kafka")] //Kafka doesn't like multiple consumers of a partition +[Category("Kafka")] +[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets : IAsyncDisposable, IDisposable { - private readonly ITestOutputHelper _output; private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); private readonly IAmAProducerRegistry _producerRegistry; @@ -44,10 +41,9 @@ public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets : IAsyncDis private readonly string _partitionKey = Guid.NewGuid().ToString(); private readonly FakeTimeProvider _fakeTimeProvider; - public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets(ITestOutputHelper output) + public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets() { var groupId = Uuid.New().ToString("N"); - _output = output; _producerRegistry = new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration @@ -93,8 +89,8 @@ public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets(ITestOutputHelper .Create(subscription); } - [Fact] - public void When_sweeper_timeout_reached_should_commit_uncommitted_offsets() + [Test] + public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets() { //Arrange //allow time for topic to propagate @@ -128,8 +124,8 @@ public void When_sweeper_timeout_reached_should_commit_uncommitted_offsets() } //Assert - messages consumed and acknowledged but not yet committed - Assert.Equal(5, consumedMessages.Count); - Assert.Equal(5, _consumer.StoredOffsets()); + await Assert.That(consumedMessages.Count).IsEqualTo(5); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(5); //Act - Advance time beyond the sweeper interval (30 seconds) _fakeTimeProvider.Advance(TimeSpan.FromSeconds(31)); @@ -138,7 +134,7 @@ public void When_sweeper_timeout_reached_should_commit_uncommitted_offsets() Task.Delay(2000).GetAwaiter().GetResult(); //Assert - Sweeper should have committed the offsets - Assert.Equal(0, _consumer.StoredOffsets()); + await Assert.That(_consumer.StoredOffsets()).IsEqualTo(0); _consumer.Close(); } @@ -167,7 +163,7 @@ private Message ReadMessage() catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing - _output.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); + Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); Task.Delay(1000).GetAwaiter().GetResult(); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_using_a_consumer_config_hook.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_using_a_consumer_config_hook.cs index 4520815ea6..469a77cd01 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_using_a_consumer_config_hook.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_using_a_consumer_config_hook.cs @@ -1,7 +1,6 @@ -using System; +using System; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; @@ -9,8 +8,8 @@ public class ConsumerConfigHookTests { private bool _callbackCalled = false; - [Fact] - public void When_using_a_consumer_config_hook() + [Test] + public async Task When_using_a_consumer_config_hook() { //arrange var subscription = new KafkaSubscription( @@ -38,7 +37,7 @@ public void When_using_a_consumer_config_hook() ); //assert - Assert.NotNull(consumer); - Assert.True(_callbackCalled, "The consumer config hook should have been called."); + await Assert.That(consumer).IsNotNull(); + await Assert.That(_callbackCalled).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_channel_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_channel_with_dlq_subscription_should_pass_routing_keys.cs index 9927511040..eb0f7e345e 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_channel_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_channel_with_dlq_subscription_should_pass_routing_keys.cs @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Reflection; using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; @@ -46,8 +45,8 @@ public KafkaMessageConsumerFactoryDLQTests() }); } - [Fact] - public void When_creating_channel_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_channel_with_dlq_subscription_should_pass_routing_keys() { //Arrange var topic = Guid.NewGuid().ToString(); @@ -70,7 +69,7 @@ public void When_creating_channel_with_dlq_subscription_should_pass_routing_keys _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); // Use reflection to verify the private fields were set correctly var consumerType = _consumer.GetType(); @@ -79,17 +78,17 @@ public void When_creating_channel_with_dlq_subscription_should_pass_routing_keys var invalidRoutingKeyField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqRoutingKeyField); - Assert.NotNull(invalidRoutingKeyField); + await Assert.That(dlqRoutingKeyField).IsNotNull(); + await Assert.That(invalidRoutingKeyField).IsNotNull(); var actualDlqRoutingKey = dlqRoutingKeyField.GetValue(_consumer) as RoutingKey; var actualInvalidRoutingKey = invalidRoutingKeyField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlqRoutingKey); - Assert.Equal(dlqTopic, actualDlqRoutingKey.Value); + await Assert.That(actualDlqRoutingKey).IsNotNull(); + await Assert.That(actualDlqRoutingKey.Value).IsEqualTo(dlqTopic); - Assert.NotNull(actualInvalidRoutingKey); - Assert.Equal(invalidTopic, actualInvalidRoutingKey.Value); + await Assert.That(actualInvalidRoutingKey).IsNotNull(); + await Assert.That(actualInvalidRoutingKey.Value).IsEqualTo(invalidTopic); } public void Dispose() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property.cs index de530ebe77..cc4d331bde 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; public class KafkaSubscriptionDeadLetterSupportTests { - [Fact] - public void When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property() + [Test] + public async Task When_creating_kafka_subscription_with_dead_letter_routing_key_should_expose_property() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders.dlq"); @@ -46,8 +45,8 @@ public void When_creating_kafka_subscription_with_dead_letter_routing_key_should ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property.cs index 5f6f7db589..3132cb2d1b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.Kafka.Tests.TestDoubles; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; public class KafkaSubscriptionInvalidMessageSupportTests { - [Fact] - public void When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property() + [Test] + public async Task When_creating_kafka_subscription_with_invalid_message_routing_key_should_expose_property() { //Arrange var invalidMessageRoutingKey = new RoutingKey("orders.invalid"); @@ -46,8 +45,8 @@ public void When_creating_kafka_subscription_with_invalid_message_routing_key_sh ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_forwards_scheduler_to_consumers.cs index 3e8da1b7d5..8c6ff15875 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_forwards_scheduler_to_consumers.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; @@ -33,8 +32,8 @@ public class When_kafka_channel_factory_forwards_scheduler_to_consumers BootStrapServers = ["localhost:9092"] }; - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange — channel factory wrapping a consumer factory, no scheduler initially var consumerFactory = new KafkaMessageConsumerFactory(_configuration); @@ -45,11 +44,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -57,7 +56,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs index 8eb853f168..1c478deb8f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -1,5 +1,4 @@ using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; @@ -21,19 +20,19 @@ public class When_kafka_channel_factory_has_scheduler_should_pass_to_consumers makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Arrange var consumerFactory = new KafkaMessageConsumerFactory(_configuration); var channelFactory = new ChannelFactory(consumerFactory); // Assert - Assert.IsAssignableFrom(channelFactory); + await Assert.That(channelFactory).IsAssignableTo(); } - [Fact] - public void Should_create_sync_channel_when_scheduler_set() + [Test] + public async Task Should_create_sync_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -45,12 +44,12 @@ public void Should_create_sync_channel_when_scheduler_set() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_async_channel_when_scheduler_set() + [Test] + public async Task Should_create_async_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -62,12 +61,12 @@ public void Should_create_async_channel_when_scheduler_set() var channel = channelFactory.CreateAsyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_channel_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_channel_without_scheduler_for_backward_compat() { // Arrange — no scheduler set var consumerFactory = new KafkaMessageConsumerFactory(_configuration); @@ -77,8 +76,8 @@ public void Should_create_channel_without_scheduler_for_backward_compat() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_creates_consumer_should_pass_scheduler.cs index 82fed7d829..46e1ee49bb 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; @@ -43,8 +42,8 @@ public class When_kafka_consumer_factory_creates_consumer_should_pass_scheduler makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_create_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -54,12 +53,12 @@ public void Should_create_consumer_when_scheduler_provided() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_async_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_async_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -69,12 +68,12 @@ public void Should_create_async_consumer_when_scheduler_provided() var consumer = factory.CreateAsync(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange — factory constructed without a scheduler (backward compat) var factory = new KafkaMessageConsumerFactory(_configuration); @@ -83,8 +82,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully without scheduler - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_scheduler_set_after_construction.cs index 3b8590c5ba..b9825c0f92 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_consumer_factory_scheduler_set_after_construction.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; @@ -33,8 +32,8 @@ public class When_kafka_consumer_factory_scheduler_set_after_construction BootStrapServers = ["localhost:9092"] }; - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new KafkaMessageConsumerFactory(_configuration); @@ -44,22 +43,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new KafkaMessageConsumerFactory(_configuration, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -70,8 +69,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs index dd6daa5f79..0be28cbeb0 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs @@ -1,12 +1,11 @@ using System; using Confluent.Kafka; using Paramore.Brighter.MessagingGateway.Kafka; -using Xunit; namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; -[Trait("Category", "Kafka")] -[Collection("Kafka")] +[Category("Kafka")] +[NotInParallel("Kafka")] public class When_nacking_a_message_without_offset_should_not_throw : IDisposable { private readonly KafkaMessageConsumer _consumer; @@ -27,8 +26,8 @@ public When_nacking_a_message_without_offset_should_not_throw() ); } - [Fact] - public void When_message_has_no_partition_offset_in_bag_should_not_throw() + [Test] + public async Task When_message_has_no_partition_offset_in_bag_should_not_throw() { //Arrange - a message with no PARTITION_OFFSET in the header bag var message = new Message( @@ -37,12 +36,11 @@ public void When_message_has_no_partition_offset_in_bag_should_not_throw() ); //Act & Assert - should return without throwing - var exception = Record.Exception(() => _consumer.Nack(message)); - Assert.Null(exception); + await Assert.That(() => _consumer.Nack(message)).ThrowsNothing(); } - [Fact] - public void When_message_has_wrong_type_for_partition_offset_should_not_throw() + [Test] + public async Task When_message_has_wrong_type_for_partition_offset_should_not_throw() { //Arrange - a message with PARTITION_OFFSET set to the wrong type var message = new Message( @@ -52,8 +50,7 @@ public void When_message_has_wrong_type_for_partition_offset_should_not_throw() message.Header.Bag[HeaderNames.PARTITION_OFFSET] = "not-a-TopicPartitionOffset"; //Act & Assert - should return without throwing - var exception = Record.Exception(() => _consumer.Nack(message)); - Assert.Null(exception); + await Assert.That(() => _consumer.Nack(message)).ThrowsNothing(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj b/tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj index 95e7cf07fb..da7953e25d 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj +++ b/tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj @@ -1,32 +1,16 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs index 08c80a4668..d61fa60b51 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs @@ -1,4 +1,4 @@ -using System.Net; +using System.Net; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; @@ -8,7 +8,6 @@ using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; using Paramore.Test.Helpers.Base; using Paramore.Test.Helpers.Loggers; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base { @@ -41,8 +40,8 @@ public abstract class MqttTestClassBase : TestClassBase /// This constructor sets up the necessary MQTT test server and configurations for messaging gateway tests. /// It also configures logging to integrate with the test output helper. /// - protected MqttTestClassBase(string clientID, string topicPrefix, ITestOutputHelper testOutputHelper) - : base(testOutputHelper) + protected MqttTestClassBase(string clientID, string topicPrefix) + : base() { ApplicationLogging.LoggerFactory = LoggerFactory.Create(configure => { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs index e580d2a088..2d8de0f2be 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; @@ -7,7 +7,6 @@ using MQTTnet.Server; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Loggers; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; -using Shouldly; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server { @@ -68,17 +67,14 @@ protected MqttTestServer(MqttFactory mqttFactory, int serverPort, ILogger logger return null; } - testMqttServer.ShouldNotBeNull(); - testMqttServer.ShouldBeOfType(); - - testMqttServer.MqttServer.IsStarted.ShouldBeFalse(); + if (testMqttServer?.MqttServer is null) + return null; try { if (startService) { testMqttServer.MqttServer.StartAsync().GetAwaiter().GetResult(); - testMqttServer.MqttServer.IsStarted.ShouldBeTrue(); } } catch (Exception ex) diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs index 2099dd3645..a95c1198e2 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; @@ -36,15 +34,15 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; /// via a lazily-created producer. Previously RequeueAsync returned false (not implemented); now it delegates /// to the producer so that requeued messages are actually redelivered. /// -[Trait("Category", "MQTT")] -[Collection("MQTT")] -public class MqttConsumerRequeueAsyncTests(ITestOutputHelper testOutputHelper) - : MqttTestClassBase(ClientId, TopicPrefix, testOutputHelper) +[Category("MQTT")] +[NotInParallel("MQTT")] +public class MqttConsumerRequeueAsyncTests() + : MqttTestClassBase(ClientId, TopicPrefix) { private const string ClientId = "BrighterIntegrationTests-RequeueAsync"; private const string TopicPrefix = "BrighterIntegrationTests/RequeueAsyncTests"; - [Fact] + [Test] public async Task When_requeuing_async_should_publish_message_via_producer() { // Arrange - send a message and receive it @@ -60,13 +58,13 @@ public async Task When_requeuing_async_should_publish_message_via_producer() var result = await MessageConsumerAsync.RequeueAsync(received); // Assert - requeue should return true (was returning false) - Assert.True(result, "RequeueAsync should succeed by publishing via producer"); + await Assert.That(result).IsTrue(); // Note: HandledCount is incremented by the message pump, not by the consumer requeue // Assert - message should be available again on the topic (published via producer) var requeued = await ReceiveMessageAsync(); - Assert.Equal(message.Body.Value, requeued.Body.Value); + await Assert.That(requeued.Body.Value).IsEqualTo(message.Body.Value); } private async Task ReceiveMessageAsync() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs index 94fc8594aa..0af4aa1ff3 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs @@ -1,15 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor { - [Trait("Category", "MQTT")] - [Collection("MQTT")] + [Category("MQTT")] + [NotInParallel("MQTT")] public class MqttMessageProducerSendMessageTestsAsync : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Produce"; @@ -24,12 +22,12 @@ public class MqttMessageProducerSendMessageTestsAsync : MqttTestClassBase to initialize the necessary /// MQTT configurations and logging mechanisms. /// - public MqttMessageProducerSendMessageTestsAsync(ITestOutputHelper testOutputHelper) - : base(ClientId, TopicPrefix, testOutputHelper) + public MqttMessageProducerSendMessageTestsAsync() + : base(ClientId, TopicPrefix) { } - [Fact] + [Test] public async Task When_posting_multiples_message_via_the_messaging_gateway_async() { const int messageCount = 1000; @@ -65,9 +63,9 @@ public async Task When_posting_multiples_message_via_the_messaging_gateway_async retries++; } - Assert.NotEmpty(receivedMessages); - Assert.Equal(messageCount, receivedMessages.Count); - Assert.Equal(sentMessages, receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); + await Assert.That(receivedMessages.Count).IsEqualTo(messageCount); + await Assert.That(receivedMessages).IsEqualTo(sentMessages); } } } diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs index 739d78c659..cd8e8c0df0 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs @@ -1,24 +1,22 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor { - [Trait("Category", "MQTT")] - [Collection("MQTT")] + [Category("MQTT")] + [NotInParallel("MQTT")] public class WhenQueueIsPurgedAsync : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Purge"; private const string TopicPrefix = "BrighterIntegrationTests/PurgeTests"; - public WhenQueueIsPurgedAsync(ITestOutputHelper testOutputHelper) - : base(ClientId, TopicPrefix, testOutputHelper) + public WhenQueueIsPurgedAsync() + : base(ClientId, TopicPrefix) { } - [Fact] + [Test] public async Task WhenPurgingTheQueueOnTheMessagingGatewayAsync() { for (int i = 0; i < 5; i++) @@ -37,9 +35,9 @@ public async Task WhenPurgingTheQueueOnTheMessagingGatewayAsync() Message[] receivedMessages = await MessageConsumerAsync.ReceiveAsync(TimeSpan.FromMilliseconds(100)); - Assert.NotEmpty(receivedMessages); - Assert.Single(receivedMessages); - Assert.Contains(_noopMessage, receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); + await Assert.That(receivedMessages).HasSingleItem(); + await Assert.That(receivedMessages).Contains(_noopMessage); } } } diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 3ea1e18e9f..0156ff1bbd 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -29,13 +29,11 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqAsyncSource"; @@ -46,7 +44,7 @@ public class MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests : IDisposable private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; - public MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests(ITestOutputHelper outputHelper) + public MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); @@ -88,7 +86,7 @@ public MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests(ITestOutputHelper out _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } - [Fact] + [Test] public async Task When_rejecting_message_async_with_delivery_error_should_send_to_dlq() { //Arrange @@ -103,7 +101,7 @@ public async Task When_rejecting_message_async_with_delivery_error_should_send_t await Task.Delay(500); var received = await _sourceConsumer.ReceiveAsync(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); var sourceMessage = received.First(m => m.Header.MessageType != MessageType.MT_NONE); //Act — reject async with DeliveryError @@ -113,22 +111,22 @@ public async Task When_rejecting_message_async_with_delivery_error_should_send_t ); //Assert — reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); //Assert — DLQ consumer receives the rejected message await Task.Delay(500); var dlqMessages = await _dlqConsumer.ReceiveAsync(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(dlqMessages); + await Assert.That(dlqMessages).IsNotEmpty(); var dlqMessage = dlqMessages.First(m => m.Header.MessageType != MessageType.MT_NONE); //Assert — message body preserved - Assert.Equal(message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(message.Body.Value); //Assert — rejection metadata present - Assert.Equal(routingKey.Value, dlqMessage.Header.Bag["originalTopic"]!.ToString()); - Assert.Equal("DeliveryError", dlqMessage.Header.Bag["rejectionReason"]!.ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.Equal("MT_COMMAND", dlqMessage.Header.Bag["originalMessageType"]!.ToString()); + await Assert.That(dlqMessage.Header.Bag["originalTopic"]!.ToString()).IsEqualTo(routingKey.Value); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"]!.ToString()).IsEqualTo("DeliveryError"); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"]!.ToString()).IsEqualTo("MT_COMMAND"); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 64bb684a9f..967c4b9610 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -28,8 +28,6 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; @@ -37,8 +35,8 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; /// When the MQTT consumer creates a lazy requeue producer, it should be configured with the scheduler /// passed to the consumer. When the consumer is disposed, the producer should also be disposed. /// -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttConsumerProducerConfigAndDisposeTests : IDisposable { private readonly MqttTestServer? _mqttTestServer; @@ -46,7 +44,7 @@ public class MqttConsumerProducerConfigAndDisposeTests : IDisposable private readonly MqttMessageConsumer _consumer; private readonly SpySchedulerSync _scheduler; - public MqttConsumerProducerConfigAndDisposeTests(ITestOutputHelper testOutputHelper) + public MqttConsumerProducerConfigAndDisposeTests() { int serverPort = MqttTestServer.GetRandomServerPort(); @@ -79,8 +77,8 @@ public MqttConsumerProducerConfigAndDisposeTests(ITestOutputHelper testOutputHel _consumer = new MqttMessageConsumer(consumerConfig, _scheduler); } - [Fact] - public void When_requeuing_with_delay_should_use_scheduler() + [Test] + public async Task When_requeuing_with_delay_should_use_scheduler() { // Arrange - send a message and receive it var message = new Message( @@ -94,13 +92,12 @@ public void When_requeuing_with_delay_should_use_scheduler() _consumer.Requeue(received, TimeSpan.FromSeconds(5)); // Assert - scheduler should have been called (proves producer has scheduler configured) - Assert.True(_scheduler.ScheduleCalled, - "Scheduler.Schedule should have been called via the lazily created producer"); - Assert.Equal(message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(message.Body.Value); } - [Fact] - public void When_consumer_disposes_after_requeue_should_dispose_producer() + [Test] + public async Task When_consumer_disposes_after_requeue_should_dispose_producer() { // Arrange - trigger lazy producer creation via requeue var message = new Message( @@ -112,16 +109,14 @@ public void When_consumer_disposes_after_requeue_should_dispose_producer() _consumer.Requeue(received, TimeSpan.FromSeconds(5)); // Act + Assert - disposing should not throw (producer cleanup succeeds) - var exception = Record.Exception(() => _consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); } - [Fact] - public void When_consumer_disposes_without_requeue_should_not_throw() + [Test] + public async Task When_consumer_disposes_without_requeue_should_not_throw() { // Act + Assert - disposing without ever requeuing should succeed (no producer created) - var exception = Record.Exception(() => _consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); } private Message ReceiveMessage() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs index e905111b9a..992a86d5b6 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,8 +25,6 @@ THE SOFTWARE. */ using System; using System.Threading; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; @@ -35,23 +33,23 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; /// via a lazily-created producer. Previously Requeue returned false (not implemented); now it /// delegates to the producer so that requeued messages are actually redelivered. /// -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttConsumerRequeueTests : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Requeue"; private const string TopicPrefix = "BrighterIntegrationTests/RequeueTests"; - public MqttConsumerRequeueTests(ITestOutputHelper testOutputHelper) - : base(ClientId, TopicPrefix, testOutputHelper) + public MqttConsumerRequeueTests() + : base(ClientId, TopicPrefix) { } private IAmAMessageProducerSync MessageProducerSync => (MessageProducerAsync as IAmAMessageProducerSync)!; private IAmAMessageConsumerSync MessageConsumerSync => (MessageConsumerAsync as IAmAMessageConsumerSync)!; - [Fact] - public void When_requeuing_should_publish_message_via_producer() + [Test] + public async Task When_requeuing_should_publish_message_via_producer() { // Arrange - send a message and receive it var message = new Message( @@ -66,13 +64,13 @@ public void When_requeuing_should_publish_message_via_producer() var result = MessageConsumerSync.Requeue(received); // Assert - requeue should return true (was returning false) - Assert.True(result, "Requeue should succeed by publishing via producer"); + await Assert.That(result).IsTrue(); // Note: HandledCount is incremented by the message pump, not by the consumer requeue // Assert - message should be available again on the topic (published via producer) var requeued = ReceiveMessage(); - Assert.Equal(message.Body.Value, requeued.Body.Value); + await Assert.That(requeued.Body.Value).IsEqualTo(message.Body.Value); } private Message ReceiveMessage() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs index a632447c38..b3514dfc18 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,20 +27,18 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor { - [Trait("Category", "MQTT")] - [Collection("MQTT")] + [Category("MQTT")] + [NotInParallel("MQTT")] public class MqttMessageProducerSendMessageTests : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Produce"; private const string TopicPrefix = "BrighterIntegrationTests/ProducerTests"; - public MqttMessageProducerSendMessageTests(ITestOutputHelper testOutputHelper) - : base(ClientId, TopicPrefix, testOutputHelper) + public MqttMessageProducerSendMessageTests() + : base(ClientId, TopicPrefix) { } @@ -72,8 +70,8 @@ public MqttMessageProducerSendMessageTests(ITestOutputHelper testOutputHelper) /// protected IAmAMessageConsumerSync MessageConsumerSync => (MessageConsumerAsync as IAmAMessageConsumerSync)!; - [Fact] - public void When_posting_multiples_message_via_the_messaging_gateway_sync() + [Test] + public async Task When_posting_multiples_message_via_the_messaging_gateway_sync() { const int messageCount = 1000; List sentMessages = []; @@ -109,9 +107,9 @@ public void When_posting_multiples_message_via_the_messaging_gateway_sync() retries++; } - Assert.NotEmpty(receivedMessages); - Assert.Equal(messageCount, receivedMessages.Count); - Assert.Equal(sentMessages, receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); + await Assert.That(receivedMessages.Count).IsEqualTo(messageCount); + await Assert.That(receivedMessages).IsEqualTo(sentMessages); } } } diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs index 12dc35435e..657f6840b5 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,20 +26,18 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Base; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor { - [Trait("Category", "MQTT")] - [Collection("MQTT")] + [Category("MQTT")] + [NotInParallel("MQTT")] public class When_queue_is_Purged : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Purge"; private const string TopicPrefix = "BrighterIntegrationTests/PurgeTests"; - public When_queue_is_Purged(ITestOutputHelper testOutputHelper) - : base(ClientId, TopicPrefix, testOutputHelper) + public When_queue_is_Purged() + : base(ClientId, TopicPrefix) { } @@ -71,8 +69,8 @@ public When_queue_is_Purged(ITestOutputHelper testOutputHelper) /// protected IAmAMessageConsumerSync MessageConsumerSync => (MessageConsumerAsync as IAmAMessageConsumerSync)!; - [Fact] - public void When_purging_the_queue_on_the_messaging_gateway() + [Test] + public async Task When_purging_the_queue_on_the_messaging_gateway() { for (int i = 0; i < 5; i++) { @@ -90,10 +88,10 @@ public void When_purging_the_queue_on_the_messaging_gateway() Message[] receivedMessages = MessageConsumerSync.Receive(TimeSpan.FromMilliseconds(100)); - Assert.NotEmpty(receivedMessages); - Assert.Single(receivedMessages); - Assert.Contains(_noopMessage, receivedMessages); - Assert.IsType(receivedMessages[0]); + await Assert.That(receivedMessages).IsNotEmpty(); + await Assert.That(receivedMessages).HasSingleItem(); + await Assert.That(receivedMessages).Contains(_noopMessage); + await Assert.That(receivedMessages[0]).IsTypeOf(); } } } diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 0306c73588..26b39aca4d 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -29,13 +29,11 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerRejectDeliveryErrorDlqTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqSource"; @@ -46,7 +44,7 @@ public class MqttMessageConsumerRejectDeliveryErrorDlqTests : IDisposable private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; - public MqttMessageConsumerRejectDeliveryErrorDlqTests(ITestOutputHelper outputHelper) + public MqttMessageConsumerRejectDeliveryErrorDlqTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); @@ -88,7 +86,7 @@ public MqttMessageConsumerRejectDeliveryErrorDlqTests(ITestOutputHelper outputHe _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange @@ -103,7 +101,7 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( await Task.Delay(500); var received = ((IAmAMessageConsumerSync)_sourceConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); var sourceMessage = received.First(m => m.Header.MessageType != MessageType.MT_NONE); //Act — reject with DeliveryError @@ -113,28 +111,28 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( ); //Assert — reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); //Assert — DLQ consumer receives the rejected message await Task.Delay(500); var dlqMessages = ((IAmAMessageConsumerSync)_dlqConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(dlqMessages); + await Assert.That(dlqMessages).IsNotEmpty(); var dlqMessage = dlqMessages.First(m => m.Header.MessageType != MessageType.MT_NONE); //Assert — message body preserved - Assert.Equal(message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(message.Body.Value); //Assert — rejection metadata present - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(routingKey.Value, dlqMessage.Header.Bag["originalTopic"]!.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"]!.ToString()).IsEqualTo(routingKey.Value); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal("DeliveryError", dlqMessage.Header.Bag["rejectionReason"]!.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"]!.ToString()).IsEqualTo("DeliveryError"); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal("MT_COMMAND", dlqMessage.Header.Bag["originalMessageType"]!.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"]!.ToString()).IsEqualTo("MT_COMMAND"); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs index b7608b33bd..15bf7abd12 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs @@ -29,13 +29,11 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerRejectNoChannelsTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/NoChannels"; @@ -44,7 +42,7 @@ public class MqttMessageConsumerRejectNoChannelsTests : IDisposable private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; - public MqttMessageConsumerRejectNoChannelsTests(ITestOutputHelper outputHelper) + public MqttMessageConsumerRejectNoChannelsTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); @@ -73,7 +71,7 @@ public MqttMessageConsumerRejectNoChannelsTests(ITestOutputHelper outputHelper) _sourceConsumer = new MqttMessageConsumer(consumerConfig); } - [Fact] + [Test] public async Task When_rejecting_message_with_no_channels_configured_should_return_true() { //Arrange @@ -88,7 +86,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_retu await Task.Delay(500); var received = ((IAmAMessageConsumerSync)_sourceConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); var sourceMessage = received.First(m => m.Header.MessageType != MessageType.MT_NONE); //Act — reject with DeliveryError (no channels configured) @@ -98,7 +96,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_retu ); //Assert — reject returns true (not false as before the DLQ work) - Assert.True(result); + await Assert.That(result).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 99c01d2aa8..cab1488a42 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -29,13 +29,11 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerRejectUnacceptableFallbackToDlqTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/FallbackSource"; @@ -46,7 +44,7 @@ public class MqttMessageConsumerRejectUnacceptableFallbackToDlqTests : IDisposab private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; - public MqttMessageConsumerRejectUnacceptableFallbackToDlqTests(ITestOutputHelper outputHelper) + public MqttMessageConsumerRejectUnacceptableFallbackToDlqTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); @@ -88,7 +86,7 @@ public MqttMessageConsumerRejectUnacceptableFallbackToDlqTests(ITestOutputHelper _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange @@ -103,7 +101,7 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe await Task.Delay(500); var received = ((IAmAMessageConsumerSync)_sourceConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); var sourceMessage = received.First(m => m.Header.MessageType != MessageType.MT_NONE); //Act — reject with Unacceptable (no invalid channel configured, should fallback to DLQ) @@ -113,16 +111,16 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe ); //Assert — reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); //Assert — DLQ consumer receives the message (fallback) await Task.Delay(500); var dlqMessages = ((IAmAMessageConsumerSync)_dlqConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(dlqMessages); + await Assert.That(dlqMessages).IsNotEmpty(); var dlqMessage = dlqMessages.First(m => m.Header.MessageType != MessageType.MT_NONE); - Assert.Equal(message.Body.Value, dlqMessage.Body.Value); - Assert.Equal("Unacceptable", dlqMessage.Header.Bag["rejectionReason"]!.ToString()); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"]!.ToString()).IsEqualTo("Unacceptable"); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index c9805c6503..030c94af82 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -29,13 +29,11 @@ THE SOFTWARE. */ using MQTTnet; using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; -using Xunit; -using Xunit.Abstractions; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerRejectUnacceptableInvalidChannelTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/InvalidSource"; @@ -48,7 +46,7 @@ public class MqttMessageConsumerRejectUnacceptableInvalidChannelTests : IDisposa private readonly MqttMessageConsumer _invalidConsumer; private readonly MqttMessageConsumer _dlqConsumer; - public MqttMessageConsumerRejectUnacceptableInvalidChannelTests(ITestOutputHelper outputHelper) + public MqttMessageConsumerRejectUnacceptableInvalidChannelTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); @@ -101,7 +99,7 @@ public MqttMessageConsumerRejectUnacceptableInvalidChannelTests(ITestOutputHelpe _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } - [Fact] + [Test] public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange @@ -116,7 +114,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to await Task.Delay(500); var received = ((IAmAMessageConsumerSync)_sourceConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); var sourceMessage = received.First(m => m.Header.MessageType != MessageType.MT_NONE); //Act — reject with Unacceptable @@ -126,20 +124,20 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to ); //Assert — reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); //Assert — invalid message consumer receives the rejected message await Task.Delay(500); var invalidMessages = ((IAmAMessageConsumerSync)_invalidConsumer).Receive(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(invalidMessages); + await Assert.That(invalidMessages).IsNotEmpty(); var invalidMessage = invalidMessages.First(m => m.Header.MessageType != MessageType.MT_NONE); - Assert.Equal(message.Body.Value, invalidMessage.Body.Value); - Assert.Equal("Unacceptable", invalidMessage.Header.Bag["rejectionReason"]!.ToString()); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"]!.ToString()).IsEqualTo("Unacceptable"); //Assert — DLQ consumer does NOT receive the message var dlqMessages = ((IAmAMessageConsumerSync)_dlqConsumer).Receive(TimeSpan.FromMilliseconds(500)); - Assert.All(dlqMessages, m => Assert.Equal(MessageType.MT_NONE, m.Header.MessageType)); + await Assert.That(dlqMessages).All((Message m) => m.Header.MessageType == MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs index d263baa018..ad20b4cc83 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs @@ -1,6 +1,5 @@ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MQTT; -using Xunit; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway; @@ -31,48 +30,48 @@ public When_mqtt_channel_factory_creates_channel_should_use_consumer_factory() _channelFactory = new ChannelFactory(_consumerFactory); } - [Fact] - public void Should_create_sync_channel() + [Test] + public async Task Should_create_sync_channel() { // Act var channel = _channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_async_channel() + [Test] + public async Task Should_create_async_channel() { // Act var channel = _channelFactory.CreateAsyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] + [Test] public async Task Should_create_async_channel_async() { // Act var channel = await _channelFactory.CreateAsyncChannelAsync(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Assert - Assert.IsAssignableFrom(_channelFactory); + await Assert.That(_channelFactory).IsAssignableTo(); } - [Fact] - public void Should_accept_scheduler_property() + [Test] + public async Task Should_accept_scheduler_property() { // Arrange var scheduler = new StubMessageScheduler(); @@ -81,7 +80,7 @@ public void Should_accept_scheduler_property() ((IAmAChannelFactoryWithScheduler)_channelFactory).Scheduler = scheduler; // Assert - Assert.Equal(scheduler, ((IAmAChannelFactoryWithScheduler)_channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)_channelFactory).Scheduler).IsEqualTo(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_forwards_scheduler_to_consumers.cs index e528877fcd..9b9d19bb92 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_forwards_scheduler_to_consumers.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.MQTT; -using Xunit; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway; @@ -35,8 +34,8 @@ public class When_mqtt_channel_factory_forwards_scheduler_to_consumers ClientID = "test-client" }; - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange var consumerFactory = new MqttMessageConsumerFactory(_configuration); @@ -47,11 +46,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -59,7 +58,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_creates_consumer_should_pass_scheduler.cs index 67cc1b86c3..3bd701743e 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -1,5 +1,4 @@ using Paramore.Brighter.MessagingGateway.MQTT; -using Xunit; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway; @@ -13,8 +12,8 @@ public class When_mqtt_consumer_factory_creates_consumer_should_pass_scheduler ClientID = "test-client" }; - [Fact] - public void Should_create_sync_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_sync_consumer_when_scheduler_provided() { // Arrange var scheduler = new StubMessageScheduler(); @@ -30,12 +29,12 @@ public void Should_create_sync_consumer_when_scheduler_provided() )); // Assert - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_async_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_async_consumer_when_scheduler_provided() { // Arrange var scheduler = new StubMessageScheduler(); @@ -51,12 +50,12 @@ public void Should_create_async_consumer_when_scheduler_provided() )); // Assert - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange var factory = new MqttMessageConsumerFactory(_configuration); @@ -71,8 +70,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() )); // Assert - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_scheduler_set_after_construction.cs index b0daacaad0..917df1c8ba 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_consumer_factory_scheduler_set_after_construction.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.MQTT; -using Xunit; namespace Paramore.Brighter.MQTT.Tests.MessagingGateway; @@ -35,8 +34,8 @@ public class When_mqtt_consumer_factory_scheduler_set_after_construction ClientID = "test-client" }; - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new MqttMessageConsumerFactory(_configuration); @@ -46,22 +45,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new MqttMessageConsumerFactory(_configuration, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -72,8 +71,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj b/tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj index 95a01c2674..1add7316f8 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj +++ b/tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj @@ -1,34 +1,16 @@ - $(BrighterTestTargetFrameworks) false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - + Exe + - - + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs index d41e4f0332..68062d58a3 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -29,12 +29,11 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.MessagingGateway.Helpers.Server; using Paramore.Brighter.MQTT.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MQTT.Tests; -[Trait("Category", "MQTT")] -[Collection("MQTT")] +[Category("MQTT")] +[NotInParallel("MQTT")] public class MqttMessageConsumerFactoryDlqTests : IDisposable { private readonly MqttTestServer? _mqttTestServer; @@ -60,8 +59,8 @@ public MqttMessageConsumerFactoryDlqTests() _factory = new MqttMessageConsumerFactory(configuration); } - [Fact] - public void When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -79,7 +78,7 @@ public void When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routin _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -87,17 +86,17 @@ public void When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routin var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties.cs index 7f61b542b1..000b8b5272 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.MQTT; using Paramore.Brighter.MQTT.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MQTT.Tests; public class MqttSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -47,17 +46,17 @@ public void When_creating_mqtt_subscription_with_dlq_routing_keys_should_expose_ ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_mqtt_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_mqtt_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new MqttSubscription( @@ -67,12 +66,12 @@ public void When_creating_mqtt_subscription_without_dlq_routing_keys_should_defa ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent.cs index 9ce00b5208..ab6aed8776 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; @@ -6,11 +6,10 @@ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class PostMessageTest : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -37,8 +36,8 @@ public PostMessageTest() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).Create(sub); } - [Fact] - public void When_a_message_is_sent_keep_order() + [Test] + public async Task When_a_message_is_sent_keep_order() { IAmAMessageConsumerSync consumer = _consumer; @@ -86,8 +85,8 @@ public void When_a_message_is_sent_keep_order() var firstMessage = ConsumeMessages(consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(messageId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(messageId); } private IEnumerable ConsumeMessages(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs index d34eb2e660..5c993f1dba 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mime; @@ -6,11 +6,10 @@ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class PostMessageTestAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -37,7 +36,7 @@ public PostMessageTestAsync() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } - [Fact] + [Test] public async Task When_a_message_is_sent_keep_order() { IAmAMessageConsumerAsync consumer = _consumer; @@ -88,8 +87,8 @@ public async Task When_a_message_is_sent_keep_order() var firstMessage = await ConsumeMessagesAsync(consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId); } private async Task> ConsumeMessagesAsync(IAmAMessageConsumerAsync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs index a67a58ae78..83cf70e6c7 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class OrderTest : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -35,8 +34,8 @@ public OrderTest() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).Create(sub); } - [Fact] - public void When_a_message_is_sent_keep_order() + [Test] + public async Task When_a_message_is_sent_keep_order() { IAmAMessageConsumerSync consumer = _consumer; var msgId = SendMessage(); @@ -48,23 +47,23 @@ public void When_a_message_is_sent_keep_order() var firstMessage = ConsumeMessages(consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId); var secondMessage = ConsumeMessages(consumer); message = secondMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId2); var thirdMessages = ConsumeMessages(consumer); message = thirdMessages.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId3); var fourthMessage = ConsumeMessages(consumer); message = fourthMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId4); } private string SendMessage() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs index c721c383e9..f385783d25 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class OrderTestAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -35,7 +34,7 @@ public OrderTestAsync() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } - [Fact] + [Test] public async Task When_a_message_is_sent_keep_order() { IAmAMessageConsumerAsync consumer = _consumer; @@ -48,23 +47,23 @@ public async Task When_a_message_is_sent_keep_order() var firstMessage = await ConsumeMessagesAsync(consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId); var secondMessage = await ConsumeMessagesAsync(consumer); message = secondMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId2); var thirdMessages = await ConsumeMessagesAsync(consumer); message = thirdMessages.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId3); var fourthMessage = await ConsumeMessagesAsync(consumer); message = fourthMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId4); } private async Task SendMessageAsync() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 3929052e85..4b6f839c0a 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -27,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -43,8 +42,8 @@ public MsSqlMessageConsumerFactoryDlqTests() _factory = new MsSqlMessageConsumerFactory(configuration); } - [Fact] - public void When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_mssql_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -62,7 +61,7 @@ public void When_creating_mssql_consumer_with_dlq_subscription_should_pass_routi _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -70,17 +69,17 @@ public void When_creating_mssql_consumer_with_dlq_subscription_should_pass_routi var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties.cs index d095277dbd..3691eaee79 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; public class MsSqlSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_mssql_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -47,17 +46,17 @@ public void When_creating_mssql_subscription_with_dlq_routing_keys_should_expose ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_mssql_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_mssql_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new MsSqlSubscription( @@ -67,12 +66,12 @@ public void When_creating_mssql_subscription_without_dlq_routing_keys_should_def ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_forwards_scheduler_to_consumers.cs index 8479186667..9cffb77803 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_forwards_scheduler_to_consumers.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -29,8 +28,8 @@ public class When_mssql_channel_factory_forwards_scheduler_to_consumers { private readonly RelationalDatabaseConfiguration _configuration = new("Server=localhost;Database=test;Trusted_Connection=True;"); - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange var consumerFactory = new MsSqlMessageConsumerFactory(_configuration); @@ -41,11 +40,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -53,7 +52,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs index 3b20f296ba..0af4f7e28b 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -1,6 +1,5 @@ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -20,19 +19,19 @@ public class When_mssql_channel_factory_has_scheduler_should_pass_to_consumers makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Arrange var consumerFactory = new MsSqlMessageConsumerFactory(_configuration); var channelFactory = new ChannelFactory(consumerFactory); // Assert - Assert.IsAssignableFrom(channelFactory); + await Assert.That(channelFactory).IsAssignableTo(); } - [Fact] - public void Should_create_sync_channel_when_scheduler_set() + [Test] + public async Task Should_create_sync_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -44,12 +43,12 @@ public void Should_create_sync_channel_when_scheduler_set() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_async_channel_when_scheduler_set() + [Test] + public async Task Should_create_async_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -61,12 +60,12 @@ public void Should_create_async_channel_when_scheduler_set() var channel = channelFactory.CreateAsyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_channel_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_channel_without_scheduler_for_backward_compat() { // Arrange — no scheduler set var consumerFactory = new MsSqlMessageConsumerFactory(_configuration); @@ -76,8 +75,8 @@ public void Should_create_channel_without_scheduler_for_backward_compat() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs index dbbe67064f..a762a9bc24 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -33,7 +32,7 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; /// lazily-created requeue producer, and that disposal works in all cases. /// Uses a non-zero delay to exercise the full scheduler path (lesson from Kafka/MQTT). /// -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly { private readonly MsSqlTestHelper _testHelper; @@ -46,8 +45,8 @@ public When_mssql_consumer_creates_producer_should_configure_and_dispose_correct _topicName = $"Producer-Config-Tests-{Guid.NewGuid()}"; } - [Fact] - public void When_requeuing_with_delay_should_wire_scheduler_to_producer() + [Test] + public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() { // Arrange var scheduler = new SpySchedulerSync(); @@ -65,16 +64,16 @@ public void When_requeuing_with_delay_should_wire_scheduler_to_producer() consumer.Requeue(message, TimeSpan.FromSeconds(5)); // Assert - scheduler was called, proving it was wired through to the producer - Assert.True(scheduler.ScheduleCalled); - Assert.Equal(message.Body.Value, scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), scheduler.ScheduledDelay); + await Assert.That(scheduler.ScheduleCalled).IsTrue(); + await Assert.That(scheduler.ScheduledMessage?.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); // Cleanup consumer.Dispose(); } - [Fact] - public void When_disposing_after_requeue_should_not_throw() + [Test] + public async Task When_disposing_after_requeue_should_not_throw() { // Arrange var scheduler = new SpySchedulerSync(); @@ -91,12 +90,11 @@ public void When_disposing_after_requeue_should_not_throw() consumer.Requeue(message, TimeSpan.FromSeconds(5)); // Act & Assert - dispose after producer was created should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] - public void When_disposing_without_requeue_should_not_throw() + [Test] + public async Task When_disposing_without_requeue_should_not_throw() { // Arrange - create consumer but never requeue (producer never created) var scheduler = new SpySchedulerSync(); @@ -106,8 +104,7 @@ public void When_disposing_without_requeue_should_not_throw() scheduler); // Act & Assert - dispose without producer creation should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } private sealed class SpySchedulerSync : IAmAMessageSchedulerSync diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_creates_consumer_should_pass_scheduler.cs index 3bc7b464e2..7f5d9136d0 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -41,8 +40,8 @@ public class When_mssql_consumer_factory_creates_consumer_should_pass_scheduler messagePumpType: MessagePumpType.Reactor ); - [Fact] - public void Should_create_sync_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_sync_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -52,12 +51,12 @@ public void Should_create_sync_consumer_when_scheduler_provided() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_async_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_async_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -67,12 +66,12 @@ public void Should_create_async_consumer_when_scheduler_provided() var consumer = factory.CreateAsync(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange — factory constructed without a scheduler (backward compat) var factory = new MsSqlMessageConsumerFactory(_configuration); @@ -81,8 +80,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully without scheduler - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_scheduler_set_after_construction.cs index 6bc7ec6335..0a7ec3c2f1 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_factory_scheduler_set_after_construction.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -29,8 +28,8 @@ public class When_mssql_consumer_factory_scheduler_set_after_construction { private readonly RelationalDatabaseConfiguration _configuration = new("Server=localhost;Database=test;Trusted_Connection=True;"); - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new MsSqlMessageConsumerFactory(_configuration); @@ -40,22 +39,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new MsSqlMessageConsumerFactory(_configuration, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -66,8 +65,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_async_with_delay_should_use_producer.cs index 99ca636c76..76bf1cf758 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_async_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -35,7 +34,7 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; /// it should delegate to the lazily-created producer's SendWithDelayAsync rather than /// sending directly to the SQL queue. /// -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MssqlConsumerRequeueTestsAsync : IAsyncDisposable { private readonly MsSqlMessageConsumer _consumer; @@ -62,19 +61,19 @@ public MssqlConsumerRequeueTestsAsync() new MessageBody("test content for async delayed requeue")); } - [Fact] + [Test] public async Task When_requeuing_async_with_delay_should_use_producer() { // Act - requeue with non-zero delay var result = await _consumer.RequeueAsync(_message, TimeSpan.FromSeconds(5)); // Assert - should return true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - async scheduler should have been called via the producer path - Assert.True(_scheduler.ScheduleAsyncCalled); - Assert.Equal(_message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } public ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs index 85e5a9e0da..52f9799bce 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.MsSql; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -33,7 +32,7 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; /// to a lazily-created producer's SendWithDelay rather than sending directly to the SQL queue. /// This ensures the delay is respected via the scheduler instead of being ignored. /// -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class When_mssql_consumer_requeues_with_delay_should_use_producer : IDisposable { private readonly MsSqlMessageConsumer _consumer; @@ -60,19 +59,19 @@ public When_mssql_consumer_requeues_with_delay_should_use_producer() new MessageBody("test content for delayed requeue")); } - [Fact] - public void When_requeuing_with_delay_should_use_producer() + [Test] + public async Task When_requeuing_with_delay_should_use_producer() { // Act - requeue with non-zero delay var result = _consumer.Requeue(_message, TimeSpan.FromSeconds(5)); // Assert - should return true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - scheduler should have been called via the producer path - Assert.True(_scheduler.ScheduleCalled); - Assert.Equal(_message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs index 82a65a60c4..56bb0f5234 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; @@ -36,7 +35,7 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; /// direct SQL queue send rather than creating a producer. This preserves existing behavior /// and ensures immediate requeue without scheduler overhead. /// -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue : IDisposable { private readonly MsSqlMessageConsumer _consumer; @@ -63,46 +62,46 @@ public When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue() _consumer = new MsSqlMessageConsumer(testHelper.QueueConfiguration, _topicName); } - [Fact] - public void When_requeuing_with_zero_delay_should_send_directly_to_queue() + [Test] + public async Task When_requeuing_with_zero_delay_should_send_directly_to_queue() { // Arrange - send and receive a message so it's in the queue _producer.Send(_message); var received = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.NotEmpty(received); - Assert.Equal(MessageType.MT_COMMAND, received[0].Header.MessageType); + await Assert.That(received).IsNotEmpty(); + await Assert.That(received[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); // Act - requeue with zero delay (should use direct queue send) var result = _consumer.Requeue(received[0], TimeSpan.Zero); // Assert - returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message is immediately available in queue (direct send, not scheduled) var requeued = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.NotEmpty(requeued); - Assert.Equal(_message.Body.Value, requeued[0].Body.Value); + await Assert.That(requeued).IsNotEmpty(); + await Assert.That(requeued[0].Body.Value).IsEqualTo(_message.Body.Value); } - [Fact] - public void When_requeuing_with_null_delay_should_send_directly_to_queue() + [Test] + public async Task When_requeuing_with_null_delay_should_send_directly_to_queue() { // Arrange - send and receive a message _producer.Send(_message); var received = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.NotEmpty(received); - Assert.Equal(MessageType.MT_COMMAND, received[0].Header.MessageType); + await Assert.That(received).IsNotEmpty(); + await Assert.That(received[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); // Act - requeue with null delay (should default to zero and use direct queue) var result = _consumer.Requeue(received[0]); // Assert - returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message is immediately available var requeued = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.NotEmpty(requeued); - Assert.Equal(_message.Body.Value, requeued[0].Body.Value); + await Assert.That(requeued).IsNotEmpty(); + await Assert.That(requeued[0].Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged.cs index 3997909354..0f63c34026 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class PurgeTest : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -35,8 +34,8 @@ public PurgeTest() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).Create(sub); } - [Fact] - public void When_queue_is_Purged() + [Test] + public async Task When_queue_is_Purged() { IAmAMessageConsumerSync consumer = _consumer; //Send a sequence of messages to Kafka @@ -46,7 +45,7 @@ public void When_queue_is_Purged() var firstMessage = ConsumeMessages(consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); _consumer.Purge(); @@ -55,7 +54,7 @@ public void When_queue_is_Purged() var nextMessage = ConsumeMessages(consumer); message = nextMessage.First(); - Assert.Equal(new Message(), message); + await Assert.That(message).IsEqualTo(new Message()); } private string SendMessage() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs index 2fc78cf8cf..9e5066d101 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class PurgeTestAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -36,7 +35,7 @@ public PurgeTestAsync() _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } - [Fact] + [Test] public async Task When_queue_is_Purged() { IAmAMessageConsumerAsync consumer = _consumer; @@ -46,7 +45,7 @@ public async Task When_queue_is_Purged() // Now read those messages in order var firstMessage = await ConsumeMessagesAsync(consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); await _consumer.PurgeAsync(); @@ -54,7 +53,7 @@ public async Task When_queue_is_Purged() var nextMessage = await ConsumeMessagesAsync(consumer); message = nextMessage.First(); - Assert.Equal(new Message(), message); + await Assert.That(message).IsEqualTo(new Message()); } private async Task SendMessageAsync() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index e59ce0e6bc..d108d0f431 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MsSqlMessageConsumerDeliveryErrorDlqTests : IDisposable { private readonly MsSqlMessageProducer _producer; @@ -64,8 +63,8 @@ public MsSqlMessageConsumerDeliveryErrorDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { // Arrange - send a message and consume it from the source topic _producer.Send(_message); @@ -77,23 +76,21 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index f7e2899eb3..1445f037b8 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -27,11 +27,10 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MsSqlMessageConsumerDeliveryErrorDlqAsyncTests : IAsyncDisposable { private readonly MsSqlMessageProducer _producer; @@ -65,7 +64,7 @@ public MsSqlMessageConsumerDeliveryErrorDlqAsyncTests() new MessageBody("test content")); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { // Arrange - send a message and consume it from the source topic via async path @@ -78,23 +77,21 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = await ConsumeMessageAsync(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } private static async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs index 68f398b08c..80fe3ed3af 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MsSqlMessageConsumerNoChannelsConfiguredTests : IDisposable { private readonly MsSqlMessageProducer _producer; @@ -56,8 +55,8 @@ public MsSqlMessageConsumerNoChannelsConfiguredTests() _consumer = (MsSqlMessageConsumer)new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).Create(sub); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_return_true() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_return_true() { // Arrange - send a message and consume it var message = new Message( @@ -71,7 +70,7 @@ public void When_rejecting_message_with_no_channels_configured_should_return_tru new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true (message is silently dropped) - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - consumer can continue to receive subsequent messages var nextMessage = new Message( @@ -79,7 +78,7 @@ public void When_rejecting_message_with_no_channels_configured_should_return_tru new MessageBody("second message")); _producer.Send(nextMessage); var received = ConsumeMessage(_consumer); - Assert.Equal(nextMessage.Id, received.Id); + await Assert.That(received.Id).IsEqualTo(nextMessage.Id); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 9ee6fff434..2f60980f2b 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MsSqlMessageConsumerUnacceptableFallbackToDlqTests : IDisposable { private readonly MsSqlMessageProducer _producer; @@ -65,8 +64,8 @@ public MsSqlMessageConsumerUnacceptableFallbackToDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { // Arrange - send a message and consume it from the source topic _producer.Send(_message); @@ -77,14 +76,13 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should fall back to DLQ var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index cea32294d7..a426a86843 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway; -[Trait("Category", "MSSQL")] +[Category("MSSQL")] public class MsSqlMessageConsumerUnacceptableInvalidChannelTests : IDisposable { private readonly MsSqlMessageProducer _producer; @@ -68,8 +67,8 @@ public MsSqlMessageConsumerUnacceptableInvalidChannelTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { // Arrange - send a message and consume it from the source topic _producer.Send(_message); @@ -80,18 +79,17 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on invalid message channel var invalidMessage = ConsumeMessage(_invalidConsumer); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - invalidMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); // Assert - DLQ should be empty var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)).First(); - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message.cs index 30be88361a..1f5dc75979 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class MsSqlMessageConsumerRequeueTests { private readonly Message _message; @@ -47,8 +46,8 @@ public MsSqlMessageConsumerRequeueTests() _channelFactory = new ChannelFactory(new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration)); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { ((IAmAMessageProducerSync)_producerRegistry.LookupBy(_topic)).Send(_message); var channel = _channelFactory.CreateSyncChannel(_subscription); @@ -60,7 +59,7 @@ public void When_requeueing_a_message() //clear the queue channel.Acknowledge(requeuedMessage); - Assert.Equal(message.Body.Value, requeuedMessage.Body.Value); + await Assert.That(requeuedMessage.Body.Value).IsEqualTo(message.Body.Value); } } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs index 2adcb6ab48..80a7382b9e 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.MsSql; using Paramore.Brighter.MSSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { - [Trait("Category", "MSSQL")] + [Category("MSSQL")] public class MsSqlMessageConsumerRequeueTestsAsync : IDisposable { private readonly Message _message; @@ -45,7 +44,7 @@ public MsSqlMessageConsumerRequeueTestsAsync() _channelFactory = new ChannelFactory(new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration)); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await ((IAmAMessageProducerAsync)_producerRegistry.LookupAsyncBy(_topic)).SendAsync(_message); @@ -58,7 +57,7 @@ public async Task When_requeueing_a_message_async() //clear the queue await channel.AcknowledgeAsync(requeuedMessage); - Assert.Equal(message.Body.Value, requeuedMessage.Body.Value); + await Assert.That(requeuedMessage.Body.Value).IsEqualTo(message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 2768c1299e..a4da5a2249 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 01d552031c..2c6461c9ed 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index fb16fa445e..8e80350a5e 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 717c181853..ee96238849 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index e845c5abf5..13350e97e1 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 9d016ba8b7..adf8941723 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 2abb7dac74..d4c9d59fbf 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index d38e4f3a87..9fc5e173ce 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 77fc94e4ef..8146e07e56 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index e7077ce72c..1c77fadda4 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 4f88d8adf4..1ab1972ec2 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 666f98dcdb..30964699cf 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 7e80b7cd04..c88953d2f7 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index b928ef1bc0..552dc65557 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 41b1f22ea4..57e2f610db 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 6e9060a475..ceec487f07 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 23c5ab2fcb..97d5443070 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 0abdb7b2ad..ef593ece2a 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index c33c5c758a..e69ebd1ec4 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 2d78b34ebe..3fa4d13aaa 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 53b8dbff72..a875abb697 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 3fc8bcb297..a69a77f622 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index ea1e9a5d54..d3a913c6ce 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index d4c0e3b53d..1093317785 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 0eb83dc641..75a0eb9aec 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index a2a97511e6..3dc57093ce 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 750167844f..4b9d237963 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index e278543c23..dac87f3c65 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index f609db4a22..398e0189b8 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 569ab7c24a..4561f5bd88 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 6faad70a43..3bdbb60a71 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 1a7382c4fc..7a83638ec0 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index efaacbd3e8..80cdcf2158 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 3439e4f2e3..d7be855700 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index f97ac9194e..9db03af4a3 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 794e2dd10a..add1ca9e16 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MSSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index ad7e8248d7..c2298cf714 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index f0df593943..09c28a5235 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 969a002209..19de71da03 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index f8c1799eb8..84369771f3 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index f2b80d9bf5..ac667a2c82 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 6e39339fc5..b8304e197e 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index e2c55d2c88..eaa4437a58 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 83e9fb24a0..55fb0fee5a 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 7c63a231a9..488b248189 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 4baaedf62f..1510462dec 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index fdf6402024..4cbd6e31f9 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 2dc4939184..13c98268d6 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj b/tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj index 9522e0b23a..b47289cae8 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj +++ b/tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj @@ -1,36 +1,19 @@ - - - $(BrighterTestTargetFrameworks) - - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs index 5e537553dd..6426f5a825 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs @@ -6,15 +6,14 @@ using Microsoft.EntityFrameworkCore.Storage; using MongoDB.Driver; using Paramore.Brighter.MongoDb.EntityFramework; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.EntityFramework; -[Trait("Category", "MongoDb")] -[Trait("Feature", "EntityFramework.TransactionProvider")] +[Category("MongoDb")] +[Property("Feature", "EntityFramework.TransactionProvider")] public class MongoDbEntityFrameworkTransactionProviderAsyncTest { - [Fact] + [Test] public async Task When_Committing_Async_Active_Transaction_Should_Call_CommitAsync() { // Arrange @@ -34,7 +33,7 @@ public async Task When_Committing_Async_Active_Transaction_Should_Call_CommitAsy .MustHaveHappenedOnceExactly(); } - [Fact] + [Test] public async Task When_Committing_Async_Null_Transaction_Does_Not_Throw() { // Arrange @@ -47,7 +46,7 @@ public async Task When_Committing_Async_Null_Transaction_Does_Not_Throw() await provider.CommitAsync(CancellationToken.None); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_Active_Transaction_Should_Call_RollbackAsync() { // Arrange @@ -67,7 +66,7 @@ public async Task When_Rolling_Back_Async_Active_Transaction_Should_Call_Rollbac .MustHaveHappenedOnceExactly(); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_Null_Transaction_Does_Not_Throw() { // Arrange @@ -80,7 +79,7 @@ public async Task When_Rolling_Back_Async_Null_Transaction_Does_Not_Throw() await provider.RollbackAsync(CancellationToken.None); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_With_Default_CancellationToken() { // Arrange @@ -100,7 +99,7 @@ public async Task When_Rolling_Back_Async_With_Default_CancellationToken() .MustHaveHappenedOnceExactly(); } - [Fact] + [Test] public async Task When_Committing_Async_With_Specific_CancellationToken() { // Arrange @@ -122,7 +121,7 @@ public async Task When_Committing_Async_With_Specific_CancellationToken() .MustHaveHappenedOnceExactly(); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_With_Specific_CancellationToken() { // Arrange @@ -144,7 +143,7 @@ public async Task When_Rolling_Back_Async_With_Specific_CancellationToken() .MustHaveHappenedOnceExactly(); } - [Fact] + [Test] public async Task When_Committing_Async_With_Cancelled_Token_Should_Propagate() { // Arrange @@ -164,7 +163,7 @@ await Assert.ThrowsAsync( () => provider.CommitAsync(cts.Token)); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_With_Cancelled_Token_Should_Propagate() { // Arrange @@ -184,7 +183,7 @@ await Assert.ThrowsAsync( () => provider.RollbackAsync(cts.Token)); } - [Fact] + [Test] public async Task When_Multiple_Operations_In_Sequence_Should_Maintain_State() { // Arrange @@ -207,11 +206,11 @@ public async Task When_Multiple_Operations_In_Sequence_Should_Maintain_State() var hasTransactionAfter = provider.HasOpenTransaction; // Assert - Assert.True(hasTransactionBefore); - Assert.False(hasTransactionAfter); + await Assert.That(hasTransactionBefore).IsTrue(); + await Assert.That(hasTransactionAfter).IsFalse(); } - [Fact] + [Test] public async Task When_Committing_Async_Then_Checking_HasOpenTransaction() { // Arrange @@ -228,15 +227,15 @@ public async Task When_Committing_Async_Then_Checking_HasOpenTransaction() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - Assert.True(provider.HasOpenTransaction); + await Assert.That(provider.HasOpenTransaction).IsTrue(); await provider.CommitAsync(CancellationToken.None); var hasTransactionAfterCommit = provider.HasOpenTransaction; // Assert - Assert.False(hasTransactionAfterCommit); + await Assert.That(hasTransactionAfterCommit).IsFalse(); } - [Fact] + [Test] public async Task When_Rolling_Back_Async_Then_Checking_HasOpenTransaction() { // Arrange @@ -253,15 +252,15 @@ public async Task When_Rolling_Back_Async_Then_Checking_HasOpenTransaction() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - Assert.True(provider.HasOpenTransaction); + await Assert.That(provider.HasOpenTransaction).IsTrue(); await provider.RollbackAsync(); var hasTransactionAfterRollback = provider.HasOpenTransaction; // Assert - Assert.False(hasTransactionAfterRollback); + await Assert.That(hasTransactionAfterRollback).IsFalse(); } - [Fact] + [Test] public async Task When_Commit_Called_Async_Multiple_Times_Should_Not_Throw() { // Arrange @@ -282,7 +281,7 @@ public async Task When_Commit_Called_Async_Multiple_Times_Should_Not_Throw() await provider.CommitAsync(CancellationToken.None); // Second commit with null transaction - should not throw } - [Fact] + [Test] public async Task When_Rollback_Called_Async_Multiple_Times_Should_Not_Throw() { // Arrange diff --git a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs index e5a2e0af8b..5ff9af2d62 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs @@ -5,16 +5,15 @@ using Microsoft.EntityFrameworkCore.Storage; using MongoDB.Driver; using Paramore.Brighter.MongoDb.EntityFramework; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.EntityFramework; -[Trait("Category", "MongoDb")] -[Trait("Feature", "EntityFramework.TransactionProvider")] +[Category("MongoDb")] +[Property("Feature", "EntityFramework.TransactionProvider")] public class MongoDbEntityFrameworkTransactionProviderTest { - [Fact] - public void When_Creating_Provider_With_DbContext_Should_Initialize_Correctly() + [Test] + public async Task When_Creating_Provider_With_DbContext_Should_Initialize_Correctly() { // Arrange var context = A.Fake(); @@ -23,11 +22,11 @@ public void When_Creating_Provider_With_DbContext_Should_Initialize_Correctly() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Assert - Assert.NotNull(provider); + await Assert.That(provider).IsNotNull(); } - [Fact] - public void When_Getting_IsSharedConnection_Should_Return_True() + [Test] + public async Task When_Getting_IsSharedConnection_Should_Return_True() { // Arrange var context = A.Fake(); @@ -37,11 +36,11 @@ public void When_Getting_IsSharedConnection_Should_Return_True() var isShared = provider.IsSharedConnection; // Assert - Assert.True(isShared); + await Assert.That(isShared).IsTrue(); } - [Fact] - public void When_HasOpenTransaction_Initially_Should_Return_False() + [Test] + public async Task When_HasOpenTransaction_Initially_Should_Return_False() { // Arrange var context = A.Fake(); @@ -52,11 +51,11 @@ public void When_HasOpenTransaction_Initially_Should_Return_False() var hasOpenTransaction = provider.HasOpenTransaction; // Assert - Assert.False(hasOpenTransaction); + await Assert.That(hasOpenTransaction).IsFalse(); } - [Fact] - public void When_HasOpenTransaction_With_Active_Transaction_Should_Return_True() + [Test] + public async Task When_HasOpenTransaction_With_Active_Transaction_Should_Return_True() { // Arrange var context = A.Fake(); @@ -68,11 +67,11 @@ public void When_HasOpenTransaction_With_Active_Transaction_Should_Return_True() var hasOpenTransaction = provider.HasOpenTransaction; // Assert - Assert.True(hasOpenTransaction); + await Assert.That(hasOpenTransaction).IsTrue(); } - [Fact] - public void When_Getting_Transaction_With_Non_MongoTransaction_Throws() + [Test] + public async Task When_Getting_Transaction_With_Non_MongoTransaction_Throws() { // Arrange var context = A.Fake(); @@ -84,12 +83,12 @@ public void When_Getting_Transaction_With_Non_MongoTransaction_Throws() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act & Assert - var ex = Assert.Throws(() => provider.GetTransaction()); - Assert.Contains("not a MongoTransaction", ex.Message); + var ex = await Assert.That(() => provider.GetTransaction()).ThrowsExactly(); + await Assert.That(ex.Message).Contains("not a MongoTransaction"); } - [Fact] - public void When_Committing_Active_Transaction_Should_Call_Commit() + [Test] + public async Task When_Committing_Active_Transaction_Should_Call_Commit() { // Arrange var context = A.Fake(); @@ -105,8 +104,8 @@ public void When_Committing_Active_Transaction_Should_Call_Commit() A.CallTo(() => mockTransaction.Commit()).MustHaveHappenedOnceExactly(); } - [Fact] - public void When_Committing_Null_Transaction_Does_Not_Throw() + [Test] + public async Task When_Committing_Null_Transaction_Does_Not_Throw() { // Arrange var context = A.Fake(); @@ -118,8 +117,8 @@ public void When_Committing_Null_Transaction_Does_Not_Throw() provider.Commit(); } - [Fact] - public void When_Rolling_Back_Active_Transaction_Should_Call_Rollback() + [Test] + public async Task When_Rolling_Back_Active_Transaction_Should_Call_Rollback() { // Arrange var context = A.Fake(); @@ -135,8 +134,8 @@ public void When_Rolling_Back_Active_Transaction_Should_Call_Rollback() A.CallTo(() => mockTransaction.Rollback()).MustHaveHappenedOnceExactly(); } - [Fact] - public void When_Rolling_Back_Null_Transaction_Does_Not_Throw() + [Test] + public async Task When_Rolling_Back_Null_Transaction_Does_Not_Throw() { // Arrange var context = A.Fake(); @@ -148,8 +147,8 @@ public void When_Rolling_Back_Null_Transaction_Does_Not_Throw() provider.Rollback(); } - [Fact] - public void When_Closing_Active_Transaction_Should_Call_Dispose() + [Test] + public async Task When_Closing_Active_Transaction_Should_Call_Dispose() { // Arrange var context = A.Fake(); @@ -165,8 +164,8 @@ public void When_Closing_Active_Transaction_Should_Call_Dispose() A.CallTo(() => mockTransaction.Dispose()).MustHaveHappenedOnceExactly(); } - [Fact] - public void When_Closing_Null_Transaction_Does_Not_Throw() + [Test] + public async Task When_Closing_Null_Transaction_Does_Not_Throw() { // Arrange var context = A.Fake(); @@ -178,8 +177,8 @@ public void When_Closing_Null_Transaction_Does_Not_Throw() provider.Close(); } - [Fact] - public void When_Committing_And_Then_Checking_HasOpenTransaction() + [Test] + public async Task When_Committing_And_Then_Checking_HasOpenTransaction() { // Arrange var context = A.Fake(); @@ -193,16 +192,16 @@ public void When_Committing_And_Then_Checking_HasOpenTransaction() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - Assert.True(provider.HasOpenTransaction); + await Assert.That(provider.HasOpenTransaction).IsTrue(); provider.Commit(); var hasTransactionAfterCommit = provider.HasOpenTransaction; // Assert - Assert.False(hasTransactionAfterCommit); + await Assert.That(hasTransactionAfterCommit).IsFalse(); } - [Fact] - public void When_Rolling_Back_And_Then_Checking_HasOpenTransaction() + [Test] + public async Task When_Rolling_Back_And_Then_Checking_HasOpenTransaction() { // Arrange var context = A.Fake(); @@ -215,16 +214,16 @@ public void When_Rolling_Back_And_Then_Checking_HasOpenTransaction() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - Assert.True(provider.HasOpenTransaction); + await Assert.That(provider.HasOpenTransaction).IsTrue(); provider.Rollback(); var hasTransactionAfterRollback = provider.HasOpenTransaction; // Assert - Assert.False(hasTransactionAfterRollback); + await Assert.That(hasTransactionAfterRollback).IsFalse(); } - [Fact] - public void When_Closing_And_Then_Checking_HasOpenTransaction() + [Test] + public async Task When_Closing_And_Then_Checking_HasOpenTransaction() { // Arrange var context = A.Fake(); @@ -237,16 +236,16 @@ public void When_Closing_And_Then_Checking_HasOpenTransaction() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - Assert.True(provider.HasOpenTransaction); + await Assert.That(provider.HasOpenTransaction).IsTrue(); provider.Close(); var hasTransactionAfterClose = provider.HasOpenTransaction; // Assert - Assert.False(hasTransactionAfterClose); + await Assert.That(hasTransactionAfterClose).IsFalse(); } - [Fact] - public void When_Commit_Called_Multiple_Times_Should_Not_Throw() + [Test] + public async Task When_Commit_Called_Multiple_Times_Should_Not_Throw() { // Arrange var context = A.Fake(); @@ -264,8 +263,8 @@ public void When_Commit_Called_Multiple_Times_Should_Not_Throw() provider.Commit(); // Second commit with null transaction - should not throw } - [Fact] - public void When_Rollback_Called_Multiple_Times_Should_Not_Throw() + [Test] + public async Task When_Rollback_Called_Multiple_Times_Should_Not_Throw() { // Arrange var context = A.Fake(); diff --git a/tests/Paramore.Brighter.MongoDb.Tests/MongoDbLockingProviderTest.cs b/tests/Paramore.Brighter.MongoDb.Tests/MongoDbLockingProviderTest.cs index 6e3868870e..899151dcb3 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/MongoDbLockingProviderTest.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/MongoDbLockingProviderTest.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.Locking.MongoDb; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class MongoDbLockingProviderTest { private readonly MongoDbLockingProvider _locking; @@ -16,7 +15,7 @@ public MongoDbLockingProviderTest() _locking = new MongoDbLockingProvider(Configuration.CreateLocking("locking")); } - [Fact] + [Test] public async Task GivenAnPostgresLockingProvider_WhenLockIsCalled_ItCanOnlyBeObtainedOnce() { var resourceName = $"TestLock-{Guid.NewGuid()}"; @@ -24,11 +23,11 @@ public async Task GivenAnPostgresLockingProvider_WhenLockIsCalled_ItCanOnlyBeObt var first = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); var second = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - Assert.Equal(first, resourceName); - Assert.Null(second); + await Assert.That(resourceName).IsEqualTo(first); + await Assert.That(second).IsNull(); } - [Fact] + [Test] public async Task GivenAnPostgresLockingProviderWithALockedBlob_WhenReleaseLockIsCalled_ItCanOnlyBeLockedAgain() { var resourceName = $"TestLock-{Guid.NewGuid()}"; @@ -39,8 +38,8 @@ public async Task GivenAnPostgresLockingProviderWithALockedBlob_WhenReleaseLockI var second = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); var third = await _locking.ObtainLockAsync(resourceName, CancellationToken.None); - Assert.Equal(first, resourceName); - Assert.Equal(second, resourceName); - Assert.Null(third); + await Assert.That(resourceName).IsEqualTo(first); + await Assert.That(resourceName).IsEqualTo(second); + await Assert.That(third).IsNull(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index c079562a1e..47d93b8646 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index fa771cacb8..381bbda065 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 476f1fb84f..07e69793d2 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 65e2c02517..4810f27ff3 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index dcfd9cd788..d5acf4da12 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index a6805556d0..6757bfdd01 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index deb94f73e7..0609bc4e69 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 1e63f3d147..f2c0b60ee0 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index ee82e0a7c1..4e36556060 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 5bedc98967..7ffddecc72 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MongoDB.Tests.Outbox.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 20088f18b2..fd58de3a88 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index e563dce3c3..46c281f1c2 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index c7f3149174..18b458510e 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index c56eac5e30..514f0b2210 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 1315a6ebdb..60d6f06a1b 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index ac131ad624..e775a81813 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 4a63f3fd1a..bfd92d3faa 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 4413ef503e..68bcc8072a 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index c08fd7c103..38f84c7432 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 48be80f360..8ef20834e6 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj b/tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj index 86380e97e0..d5e15c2750 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj +++ b/tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj @@ -1,32 +1,16 @@ - $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + + - - + - @@ -36,5 +20,4 @@ - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs index 5c7660b30c..ee2e7ea9ad 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -7,11 +7,10 @@ using Paramore.Brighter.MongoDb.Tests.TestDoubles; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LargeMessagePayloadUnwrapTests { private readonly TransformPipelineBuilder _pipelineBuilder; @@ -38,8 +37,8 @@ public LargeMessagePayloadUnwrapTests() _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, messageTransformerFactory); } - [Fact] - public void When_unwrapping_a_large_message() + [Test] + public async Task When_unwrapping_a_large_message() { //store our luggage and get the claim check var contents = DataGenerator.CreateString(6000); @@ -74,7 +73,7 @@ public void When_unwrapping_a_large_message() //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(_luggageStore.HasClaim(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(_luggageStore.HasClaim(id)).IsFalse(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs index 74948af067..52adb4e616 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message_async.cs @@ -8,11 +8,10 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LargeMessagePayloadAsyncUnwrapTests { private readonly TransformPipelineBuilderAsync _pipelineBuilder; @@ -39,7 +38,7 @@ public LargeMessagePayloadAsyncUnwrapTests() _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, messageTransformerFactory, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_unwrapping_a_large_message_async() { //arrange @@ -78,7 +77,7 @@ public async Task When_unwrapping_a_large_message_async() //assert //contents should be from storage - Assert.Equal(contents, transformedMessage.Value); - Assert.False(await _luggageStore.HasClaimAsync(id)); + await Assert.That(transformedMessage.Value).IsEqualTo(contents); + await Assert.That(await _luggageStore.HasClaimAsync(id)).IsFalse(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists.cs index 5658f2a3b9..5e1e145ae0 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists.cs @@ -1,16 +1,15 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LuggageStoreExistsTests { - [Fact] - public void When_checking_store_that_does_not_exist() + [Test] + public async Task When_checking_store_that_does_not_exist() { //act var doesNotExist = Catch.Exception(() => @@ -27,7 +26,7 @@ public void When_checking_store_that_does_not_exist() luggageStore.EnsureStoreExists(); }); - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists_async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists_async.cs index 270c4828f6..df261db9c5 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists_async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_validating_a_luggage_store_exists_async.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Storage; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LuggageStoreExistsAsyncTests { - [Fact] + [Test] public async Task When_checking_store_that_does_not_exist_async() { //act @@ -27,7 +26,7 @@ public async Task When_checking_store_that_does_not_exist_async() await luggageStore.EnsureStoreExistsAsync(); }); - Assert.NotNull(doesNotExist); - Assert.True(doesNotExist is InvalidOperationException); + await Assert.That(doesNotExist).IsNotNull(); + await Assert.That(doesNotExist is InvalidOperationException).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs index ec6623c02d..2e24958658 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs @@ -3,11 +3,10 @@ using Paramore.Brighter.MongoDb.Tests.TestDoubles; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LargeMessagePayloadWrapTests : IDisposable { private string? _id; @@ -43,20 +42,20 @@ public LargeMessagePayloadWrapTests () _pipelineBuilder = new TransformPipelineBuilder(mapperRegistry, transformerFactoryAsync); } - [Fact] - public void When_wrapping_a_large_message() + [Test] + public async Task When_wrapping_a_large_message() { //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); var message = _transformPipeline.Wrap(_myCommand, new RequestContext(), _publication); //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.True(_luggageStore.HasClaim(_id)); + await Assert.That(_luggageStore.HasClaim(_id)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs index 11162d621f..0e5c31e876 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message_async.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.Observability; using Paramore.Brighter.Transformers.MongoGridFS; using Paramore.Brighter.Transforms.Transformers; -using Xunit; namespace Paramore.Brighter.MongoDb.Tests.Transformers; -[Trait("Category", "MongoDb")] +[Category("MongoDb")] public class LargeMessagePayloadAsyncWrapTests : IAsyncDisposable { private string? _id; @@ -45,7 +44,7 @@ public LargeMessagePayloadAsyncWrapTests () _pipelineBuilder = new TransformPipelineBuilderAsync(mapperRegistry, transformerFactoryAsync, InstrumentationOptions.All); } - [Fact] + [Test] public async Task When_wrapping_a_large_message_async() { //act @@ -53,12 +52,12 @@ public async Task When_wrapping_a_large_message_async() var message = await _transformPipeline.WrapAsync(_myCommand, new RequestContext(), _publication); //assert - Assert.True(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)); - Assert.NotNull(message.Header.DataRef); + await Assert.That(message.Header.Bag.ContainsKey(ClaimCheckTransformer.CLAIM_CHECK)).IsTrue(); + await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; - Assert.Equal($"Claim Check {_id}", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - Assert.True(await _luggageStore.HasClaimAsync(_id)); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 77e6feb6de..30ff2e4ade 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index d62b07b895..2381e7f6a7 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index b3471e3214..886f57bcb8 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 48879ed5c4..c6a18d3d73 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index aa50a35fc7..f872d14df2 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 33920f11b8..80f0d5968c 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 64e5220f0e..3a970cb5cd 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index af1ca45194..2c36efdd9f 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index a93c1ef76d..91242a784b 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 451e4b0410..434c2d59fd 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index c238091a9e..7239d59492 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 52c885c4e9..7469fa81b5 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 379ce96415..5ff25c6501 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 8aae392fdb..c99ac126a2 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 37af643fa3..7b33912a00 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 93dd923e89..fb27e95698 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index aea73d7c44..02a1933e9a 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index fa7d8df5fd..27e3ac0da0 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index a35643c036..6e216dfaa9 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index ee0d6007c3..d3e90b603d 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index bb9f1b8442..4b1f2155a3 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 4829ff03ff..fc17d8bd7c 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 480c009ee0..8f72bba12a 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 8785ce0c4f..e139b5c091 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 18553dadc7..922ab5c64c 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 741813e4aa..f086fcbfd7 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 9de913d501..a048d14720 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 3a9c424ca0..eb69b27948 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index eb5a90b390..c64a1e1b7d 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index d7fd916b26..ee0ff7c94e 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 6af5587205..32bd5c6e9b 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index a75353237f..12e55eeb2d 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index f4c4e02eca..aa700562b6 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 733203d2af..e090c88015 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 92fdf9ec88..e820db40ed 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index c930ec642a..a21104948a 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.MySQL.Tests.Outbox.Text.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index c8f3a3e37d..277bcf3637 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index f03c328148..edf8fb0f3e 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index a0cb7e0c78..aead18ac1d 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 738108150f..aa5cf97fea 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index a4335b3e50..1b242ea82a 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 678efdafbe..ffadbd9924 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index cb87d2fcfa..e036cb349e 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 26de3ced3a..d723bc3e99 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index e7c9f74e41..70f4c9009e 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 0edbb4f693..62a5af375b 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 9a7c917daf..efdba201f8 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 125c598259..ac2fd6c75f 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj b/tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj index a8989a8071..40ed75873b 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj +++ b/tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj @@ -1,34 +1,18 @@ - - - $(BrighterTestNineOnlyTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + + $(BrighterTestNineOnlyTargetFrameworks) + false + Exe + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs index 6a9e02d4c2..be208f2e32 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class OrderTest : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -36,8 +35,8 @@ public OrderTest() _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).Create(sub); } - [Fact] - public void When_a_message_is_sent_keep_order() + [Test] + public async Task When_a_message_is_sent_keep_order() { //Send a sequence of messages to postgres var msgId = SendMessage(); @@ -49,23 +48,23 @@ public void When_a_message_is_sent_keep_order() var firstMessage = ConsumeMessages(_consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId); var secondMessage = ConsumeMessages(_consumer); message = secondMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId2); var thirdMessages = ConsumeMessages(_consumer); message = thirdMessages.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId3); var fourthMessage = ConsumeMessages(_consumer); message = fourthMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId4); } private string SendMessage() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs index fe93ae34e0..f451fe4aa2 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class OrderTestAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -36,7 +35,7 @@ public OrderTestAsync() _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).CreateAsync(sub); } - [Fact] + [Test] public async Task When_a_message_is_sent_keep_order() { //Send a sequence of messages to postgres @@ -49,23 +48,23 @@ public async Task When_a_message_is_sent_keep_order() var firstMessage = await ConsumeMessagesAsync(_consumer); var message = firstMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId); var secondMessage = await ConsumeMessagesAsync(_consumer); message = secondMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId2, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId2); var thirdMessages = await ConsumeMessagesAsync(_consumer); message = thirdMessages.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId3, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId3); var fourthMessage = await ConsumeMessagesAsync(_consumer); message = fourthMessage.First(); - Assert.False(message.IsEmpty); - Assert.Equal(msgId4, message.Id); + await Assert.That(message.IsEmpty).IsFalse(); + await Assert.That(message.Id).IsEqualTo(msgId4); } private async Task SendMessageAsync() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 1492ae23f7..4263bc060e 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Reflection; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; @@ -44,8 +43,8 @@ public PostgresMessageConsumerFactoryDlqTests() _factory = new PostgresConsumerFactory(connection); } - [Fact] - public void When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_postgres_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -64,7 +63,7 @@ public void When_creating_postgres_consumer_with_dlq_subscription_should_pass_ro _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -72,17 +71,17 @@ public void When_creating_postgres_consumer_with_dlq_subscription_should_pass_ro var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties.cs index 691408c9f1..1073a9b9d7 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; public class PostgresSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_postgres_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -48,17 +47,17 @@ public void When_creating_postgres_subscription_with_dlq_routing_keys_should_exp ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_postgres_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_postgres_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new PostgresSubscription( @@ -69,12 +68,12 @@ public void When_creating_postgres_subscription_without_dlq_routing_keys_should_ ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_postgres_consumer_requeues_with_delay_should_use_native_sql.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_postgres_consumer_requeues_with_delay_should_use_native_sql.cs index 0a577b3cd6..6b2bb6d72f 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_postgres_consumer_requeues_with_delay_should_use_native_sql.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_postgres_consumer_requeues_with_delay_should_use_native_sql.cs @@ -5,11 +5,10 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgreSqlMessageConsumerNativeDelayTests : IDisposable { private readonly Message _message; @@ -49,8 +48,8 @@ public PostgreSqlMessageConsumerNativeDelayTests() _channelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)); } - [Fact] - public void When_postgres_consumer_requeues_with_delay_should_use_native_sql() + [Test] + public async Task When_postgres_consumer_requeues_with_delay_should_use_native_sql() { // Arrange - send and receive a message ((IAmAMessageProducerSync)_producerRegistry.LookupBy(_topic)).Send(_message); @@ -62,17 +61,17 @@ public void When_postgres_consumer_requeues_with_delay_should_use_native_sql() bool requeued = channel.Requeue(message, requeueDelay); // Assert - requeue succeeded - Assert.True(requeued); + await Assert.That(requeued).IsTrue(); // Assert - message is NOT visible immediately (native SQL sets visible_timeout in the future) var immediateReceive = channel.Receive(TimeSpan.FromMilliseconds(500)); - Assert.Equal(MessageType.MT_NONE, immediateReceive.Header.MessageType); + await Assert.That(immediateReceive.Header.MessageType).IsEqualTo(MessageType.MT_NONE); // Assert - message becomes visible after the delay elapses Thread.Sleep(requeueDelay); var delayedReceive = channel.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.Equal(MessageType.MT_COMMAND, delayedReceive.Header.MessageType); - Assert.Equal(message.Body.Value, delayedReceive.Body.Value); + await Assert.That(delayedReceive.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(delayedReceive.Body.Value).IsEqualTo(message.Body.Value); // Cleanup channel.Acknowledge(delayedReceive); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged.cs index 8b6a8df9dc..a66f147327 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PurgeTest : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -36,8 +35,8 @@ public PurgeTest() _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).Create(sub); } - [Fact] - public void When_queue_is_Purged() + [Test] + public async Task When_queue_is_Purged() { //Send a sequence of messages to postgres var msgId = SendMessage(); @@ -46,7 +45,7 @@ public void When_queue_is_Purged() var firstMessage = ConsumeMessages(_consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); _consumer.Purge(); @@ -55,7 +54,7 @@ public void When_queue_is_Purged() var nextMessage = ConsumeMessages(_consumer); message = nextMessage.First(); - Assert.Equal(new Message(), message); + await Assert.That(message).IsEqualTo(new Message()); } private string SendMessage() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs index d92372f26f..a28ae1880a 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PurgeTestAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -36,7 +35,7 @@ public PurgeTestAsync() _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).CreateAsync(sub); } - [Fact] + [Test] public async Task When_queue_is_Purged() { //Send a sequence of messages to postgres @@ -45,7 +44,7 @@ public async Task When_queue_is_Purged() // Now read those messages in order var firstMessage = await ConsumeMessagesAsync(_consumer); var message = firstMessage.First(); - Assert.Equal(msgId, message.Id); + await Assert.That(message.Id).IsEqualTo(msgId); await _consumer.PurgeAsync(); @@ -53,7 +52,7 @@ public async Task When_queue_is_Purged() var nextMessage = await ConsumeMessagesAsync(_consumer); message = nextMessage.First(); - Assert.Equal(new Message(), message); + await Assert.That(message).IsEqualTo(new Message()); } private async Task SendMessageAsync() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index f4adf3f4a2..da72a91ac4 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgresMessageConsumerDeliveryErrorDlqTests : IDisposable { private readonly IAmAMessageProducerSync _producer; @@ -79,8 +78,8 @@ public PostgresMessageConsumerDeliveryErrorDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { // Arrange - send a message and consume it from the source topic _producer.Send(_message); @@ -92,27 +91,25 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); // Assert - source message is deleted (re-reading from source returns MT_NONE) var sourceMessage = ConsumeMessage(_consumer); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 8a3a7e8efe..998db0d626 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -27,11 +27,10 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgresMessageConsumerDeliveryErrorDlqAsyncTests : IAsyncDisposable { private readonly IAmAMessageProducerAsync _producer; @@ -78,7 +77,7 @@ public PostgresMessageConsumerDeliveryErrorDlqAsyncTests() new MessageBody("test content")); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { // Arrange - send a message and consume it from the source topic via async path @@ -91,27 +90,25 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = await ConsumeMessageAsync(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); // Assert - source message is deleted (re-reading from source returns MT_NONE) var sourceMessage = await ConsumeMessageAsync(_consumer); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consumer) diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning.cs index 095bb86fdb..e4895ce04a 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgresMessageConsumerNoChannelsConfiguredTests : IDisposable { private readonly IAmAMessageProducerSync _producer; @@ -64,8 +63,8 @@ public PostgresMessageConsumerNoChannelsConfiguredTests() _consumer = consumerFactory.Create(sub); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_delete_and_log_warning() { // Arrange - send a message and consume it var message = new Message( @@ -79,11 +78,11 @@ public void When_rejecting_message_with_no_channels_configured_should_delete_and new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true (source deleted, message silently dropped) - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - source message is deleted (re-reading returns MT_NONE) var sourceMessage = ConsumeMessage(_consumer); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); // Assert - consumer can continue to receive subsequent messages var nextMessage = new Message( @@ -91,7 +90,7 @@ public void When_rejecting_message_with_no_channels_configured_should_delete_and new MessageBody("second message")); _producer.Send(nextMessage); var received = ConsumeMessage(_consumer); - Assert.Equal(nextMessage.Id, received.Id); + await Assert.That(received.Id).IsEqualTo(nextMessage.Id); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 23c6b1620d..339c22824e 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgresMessageConsumerUnacceptableFallbackDlqTests : IDisposable { private readonly IAmAMessageProducerSync _producer; @@ -78,8 +77,8 @@ public PostgresMessageConsumerUnacceptableFallbackDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { // Arrange - send a message and consume it _producer.Send(_message); @@ -90,16 +89,16 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ (fallback) var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - source message is deleted var sourceMessage = ConsumeMessage(_consumer); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index dd50db3275..291996b9b3 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgresMessageConsumerUnacceptableInvalidChannelTests : IDisposable { private readonly IAmAMessageProducerSync _producer; @@ -87,8 +86,8 @@ public PostgresMessageConsumerUnacceptableInvalidChannelTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { // Arrange - send a message and consume it _producer.Send(_message); @@ -99,20 +98,20 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on the invalid message channel var invalidMessage = ConsumeMessage(_invalidConsumer); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - DLQ should be empty var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); // Assert - source message is deleted var sourceMessage = ConsumeMessage(_consumer); - Assert.Equal(MessageType.MT_NONE, sourceMessage.Header.MessageType); + await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message.cs index 72335903bb..6afbd8d8eb 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgreSqlMessageConsumerRequeueTests { private readonly Message _message; @@ -49,13 +48,13 @@ public PostgreSqlMessageConsumerRequeueTests() _channelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)); } - [Fact] - public void When_requeueing_a_message() + [Test] + public async Task When_requeueing_a_message() { ((IAmAMessageProducerSync)_producerRegistry.LookupBy(_topic)).Send(_message); var channel = _channelFactory.CreateSyncChannel(_subscription); var message = channel.Receive(TimeSpan.FromMilliseconds(2000)); - Assert.True(channel.Requeue(message, TimeSpan.FromMilliseconds(100))); + await Assert.That(channel.Requeue(message, TimeSpan.FromMilliseconds(100))).IsTrue(); Thread.Sleep(TimeSpan.FromMilliseconds(100)); @@ -64,6 +63,6 @@ public void When_requeueing_a_message() //clear the queue channel.Acknowledge(requeuedMessage); - Assert.Equal(message.Body.Value, requeuedMessage.Body.Value); + await Assert.That(requeuedMessage.Body.Value).IsEqualTo(message.Body.Value); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs index 2a9f8c6f58..142831cc6f 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs @@ -1,15 +1,14 @@ -using System; +using System; using System.Net.Mime; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.Postgres; using Paramore.Brighter.PostgresSQL.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; -[Trait("Category", "PostgresSql")] +[Category("PostgresSql")] public class PostgreSqlMessageConsumerRequeueTestsAsync : IDisposable { private readonly Message _message; @@ -48,13 +47,13 @@ public PostgreSqlMessageConsumerRequeueTestsAsync() _channelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _producerRegistry.LookupAsyncBy(_topic).SendAsync(_message); var channel = await _channelFactory.CreateAsyncChannelAsync(_subscription); var message = await channel.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); - Assert.True(await channel.RequeueAsync(message, TimeSpan.FromMilliseconds(100))); + await Assert.That(await channel.RequeueAsync(message, TimeSpan.FromMilliseconds(100))).IsTrue(); await Task.Delay(TimeSpan.FromMilliseconds(100)); @@ -63,7 +62,7 @@ public async Task When_requeueing_a_message_async() //clear the queue await channel.AcknowledgeAsync(requeuedMessage); - Assert.Equal(message.Body.Value, requeuedMessage.Body.Value); + await Assert.That(requeuedMessage.Body.Value).IsEqualTo(message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index c714ba7ec6..f133abba0b 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 926a9e17ec..11751920c9 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index feec34fdb6..cfd9aa19c2 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 325a8758dc..d9d2e109df 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 861950d594..925f94c6a6 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 6c4671facf..560a2b195c 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 116d825126..16a514e210 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 5c3ecbcf41..f6e2ccd996 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 267047e628..5e0d6e33fc 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 2a3b84c9d3..e4fcbc1eaa 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 5ade2a3aec..aedf0d54bb 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 3d53ee616b..4effde1bc5 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Binary.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 2cb120113d..7a4cdb9291 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 39d14c1031..7eca63394b 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index fc4b37ce62..204351c224 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index de070dc805..cd7f1daffb 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 245ea83fae..47a8cb4564 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 7eaa0dd9a8..aea751fd0a 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 7dda79b199..682eb4fc32 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 0b47fe236c..6746c1e5dd 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index ffaeb15359..5539dc314e 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index d77003c5fe..a0238fb362 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 74e21c0636..7a0a36c061 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index bf89359014..c01e032d1f 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 01e83cfa26..54bb3dc06c 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 4deb84c584..724a540101 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 44fd772406..44511f52ae 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index 3fad3b9ef9..21460834d6 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 64c82a0cca..ef6c7f0158 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index 5b217107c9..ec3cecd2fb 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 75f134a9ab..4abb69c91a 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 0c9c0aa71f..e665eebe4a 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 5691fd135b..32add3b874 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 96e95c726f..9fd04af533 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index e4302faf90..3c9c5fa9f7 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index e7f291d52a..7e9855b5e5 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.Outbox.Text.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 97c0fb44d4..f4037d7095 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index ea8badad39..1f80e2a908 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index c4f5a11aee..6e3c05020d 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index ca3e2e724e..87a4ae3668 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 79a72a3966..0223134806 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 3d22472cb6..6153e9ef59 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 4c925187bc..1a8cd8743f 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 412bc33727..0ada948218 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 344145985e..98dfc4b411 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 1e192aa76b..de8a2a0900 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 8b4e63daf0..14e95f7de8 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 6eec333359..ccf33aee4b 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj b/tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj index c5b276d04f..e33018ab6f 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj @@ -1,34 +1,19 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj b/tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj index 8abdbf3223..63a2a1d725 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj +++ b/tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj @@ -1,40 +1,18 @@ - $(BrighterTestTargetFrameworks) enable - false true ParamoreBrighter.Quartz.Tests + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + + + - - - - - - - - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs index 3b40c6bfc9..ab912d1cc0 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs @@ -1,4 +1,4 @@ -using System.Collections.Specialized; +using System.Collections.Specialized; using System.Text.Json; using System.Transactions; using Paramore.Brighter; @@ -14,7 +14,7 @@ namespace ParamoreBrighter.Quartz.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class QuartzSchedulerMessageTests { private readonly QuartzSchedulerFactory _scheduler; @@ -93,8 +93,8 @@ public QuartzSchedulerMessageTests() BrighterResolver.Processor = _processor; } - [Fact] - public void When_scheduler_a_message_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -106,19 +106,19 @@ public void When_scheduler_a_message_with_a_datetimeoffset() var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, _outbox.Get(message.Id, new RequestContext())); + await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_a_message_with_a_timespan() + [Test] + public async Task When_scheduler_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -129,19 +129,19 @@ public void When_scheduler_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] - public void When_reschedule_a_message_with_a_datetimeoffset() + [Test] + public async Task When_reschedule_a_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -152,22 +152,22 @@ public void When_reschedule_a_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); - Assert.Equivalent(message, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] - public void When_reschedule_a_message_with_a_timespan() + [Test] + public async Task When_reschedule_a_message_with_a_timespan() { var req = new MyEvent(); var message = @@ -178,22 +178,22 @@ public void When_reschedule_a_message_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromHours(1)); - Assert.NotEqual(0, id.Length); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(id.Length).IsNotEqualTo(0); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); scheduler.ReScheduler(id, TimeSpan.FromSeconds(5)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] - public void When_cancel_scheduler_message_with_a_datetimeoffset() + [Test] + public async Task When_cancel_scheduler_message_with_a_datetimeoffset() { var req = new MyEvent(); var message = @@ -204,7 +204,7 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -213,23 +213,23 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_cancel_scheduler_request_with_a_timespan() + [Test] + public async Task When_cancel_scheduler_request_with_a_timespan() { var req = new MyEvent(); var message = @@ -240,7 +240,7 @@ public void When_cancel_scheduler_request_with_a_timespan() var scheduler = (IAmAMessageSchedulerSync)_scheduler.Create(_processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -249,17 +249,17 @@ public void When_cancel_scheduler_request_with_a_timespan() var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs index 10614537ff..2d145f9d95 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs @@ -1,4 +1,4 @@ -using System.Collections.Specialized; +using System.Collections.Specialized; using System.Text.Json; using System.Transactions; using Paramore.Brighter; @@ -14,7 +14,7 @@ namespace ParamoreBrighter.Quartz.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class QuartzSchedulerMessageAsyncTests { private readonly QuartzSchedulerFactory _scheduler; @@ -100,7 +100,7 @@ public QuartzSchedulerMessageAsyncTests() BrighterResolver.Processor = _processor; } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -113,18 +113,18 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, await _outbox.GetAsync(message.Id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -136,18 +136,18 @@ public async Task When_scheduler_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.Equivalent(message, await _outbox.GetAsync(req.Id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -159,21 +159,21 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); - Assert.Equivalent(message, await _outbox.GetAsync(req.Id, new RequestContext())); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_timespan_async() { var req = new MyEvent(); @@ -185,21 +185,21 @@ public async Task When_reschedule_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.True((id)?.Any()); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, await _outbox.GetAsync(req.Id, new RequestContext())); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } - [Fact] + [Test] public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -211,7 +211,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.CancelAsync(id); @@ -220,22 +220,22 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_cancel_scheduler_request_with_a_timespan_async() { var req = new MyEvent(); @@ -247,7 +247,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_scheduler.Create(_processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.CancelAsync(id); @@ -256,17 +256,17 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs index 3d0682ece6..19cafe6eed 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs @@ -1,4 +1,4 @@ -using System.Collections.Specialized; +using System.Collections.Specialized; using System.Transactions; using Paramore.Brighter; using Paramore.Brighter.Extensions; @@ -13,7 +13,7 @@ namespace ParamoreBrighter.Quartz.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class QuartzSchedulerRequestTests { private readonly QuartzSchedulerFactory _scheduler; @@ -96,327 +96,327 @@ public QuartzSchedulerRequestTests() #region Scheduler - [Fact] - public void When_scheduler_send_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_send_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_send_request_with_a_timespan() + [Test] + public async Task When_scheduler_send_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_publish_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_timespan() + [Test] + public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_post_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_post_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_post_request_with_a_timespan() + [Test] + public async Task When_scheduler_post_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); scheduler.ReScheduler(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.ReScheduler(id, TimeSpan.FromSeconds(5)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateSync(_processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs index ec2b0737b7..beb1e62644 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs @@ -1,4 +1,4 @@ -using System.Collections.Specialized; +using System.Collections.Specialized; using System.Transactions; using Paramore.Brighter; using Paramore.Brighter.Extensions; @@ -14,7 +14,7 @@ namespace ParamoreBrighter.Quartz.Tests; -[Collection("Scheduler")] +[NotInParallel("Scheduler")] public class QuartzSchedulerRequestAsyncTests { private readonly QuartzSchedulerFactory _scheduler; @@ -105,7 +105,7 @@ public QuartzSchedulerRequestAsyncTests() #region Scheduler - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -113,64 +113,64 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_timespan_asc() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -178,64 +178,64 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -243,122 +243,122 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_timespan_async() { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_internalBus.Stream(_routingKey) ?? []); + await Assert.That(_internalBus.Stream(_routingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_internalBus.Stream(_routingKey)); + await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _outbox.Get(req.Id, new RequestContext())); + await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.ReSchedulerAsync(id, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_send_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(4)); - Assert.Contains(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); @@ -366,65 +366,65 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch var id = await scheduler.ScheduleAsync(req, type, _timeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _scheduler.CreateAsync(_processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _receivedMessages); + await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher.cs index 704d98dfe3..230db8ecb1 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessageDispatch; @@ -70,15 +69,15 @@ public DispatchBuilderTests() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] + [Test] public async Task When_Building_A_Dispatcher() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); - Assert.NotNull(GetConnection("foo")); - Assert.NotNull(GetConnection("bar")); - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + await Assert.That(_dispatcher).IsNotNull(); + await Assert.That(GetConnection("foo")).IsNotNull(); + await Assert.That(GetConnection("bar")).IsNotNull(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); await Task.Delay(1000); @@ -86,11 +85,11 @@ public async Task When_Building_A_Dispatcher() await Task.Delay(1000); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); await _dispatcher.End(); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } private Subscription GetConnection(string name) { diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_async.cs index ca7b9edb62..48ee7ef362 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessageDispatch; @@ -79,16 +78,16 @@ public DispatchBuilderTestsAsync() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] - //[Fact] + [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] + //[Test] public async Task When_Building_A_Dispatcher_With_Async() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); - Assert.NotNull(GetConnection("foo")); - Assert.NotNull(GetConnection("bar")); - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + await Assert.That(_dispatcher).IsNotNull(); + await Assert.That(GetConnection("foo")).IsNotNull(); + await Assert.That(GetConnection("bar")).IsNotNull(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); await Task.Delay(1000); @@ -96,7 +95,7 @@ public async Task When_Building_A_Dispatcher_With_Async() await Task.Delay(1000); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); await _dispatcher.End(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs index 94b65b674e..73ddab4ed6 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs @@ -1,4 +1,4 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RMQ.Async; @@ -7,7 +7,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessageDispatch; @@ -82,11 +81,11 @@ public DispatchBuilderWithNamedGateway() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] - public void When_building_a_dispatcher_with_named_gateway() + [Test] + public async Task When_building_a_dispatcher_with_named_gateway() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); + await Assert.That(_dispatcher).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway_async.cs index 6464804e57..434b024372 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RMQ.Async; @@ -7,7 +7,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessageDispatch; @@ -83,11 +82,11 @@ public DispatchBuilderWithNamedGatewayAsync() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] - public void When_building_a_dispatcher_with_named_gateway() + [Test] + public async Task When_building_a_dispatcher_with_named_gateway() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); + await Assert.That(_dispatcher).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs index c25e0df635..67c25afb2d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs @@ -3,15 +3,14 @@ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Acceptance; // Acceptance tests verify actual mTLS connections to Docker RabbitMQ // These tests run against the actual transport configured in Docker (per ADR #3946) -[Trait("Category", "RabbitMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Requires", "Docker-mTLS")] +[Category("RabbitMQ")] +[Category("MutualTLS")] +[Property("Requires", "Docker-mTLS")] public class RmqMutualTlsAcceptanceTests : IDisposable { private readonly string _clientCertPath; @@ -35,7 +34,7 @@ public void Dispose() // Cleanup if needed } - [Fact] + [Test] public async Task When_connecting_with_client_certificate_can_publish_message_async() { // Verify certificate exists @@ -68,13 +67,13 @@ public async Task When_connecting_with_client_certificate_can_publish_message_as await producer.SendAsync(message); // If we reach here, TLS handshake succeeded - Assert.True(true); + await Assert.That(true).IsTrue(); // Cleanup await producer.DisposeAsync(); } - [Fact] + [Test] public async Task When_connecting_with_mtls_can_publish_and_receive_message_async() { // Verify certificate exists @@ -114,10 +113,10 @@ public async Task When_connecting_with_mtls_can_publish_and_receive_message_asyn var receivedMessages = await consumer.ReceiveAsync(TimeSpan.FromSeconds(5)); // Assert - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages.First(); - Assert.Equal(sentMessage.Id, receivedMessage.Id); - Assert.Equal(sentMessage.Body.Value, receivedMessage.Body.Value); + await Assert.That(receivedMessage.Id).IsEqualTo(sentMessage.Id); + await Assert.That(receivedMessage.Body.Value).IsEqualTo(sentMessage.Body.Value); // Cleanup await producer.DisposeAsync(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs index 1606dfdea1..bef11b5332 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs @@ -11,7 +11,6 @@ using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Acceptance; @@ -24,10 +23,10 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Acceptance; /// These tests also verify Rule #1 (cross-gateway uniformity) by ensuring async behavior /// matches the sync variant's observability characteristics. /// -[Trait("Category", "RMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Category", "Observability")] -[Trait("Requires", "Docker-mTLS")] +[Category("RMQ")] +[Category("MutualTLS")] +[Category("Observability")] +[Property("Requires", "Docker-mTLS")] public class RmqMutualTlsObservabilityAsyncTests : IDisposable { private readonly string _clientCertPath; @@ -82,7 +81,7 @@ public void Dispose() /// This test verifies Rule #10 compliance: W3C Trace Context must flow through all gateways. /// Also verifies Rule #1 (cross-gateway uniformity): async works identically to sync. /// - [Fact] + [Test] public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved_async() { // Verify certificate exists @@ -125,11 +124,11 @@ public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved _tracerProvider.ForceFlush(); // Assert - TraceParent must be preserved - Assert.NotNull(message.Header.TraceParent); - Assert.NotEmpty(message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceParent.Value).IsNotEmpty(); // Verify traceparent format (00-{trace-id}-{span-id}-{flags}) - Assert.Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$", message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent.Value).Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$"); } finally { @@ -142,7 +141,7 @@ public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved /// This test verifies Rule #10 compliance: W3C Trace Context (TraceState, Baggage) must flow through all gateways. /// Also verifies Rule #1 (cross-gateway uniformity): async works identically to sync. /// - [Fact] + [Test] public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_are_preserved_async() { // Verify certificate exists @@ -185,21 +184,20 @@ public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_ _tracerProvider.ForceFlush(); // Assert - All W3C trace headers must be preserved - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify TraceState contains expected values - Assert.Contains("brighter=00f067aa0ba902b7", message.Header.TraceState); - Assert.Contains("congo=t61rcWkgMzE", message.Header.TraceState); + await Assert.That(message.Header.TraceState).Contains("brighter=00f067aa0ba902b7"); + await Assert.That(message.Header.TraceState).Contains("congo=t61rcWkgMzE"); // Verify Baggage contains expected values (baggage values may be URL-encoded) var baggageString = message.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); // Note: Colon in serverNode value is URL-encoded as %3A - Assert.True(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28"), - "Baggage should contain serverNode with value DF:28 (possibly URL-encoded)"); - Assert.Contains("isProduction=false", baggageString); + await Assert.That(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28")).IsTrue(); + await Assert.That(baggageString).Contains("isProduction=false"); } finally { @@ -212,7 +210,7 @@ public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_ /// This test verifies Rule #11 compliance: BrighterTracer.WriteProducerEvent must be called for all gateway producers. /// Also verifies Rule #1 (cross-gateway uniformity): async works identically to sync. /// - [Fact] + [Test] public async Task When_publishing_with_mtls_brighter_tracer_write_producer_event_is_called_async() { // Verify certificate exists @@ -264,10 +262,9 @@ public async Task When_publishing_with_mtls_brighter_tracer_write_producer_event // If producer event exists, BrighterTracer.WriteProducerEvent was called // Note: This verification depends on the tracer being properly configured // In production scenarios, this ensures observability is maintained with mTLS - Assert.True( - producerEvents.Any() || _exportedActivities.Any(), - "BrighterTracer should record producer events when publishing over mTLS (async)" - ); + await Assert.That( + producerEvents.Any() || _exportedActivities.Any() + ).IsTrue(); } finally { @@ -280,7 +277,7 @@ public async Task When_publishing_with_mtls_brighter_tracer_write_producer_event /// This test verifies Rule #12 compliance: CloudEvents trace context must survive serialization. /// Also verifies Rule #1 (cross-gateway uniformity): async works identically to sync. /// - [Fact] + [Test] public async Task When_publishing_cloudevents_trace_context_survives_mtls_serialization_async() { // Verify certificate exists @@ -325,21 +322,20 @@ public async Task When_publishing_cloudevents_trace_context_survives_mtls_serial // Assert - CloudEvents trace context must survive serialization // The message should contain trace headers that were propagated from the parent activity - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify the trace context is in a format compatible with CloudEvents // CloudEvents uses W3C Trace Context, so the format should be consistent - Assert.Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$", message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent.Value).Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$"); // Verify the message headers contain the trace information // This ensures that message creators can extract trace from CloudEvents // and message publishers can write trace to CloudEvents format - Assert.True( - message.Header.Bag.ContainsKey("traceparent") || message.Header.TraceParent != null, - "CloudEvents trace context (traceparent) must survive serialization over mTLS (async)" - ); + await Assert.That( + message.Header.Bag.ContainsKey("traceparent") || message.Header.TraceParent != null + ).IsTrue(); } finally { @@ -352,7 +348,7 @@ public async Task When_publishing_cloudevents_trace_context_survives_mtls_serial /// This test ensures observability works with both certificate configuration methods. /// Also verifies Rule #1 (cross-gateway uniformity): async works identically to sync. /// - [Fact] + [Test] public async Task When_publishing_with_certificate_from_file_path_trace_context_is_preserved_async() { // Verify certificate exists @@ -395,19 +391,18 @@ public async Task When_publishing_with_certificate_from_file_path_trace_context_ _tracerProvider.ForceFlush(); // Assert - Trace context must be preserved regardless of certificate configuration method - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify TraceState - Assert.Contains("brighter=00f067aa0ba902b7", message.Header.TraceState); + await Assert.That(message.Header.TraceState).Contains("brighter=00f067aa0ba902b7"); // Verify Baggage (baggage values may be URL-encoded) var baggageString = message.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); // Note: Colon in serverNode value is URL-encoded as %3A - Assert.True(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28"), - "Baggage should contain serverNode with value DF:28 (possibly URL-encoded)"); + await Assert.That(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28")).IsTrue(); } finally { diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs index fef4d81b5a..388f5e6197 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs @@ -8,7 +8,6 @@ using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Acceptance; @@ -22,11 +21,11 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Acceptance; /// Rule #11: BrighterTracer.WriteProducerEvent must be called for all producers /// Rule #12: CloudEvents trace context must survive serialization /// -[Trait("Category", "RabbitMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Category", "Quorum")] -[Trait("Category", "Observability")] -[Trait("Requires", "Docker-mTLS")] +[Category("RabbitMQ")] +[Category("MutualTLS")] +[Category("Quorum")] +[Category("Observability")] +[Property("Requires", "Docker-mTLS")] public class RmqMutualTlsQuorumObservabilityAsyncTests : IDisposable { private readonly string _clientCertPath; @@ -63,7 +62,7 @@ public RmqMutualTlsQuorumObservabilityAsyncTests() .Build(); } - [Fact] + [Test] public async Task When_publishing_with_mtls_and_quorum_trace_context_is_preserved_async() { // Arrange - mTLS connection @@ -123,19 +122,19 @@ public async Task When_publishing_with_mtls_and_quorum_trace_context_is_preserve var receivedMessages = await consumer.ReceiveAsync(TimeSpan.FromSeconds(5)); // Assert - Verify message was received - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages.First(); // Assert - Rule #10: TraceParent must be preserved - Assert.NotNull(receivedMessage.Header.TraceParent); - Assert.Contains(activity?.TraceId.ToString() ?? "", receivedMessage.Header.TraceParent.Value); + await Assert.That(receivedMessage.Header.TraceParent).IsNotNull(); + await Assert.That(receivedMessage.Header.TraceParent.Value).Contains(activity?.TraceId.ToString() ?? ""); // Assert - Rule #11: BrighterTracer.WriteProducerEvent was called // The presence of activities in our exporter confirms the tracer is working - Assert.NotEmpty(_exportedActivities); + await Assert.That(_exportedActivities).IsNotEmpty(); } - [Fact] + [Test] public async Task When_publishing_with_mtls_quorum_and_baggage_context_survives_async() { // Arrange - mTLS connection @@ -178,13 +177,13 @@ public async Task When_publishing_with_mtls_quorum_and_baggage_context_survives_ var receivedMessages = await consumer.ReceiveAsync(TimeSpan.FromSeconds(5)); // Assert - Baggage must survive (Rule #12) - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages.First(); - Assert.NotNull(receivedMessage.Header.Baggage); + await Assert.That(receivedMessage.Header.Baggage).IsNotNull(); var baggageString = receivedMessage.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); - Assert.Contains("serverNode=node-42", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); + await Assert.That(baggageString).Contains("serverNode=node-42"); } finally { diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events.cs index 578f7d7f21..f3afe342e0 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RMQBufferedConsumerCloudEventsTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -31,7 +30,7 @@ public RMQBufferedConsumerCloudEventsTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_uses_cloud_events_async() { //Post one more than batch size messages @@ -52,13 +51,13 @@ public async Task When_uses_cloud_events_async() var messages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); - Assert.Equal(messageOne.Header.MessageId, messages[0].Header.MessageId); - Assert.Equal(messageOne.Header.Subject, messages[0].Header.Subject); - Assert.Equal(messageOne.Header.Type, messages[0].Header.Type); - Assert.Equal(messageOne.Header.Source, messages[0].Header.Source); - Assert.Equal(messageOne.Header.DataSchema, messages[0].Header.DataSchema); + await Assert.That(messages[0].Header.MessageId).IsEqualTo(messageOne.Header.MessageId); + await Assert.That(messages[0].Header.Subject).IsEqualTo(messageOne.Header.Subject); + await Assert.That(messages[0].Header.Type).IsEqualTo(messageOne.Header.Type); + await Assert.That(messages[0].Header.Source).IsEqualTo(messageOne.Header.Source); + await Assert.That(messages[0].Header.DataSchema).IsEqualTo(messageOne.Header.DataSchema); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 8ecef01e5f..f35c8b9d36 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -1,11 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RMQBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -29,7 +28,7 @@ public RMQBufferedConsumerTestsAsync() new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync().GetAwaiter().GetResult(); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages() { //Post one more than batch size messages @@ -49,7 +48,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var messages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Equal(3, messages.Length); + await Assert.That(messages.Length).IsEqualTo(3); //ack those to remove from the queue foreach (var message in messages) @@ -64,7 +63,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() messages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(500)); //This time, just the one message - Assert.Equal(1, messages.Length); + await Assert.That(messages.Length).IsEqualTo(1); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs index f04daf5f60..d48bd649d8 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs @@ -3,11 +3,10 @@ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class AsyncRmqMessageConsumerConnectionClosedTests : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -37,7 +36,7 @@ public AsyncRmqMessageConsumerConnectionClosedTests() _badReceiver = new AlreadyClosedRmqMessageConsumer(rmqConnection, queueName, _sentMessage.Header.Topic, false, 1, false); } - [Fact] + [Test] public async Task When_a_message_consumer_throws_an_already_closed_exception_when_connecting() { await _sender.SendAsync(_sentMessage); @@ -50,10 +49,10 @@ public async Task When_a_message_consumer_throws_an_already_closed_exception_whe catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is AlreadyClosedException); + await Assert.That((cfe.InnerException) is AlreadyClosedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs index 9c72524030..13932d46d2 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class AsyncRmqMessageConsumerChannelFailureTests : IAsyncDisposable, IDisposable { @@ -59,7 +58,7 @@ public AsyncRmqMessageConsumerChannelFailureTests() _sender.SendAsync(sentMessage).GetAwaiter().GetResult(); } - [Fact] + [Test] public async Task When_a_message_consumer_throws_an_not_supported_exception_when_connecting() { //let messages propogate @@ -73,13 +72,12 @@ public async Task When_a_message_consumer_throws_an_not_supported_exception_when catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is NotSupportedException); + await Assert.That((cfe.InnerException) is NotSupportedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } - [Fact] public void Dispose() { ((IAmAMessageProducerSync)_sender).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs index 4b368367e5..26ab2abe08 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs @@ -27,11 +27,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class AsyncRmqMessageConsumerOperationInterruptedTestsAsync : IAsyncDisposable, IDisposable { private readonly IAmAMessageProducerAsync _sender; @@ -59,7 +58,7 @@ public AsyncRmqMessageConsumerOperationInterruptedTestsAsync() _sender.SendAsync(sentMessage).GetAwaiter().GetResult(); } - [Fact] + [Test] public async Task When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting() { bool exceptionHappened = false; @@ -70,10 +69,10 @@ public async Task When_a_message_consumer_throws_an_operation_interrupted_excep catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is OperationInterruptedException); + await Assert.That((cfe.InnerException) is OperationInterruptedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs index 0d7eb02fbf..cef5fa860c 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class AsyncRmqMessageConsumerMultipleTopicTests : IAsyncDisposable, IDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -43,7 +42,7 @@ public AsyncRmqMessageConsumerMultipleTopicTests() new QueueFactory(rmqConnection, queueName, topics).CreateAsync().GetAwaiter().GetResult(); } - [Fact] + [Test] public async Task When_reading_a_message_from_a_channel_with_multiple_topics() { await _messageProducer.SendAsync(_messageTopic1); @@ -57,11 +56,11 @@ public async Task When_reading_a_message_from_a_channel_with_multiple_topics() var topic2Result = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); await _messageConsumer.AcknowledgeAsync(topic2Result); - Assert.Equal(_messageTopic1.Header.Topic, topic1Result.Header.Topic); - Assert.Equivalent(_messageTopic1.Body.Value, topic1Result.Body.Value); + await Assert.That(topic1Result.Header.Topic).IsEqualTo(_messageTopic1.Header.Topic); + await Assert.That(topic1Result.Body.Value).IsEquivalentTo(_messageTopic1.Body.Value); - Assert.Equal(_messageTopic2.Header.Topic, topic2Result.Header.Topic); - Assert.Equivalent(_messageTopic2.Body.Value, topic2Result.Body.Value); + await Assert.That(topic2Result.Header.Topic).IsEqualTo(_messageTopic2.Header.Topic); + await Assert.That(topic2Result.Body.Value).IsEquivalentTo(_messageTopic2.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_multiple_messages_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_multiple_messages_via_the_messaging_gateway_async.cs index 558223779d..aabf4c118a 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_multiple_messages_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_multiple_messages_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,11 +27,10 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerConfirmationsMultipleMessagesAsyncTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -65,7 +64,7 @@ public RmqMessageProducerConfirmationsMultipleMessagesAsyncTests() .GetResult(); } - [Fact] + [Test] public async Task When_confirming_multiple_messages_via_the_messaging_gateway_async() { // Subscribe to the OnMessagePublished event @@ -84,7 +83,7 @@ public async Task When_confirming_multiple_messages_via_the_messaging_gateway_as await Task.Delay(1000); // Verify that OnMessagePublished was called for all messages - Assert.Equal(_numberOfMessages, _totalPublished); + await Assert.That(_totalPublished).IsEqualTo(_numberOfMessages); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_posting_a_message_via_the_messaging_gateway_async.cs index bec51f0d6d..5e91ac9b52 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_confirming_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,11 +25,10 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerConfirmationsSendMessageAsyncTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -55,7 +54,7 @@ public RmqMessageProducerConfirmationsSendMessageAsyncTests() { if (success) { - Assert.Equal(_message.Id, guid); + if (guid != _message.Id) throw new Exception($"Expected guid {_message.Id} but got {guid}"); _messageWasPublished = true; _messageWasNotPublished = false; } @@ -72,15 +71,15 @@ public RmqMessageProducerConfirmationsSendMessageAsyncTests() .GetResult(); } - [Fact] + [Test] public async Task When_confirming_posting_a_message_via_the_messaging_gateway_async() { await _messageProducer.SendAsync(_message); await Task.Delay(500); - Assert.False(_messageWasNotPublished); - Assert.True(_messageWasPublished); + await Assert.That(_messageWasNotPublished).IsFalse(); + await Assert.That(_messageWasPublished).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_creating_quorum_queue_validation.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_creating_quorum_queue_validation.cs index 73a9b44d03..a6134ae156 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_creating_quorum_queue_validation.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_creating_quorum_queue_validation.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -26,15 +26,14 @@ THE SOFTWARE. */ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageConsumerQuorumValidationTests { - [Fact] - public void When_creating_quorum_consumer_without_durability_should_throw() + [Test] + public async Task When_creating_quorum_consumer_without_durability_should_throw() { var rmqConnection = new RmqMessagingGatewayConnection { @@ -45,17 +44,17 @@ public void When_creating_quorum_consumer_without_durability_should_throw() var queueName = new ChannelName(Guid.NewGuid().ToString()); var routingKey = new RoutingKey(Guid.NewGuid().ToString()); - var exception = Assert.Throws(() => + var exception = Assert.ThrowsExactly(() => new RmqMessageConsumer(rmqConnection, queueName, routingKey, isDurable: false, // This should cause the exception highAvailability: false, queueType: QueueType.Quorum)); - Assert.Contains("Quorum queues require durability to be enabled", exception.Message); + await Assert.That(exception.Message).Contains("Quorum queues require durability to be enabled"); } - [Fact] - public void When_creating_quorum_consumer_with_high_availability_should_throw() + [Test] + public async Task When_creating_quorum_consumer_with_high_availability_should_throw() { var rmqConnection = new RmqMessagingGatewayConnection { @@ -66,17 +65,17 @@ public void When_creating_quorum_consumer_with_high_availability_should_throw() var queueName = new ChannelName(Guid.NewGuid().ToString()); var routingKey = new RoutingKey(Guid.NewGuid().ToString()); - var exception = Assert.Throws(() => + var exception = Assert.ThrowsExactly(() => new RmqMessageConsumer(rmqConnection, queueName, routingKey, isDurable: true, highAvailability: true, // This should cause the exception queueType: QueueType.Quorum)); - Assert.Contains("Quorum queues do not support high availability mirroring", exception.Message); + await Assert.That(exception.Message).Contains("Quorum queues do not support high availability mirroring"); } - [Fact] - public void When_creating_quorum_consumer_with_correct_settings_should_succeed() + [Test] + public async Task When_creating_quorum_consumer_with_correct_settings_should_succeed() { var rmqConnection = new RmqMessagingGatewayConnection { @@ -98,10 +97,10 @@ public void When_creating_quorum_consumer_with_correct_settings_should_succeed() .GetAwaiter() .GetResult(); - Assert.NotNull(consumer); + await Assert.That(consumer).IsNotNull(); } - [Fact] + [Test] public async Task When_creating_classic_consumer_with_default_settings_should_succeed() { var rmqConnection = new RmqMessagingGatewayConnection @@ -120,8 +119,8 @@ public async Task When_creating_classic_consumer_with_default_settings_should_su queueType: QueueType.Classic); var message = await consumer.ReceiveAsync(TimeSpan.FromMilliseconds(100)); - Assert.Equal(MessageType.MT_NONE, message.Single().Header.MessageType); + await Assert.That(message.Single().Header.MessageType).IsEqualTo(MessageType.MT_NONE); - Assert.NotNull(consumer); + await Assert.That(consumer).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs index 15711ceb21..1b455a40cb 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -42,7 +41,7 @@ public RmqAssumeExistingInfrastructureTestsAsync() .GetResult() ; } - [Fact] + [Test] public async Task When_infrastructure_exists_can_assume_producer() { var exceptionThrown = false; @@ -57,7 +56,7 @@ public async Task When_infrastructure_exists_can_assume_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs index 093785c2ff..3bcdd735f9 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -42,7 +41,7 @@ public RmqValidateExistingInfrastructureTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_infrastructure_exists_can_validate_producer() { var exceptionThrown = false; @@ -57,7 +56,7 @@ public async Task When_infrastructure_exists_can_validate_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs index 11cc1b1a6a..5b6927e85d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs @@ -2,11 +2,10 @@ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerSupportsMultipleThreadsTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -28,7 +27,7 @@ public RmqMessageProducerSupportsMultipleThreadsTestsAsync() _messageProducer = new RmqMessageProducer(rmqConnection); } - [Fact] + [Test] public async Task When_multiple_threads_try_to_post_a_message_at_the_same_time() { bool exceptionHappened = false; @@ -46,7 +45,7 @@ await Parallel.ForEachAsync(Enumerable.Range(0, 10), options, async (_, ct) => } //_should_not_throw - Assert.False(exceptionHappened); + await Assert.That(exceptionHappened).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_but_no_broker_created_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_but_no_broker_created_async.cs index 2ce3ce5e43..9842379d0e 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_but_no_broker_created_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_but_no_broker_created_async.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -27,7 +26,7 @@ public RmqBrokerNotPreCreatedTestsAsync() } - [Fact] + [Test] public async Task When_posting_a_message_but_no_broker_created() { bool exceptionHappened = false; @@ -40,7 +39,7 @@ public async Task When_posting_a_message_but_no_broker_created() exceptionHappened = true; } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs index 0624430bb9..c4b9a9bb0e 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerSendPersistentMessageTestsAsync : IDisposable, IAsyncDisposable { private IAmAMessageProducerAsync _messageProducer; @@ -38,7 +37,7 @@ public RmqMessageProducerSendPersistentMessageTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_posting_a_message_to_persist_via_the_messaging_gateway() { // arrange @@ -48,7 +47,7 @@ public async Task When_posting_a_message_to_persist_via_the_messaging_gateway() var result = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).First(); // assert - Assert.Equal(true, result.Persist); + await Assert.That(result.Persist).IsEqualTo(true); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 65062d8419..1227814145 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -29,11 +29,10 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerSendMessageTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -97,7 +96,7 @@ public RmqMessageProducerSendMessageTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway() { await _messageProducer.SendAsync(_message); @@ -105,25 +104,25 @@ public async Task When_posting_a_message_via_the_messaging_gateway() var result = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId, result.Header.MessageId); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.MessageId).IsEqualTo(_message.Header.MessageId); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs index 544e5d6ea5..ef65b63f34 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -29,11 +29,10 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerSendMessageQuorumTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -97,7 +96,7 @@ public RmqMessageProducerSendMessageQuorumTestsAsync() queueType: QueueType.Quorum); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway_with_quorum_queue() { //we need to do this to create the queue @@ -112,25 +111,25 @@ public async Task When_posting_a_message_via_the_messaging_gateway_with_quorum_q var result = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId, result.Header.MessageId); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.MessageId).IsEqualTo(_message.Header.MessageId); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs index 5bc7a9790d..553b4041a7 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerQueueLengthTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -74,7 +73,7 @@ public RmqMessageProducerQueueLengthTestsAsync() } - [Fact] + [Test] public async Task When_rejecting_a_message_due_to_queue_length() { //create the infrastructure @@ -93,7 +92,7 @@ public async Task When_rejecting_a_message_due_to_queue_length() //try to grab the next message var nextMessages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); message = nextMessages.First(); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs index 43c22010ef..33ed7e885e 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,11 +27,10 @@ THE SOFTWARE. */ using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerDelayedMessageTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -67,39 +66,39 @@ public RmqMessageProducerDelayedMessageTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_reading_a_delayed_message_via_the_messaging_gateway() { await _messageProducer.SendWithDelayAsync(_message, TimeSpan.FromMilliseconds(3000)); var immediateResult = (await _messageConsumer.ReceiveAsync(TimeSpan.Zero)).First(); var deliveredWithoutWait = immediateResult.Header.MessageType == MessageType.MT_NONE; - Assert.Equal(0, immediateResult.Header.HandledCount); - Assert.Equal(TimeSpan.Zero, immediateResult.Header.Delayed); + await Assert.That(immediateResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(immediateResult.Header.Delayed).IsEqualTo(TimeSpan.Zero); //_should_have_not_been_able_get_message_before_delay - Assert.True(deliveredWithoutWait); + await Assert.That(deliveredWithoutWait).IsTrue(); var delayedResult = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); //_should_send_a_message_via_rmq_with_the_matching_body - Assert.Equal(_message.Body.Value, delayedResult.Body.Value); - Assert.Equal(MessageType.MT_COMMAND, delayedResult.Header.MessageType); - Assert.Equal(0, delayedResult.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(3000), delayedResult.Header.Delayed); + await Assert.That(delayedResult.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(delayedResult.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(delayedResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(delayedResult.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(3000)); await _messageConsumer.AcknowledgeAsync(delayedResult); } - [Fact] + [Test] public async Task When_requeing_a_failed_message_with_delay() { //send & receive a message await _messageProducer.SendAsync(_message); var message = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(0), message.Header.Delayed); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(0)); await _messageConsumer.AcknowledgeAsync(message); @@ -109,8 +108,8 @@ public async Task When_requeing_a_failed_message_with_delay() //receive and assert var message2 = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000))).Single(); - Assert.Equal(MessageType.MT_COMMAND, message2.Header.MessageType); - Assert.Equal(1, message2.Header.HandledCount); + await Assert.That(message2.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message2.Header.HandledCount).IsEqualTo(1); await _messageConsumer.AcknowledgeAsync(message2); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs index c2f9f69c55..ecf44f114b 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,11 +27,10 @@ THE SOFTWARE. */ using System.Net.Mime; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerDLQTestsAsync : IDisposable, IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -84,7 +83,7 @@ public RmqMessageProducerDLQTestsAsync() ); } - [Fact] + [Test] public async Task When_rejecting_a_message_to_a_dead_letter_queue() { //create the infrastructure @@ -100,8 +99,8 @@ public async Task When_rejecting_a_message_to_a_dead_letter_queue() var dlqMessage = (await _deadLetterConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); //assert this is our message - Assert.Equal(_message.Id, dlqMessage.Id); - Assert.Equal(dlqMessage.Body.Value, message.Body.Value); + await Assert.That(dlqMessage.Id).IsEqualTo(_message.Id); + await Assert.That(message.Body.Value).IsEqualTo(dlqMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_requeuing_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_requeuing_a_message_via_the_messaging_gateway.cs index d598dcf464..660c4b9609 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_requeuing_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_requeuing_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -29,11 +29,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerRequeuingMessageTests : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -105,7 +104,7 @@ public RmqMessageProducerRequeuingMessageTests() .GetResult(); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway_async() { await _messageProducer.SendAsync(_message); @@ -116,25 +115,25 @@ public async Task When_posting_a_message_via_the_messaging_gateway_async() result = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId.ToString(), result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]).IsEqualTo(_message.Header.MessageId.ToString()); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_resetting_a_connection_that_exists.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_resetting_a_connection_that_exists.cs index 3b7be680ea..42022bbdd9 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_resetting_a_connection_that_exists.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_resetting_a_connection_that_exists.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,11 +25,10 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using RabbitMQ.Client; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RMQMessageGatewayConnectionPoolResetConnectionExists { private readonly RmqMessageGatewayConnectionPool _connectionPool; @@ -44,13 +43,13 @@ public RMQMessageGatewayConnectionPoolResetConnectionExists() _originalConnection = _connectionPool.GetConnection(connectionFactory); } - [Fact] + [Test] public async Task When_resetting_a_connection_that_exists() { var connectionFactory = new ConnectionFactory{HostName = "localhost"}; await _connectionPool.ResetConnectionAsync(connectionFactory); - Assert.NotSame(_originalConnection, (await _connectionPool.GetConnectionAsync(connectionFactory))); + await Assert.That((await _connectionPool.GetConnectionAsync(connectionFactory))).IsNotSameReferenceAs(_originalConnection); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_retry_limits_force_a_message_onto_the_DLQ_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_retry_limits_force_a_message_onto_the_DLQ_async.cs index 1e0a00a6b1..e913954b10 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_retry_limits_force_a_message_onto_the_DLQ_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_retry_limits_force_a_message_onto_the_DLQ_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using System.Text.Json; @@ -9,11 +9,10 @@ using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RMQMessageConsumerRetryDLQTestsAsync : IDisposable { private readonly IAmAMessagePump _messagePump; @@ -115,8 +114,8 @@ public RMQMessageConsumerRetryDLQTestsAsync() ); } - [Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] - //[Fact] + [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] + //[Test] public async Task When_retry_limits_force_a_message_onto_the_dlq() { //NOTE: This test is **slow** because it needs to ensure infrastructure and then wait whilst we requeue a message a number of times, @@ -145,8 +144,8 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() var dlqMessage = (await _deadLetterConsumer.ReceiveAsync(new TimeSpan(10000))).First(); //assert this is our message - Assert.Equal(MessageType.MT_COMMAND, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); await _deadLetterConsumer.AcknowledgeAsync(dlqMessage); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs index 5f8840739d..39ee1f7d48 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -36,7 +35,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; /// the producer should have the scheduler configured so that delayed sends use the scheduler /// rather than falling back to native publish without delay. /// -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RMQMessageConsumerProducerTopicSchedulerTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -79,39 +78,37 @@ public RMQMessageConsumerProducerTopicSchedulerTestsAsync() .GetResult(); } - [Fact] + [Test] public async Task When_requeuing_with_delay_should_use_scheduler() { // Arrange - send and receive a message await _messageProducer.SendAsync(_message); var received = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEmpty(received); - Assert.NotEqual(MessageType.MT_NONE, received[0].Header.MessageType); + await Assert.That(received).IsNotEmpty(); + await Assert.That(received[0].Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with delay await _consumer.RequeueAsync(received[0], TimeSpan.FromSeconds(5)); // Assert - scheduler should have been called (proving producer has scheduler configured) - Assert.True(_scheduler.ScheduleAsyncCalled, - "Scheduler.ScheduleAsync should have been called via the lazily created producer"); - Assert.Equal(_message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(_message.Body.Value); } - [Fact] + [Test] public async Task When_requeuing_with_zero_delay_should_not_create_producer() { // Arrange - send and receive a message await _messageProducer.SendAsync(_message); var received = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEmpty(received); - Assert.NotEqual(MessageType.MT_NONE, received[0].Header.MessageType); + await Assert.That(received).IsNotEmpty(); + await Assert.That(received[0].Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with zero delay (uses direct requeue, not producer) await _consumer.RequeueAsync(received[0], TimeSpan.Zero); // Assert - scheduler should NOT have been called - Assert.False(_scheduler.ScheduleAsyncCalled, - "Scheduler should not be called for zero-delay requeue"); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsFalse(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_disposes_should_dispose_producer.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_disposes_should_dispose_producer.cs index d57457879d..990e4958c4 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_disposes_should_dispose_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_disposes_should_dispose_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -35,7 +34,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; /// When the RMQ async consumer is disposed, it should also dispose any lazily created producer. /// If no producer was created, disposal should still succeed without error. /// -[Trait("Category", "RMQ")] +[Category("RMQ")] public class When_rmq_async_consumer_disposes_should_dispose_producer { private readonly RmqMessagingGatewayConnection _rmqConnection; @@ -49,8 +48,8 @@ public When_rmq_async_consumer_disposes_should_dispose_producer() }; } - [Fact] - public void When_disposing_without_producer_created_should_not_throw() + [Test] + public async Task When_disposing_without_producer_created_should_not_throw() { // Arrange - consumer that never requeued with delay (no producer created) var consumer = new RmqMessageConsumer( @@ -60,11 +59,10 @@ public void When_disposing_without_producer_created_should_not_throw() isDurable: false); // Act & Assert - should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] + [Test] public async Task When_disposing_after_delayed_requeue_should_not_throw() { // Arrange @@ -93,17 +91,16 @@ public async Task When_disposing_after_delayed_requeue_should_not_throw() // Send, receive, and requeue with delay to trigger producer creation await sendProducer.SendAsync(message); var received = await consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); await consumer.RequeueAsync(received[0], TimeSpan.FromSeconds(5)); // Act & Assert - disposing consumer should also dispose the lazily created producer - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); sendProducer.Dispose(); } - [Fact] + [Test] public async Task When_disposing_async_after_delayed_requeue_should_not_throw() { // Arrange @@ -132,12 +129,11 @@ public async Task When_disposing_async_after_delayed_requeue_should_not_throw() // Send, receive, and requeue with delay to trigger producer creation await sendProducer.SendAsync(message); var received = await consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEmpty(received); + await Assert.That(received).IsNotEmpty(); await consumer.RequeueAsync(received[0], TimeSpan.FromSeconds(5)); // Act & Assert - async disposing consumer should also dispose the lazily created producer - var exception = await Record.ExceptionAsync(async () => await consumer.DisposeAsync()); - Assert.Null(exception); + await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); await sendProducer.DisposeAsync(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs index 9cf5d4e683..d91216ee47 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; @@ -37,7 +36,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; /// with Task.Delay. This ensures the pump thread is freed immediately while the scheduler handles /// the delayed redelivery. /// -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMesageConsumerDelayTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -78,13 +77,13 @@ public RmqMesageConsumerDelayTestsAsync () .GetResult(); } - [Fact] + [Test] public async Task When_requeuing_with_delay_should_not_block_pump() { // Arrange - send and receive a message await _messageProducer.SendAsync(_message); var received = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with a significant delay (5 seconds) var stopwatch = Stopwatch.StartNew(); @@ -92,15 +91,14 @@ public async Task When_requeuing_with_delay_should_not_block_pump() stopwatch.Stop(); // Assert - requeue should return true - Assert.True(result, "Requeue should succeed"); + await Assert.That(result).IsTrue(); // Assert - requeue should complete quickly, proving Task.Delay is NOT used to block the pump - Assert.True(stopwatch.Elapsed < TimeSpan.FromSeconds(2), - $"Requeue should not block with Task.Delay; took {stopwatch.Elapsed.TotalSeconds:F1}s"); + await Assert.That(stopwatch.Elapsed < TimeSpan.FromSeconds(2)).IsTrue(); // Assert - message should be available on the queue (published via producer through exchange) var requeued = await _channel.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); - Assert.Equal(_message.Body.Value, requeued.Body.Value); + await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_sending_a_message_should_propagate_context.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_sending_a_message_should_propagate_context.cs index 5a1cf59b93..67e55f3011 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_sending_a_message_should_propagate_context.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_sending_a_message_should_propagate_context.cs @@ -8,12 +8,11 @@ using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor { - [Trait("Category", "RMQ")] + [Category("RMQ")] public class RmqMessageProducerPropagateContextTests : IDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -61,7 +60,7 @@ public RmqMessageProducerPropagateContextTests() }; } - [Fact] + [Test] public async Task When_Sending_A_Message_Should_Propagate_Context() { //arrange @@ -76,9 +75,9 @@ public async Task When_Sending_A_Message_Should_Propagate_Context() .SelectMany(a => a.Events) .FirstOrDefault(e => e.Name == $"{_message.Header.Topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.NotNull(_message.Header.TraceParent); - Assert.Equal("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE", _message.Header.TraceState); - Assert.Equal("key=value,key2=value2", _message.Header.Baggage.ToString()); + await Assert.That(_message.Header.TraceParent).IsNotNull(); + await Assert.That(_message.Header.TraceState).IsEqualTo("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE"); + await Assert.That(_message.Header.Baggage.ToString()).IsEqualTo("key=value,key2=value2"); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs index 27272990a5..80831235e5 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,11 +26,10 @@ THE SOFTWARE. */ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -[Trait("Category", "RMQ")] +[Category("RMQ")] public class RmqMessageProducerTTLTests : IAsyncDisposable, IDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -73,7 +72,7 @@ public RmqMessageProducerTTLTests () } - [Fact] + [Test] public async Task When_rejecting_a_message_to_a_dead_letter_queue() { await _messageProducer.SendAsync(_messageOne); @@ -81,7 +80,7 @@ public async Task When_rejecting_a_message_to_a_dead_letter_queue() //check messages are flowing - absence needs to be expiry var messageOne = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000))).First(); - Assert.Equal(_messageOne.Id, messageOne.Id); + await Assert.That(messageOne.Id).IsEqualTo(_messageOne.Id); //Let it expire await Task.Delay(11000); @@ -89,7 +88,7 @@ public async Task When_rejecting_a_message_to_a_dead_letter_queue() var dlqMessage = (await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000))).First(); //assert this is our message - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs index 8d4f4f7a58..a1b3788909 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RMQBufferedConsumerCloudEventsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -32,8 +31,8 @@ public RMQBufferedConsumerCloudEventsTests() .GetResult(); } - [Fact] - public void When_uses_cloud_events() + [Test] + public async Task When_uses_cloud_events() { //Post one more than batch size messages var messageOne = new Message( @@ -53,13 +52,13 @@ public void When_uses_cloud_events() var messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); - Assert.Equal(messageOne.Header.MessageId, messages[0].Header.MessageId); - Assert.Equal(messageOne.Header.Subject, messages[0].Header.Subject); - Assert.Equal(messageOne.Header.Type, messages[0].Header.Type); - Assert.Equal(messageOne.Header.Source, messages[0].Header.Source); - Assert.Equal(messageOne.Header.DataSchema, messages[0].Header.DataSchema); + await Assert.That(messages[0].Header.MessageId).IsEqualTo(messageOne.Header.MessageId); + await Assert.That(messages[0].Header.Subject).IsEqualTo(messageOne.Header.Subject); + await Assert.That(messages[0].Header.Type).IsEqualTo(messageOne.Header.Type); + await Assert.That(messages[0].Header.Source).IsEqualTo(messageOne.Header.Source); + await Assert.That(messages[0].Header.DataSchema).IsEqualTo(messageOne.Header.DataSchema); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 719ee5d8ff..53365cde45 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RMQBufferedConsumerTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -30,8 +29,8 @@ public RMQBufferedConsumerTests() new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync().GetAwaiter().GetResult(); } - [Fact] - public void When_a_message_consumer_reads_multiple_messages() + [Test] + public async Task When_a_message_consumer_reads_multiple_messages() { //Post one more than batch size messages var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content One")); @@ -50,7 +49,7 @@ public void When_a_message_consumer_reads_multiple_messages() var messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Equal(3, messages.Length); + await Assert.That(messages.Length).IsEqualTo(3); //ack those to remove from the queue foreach (var message in messages) @@ -65,7 +64,7 @@ public void When_a_message_consumer_reads_multiple_messages() messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(500)); //This time, just the one message - Assert.Equal(1, messages.Length); + await Assert.That(messages.Length).IsEqualTo(1); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs index 396746cd60..ca45d29f99 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs @@ -2,12 +2,11 @@ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerConnectionClosedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -38,8 +37,8 @@ public RmqMessageConsumerConnectionClosedTests() } - [Fact] - public void When_a_message_consumer_throws_an_already_closed_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_already_closed_exception_when_connecting() { _sender.Send(_sentMessage); @@ -51,10 +50,10 @@ public void When_a_message_consumer_throws_an_already_closed_exception_when_conn catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is AlreadyClosedException); + await Assert.That((cfe.InnerException) is AlreadyClosedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs index 98d52930d7..c8f8038446 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerChannelFailureTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -58,8 +57,8 @@ public RmqMessageConsumerChannelFailureTests() _sender.Send(sentMessage); } - [Fact] - public void When_a_message_consumer_throws_an_not_supported_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_not_supported_exception_when_connecting() { bool exceptionHappened = false; try @@ -69,13 +68,12 @@ public void When_a_message_consumer_throws_an_not_supported_exception_when_conne catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is NotSupportedException); + await Assert.That((cfe.InnerException) is NotSupportedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } - [Fact] public void Dispose() { _sender.Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs index 35e977b297..9617b85140 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs @@ -26,12 +26,11 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerOperationInterruptedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -59,8 +58,8 @@ public RmqMessageConsumerOperationInterruptedTests() _sender.Send(sentMessage); } - [Fact] - public void When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting() { bool exceptionHappened = false; try @@ -70,10 +69,10 @@ public void When_a_message_consumer_throws_an_operation_interrupted_exception_w catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is OperationInterruptedException); + await Assert.That((cfe.InnerException) is OperationInterruptedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs index 9021d7d0cc..9848e31b67 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerMultipleTopicTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -44,8 +43,8 @@ public RmqMessageConsumerMultipleTopicTests() new QueueFactory(rmqConnection, queueName, topics).CreateAsync().GetAwaiter().GetResult(); } - [Fact] - public void When_reading_a_message_from_a_channel_with_multiple_topics() + [Test] + public async Task When_reading_a_message_from_a_channel_with_multiple_topics() { _messageProducer.Send(_messageTopic1); _messageProducer.Send(_messageTopic2); @@ -58,11 +57,11 @@ public void When_reading_a_message_from_a_channel_with_multiple_topics() var topic2Result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); _messageConsumer.Acknowledge(topic2Result); - Assert.Equal(_messageTopic1.Header.Topic, topic1Result.Header.Topic); - Assert.Equivalent(_messageTopic1.Body.Value, topic1Result.Body.Value); + await Assert.That(topic1Result.Header.Topic).IsEqualTo(_messageTopic1.Header.Topic); + await Assert.That(topic1Result.Body.Value).IsEquivalentTo(_messageTopic1.Body.Value); - Assert.Equal(_messageTopic2.Header.Topic, topic2Result.Header.Topic); - Assert.Equivalent(_messageTopic2.Body.Value, topic2Result.Body.Value); + await Assert.That(topic2Result.Header.Topic).IsEqualTo(_messageTopic2.Header.Topic); + await Assert.That(topic2Result.Body.Value).IsEquivalentTo(_messageTopic2.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs index 6c3550cf78..474e23fc3f 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,12 +27,11 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsMultipleMessagesTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -66,7 +65,7 @@ public RmqMessageProducerConfirmationsMultipleMessagesTests() .GetResult(); } - [Fact] + [Test] public async Task When_confirming_multiple_messages_via_the_messaging_gateway() { // Subscribe to the OnMessagePublished event @@ -85,7 +84,7 @@ public async Task When_confirming_multiple_messages_via_the_messaging_gateway() await Task.Delay(1000); // Verify that OnMessagePublished was called for all messages - Assert.Equal(_numberOfMessages, _totalPublished); + await Assert.That(_totalPublished).IsEqualTo(_numberOfMessages); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index 5aeeddd37f..b74f400900 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsSendMessageTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -56,7 +55,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () { if (success) { - Assert.Equal(_message.Id, guid); + if (guid != _message.Id) throw new Exception($"Expected guid {_message.Id} but got {guid}"); _messageWasPublished = true; _messageWasNotPublished = false; } @@ -73,7 +72,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () .GetResult(); } - [Fact] + [Test] public async Task When_confirming_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); @@ -81,9 +80,9 @@ public async Task When_confirming_posting_a_message_via_the_messaging_gateway() await Task.Delay(500); //if this is true, then possible test failed because of timeout or RMQ issues - Assert.False(_messageWasNotPublished); + await Assert.That(_messageWasNotPublished).IsFalse(); //did we see the message - intent to test logic here - Assert.True(_messageWasPublished); + await Assert.That(_messageWasPublished).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs index b0ded5ad20..b2343363b6 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs @@ -1,10 +1,9 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Collection("RMQ")] +[NotInParallel("RMQ")] public class RmqAssumeExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -42,8 +41,8 @@ public RmqAssumeExistingInfrastructureTests() .GetResult() ; } - [Fact] - public void When_infrastructure_exists_can_assume_producer() + [Test] + public async Task When_infrastructure_exists_can_assume_producer() { var exceptionThrown = false; try @@ -57,7 +56,7 @@ public void When_infrastructure_exists_can_assume_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs index 64ee624cd0..7e7969394c 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs @@ -1,10 +1,9 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Collection("RMQ")] +[NotInParallel("RMQ")] public class RmqValidateExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -42,8 +41,8 @@ public RmqValidateExistingInfrastructureTests() .GetResult(); } - [Fact] - public void When_infrastructure_exists_can_validate_producer() + [Test] + public async Task When_infrastructure_exists_can_validate_producer() { var exceptionThrown = false; try @@ -57,7 +56,7 @@ public void When_infrastructure_exists_can_validate_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs index 74ea084d35..03cd287ea9 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs @@ -2,12 +2,11 @@ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSupportsMultipleThreadsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -29,8 +28,8 @@ public RmqMessageProducerSupportsMultipleThreadsTests() _messageProducer = new RmqMessageProducer(rmqConnection); } - [Fact] - public void When_multiple_threads_try_to_post_a_message_at_the_same_time() + [Test] + public async Task When_multiple_threads_try_to_post_a_message_at_the_same_time() { bool exceptionHappened = false; try @@ -46,7 +45,7 @@ public void When_multiple_threads_try_to_post_a_message_at_the_same_time() } //_should_not_throw - Assert.False(exceptionHappened); + await Assert.That(exceptionHappened).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs index f9505e9be1..d8f44bf226 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs @@ -1,10 +1,9 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Collection("RMQ")] +[NotInParallel("RMQ")] public class RmqBrokerNotPreCreatedTests : IDisposable { private Message _message; @@ -27,10 +26,10 @@ public RmqBrokerNotPreCreatedTests() } - [Fact] - public void When_posting_a_message_but_no_broker_created() + [Test] + public async Task When_posting_a_message_but_no_broker_created() { - Assert.Throws(() => _messageProducer.Send(_message)); + await Assert.That(() => _messageProducer.Send(_message)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs index a067c4016c..3ede48fa53 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSendPersistentMessageTests : IDisposable { private IAmAMessageProducerSync _messageProducer; @@ -38,8 +37,8 @@ public RmqMessageProducerSendPersistentMessageTests() .GetResult(); } - [Fact] - public void When_posting_a_message_to_persist_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_to_persist_via_the_messaging_gateway() { // arrange _messageProducer.Send(_message); @@ -48,7 +47,7 @@ public void When_posting_a_message_to_persist_via_the_messaging_gateway() var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).First(); // assert - Assert.Equal(true, result.Persist); + await Assert.That(result.Persist).IsEqualTo(true); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 9ec7a4fc37..6b27962957 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -28,12 +28,11 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -97,33 +96,33 @@ public RmqMessageProducerSendMessageTests() .GetResult(); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId, result.Header.MessageId); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.MessageId).IsEqualTo(_message.Header.MessageId); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs index 414d4d2653..1820f7d176 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -29,12 +29,11 @@ THE SOFTWARE. */ using Paramore.Brighter.Extensions; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageQuorumTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -99,8 +98,8 @@ public RmqMessageProducerSendMessageQuorumTests() } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway_with_quorum_queue() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway_with_quorum_queue() { //we need to do this to create the queue _messageConsumer.Receive(TimeSpan.FromMilliseconds(100)); @@ -114,25 +113,25 @@ public void When_posting_a_message_via_the_messaging_gateway_with_quorum_queue() var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId, result.Header.MessageId); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.MessageId).IsEqualTo(_message.Header.MessageId); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs index 634d1a2911..1509d87ebc 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerQueueLengthTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -73,8 +72,8 @@ public RmqMessageProducerQueueLengthTests() ); } - [Fact] - public void When_rejecting_a_message_due_to_queue_length() + [Test] + public async Task When_rejecting_a_message_due_to_queue_length() { //create the infrastructure _messageConsumer.Receive(TimeSpan.Zero); @@ -92,7 +91,7 @@ public void When_rejecting_a_message_due_to_queue_length() //try to grab the next message var nextMessages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(5000)); message = nextMessages.First(); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs index b9f7462f24..f9ccecd335 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,12 +26,11 @@ THE SOFTWARE. */ using System.Linq; using System.Net.Mime; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerDelayedMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -64,39 +63,39 @@ public RmqMessageProducerDelayedMessageTests() .GetResult(); } - [Fact] - public void When_reading_a_delayed_message_via_the_messaging_gateway() + [Test] + public async Task When_reading_a_delayed_message_via_the_messaging_gateway() { _messageProducer.SendWithDelay(_message, TimeSpan.FromMilliseconds(3000)); var immediateResult = _messageConsumer.Receive(TimeSpan.Zero).First(); var deliveredWithoutWait = immediateResult.Header.MessageType == MessageType.MT_NONE; - Assert.Equal(0, immediateResult.Header.HandledCount); - Assert.Equal(TimeSpan.Zero, immediateResult.Header.Delayed); + await Assert.That(immediateResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(immediateResult.Header.Delayed).IsEqualTo(TimeSpan.Zero); //_should_have_not_been_able_get_message_before_delay - Assert.True(deliveredWithoutWait); + await Assert.That(deliveredWithoutWait).IsTrue(); var delayedResult = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); //_should_send_a_message_via_rmq_with_the_matching_body - Assert.Equal(_message.Body.Value, delayedResult.Body.Value); - Assert.Equal(MessageType.MT_COMMAND, delayedResult.Header.MessageType); - Assert.Equal(0, delayedResult.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(3000), delayedResult.Header.Delayed); + await Assert.That(delayedResult.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(delayedResult.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(delayedResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(delayedResult.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(3000)); _messageConsumer.Acknowledge(delayedResult); } - [Fact] - public void When_requeing_a_failed_message_with_delay() + [Test] + public async Task When_requeing_a_failed_message_with_delay() { //send & receive a message _messageProducer.Send(_message); var message = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(0), message.Header.Delayed); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(0)); _messageConsumer.Acknowledge(message); @@ -106,8 +105,8 @@ public void When_requeing_a_failed_message_with_delay() //receive and assert var message2 = _messageConsumer.Receive(TimeSpan.FromMilliseconds(5000)).Single(); - Assert.Equal(MessageType.MT_COMMAND, message2.Header.MessageType); - Assert.Equal(1, message2.Header.HandledCount); + await Assert.That(message2.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message2.Header.HandledCount).IsEqualTo(1); _messageConsumer.Acknowledge(message2); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs index 2970615863..55b2d8508d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerDLQTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -80,9 +79,9 @@ public RmqMessageProducerDLQTests() ); } - [Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] - //[Fact] - public void When_rejecting_a_message_to_a_dead_letter_queue() + [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] + //[Test] + public async Task When_rejecting_a_message_to_a_dead_letter_queue() { //create the infrastructure _messageConsumer.Receive(TimeSpan.FromMilliseconds(0)); @@ -97,8 +96,8 @@ public void When_rejecting_a_message_to_a_dead_letter_queue() var dlqMessage = _deadLetterConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); //assert this is our message - Assert.Equal(_message.Id, dlqMessage.Id); - Assert.Equal(dlqMessage.Body.Value, message.Body.Value); + await Assert.That(dlqMessage.Id).IsEqualTo(_message.Id); + await Assert.That(message.Body.Value).IsEqualTo(dlqMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs index e27a48b569..c4562b03f7 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -28,12 +28,11 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerRequeuingMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -105,8 +104,8 @@ public RmqMessageProducerRequeuingMessageTests() .GetResult(); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); @@ -116,25 +115,25 @@ public void When_posting_a_message_via_the_messaging_gateway() result = _channel.Receive(TimeSpan.FromMilliseconds(10000)); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId.ToString(), result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]).IsEqualTo(_message.Header.MessageId.ToString()); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs index 3c49f1442b..fd5e73ec79 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,17 +26,16 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using RabbitMQ.Client; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageGatewayConnectionPoolResetConnectionDoesNotExist { private readonly RmqMessageGatewayConnectionPool _connectionPool = new("MyConnectionName", 7); - [Fact] + [Test] public async Task When_resetting_a_connection_that_does_not_exist() { var connectionFactory = new ConnectionFactory {HostName = "invalidhost"}; @@ -51,7 +50,7 @@ public async Task When_resetting_a_connection_that_does_not_exist() resetConnectionExceptionThrown = true; } - Assert.False(resetConnectionExceptionThrown); + await Assert.That(resetConnectionExceptionThrown).IsFalse(); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 3646119c5e..33b3994ec7 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Net.Mime; @@ -10,12 +10,11 @@ using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RMQMessageConsumerRetryDLQTests : IDisposable { private readonly IAmAMessagePump _messagePump; @@ -117,7 +116,7 @@ public RMQMessageConsumerRetryDLQTests() ); } - [Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] + [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method")] public async Task When_retry_limits_force_a_message_onto_the_dlq() { @@ -147,7 +146,7 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() var dlqMessage = _deadLetterConsumer.Receive(new TimeSpan(10000)).First(); //assert this is our message - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); _deadLetterConsumer.Acknowledge(dlqMessage); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs index 33ca512e9d..5770487a7b 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Diagnostics; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.RMQ.Async.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; @@ -36,8 +35,8 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; /// with Task.Delay. This ensures the pump thread is freed immediately while the scheduler handles /// the delayed redelivery. /// -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerDelayTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -78,13 +77,13 @@ public RmqMessageConsumerDelayTests() .GetResult(); } - [Fact] - public void When_requeuing_with_delay_should_not_block_pump() + [Test] + public async Task When_requeuing_with_delay_should_not_block_pump() { // Arrange - send and receive a message _messageProducer.Send(_message); var received = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with a significant delay (5 seconds) var stopwatch = Stopwatch.StartNew(); @@ -92,15 +91,14 @@ public void When_requeuing_with_delay_should_not_block_pump() stopwatch.Stop(); // Assert - requeue should return true - Assert.True(result, "Requeue should succeed"); + await Assert.That(result).IsTrue(); // Assert - requeue should complete quickly, proving Task.Delay is NOT used to block the pump - Assert.True(stopwatch.Elapsed < TimeSpan.FromSeconds(2), - $"Requeue should not block with Task.Delay; took {stopwatch.Elapsed.TotalSeconds:F1}s"); + await Assert.That(stopwatch.Elapsed < TimeSpan.FromSeconds(2)).IsTrue(); // Assert - message should be available on the queue (published via producer through exchange) var requeued = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.Equal(_message.Body.Value, requeued.Body.Value); + await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs index c42c168004..761ccd2757 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs @@ -7,13 +7,12 @@ using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Async; using Paramore.Brighter.Observability; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor { - [Trait("Category", "RMQ")] - [Collection("RMQ")] + [Category("RMQ")] + [NotInParallel("RMQ")] public class RmqMessageProducerPropagateContextTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -61,8 +60,8 @@ public RmqMessageProducerPropagateContextTests() }; } - [Fact] - public void When_Sending_A_Message_Should_Propagate_Context() + [Test] + public async Task When_Sending_A_Message_Should_Propagate_Context() { //arrange @@ -76,9 +75,9 @@ public void When_Sending_A_Message_Should_Propagate_Context() .SelectMany(a => a.Events) .FirstOrDefault(e => e.Name == $"{_message.Header.Topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.NotNull(_message.Header.TraceParent); - Assert.Equal("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE", _message.Header.TraceState); - Assert.Equal("key=value,key2=value2", _message.Header.Baggage.ToString()); + await Assert.That(_message.Header.TraceParent).IsNotNull(); + await Assert.That(_message.Header.TraceState).IsEqualTo("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE"); + await Assert.That(_message.Header.Baggage.ToString()).IsEqualTo("key=value,key2=value2"); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs index 312720d3e4..47bee9eb9a 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -28,9 +28,8 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Async; using RabbitMQ.Client; -using Xunit; -[assembly: CollectionBehavior(DisableTestParallelization = true)] +[assembly: TUnit.Core.NotInParallel("RMQ")] namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; internal sealed class QueueFactory(RmqMessagingGatewayConnection connection, ChannelName channelName, RoutingKeys routingKeys, bool isDurable = false, QueueType queueType = QueueType.Classic) diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs index 0593a2fd4a..79329784c1 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs @@ -5,14 +5,13 @@ using System.Security.Cryptography.X509Certificates; using Paramore.Brighter.MessagingGateway.RMQ.Async; using RabbitMQ.Client; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; // These tests validate gateway configuration plumbing (ConnectionFactory.Ssl setup) and are // intentionally hand-written rather than generator-based. See ADR 0035 (Generated Tests). -[Trait("Category", "RMQ")] -[Trait("Category", "MutualTLS")] +[Category("RMQ")] +[Category("MutualTLS")] public class RmqMutualTlsConnectionConfigurationTests : IDisposable { private readonly string _tempCertPath; @@ -44,8 +43,8 @@ public void Dispose() File.Delete(_tempCertPath); } - [Fact] - public void When_certificate_is_configured_ssl_is_enabled() + [Test] + public async Task When_certificate_is_configured_ssl_is_enabled() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -60,16 +59,16 @@ public void When_certificate_is_configured_ssl_is_enabled() var factory = gateway.GetConnectionFactory(); // Assert - SSL should be enabled - Assert.NotNull(factory.Ssl); - Assert.True(factory.Ssl.Enabled); - Assert.Equal("localhost", factory.Ssl.ServerName); - Assert.NotNull(factory.Ssl.Certs); - Assert.Single(factory.Ssl.Certs); - Assert.Same(_testCertificate, factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl).IsNotNull(); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.ServerName).IsEqualTo("localhost"); + await Assert.That(factory.Ssl.Certs).IsNotNull(); + await Assert.That(factory.Ssl.Certs!.Count).IsEqualTo(1); + await Assert.That(factory.Ssl.Certs[0]).IsSameReferenceAs(_testCertificate); } - [Fact] - public void When_no_certificate_is_configured_ssl_is_not_configured() + [Test] + public async Task When_no_certificate_is_configured_ssl_is_not_configured() { // Arrange - no certificate configured var connection = new RmqMessagingGatewayConnection @@ -83,12 +82,12 @@ public void When_no_certificate_is_configured_ssl_is_not_configured() var factory = gateway.GetConnectionFactory(); // Assert - SSL should not be enabled (backwards compatibility) - Assert.NotNull(factory.Ssl); - Assert.False(factory.Ssl.Enabled); + await Assert.That(factory.Ssl).IsNotNull(); + await Assert.That(factory.Ssl.Enabled).IsFalse(); } - [Fact] - public void When_certificate_object_and_path_both_set_object_takes_precedence() + [Test] + public async Task When_certificate_object_and_path_both_set_object_takes_precedence() { // Arrange - both certificate object and path set var connection = new RmqMessagingGatewayConnection @@ -104,12 +103,12 @@ public void When_certificate_object_and_path_both_set_object_takes_precedence() var factory = gateway.GetConnectionFactory(); // Assert - Should use the certificate object, not load from path - Assert.True(factory.Ssl.Enabled); - Assert.Same(_testCertificate, factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.Certs[0]).IsSameReferenceAs(_testCertificate); } - [Fact] - public void When_certificate_path_is_provided_certificate_is_loaded() + [Test] + public async Task When_certificate_path_is_provided_certificate_is_loaded() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -125,13 +124,13 @@ public void When_certificate_path_is_provided_certificate_is_loaded() var factory = gateway.GetConnectionFactory(); // Assert - Certificate should be loaded from file - Assert.True(factory.Ssl.Enabled); - Assert.Single(factory.Ssl.Certs); - Assert.NotNull(factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.Certs!.Count).IsEqualTo(1); + await Assert.That(factory.Ssl.Certs[0]).IsNotNull(); } - [Fact] - public void When_certificate_file_does_not_exist_throws_file_not_found() + [Test] + public async Task When_certificate_file_does_not_exist_throws_file_not_found() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -142,12 +141,12 @@ public void When_certificate_file_does_not_exist_throws_file_not_found() }; // Act & Assert - var ex = Assert.Throws(() => new TestableRmqMessageConsumer(connection)); - Assert.Contains("Client certificate file not found", ex.Message); + var ex = await Assert.That(() => new TestableRmqMessageConsumer(connection)).ThrowsExactly(); + await Assert.That(ex.Message).Contains("Client certificate file not found"); } - [Fact] - public void When_certificate_file_is_invalid_throws_invalid_operation() + [Test] + public async Task When_certificate_file_is_invalid_throws_invalid_operation() { // Arrange - create a temp file with invalid certificate data var invalidCertPath = Path.Combine(Path.GetTempPath(), $"invalid-cert-{Guid.NewGuid()}.pfx"); @@ -163,9 +162,9 @@ public void When_certificate_file_is_invalid_throws_invalid_operation() }; // Act & Assert - var ex = Assert.Throws(() => new TestableRmqMessageConsumer(connection)); - Assert.Contains("Failed to load client certificate", ex.Message); - Assert.Contains("valid .pfx (PKCS#12) certificate", ex.Message); + var ex = await Assert.That(() => new TestableRmqMessageConsumer(connection)).ThrowsExactly(); + await Assert.That(ex.Message).Contains("Failed to load client certificate"); + await Assert.That(ex.Message).Contains("valid .pfx (PKCS#12) certificate"); } finally { @@ -174,8 +173,8 @@ public void When_certificate_file_is_invalid_throws_invalid_operation() } } - [Fact] - public void When_certificate_configuration_is_optional_backwards_compatibility_is_maintained() + [Test] + public async Task When_certificate_configuration_is_optional_backwards_compatibility_is_maintained() { // Arrange - existing code that doesn't use certificates var connection = new RmqMessagingGatewayConnection @@ -187,7 +186,7 @@ public void When_certificate_configuration_is_optional_backwards_compatibility_i // Act & Assert - Should not throw, gateway should initialize normally var gateway = new TestableRmqMessageConsumer(connection); var factory = gateway.GetConnectionFactory(); - Assert.NotNull(factory); + await Assert.That(factory).IsNotNull(); } // Test double to expose ConnectionFactory for verification diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_forwards_scheduler_to_consumers.cs index d461ade7f6..af02eb6813 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_forwards_scheduler_to_consumers.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; @@ -34,8 +33,8 @@ public class When_rmq_async_channel_factory_forwards_scheduler_to_consumers Exchange = new Exchange("test.exchange") }; - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange var consumerFactory = new RmqMessageConsumerFactory(_connection); @@ -46,11 +45,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -58,7 +57,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs index f500928f8f..075d427154 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -1,6 +1,5 @@ using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; @@ -21,19 +20,19 @@ public class When_rmq_async_channel_factory_has_scheduler_should_pass_to_consume makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Arrange var consumerFactory = new RmqMessageConsumerFactory(_connection); var channelFactory = new ChannelFactory(consumerFactory); // Assert - Assert.IsAssignableFrom(channelFactory); + await Assert.That(channelFactory).IsAssignableTo(); } - [Fact] - public void Should_create_sync_channel_when_scheduler_set() + [Test] + public async Task Should_create_sync_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -45,12 +44,12 @@ public void Should_create_sync_channel_when_scheduler_set() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_async_channel_when_scheduler_set() + [Test] + public async Task Should_create_async_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -62,12 +61,12 @@ public void Should_create_async_channel_when_scheduler_set() var channel = channelFactory.CreateAsyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_channel_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_channel_without_scheduler_for_backward_compat() { // Arrange — no scheduler set var consumerFactory = new RmqMessageConsumerFactory(_connection); @@ -77,8 +76,8 @@ public void Should_create_channel_without_scheduler_for_backward_compat() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_creates_consumer_should_pass_scheduler.cs index cf238dadd3..e41db6f788 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; @@ -43,8 +42,8 @@ public class When_rmq_async_consumer_factory_creates_consumer_should_pass_schedu makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_create_sync_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_sync_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -54,12 +53,12 @@ public void Should_create_sync_consumer_when_scheduler_provided() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_async_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_async_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -69,12 +68,12 @@ public void Should_create_async_consumer_when_scheduler_provided() var consumer = factory.CreateAsync(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange — factory constructed without a scheduler (backward compat) var factory = new RmqMessageConsumerFactory(_connection); @@ -83,8 +82,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully without scheduler - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_scheduler_set_after_construction.cs index 9e8559e77b..1ce485add9 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_consumer_factory_scheduler_set_after_construction.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Async; -using Xunit; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; @@ -34,8 +33,8 @@ public class When_rmq_async_consumer_factory_scheduler_set_after_construction Exchange = new Exchange("test.exchange") }; - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new RmqMessageConsumerFactory(_connection); @@ -45,22 +44,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new RmqMessageConsumerFactory(_connection, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -71,8 +70,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj b/tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj index 8b64f58205..16640eb4f8 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj @@ -1,33 +1,17 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher.cs index b22a2d796d..fd7660b316 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -9,7 +9,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessageDispatch; @@ -70,15 +69,15 @@ public DispatchBuilderTests() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] + [Test] public async Task When_Building_A_Dispatcher() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); - Assert.NotNull(GetConnection("foo")); - Assert.NotNull(GetConnection("bar")); - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + await Assert.That(_dispatcher).IsNotNull(); + await Assert.That(GetConnection("foo")).IsNotNull(); + await Assert.That(GetConnection("bar")).IsNotNull(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); await Task.Delay(1000); @@ -86,11 +85,11 @@ public async Task When_Building_A_Dispatcher() await Task.Delay(1000); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); await _dispatcher.End(); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } private Subscription GetConnection(string name) { diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs index 457093deec..6fc9fbe7c7 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs @@ -1,4 +1,4 @@ -using System; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RMQ.Sync; @@ -7,7 +7,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessageDispatch; @@ -82,11 +81,11 @@ public DispatchBuilderWithNamedGateway() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] - public void When_building_a_dispatcher_with_named_gateway() + [Test] + public async Task When_building_a_dispatcher_with_named_gateway() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); + await Assert.That(_dispatcher).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs index 858881b993..54e565c80a 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs @@ -1,16 +1,15 @@ using System; using System.IO; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Acceptance; // Acceptance tests verify actual mTLS connections to Docker RabbitMQ // These tests run against the actual transport configured in Docker (per ADR #3946) -[Trait("Category", "RabbitMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Requires", "Docker-mTLS")] -[Collection("RabbitMQ mTLS")] +[Category("RabbitMQ")] +[Category("MutualTLS")] +[Property("Requires", "Docker-mTLS")] +[NotInParallel("RabbitMQ mTLS")] public class RmqMutualTlsAcceptanceTests : IDisposable { private readonly string _clientCertPath; @@ -34,8 +33,8 @@ public void Dispose() // Cleanup if needed } - [Fact] - public void When_connecting_with_client_certificate_can_publish_message_sync() + [Test] + public async Task When_connecting_with_client_certificate_can_publish_message_sync() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -67,11 +66,11 @@ public void When_connecting_with_client_certificate_can_publish_message_sync() producer.Send(message); // If we reach here, TLS handshake succeeded - Assert.True(true); + await Assert.That(true).IsTrue(); } - [Fact] - public void When_connecting_with_mtls_can_publish_and_receive_message_sync() + [Test] + public async Task When_connecting_with_mtls_can_publish_and_receive_message_sync() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -110,10 +109,10 @@ public void When_connecting_with_mtls_can_publish_and_receive_message_sync() var receivedMessages = consumer.Receive(TimeSpan.FromSeconds(5)); // Assert - Assert.NotNull(receivedMessages); - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotNull(); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages[0]; - Assert.Equal(sentMessage.Id, receivedMessage.Id); - Assert.Equal(sentMessage.Body.Value, receivedMessage.Body.Value); + await Assert.That(receivedMessage.Id).IsEqualTo(sentMessage.Id); + await Assert.That(receivedMessage.Body.Value).IsEqualTo(sentMessage.Body.Value); } } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs index 3af988aed2..f4ecda9521 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs @@ -10,7 +10,6 @@ using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.Observability; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Acceptance; @@ -20,11 +19,11 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Acceptance; /// trace context survive mTLS connections, ensuring compliance with Rules #10-12 of the Critical /// Review Guidelines for RabbitMQ mutual TLS implementation. /// -[Trait("Category", "RMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Category", "Observability")] -[Trait("Requires", "Docker-mTLS")] -[Collection("RabbitMQ mTLS")] +[Category("RMQ")] +[Category("MutualTLS")] +[Category("Observability")] +[Property("Requires", "Docker-mTLS")] +[NotInParallel("RabbitMQ mTLS")] public class RmqMutualTlsObservabilityTests : IDisposable { private readonly string _clientCertPath; @@ -78,8 +77,8 @@ public void Dispose() /// Test 1: Verifies that TraceParent header survives mTLS publish (sync variant). /// This test verifies Rule #10 compliance: W3C Trace Context must flow through all gateways. /// - [Fact] - public void When_publishing_with_traceparent_over_mtls_header_is_preserved_sync() + [Test] + public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved_sync() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -121,11 +120,11 @@ public void When_publishing_with_traceparent_over_mtls_header_is_preserved_sync( _tracerProvider.ForceFlush(); // Assert - TraceParent must be preserved - Assert.NotNull(message.Header.TraceParent); - Assert.NotEmpty(message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceParent.Value).IsNotEmpty(); // Verify traceparent format (00-{trace-id}-{span-id}-{flags}) - Assert.Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$", message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent.Value).Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$"); } finally { @@ -137,8 +136,8 @@ public void When_publishing_with_traceparent_over_mtls_header_is_preserved_sync( /// Test 2: Verifies that TraceState and Baggage survive mTLS (sync variant). /// This test verifies Rule #10 compliance: W3C Trace Context (TraceState, Baggage) must flow through all gateways. /// - [Fact] - public void When_publishing_with_tracestate_and_baggage_over_mtls_headers_are_preserved() + [Test] + public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_are_preserved() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -180,21 +179,20 @@ public void When_publishing_with_tracestate_and_baggage_over_mtls_headers_are_pr _tracerProvider.ForceFlush(); // Assert - All W3C trace headers must be preserved - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify TraceState contains expected values - Assert.Contains("brighter=00f067aa0ba902b7", message.Header.TraceState); - Assert.Contains("congo=t61rcWkgMzE", message.Header.TraceState); + await Assert.That(message.Header.TraceState).Contains("brighter=00f067aa0ba902b7"); + await Assert.That(message.Header.TraceState).Contains("congo=t61rcWkgMzE"); // Verify Baggage contains expected values (baggage values may be URL-encoded) var baggageString = message.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); // Note: Colon in serverNode value is URL-encoded as %3A - Assert.True(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28"), - "Baggage should contain serverNode with value DF:28 (possibly URL-encoded)"); - Assert.Contains("isProduction=false", baggageString); + await Assert.That(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28")).IsTrue(); + await Assert.That(baggageString).Contains("isProduction=false"); } finally { @@ -206,8 +204,8 @@ public void When_publishing_with_tracestate_and_baggage_over_mtls_headers_are_pr /// Test 3: Verifies that BrighterTracer.WriteProducerEvent is called when publishing over mTLS (sync variant). /// This test verifies Rule #11 compliance: BrighterTracer.WriteProducerEvent must be called for all gateway producers. /// - [Fact] - public void When_publishing_with_mtls_brighter_tracer_write_producer_event_is_called() + [Test] + public async Task When_publishing_with_mtls_brighter_tracer_write_producer_event_is_called() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -258,10 +256,9 @@ public void When_publishing_with_mtls_brighter_tracer_write_producer_event_is_ca // If producer event exists, BrighterTracer.WriteProducerEvent was called // Note: This verification depends on the tracer being properly configured // In production scenarios, this ensures observability is maintained with mTLS - Assert.True( - producerEvents.Any() || _exportedActivities.Any(), - "BrighterTracer should record producer events when publishing over mTLS" - ); + await Assert.That( + producerEvents.Any() || _exportedActivities.Any() + ).IsTrue(); } finally { @@ -273,8 +270,8 @@ public void When_publishing_with_mtls_brighter_tracer_write_producer_event_is_ca /// Test 4: Verifies that CloudEvents trace context survives serialization over mTLS (sync variant). /// This test verifies Rule #12 compliance: CloudEvents trace context must survive serialization. /// - [Fact] - public void When_publishing_cloudevents_trace_context_survives_mtls_serialization() + [Test] + public async Task When_publishing_cloudevents_trace_context_survives_mtls_serialization() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -318,21 +315,20 @@ public void When_publishing_cloudevents_trace_context_survives_mtls_serializatio // Assert - CloudEvents trace context must survive serialization // The message should contain trace headers that were propagated from the parent activity - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify the trace context is in a format compatible with CloudEvents // CloudEvents uses W3C Trace Context, so the format should be consistent - Assert.Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$", message.Header.TraceParent.Value); + await Assert.That(message.Header.TraceParent.Value).Matches(@"^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$"); // Verify the message headers contain the trace information // This ensures that message creators can extract trace from CloudEvents // and message publishers can write trace to CloudEvents format - Assert.True( - message.Header.Bag.ContainsKey("traceparent") || message.Header.TraceParent != null, - "CloudEvents trace context (traceparent) must survive serialization over mTLS" - ); + await Assert.That( + message.Header.Bag.ContainsKey("traceparent") || message.Header.TraceParent != null + ).IsTrue(); } finally { @@ -344,8 +340,8 @@ public void When_publishing_cloudevents_trace_context_survives_mtls_serializatio /// Test 5: Verifies that trace context is preserved when using certificate from file path (sync variant). /// This test ensures observability works with both certificate configuration methods. /// - [Fact] - public void When_publishing_with_certificate_from_file_path_trace_context_is_preserved() + [Test] + public async Task When_publishing_with_certificate_from_file_path_trace_context_is_preserved() { // Verify certificate exists if (!File.Exists(_clientCertPath)) @@ -387,19 +383,18 @@ public void When_publishing_with_certificate_from_file_path_trace_context_is_pre _tracerProvider.ForceFlush(); // Assert - Trace context must be preserved regardless of certificate configuration method - Assert.NotNull(message.Header.TraceParent); - Assert.NotNull(message.Header.TraceState); - Assert.NotNull(message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsNotNull(); + await Assert.That(message.Header.TraceState).IsNotNull(); + await Assert.That(message.Header.Baggage).IsNotNull(); // Verify TraceState - Assert.Contains("brighter=00f067aa0ba902b7", message.Header.TraceState); + await Assert.That(message.Header.TraceState).Contains("brighter=00f067aa0ba902b7"); // Verify Baggage (baggage values may be URL-encoded) var baggageString = message.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); // Note: Colon in serverNode value is URL-encoded as %3A - Assert.True(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28"), - "Baggage should contain serverNode with value DF:28 (possibly URL-encoded)"); + await Assert.That(baggageString.Contains("serverNode=DF:28") || baggageString.Contains("serverNode=DF%3A28")).IsTrue(); } finally { diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs index db37b7e543..06fb790cac 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs @@ -7,7 +7,6 @@ using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Acceptance; @@ -21,12 +20,12 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Acceptance; /// Rule #11: BrighterTracer.WriteProducerEvent must be called for all producers /// Rule #12: CloudEvents trace context must survive serialization /// -[Trait("Category", "RabbitMQ")] -[Trait("Category", "MutualTLS")] -[Trait("Category", "Quorum")] -[Trait("Category", "Observability")] -[Trait("Requires", "Docker-mTLS")] -[Collection("RabbitMQ mTLS")] +[Category("RabbitMQ")] +[Category("MutualTLS")] +[Category("Quorum")] +[Category("Observability")] +[Property("Requires", "Docker-mTLS")] +[NotInParallel("RabbitMQ mTLS")] public class RmqMutualTlsQuorumObservabilityTests : IDisposable { private readonly string _clientCertPath; @@ -63,8 +62,8 @@ public RmqMutualTlsQuorumObservabilityTests() .Build(); } - [Fact] - public void When_publishing_with_mtls_and_quorum_trace_context_is_preserved() + [Test] + public async Task When_publishing_with_mtls_and_quorum_trace_context_is_preserved() { // Arrange - mTLS connection var connection = new RmqMessagingGatewayConnection @@ -112,20 +111,20 @@ public void When_publishing_with_mtls_and_quorum_trace_context_is_preserved() var receivedMessages = consumer.Receive(TimeSpan.FromSeconds(5)); // Assert - Verify message was received - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages.First(); // Assert - Rule #10: TraceParent must be preserved - Assert.NotNull(receivedMessage.Header.TraceParent); - Assert.Contains(activity?.TraceId.ToString() ?? "", receivedMessage.Header.TraceParent.Value); + await Assert.That(receivedMessage.Header.TraceParent).IsNotNull(); + await Assert.That(receivedMessage.Header.TraceParent.Value).Contains(activity?.TraceId.ToString() ?? ""); // Assert - Rule #11: BrighterTracer.WriteProducerEvent was called // The presence of activities in our exporter confirms the tracer is working - Assert.NotEmpty(_exportedActivities); + await Assert.That(_exportedActivities).IsNotEmpty(); } - [Fact] - public void When_publishing_with_mtls_quorum_and_baggage_context_survives() + [Test] + public async Task When_publishing_with_mtls_quorum_and_baggage_context_survives() { // Arrange - mTLS connection var connection = new RmqMessagingGatewayConnection @@ -167,13 +166,13 @@ public void When_publishing_with_mtls_quorum_and_baggage_context_survives() var receivedMessages = consumer.Receive(TimeSpan.FromSeconds(5)); // Assert - Baggage must survive (Rule #12) - Assert.NotEmpty(receivedMessages); + await Assert.That(receivedMessages).IsNotEmpty(); var receivedMessage = receivedMessages.First(); - Assert.NotNull(receivedMessage.Header.Baggage); + await Assert.That(receivedMessage.Header.Baggage).IsNotNull(); var baggageString = receivedMessage.Header.Baggage.ToString(); - Assert.Contains("userId=alice", baggageString); - Assert.Contains("serverNode=node-42", baggageString); + await Assert.That(baggageString).Contains("userId=alice"); + await Assert.That(baggageString).Contains("serverNode=node-42"); } finally { diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/RabbitMQMtlsTestCollection.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/RabbitMQMtlsTestCollection.cs index 0de127460b..abff27914f 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/RabbitMQMtlsTestCollection.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/RabbitMQMtlsTestCollection.cs @@ -22,22 +22,7 @@ THE SOFTWARE. */ #endregion -using Xunit; -namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; - -/// -/// This collection definition forces all RabbitMQ mTLS tests to run sequentially -/// instead of in parallel. This prevents TLS handshake race conditions that occur -/// when multiple tests rapidly create and destroy mTLS connections simultaneously. -/// -/// Without this, tests can fail with "Connection close forced" errors due to -/// "TLS server: Unexpected Message" alerts from RabbitMQ when connections are -/// opened too rapidly in parallel. -/// -[CollectionDefinition("RabbitMQ mTLS", DisableParallelization = true)] -public class RabbitMQMtlsTestCollection -{ - // This class is never instantiated. It's just a marker for xUnit to identify - // the collection and its parallelization settings. -} +// This file previously contained an xUnit [CollectionDefinition] marker class. +// In TUnit, sequential execution is handled via [NotInParallel("RabbitMQ mTLS")] +// attributes on the test classes themselves, so this marker class is no longer needed. diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 3635c9237f..62eaf8bbaf 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RMQBufferedConsumerTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -30,8 +29,8 @@ public RMQBufferedConsumerTests() new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_a_message_consumer_reads_multiple_messages() + [Test] + public async Task When_a_message_consumer_reads_multiple_messages() { //Post one more than batch size messages var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content One")); @@ -50,7 +49,7 @@ public void When_a_message_consumer_reads_multiple_messages() var messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Equal(3, messages.Length); + await Assert.That(messages.Length).IsEqualTo(3); //ack those to remove from the queue foreach (var message in messages) @@ -65,7 +64,7 @@ public void When_a_message_consumer_reads_multiple_messages() messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(500)); //This time, just the one message - Assert.Equal(1, messages.Length); + await Assert.That(messages.Length).IsEqualTo(1); } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs index 762310d890..a5516ccc5a 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs @@ -2,12 +2,11 @@ using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerConnectionClosedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -38,8 +37,8 @@ public RmqMessageConsumerConnectionClosedTests() } - [Fact] - public void When_a_message_consumer_throws_an_already_closed_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_already_closed_exception_when_connecting() { _sender.Send(_sentMessage); @@ -51,10 +50,10 @@ public void When_a_message_consumer_throws_an_already_closed_exception_when_conn catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is AlreadyClosedException); + await Assert.That((cfe.InnerException) is AlreadyClosedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs index 04c11d2561..79c2342d50 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerChannelFailureTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -58,8 +57,8 @@ public RmqMessageConsumerChannelFailureTests() _sender.Send(sentMessage); } - [Fact] - public void When_a_message_consumer_throws_an_not_supported_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_not_supported_exception_when_connecting() { bool exceptionHappened = false; try @@ -69,10 +68,10 @@ public void When_a_message_consumer_throws_an_not_supported_exception_when_conne catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is NotSupportedException); + await Assert.That((cfe.InnerException) is NotSupportedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs index 9e227c4f16..2aaad3a0c0 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs @@ -26,12 +26,11 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; using RabbitMQ.Client.Exceptions; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerOperationInterruptedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -59,8 +58,8 @@ public RmqMessageConsumerOperationInterruptedTests() _sender.Send(sentMessage); } - [Fact] - public void When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting() + [Test] + public async Task When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting() { bool exceptionHappened = false; try @@ -70,10 +69,10 @@ public void When_a_message_consumer_throws_an_operation_interrupted_exception_w catch (ChannelFailureException cfe) { exceptionHappened = true; - Assert.True((cfe.InnerException) is OperationInterruptedException); + await Assert.That((cfe.InnerException) is OperationInterruptedException).IsTrue(); } - Assert.True(exceptionHappened); + await Assert.That(exceptionHappened).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs index e548fd25f1..c6cf7b6a5c 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageConsumerMultipleTopicTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -44,8 +43,8 @@ public RmqMessageConsumerMultipleTopicTests() new QueueFactory(rmqConnection, queueName, topics).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_reading_a_message_from_a_channel_with_multiple_topics() + [Test] + public async Task When_reading_a_message_from_a_channel_with_multiple_topics() { _messageProducer.Send(_messageTopic1); _messageProducer.Send(_messageTopic2); @@ -60,12 +59,12 @@ public void When_reading_a_message_from_a_channel_with_multiple_topics() _messageConsumer.Acknowledge(topic2Result); // should_received_a_message_from_test1_with_same_topic_and_body - Assert.Equal(_messageTopic1.Header.Topic, topic1Result.Header.Topic); - Assert.Equivalent(_messageTopic1.Body.Value, topic1Result.Body.Value); + await Assert.That(topic1Result.Header.Topic).IsEqualTo(_messageTopic1.Header.Topic); + await Assert.That(topic1Result.Body.Value).IsEquivalentTo(_messageTopic1.Body.Value); // should_received_a_message_from_test2_with_same_topic_and_body - Assert.Equal(_messageTopic2.Header.Topic, topic2Result.Header.Topic); - Assert.Equivalent(_messageTopic2.Body.Value, topic2Result.Body.Value); + await Assert.That(topic2Result.Header.Topic).IsEqualTo(_messageTopic2.Header.Topic); + await Assert.That(topic2Result.Body.Value).IsEquivalentTo(_messageTopic2.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index f5b18da8d8..1cb8980b16 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsSendMessageTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -56,7 +55,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () { if (success) { - Assert.Equal(_message.Id, guid); + if (guid != _message.Id) throw new InvalidOperationException($"Expected message id {_message.Id} but got {guid}"); _messageWasPublished = true; _messageWasNotPublished = false; } @@ -71,7 +70,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () .Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] + [Test] public async Task When_confirming_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); @@ -79,9 +78,9 @@ public async Task When_confirming_posting_a_message_via_the_messaging_gateway() await Task.Delay(500); //if this is true, then possible test failed because of timeout or RMQ issues - Assert.False(_messageWasNotPublished); + await Assert.That(_messageWasNotPublished).IsFalse(); //did we see the message - intent to test logic here - Assert.True(_messageWasPublished); + await Assert.That(_messageWasPublished).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs index 823a7b4b76..e444e59e23 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqAssumeExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -40,8 +39,8 @@ public RmqAssumeExistingInfrastructureTests() new QueueFactory(rmqConnection, queueName, new RoutingKeys( _message.Header.Topic)).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_infrastructure_exists_can_assume_producer() + [Test] + public async Task When_infrastructure_exists_can_assume_producer() { var exceptionThrown = false; try @@ -55,7 +54,7 @@ public void When_infrastructure_exists_can_assume_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs index 661ca42cbf..9b5b533361 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqValidateExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -40,8 +39,8 @@ public RmqValidateExistingInfrastructureTests() new QueueFactory(rmqConnection, queueName, new RoutingKeys(routingKey)).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_infrastructure_exists_can_validate_producer() + [Test] + public async Task When_infrastructure_exists_can_validate_producer() { var exceptionThrown = false; try @@ -55,7 +54,7 @@ public void When_infrastructure_exists_can_validate_producer() exceptionThrown = true; } - Assert.False(exceptionThrown); + await Assert.That(exceptionThrown).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs index f73a62c9f0..65e98377ed 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs @@ -2,12 +2,11 @@ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSupportsMultipleThreadsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -29,8 +28,8 @@ public RmqMessageProducerSupportsMultipleThreadsTests() _messageProducer = new RmqMessageProducer(rmqConnection); } - [Fact] - public void When_multiple_threads_try_to_post_a_message_at_the_same_time() + [Test] + public async Task When_multiple_threads_try_to_post_a_message_at_the_same_time() { bool exceptionHappened = false; try @@ -46,7 +45,7 @@ public void When_multiple_threads_try_to_post_a_message_at_the_same_time() } //_should_not_throw - Assert.False(exceptionHappened); + await Assert.That(exceptionHappened).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs index dfc3c5a89b..3f330be2ef 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs @@ -1,11 +1,10 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqBrokerNotPreCreatedTests : IDisposable { private Message _message; @@ -28,10 +27,10 @@ public RmqBrokerNotPreCreatedTests() } - [Fact] - public void When_posting_a_message_but_no_broker_created() + [Test] + public async Task When_posting_a_message_but_no_broker_created() { - Assert.Throws(() => _messageProducer.Send(_message)); + await Assert.That(() => _messageProducer.Send(_message)).ThrowsExactly(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs index 5cf764422b..3a81b5dff1 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs @@ -1,12 +1,11 @@ -using System; +using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSendPersistentMessageTests : IDisposable { private IAmAMessageProducerSync _messageProducer; @@ -35,8 +34,8 @@ public RmqMessageProducerSendPersistentMessageTests() new QueueFactory(rmqConnection, queueName, new RoutingKeys( _message.Header.Topic)).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_posting_a_message_to_persist_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_to_persist_via_the_messaging_gateway() { // arrange _messageProducer.Send(_message); @@ -45,7 +44,7 @@ public void When_posting_a_message_to_persist_via_the_messaging_gateway() var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).First(); // assert - Assert.Equal(true, result.Persist); + await Assert.That(result.Persist).IsEqualTo(true); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 609085263f..1d9cdd1740 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,12 +27,11 @@ THE SOFTWARE. */ using System.Net.Mime; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -93,33 +92,33 @@ public RmqMessageProducerSendMessageTests() new QueueFactory(rmqConnection, queueName, new RoutingKeys(_message.Header.Topic)).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId, result.Header.MessageId); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.MessageId).IsEqualTo(_message.Header.MessageId); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs index 6461fb0c44..a6cd3ec347 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerQueueLengthTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -73,8 +72,8 @@ public RmqMessageProducerQueueLengthTests() ); } - [Fact] - public void When_rejecting_a_message_due_to_queue_length() + [Test] + public async Task When_rejecting_a_message_due_to_queue_length() { //create the infrastructure _messageConsumer.Receive(TimeSpan.Zero); @@ -92,7 +91,7 @@ public void When_rejecting_a_message_due_to_queue_length() //try to grab the next message var nextMessages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(5000)); message = nextMessages.First(); - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs index 14d9f5021b..0ed7269230 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,12 +26,11 @@ THE SOFTWARE. */ using System.Linq; using System.Net.Mime; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerDelayedMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -61,42 +60,42 @@ public RmqMessageProducerDelayedMessageTests() new QueueFactory(rmqConnection, queueName, new RoutingKeys([routingKey])).Create(TimeSpan.FromMilliseconds(1000)); } - [Fact] - public void When_reading_a_delayed_message_via_the_messaging_gateway() + [Test] + public async Task When_reading_a_delayed_message_via_the_messaging_gateway() { //NOTE: This test will fail if RMQ is not configured to support delay _messageProducer.SendWithDelay(_message, TimeSpan.FromMilliseconds(3000)); var immediateResult = _messageConsumer.Receive(TimeSpan.Zero).First(); var deliveredWithoutWait = immediateResult.Header.MessageType == MessageType.MT_NONE; - Assert.Equal(0, immediateResult.Header.HandledCount); - Assert.Equal(TimeSpan.Zero, immediateResult.Header.Delayed); + await Assert.That(immediateResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(immediateResult.Header.Delayed).IsEqualTo(TimeSpan.Zero); //_should_have_not_been_able_get_message_before_delay - Assert.True(deliveredWithoutWait); + await Assert.That(deliveredWithoutWait).IsTrue(); var delayedResult = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); //_should_send_a_message_via_rmq_with_the_matching_body - Assert.Equal(_message.Body.Value, delayedResult.Body.Value); - Assert.Equal(MessageType.MT_COMMAND, delayedResult.Header.MessageType); - Assert.Equal(0, delayedResult.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(3000), delayedResult.Header.Delayed); + await Assert.That(delayedResult.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(delayedResult.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(delayedResult.Header.HandledCount).IsEqualTo(0); + await Assert.That(delayedResult.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(3000)); _messageConsumer.Acknowledge(delayedResult); } - [Fact] - public void When_requeing_a_failed_message_with_delay() + [Test] + public async Task When_requeing_a_failed_message_with_delay() { //NOTE: This test will fail if RMQ is not configured to support delay //send & receive a message _messageProducer.Send(_message); var message = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(0), message.Header.Delayed); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(0)); _messageConsumer.Acknowledge(message); @@ -106,8 +105,8 @@ public void When_requeing_a_failed_message_with_delay() //receive and assert var secondMessage = _messageConsumer.Receive(TimeSpan.FromMilliseconds(5000)).Single(); - Assert.Equal(MessageType.MT_COMMAND, secondMessage.Header.MessageType); - Assert.Equal(1, secondMessage.Header.HandledCount); + await Assert.That(secondMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(secondMessage.Header.HandledCount).IsEqualTo(1); _messageConsumer.Acknowledge(secondMessage); } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs index e18e983471..ca7ad6ad82 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -25,12 +25,11 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerDLQTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -80,9 +79,9 @@ public RmqMessageProducerDLQTests() ); } - //[Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] - [Fact] - public void When_rejecting_a_message_to_a_dead_letter_queue() + //[Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] + [Test] + public async Task When_rejecting_a_message_to_a_dead_letter_queue() { //create the infrastructure _messageConsumer.Receive(TimeSpan.FromMilliseconds(0)); @@ -97,8 +96,8 @@ public void When_rejecting_a_message_to_a_dead_letter_queue() var dlqMessage = _deadLetterConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); //assert this is our message - Assert.Equal(_message.Id, dlqMessage.Id); - Assert.Equal(dlqMessage.Body.Value, message.Body.Value); + await Assert.That(dlqMessage.Id).IsEqualTo(_message.Id); + await Assert.That(message.Body.Value).IsEqualTo(dlqMessage.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs index f8b5a299f6..fe9fd74e6e 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -28,12 +28,11 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.Observability; using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageProducerRequeuingMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -103,8 +102,8 @@ public RmqMessageProducerRequeuingMessageTests() .Create(TimeSpan.FromSeconds(1)); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { _messageProducer.Send(_message); @@ -114,25 +113,25 @@ public void When_posting_a_message_via_the_messaging_gateway() result = _channel.Receive(TimeSpan.FromMilliseconds(10000)); // Assert message body - Assert.Equal(_message.Body.Value, result.Body.Value); + await Assert.That(result.Body.Value).IsEqualTo(_message.Body.Value); // Assert header values - Assert.Equal(_message.Header.MessageId.ToString(), result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]); - Assert.Equal(_message.Header.Topic, result.Header.Topic); - Assert.Equal(_message.Header.MessageType, result.Header.MessageType); - Assert.Equal(_message.Header.Source, result.Header.Source); - Assert.Equal(_message.Header.Type, result.Header.Type); - Assert.Equal(_message.Header.TimeStamp, result.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(_message.Header.CorrelationId, result.Header.CorrelationId); - Assert.Equal(_message.Header.ReplyTo, result.Header.ReplyTo); - Assert.Equal(_message.Header.ContentType, result.Header.ContentType); - Assert.Equal(_message.Header.HandledCount, result.Header.HandledCount); - Assert.Equal(_message.Header.DataSchema, result.Header.DataSchema); - Assert.Equal(_message.Header.Subject, result.Header.Subject); - Assert.Equal(TimeSpan.Zero, result.Header.Delayed); //we clear any delay from the producer, as it represents delay in the pipeline - Assert.Equal(_message.Header.TraceParent, result.Header.TraceParent); - Assert.Equal(_message.Header.TraceState, result.Header.TraceState); - Assert.Equal(_message.Header.Baggage, result.Header.Baggage); + await Assert.That(result.Header.Bag[HeaderNames.ORIGINAL_MESSAGE_ID]).IsEqualTo(_message.Header.MessageId.ToString()); + await Assert.That(result.Header.Topic).IsEqualTo(_message.Header.Topic); + await Assert.That(result.Header.MessageType).IsEqualTo(_message.Header.MessageType); + await Assert.That(result.Header.Source).IsEqualTo(_message.Header.Source); + await Assert.That(result.Header.Type).IsEqualTo(_message.Header.Type); + await Assert.That(result.Header.TimeStamp).IsEqualTo(_message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(result.Header.CorrelationId).IsEqualTo(_message.Header.CorrelationId); + await Assert.That(result.Header.ReplyTo).IsEqualTo(_message.Header.ReplyTo); + await Assert.That(result.Header.ContentType).IsEqualTo(_message.Header.ContentType); + await Assert.That(result.Header.HandledCount).IsEqualTo(_message.Header.HandledCount); + await Assert.That(result.Header.DataSchema).IsEqualTo(_message.Header.DataSchema); + await Assert.That(result.Header.Subject).IsEqualTo(_message.Header.Subject); + await Assert.That(result.Header.Delayed).IsEqualTo(TimeSpan.Zero); //we clear any delay from the producer, as it represents delay in the pipeline + await Assert.That(result.Header.TraceParent).IsEqualTo(_message.Header.TraceParent); + await Assert.That(result.Header.TraceState).IsEqualTo(_message.Header.TraceState); + await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs index 56020818e5..95aa255d4e 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -26,17 +26,16 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using RabbitMQ.Client; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqMessageGatewayConnectionPoolResetConnectionDoesNotExist { private readonly RmqMessageGatewayConnectionPool _connectionPool = new("MyConnectionName", 7); - [Fact] + [Test] public async Task When_resetting_a_connection_that_does_not_exist() { var connectionFactory = new ConnectionFactory {HostName = "invalidhost"}; @@ -51,7 +50,7 @@ public async Task When_resetting_a_connection_that_does_not_exist() resetConnectionExceptionThrown = true; } - Assert.False(resetConnectionExceptionThrown); + await Assert.That(resetConnectionExceptionThrown).IsFalse(); } } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 1317580867..026b3cc9f9 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Net.Mime; @@ -9,12 +9,11 @@ using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; using Paramore.Brighter.ServiceActivator; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RMQMessageConsumerRetryDLQTests : IDisposable { private readonly IAmAMessagePump _messagePump; @@ -116,7 +115,7 @@ public RMQMessageConsumerRetryDLQTests() ); } - [Fact(Skip = "Breaks due to fault in Task Scheduler running after context has closed")] + [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method")] public async Task When_retry_limits_force_a_message_onto_the_dlq() { @@ -146,7 +145,7 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() var dlqMessage = _deadLetterConsumer.Receive(new TimeSpan(10000)).First(); //assert this is our message - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); _deadLetterConsumer.Acknowledge(dlqMessage); diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs index 46b6a9025d..6926aad8e6 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ using System.Threading; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.RMQ.Sync.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; @@ -36,8 +35,8 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; /// it should delegate to the producer's SendWithDelay instead of blocking the message pump /// with Task.Delay().Wait(). This also verifies lazy producer creation and disposal. /// -[Trait("Category", "RMQ")] -[Collection("RMQ")] +[Category("RMQ")] +[NotInParallel("RMQ")] public class RmqSyncConsumerDelayTests : IDisposable { private readonly IAmAMessageProducerSync _sendProducer; @@ -76,13 +75,13 @@ public RmqSyncConsumerDelayTests() .Create(TimeSpan.FromSeconds(1)); } - [Fact] - public void When_requeuing_with_delay_should_not_block_pump() + [Test] + public async Task When_requeuing_with_delay_should_not_block_pump() { // Arrange - send and receive a message _sendProducer.Send(_message); var received = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with a significant delay (5 seconds) var stopwatch = Stopwatch.StartNew(); @@ -90,24 +89,23 @@ public void When_requeuing_with_delay_should_not_block_pump() stopwatch.Stop(); // Assert - requeue should return true - Assert.True(result, "Requeue should succeed"); + await Assert.That(result).IsTrue(); // Assert - requeue should complete quickly, proving Task.Delay().Wait() is NOT used - Assert.True(stopwatch.Elapsed < TimeSpan.FromSeconds(2), - $"Requeue should not block with Task.Delay().Wait(); took {stopwatch.Elapsed.TotalSeconds:F1}s"); + await Assert.That(stopwatch.Elapsed < TimeSpan.FromSeconds(2)).IsTrue(); // Assert - message should be available on the queue (published via producer through exchange) var requeued = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.Equal(_message.Body.Value, requeued.Body.Value); + await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } - [Fact] - public void When_disposing_should_dispose_lazily_created_producer() + [Test] + public async Task When_disposing_should_dispose_lazily_created_producer() { // Arrange - send, receive, and requeue with delay to trigger producer creation _sendProducer.Send(_message); var received = _channel.Receive(TimeSpan.FromMilliseconds(10000)); - Assert.NotEqual(MessageType.MT_NONE, received.Header.MessageType); + await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); //delay before requeue for test connection pool conflicts Thread.Sleep(TimeSpan.FromSeconds(2)); @@ -115,12 +113,11 @@ public void When_disposing_should_dispose_lazily_created_producer() _channel.Requeue(received, TimeSpan.FromSeconds(5)); // Act & Assert - disposing channel (and its consumer) should not throw - var exception = Record.Exception(() => _channel.Dispose()); - Assert.Null(exception); + await Assert.That(() => _channel.Dispose()).ThrowsNothing(); } - [Fact] - public void When_disposing_without_producer_created_should_not_throw() + [Test] + public async Task When_disposing_without_producer_created_should_not_throw() { // Arrange - consumer that never requeued with delay (no producer created) var rmqConnection = new RmqMessagingGatewayConnection @@ -136,8 +133,7 @@ public void When_disposing_without_producer_created_should_not_throw() isDurable: false); // Act & Assert - should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs index 1c8d9c00c9..88bdd151db 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_sending_a_message_should_propagate_context.cs @@ -7,13 +7,12 @@ using OpenTelemetry.Trace; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using Paramore.Brighter.Observability; -using Xunit; using Baggage = OpenTelemetry.Baggage; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor { - [Trait("Category", "RMQ")] - [Collection("RMQ")] + [Category("RMQ")] + [NotInParallel("RMQ")] public class RmqMessageProducerPropagateContextTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -61,8 +60,8 @@ public RmqMessageProducerPropagateContextTests() }; } - [Fact] - public void When_Sending_A_Message_Should_Propagate_Context() + [Test] + public async Task When_Sending_A_Message_Should_Propagate_Context() { //arrange @@ -76,9 +75,9 @@ public void When_Sending_A_Message_Should_Propagate_Context() .SelectMany(a => a.Events) .FirstOrDefault(e => e.Name == $"{_message.Header.Topic} {CommandProcessorSpanOperation.Publish.ToSpanName()}"); - Assert.NotNull(_message.Header.TraceParent); - Assert.Equal("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE", _message.Header.TraceState); - Assert.Equal("key=value,key2=value2", _message.Header.Baggage.ToString()); + await Assert.That(_message.Header.TraceParent).IsNotNull(); + await Assert.That(_message.Header.TraceState).IsEqualTo("brighter=00f067aa0ba902b7,congo=t61rcWkgMzE"); + await Assert.That(_message.Header.Baggage.ToString()).IsEqualTo("key=value,key2=value2"); } public void Dispose() diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs index 50255bd8c8..485a33df74 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs @@ -5,14 +5,13 @@ using System.Security.Cryptography.X509Certificates; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using RabbitMQ.Client; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; // These tests validate gateway configuration plumbing (ConnectionFactory.Ssl setup) and are // intentionally hand-written rather than generator-based. See ADR 0035 (Generated Tests). -[Trait("Category", "RMQ")] -[Trait("Category", "MutualTLS")] +[Category("RMQ")] +[Category("MutualTLS")] public class RmqMutualTlsConnectionConfigurationTests : IDisposable { private readonly string _tempCertPath; @@ -44,8 +43,8 @@ public void Dispose() File.Delete(_tempCertPath); } - [Fact] - public void When_certificate_is_configured_ssl_is_enabled() + [Test] + public async Task When_certificate_is_configured_ssl_is_enabled() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -60,16 +59,16 @@ public void When_certificate_is_configured_ssl_is_enabled() var factory = gateway.GetConnectionFactory(); // Assert - SSL should be enabled - Assert.NotNull(factory.Ssl); - Assert.True(factory.Ssl.Enabled); - Assert.Equal("localhost", factory.Ssl.ServerName); - Assert.NotNull(factory.Ssl.Certs); - Assert.Single(factory.Ssl.Certs); - Assert.Same(_testCertificate, factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl).IsNotNull(); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.ServerName).IsEqualTo("localhost"); + await Assert.That(factory.Ssl.Certs).IsNotNull(); + await Assert.That(factory.Ssl.Certs.Count).IsEqualTo(1); + await Assert.That(factory.Ssl.Certs[0]).IsSameReferenceAs(_testCertificate); } - [Fact] - public void When_no_certificate_is_configured_ssl_is_not_configured() + [Test] + public async Task When_no_certificate_is_configured_ssl_is_not_configured() { // Arrange - no certificate configured var connection = new RmqMessagingGatewayConnection @@ -83,12 +82,12 @@ public void When_no_certificate_is_configured_ssl_is_not_configured() var factory = gateway.GetConnectionFactory(); // Assert - SSL should not be enabled (backwards compatibility) - Assert.NotNull(factory.Ssl); - Assert.False(factory.Ssl.Enabled); + await Assert.That(factory.Ssl).IsNotNull(); + await Assert.That(factory.Ssl.Enabled).IsFalse(); } - [Fact] - public void When_certificate_object_and_path_both_set_object_takes_precedence() + [Test] + public async Task When_certificate_object_and_path_both_set_object_takes_precedence() { // Arrange - both certificate object and path set var connection = new RmqMessagingGatewayConnection @@ -104,12 +103,12 @@ public void When_certificate_object_and_path_both_set_object_takes_precedence() var factory = gateway.GetConnectionFactory(); // Assert - Should use the certificate object, not load from path - Assert.True(factory.Ssl.Enabled); - Assert.Same(_testCertificate, factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.Certs[0]).IsSameReferenceAs(_testCertificate); } - [Fact] - public void When_certificate_path_is_provided_certificate_is_loaded() + [Test] + public async Task When_certificate_path_is_provided_certificate_is_loaded() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -125,13 +124,13 @@ public void When_certificate_path_is_provided_certificate_is_loaded() var factory = gateway.GetConnectionFactory(); // Assert - Certificate should be loaded from file - Assert.True(factory.Ssl.Enabled); - Assert.Single(factory.Ssl.Certs); - Assert.NotNull(factory.Ssl.Certs[0]); + await Assert.That(factory.Ssl.Enabled).IsTrue(); + await Assert.That(factory.Ssl.Certs.Count).IsEqualTo(1); + await Assert.That(factory.Ssl.Certs[0]).IsNotNull(); } - [Fact] - public void When_certificate_file_does_not_exist_throws_file_not_found() + [Test] + public async Task When_certificate_file_does_not_exist_throws_file_not_found() { // Arrange var connection = new RmqMessagingGatewayConnection @@ -142,12 +141,12 @@ public void When_certificate_file_does_not_exist_throws_file_not_found() }; // Act & Assert - var ex = Assert.Throws(() => new TestableRmqMessageConsumer(connection)); - Assert.Contains("Client certificate file not found", ex.Message); + var ex = await Assert.That(() => new TestableRmqMessageConsumer(connection)).ThrowsExactly(); + await Assert.That(ex.Message).Contains("Client certificate file not found"); } - [Fact] - public void When_certificate_file_is_invalid_throws_invalid_operation() + [Test] + public async Task When_certificate_file_is_invalid_throws_invalid_operation() { // Arrange - create a temp file with invalid certificate data var invalidCertPath = Path.Combine(Path.GetTempPath(), $"invalid-cert-{Guid.NewGuid()}.pfx"); @@ -163,9 +162,9 @@ public void When_certificate_file_is_invalid_throws_invalid_operation() }; // Act & Assert - var ex = Assert.Throws(() => new TestableRmqMessageConsumer(connection)); - Assert.Contains("Failed to load client certificate", ex.Message); - Assert.Contains("valid .pfx (PKCS#12) certificate", ex.Message); + var ex = await Assert.That(() => new TestableRmqMessageConsumer(connection)).ThrowsExactly(); + await Assert.That(ex.Message).Contains("Failed to load client certificate"); + await Assert.That(ex.Message).Contains("valid .pfx (PKCS#12) certificate"); } finally { @@ -174,8 +173,8 @@ public void When_certificate_file_is_invalid_throws_invalid_operation() } } - [Fact] - public void When_certificate_configuration_is_optional_backwards_compatibility_is_maintained() + [Test] + public async Task When_certificate_configuration_is_optional_backwards_compatibility_is_maintained() { // Arrange - existing code that doesn't use certificates var connection = new RmqMessagingGatewayConnection @@ -187,7 +186,7 @@ public void When_certificate_configuration_is_optional_backwards_compatibility_i // Act & Assert - Should not throw, gateway should initialize normally var gateway = new TestableRmqMessageConsumer(connection); var factory = gateway.GetConnectionFactory(); - Assert.NotNull(factory); + await Assert.That(factory).IsNotNull(); } // Test double to expose ConnectionFactory for verification diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_forwards_scheduler_to_consumers.cs index d7d127f8b5..0f06835cae 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_forwards_scheduler_to_consumers.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; @@ -34,8 +33,8 @@ public class When_rmq_sync_channel_factory_forwards_scheduler_to_consumers Exchange = new Exchange("test.exchange") }; - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange var consumerFactory = new RmqMessageConsumerFactory(_connection); @@ -46,11 +45,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -58,7 +57,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_has_scheduler_should_pass_to_consumers.cs index 17bdf06728..1cb7b64e6b 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -1,6 +1,5 @@ using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; @@ -21,19 +20,19 @@ public class When_rmq_sync_channel_factory_has_scheduler_should_pass_to_consumer makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Arrange var consumerFactory = new RmqMessageConsumerFactory(_connection); var channelFactory = new ChannelFactory(consumerFactory); // Assert - Assert.IsAssignableFrom(channelFactory); + await Assert.That(channelFactory).IsAssignableTo(); } - [Fact] - public void Should_create_sync_channel_when_scheduler_set() + [Test] + public async Task Should_create_sync_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -45,12 +44,12 @@ public void Should_create_sync_channel_when_scheduler_set() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_channel_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_channel_without_scheduler_for_backward_compat() { // Arrange — no scheduler set var consumerFactory = new RmqMessageConsumerFactory(_connection); @@ -60,8 +59,8 @@ public void Should_create_channel_without_scheduler_for_backward_compat() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_creates_consumer_should_pass_scheduler.cs index 3ba7fd7221..bc43e18406 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; @@ -43,8 +42,8 @@ public class When_rmq_sync_consumer_factory_creates_consumer_should_pass_schedul makeChannels: OnMissingChannel.Assume ); - [Fact] - public void Should_create_sync_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_sync_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -54,12 +53,12 @@ public void Should_create_sync_consumer_when_scheduler_provided() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange — factory constructed without a scheduler (backward compat) var factory = new RmqMessageConsumerFactory(_connection); @@ -68,8 +67,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully without scheduler - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_scheduler_set_after_construction.cs index 5976a901e9..dfc3d1e04c 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_rmq_sync_consumer_factory_scheduler_set_after_construction.cs @@ -22,7 +22,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.RMQ.Sync; -using Xunit; namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway; @@ -34,8 +33,8 @@ public class When_rmq_sync_consumer_factory_scheduler_set_after_construction Exchange = new Exchange("test.exchange") }; - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new RmqMessageConsumerFactory(_connection); @@ -45,22 +44,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new RmqMessageConsumerFactory(_connection, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -71,8 +70,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj b/tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj index 7a5833a817..bb399b9c49 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj @@ -1,33 +1,17 @@ - - + $(BrighterTestTargetFrameworks) false + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - - \ No newline at end of file diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs index db1ddb0728..65e9cb693c 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs @@ -1,14 +1,13 @@ -using System; +using System; using System.Threading.Tasks; -using Xunit; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; using ServiceStack.Redis; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisMessageConsumerRedisNotAvailableTestsAsync { private readonly ChannelName _queueName = new ChannelName("test"); @@ -23,13 +22,13 @@ public RedisMessageConsumerRedisNotAvailableTestsAsync() _messageConsumer = new RedisMessageConsumerSocketErrorOnGetClient(configuration, _queueName, _topic); } - [Fact] + [Test] public async Task When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async() { _exception = await Catch.ExceptionAsync(() => _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); - Assert.IsType(_exception); - Assert.IsType(_exception?.InnerException); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception?.InnerException).IsTypeOf(); } //Do not dispose of fake client diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs index 44fe8f189c..e17563e7df 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs @@ -1,13 +1,12 @@ -using System; +using System; using System.Threading.Tasks; -using Xunit; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisMessageConsumerOperationInterruptedTestsAsync { private readonly ChannelName _queueName = new("test"); @@ -22,13 +21,13 @@ public RedisMessageConsumerOperationInterruptedTestsAsync() _messageConsumer = new RedisMessageConsumerTimeoutOnGetClient(configuration, _queueName, _topic); } - [Fact] + [Test] public async Task When_a_message_consumer_throws_a_timeout_exception_when_getting_a_client_from_the_pool_async() { _exception = await Catch.ExceptionAsync(() => _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); - Assert.IsType(_exception); - Assert.IsType(_exception?.InnerException); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception?.InnerException).IsTypeOf(); } //do not dispose a fake client diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 681d6134ef..6744e528cc 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,13 +1,13 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisMessageProducerSendTestsAsync : IClassFixture +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisMessageProducerSendTestsAsync { private readonly RedisFixture _redisFixture; private readonly Message _message; @@ -21,7 +21,7 @@ public RedisMessageProducerSendTestsAsync(RedisFixture redisFixture) ); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_messaging_gateway_async() { await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard @@ -30,6 +30,6 @@ public async Task When_posting_a_message_via_the_messaging_gateway_async() var messageBody = sentMessage.Body.Value; await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessage); - Assert.Equal(_message.Body.Value, messageBody); + await Assert.That(messageBody).IsEqualTo(_message.Body.Value); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs index 38f1d3a37b..650ceb9496 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs @@ -1,13 +1,13 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisMessageProducerMultipleSendTestsAsync : IClassFixture +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisMessageProducerMultipleSendTestsAsync { private readonly RedisFixture _redisFixture; private readonly Message _messageOne; @@ -29,7 +29,7 @@ public RedisMessageProducerMultipleSendTestsAsync(RedisFixture redisFixture) ); } - [Fact] + [Test] public async Task When_posting_multiple_messages_via_the_messaging_gateway_async() { // Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard @@ -49,7 +49,7 @@ public async Task When_posting_multiple_messages_via_the_messaging_gateway_async await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageTwo); // _should_send_a_message_via_restms_with_the_matching_body - Assert.Equal(_messageOne.Body.Value, messageBodyOne); - Assert.Equal(_messageTwo.Body.Value, messageBodyTwo); + await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); + await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index f2b62ca57c..47339e35da 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -26,13 +26,12 @@ THE SOFTWARE. */ using System.Linq; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] -[Trait("Category", "Redis")] -[Trait("Fragile", "CI")] +[NotInParallel("Redis Shared Pool")] +[Category("Redis")] +[Property("Fragile", "CI")] public class RedisMessageConsumerDeliveryErrorDlqAsyncTests : IAsyncDisposable { private readonly RedisMessageProducer _messageProducer; @@ -62,7 +61,7 @@ public RedisMessageConsumerDeliveryErrorDlqAsyncTests() new MessageBody("test content")); } - [Fact] + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_async() { //Arrange - subscribe then send @@ -79,19 +78,17 @@ await _consumer.RejectAsync(receivedMessage, //Assert - message should appear on DLQ var dlqMessage = (await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(3000))).Single(); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Verify rejection metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs index 8a5ae62f31..7b3dd2d101 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs @@ -1,13 +1,13 @@ -using System; +using System; using System.Linq; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisRequeueMessageTestsAsync : IClassFixture, IAsyncDisposable +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisRequeueMessageTestsAsync : IAsyncDisposable { private readonly RedisFixture _redisFixture; private readonly Message _messageOne; @@ -29,7 +29,7 @@ public RedisRequeueMessageTestsAsync(RedisFixture redisFixture) ); } - [Fact] + [Test] public async Task When_requeing_a_failed_message_async() { // Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard @@ -55,8 +55,8 @@ public async Task When_requeing_a_failed_message_async() await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageOne); // _should_send_a_message_via_restms_with_the_matching_body - Assert.Equal(_messageOne.Body.Value, messageBodyOne); - Assert.Equal(_messageTwo.Body.Value, messageBodyTwo); + await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); + await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs index 132e034d72..8f69add954 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs @@ -1,13 +1,12 @@ -using System; +using System; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; using ServiceStack.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisMessageConsumerRedisNotAvailableTests { private readonly ChannelName _queueName = new ChannelName("test"); @@ -23,13 +22,13 @@ public RedisMessageConsumerRedisNotAvailableTests() } - [Fact] - public void When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server() + [Test] + public async Task When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server() { _exception = Catch.Exception(() => _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000))); - Assert.IsType(_exception); - Assert.IsType(_exception?.InnerException); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception?.InnerException).IsTypeOf(); } //Do not dispose a fake client diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs index 0079b4454f..e1ad87ac5c 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs @@ -1,12 +1,11 @@ -using System; -using Xunit; +using System; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisMessageConsumerOperationInterruptedTests { private readonly ChannelName _queueName = new("test"); @@ -21,13 +20,13 @@ public RedisMessageConsumerOperationInterruptedTests() _messageConsumer = new RedisMessageConsumerTimeoutOnGetClient(configuration, _queueName, _topic); } - [Fact] - public void When_a_message_consumer_throws_a_timeout_exception_when_getting_a_client_from_the_pool() + [Test] + public async Task When_a_message_consumer_throws_a_timeout_exception_when_getting_a_client_from_the_pool() { _exception = Catch.Exception(() => _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000))); - Assert.IsType(_exception); - Assert.IsType(_exception?.InnerException); + await Assert.That(_exception).IsTypeOf(); + await Assert.That(_exception?.InnerException).IsTypeOf(); } //don't try to dispose, not a real client diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 99d1728d0b..ece0762d6e 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,14 +1,14 @@ -using System; +using System; using System.Linq; using System.Net.Mime; using Paramore.Brighter.Observability; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisMessageProducerSendTests : IClassFixture +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisMessageProducerSendTests { private readonly RedisFixture _redisFixture; private readonly Message _message; @@ -67,8 +67,8 @@ public RedisMessageProducerSendTests(RedisFixture redisFixture) _message = new Message(header, new MessageBody("test content")); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -78,24 +78,24 @@ public void When_posting_a_message_via_the_messaging_gateway() _redisFixture.MessageConsumer.Acknowledge(sentMessage); // Assert message body - Assert.Equal(_message.Body.Value, sentMessage.Body.Value); + await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert header properties - Assert.Equal(_messageId, sentMessage.Header.MessageId); - Assert.Equal(_topic, sentMessage.Header.Topic); - Assert.Equal(MessageType.MT_COMMAND, sentMessage.Header.MessageType); - Assert.Equal(_timestamp, sentMessage.Header.TimeStamp, TimeSpan.FromSeconds(5)); - Assert.Equal(_correlationId, sentMessage.Header.CorrelationId); - Assert.Equal(_replyTo, sentMessage.Header.ReplyTo); - Assert.Equal(MediaTypeNames.Application.Json, sentMessage.Header.ContentType!.ToString()); - Assert.Equal("custom-value", sentMessage.Header.Bag["custom-header"]); - Assert.Equal(_source, sentMessage.Header.Source); - Assert.Equal(_type, sentMessage.Header.Type); - Assert.Equal(_dataSchema, sentMessage.Header.DataSchema); - Assert.Equal(_subject, sentMessage.Header.Subject); - Assert.Equal(MessageHeader.DefaultSpecVersion, sentMessage.Header.SpecVersion); - Assert.Equal(_traceParent, sentMessage.Header.TraceParent); - Assert.Equal(_traceState, sentMessage.Header.TraceState); - Assert.Equal(_baggage, sentMessage.Header.Baggage); + await Assert.That(sentMessage.Header.MessageId).IsEqualTo(_messageId); + await Assert.That(sentMessage.Header.Topic).IsEqualTo(_topic); + await Assert.That(sentMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(sentMessage.Header.TimeStamp).IsEqualTo(_timestamp).Within(TimeSpan.FromSeconds(5)); + await Assert.That(sentMessage.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(sentMessage.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(sentMessage.Header.ContentType!.ToString()).IsEqualTo(MediaTypeNames.Application.Json); + await Assert.That(sentMessage.Header.Bag["custom-header"]).IsEqualTo("custom-value"); + await Assert.That(sentMessage.Header.Source).IsEqualTo(_source); + await Assert.That(sentMessage.Header.Type).IsEqualTo(_type); + await Assert.That(sentMessage.Header.DataSchema).IsEqualTo(_dataSchema); + await Assert.That(sentMessage.Header.Subject).IsEqualTo(_subject); + await Assert.That(sentMessage.Header.SpecVersion).IsEqualTo(MessageHeader.DefaultSpecVersion); + await Assert.That(sentMessage.Header.TraceParent).IsEqualTo(_traceParent); + await Assert.That(sentMessage.Header.TraceState).IsEqualTo(_traceState); + await Assert.That(sentMessage.Header.Baggage).IsEqualTo(_baggage); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs index 2037033536..1399df9c8a 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs @@ -1,12 +1,12 @@ -using System; +using System; using System.Linq; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisMessageProducerMultipleSendTests : IClassFixture +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisMessageProducerMultipleSendTests { private readonly RedisFixture _redisFixture; private readonly Message _messageOne; @@ -28,8 +28,8 @@ public RedisMessageProducerMultipleSendTests(RedisFixture redisFixture) ); } - [Fact] - public void When_posting_a_message_via_the_messaging_gateway() + [Test] + public async Task When_posting_a_message_via_the_messaging_gateway() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -48,7 +48,7 @@ public void When_posting_a_message_via_the_messaging_gateway() _redisFixture.MessageConsumer.Acknowledge(sentMessageTwo); //_should_send_a_message_via_restms_with_the_matching_body - Assert.Equal(_messageOne.Body.Value, messageBodyOne); - Assert.Equal(_messageTwo.Body.Value, messageBodyTwo); + await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); + await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index a5ab401f11..c3b3b22f7c 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -25,13 +25,12 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] -[Trait("Category", "Redis")] -[Trait("Fragile", "CI")] +[NotInParallel("Redis Shared Pool")] +[Category("Redis")] +[Property("Fragile", "CI")] public class RedisMessageConsumerDeliveryErrorDlqTests : IDisposable { private readonly RedisMessageProducer _messageProducer; @@ -61,8 +60,8 @@ public RedisMessageConsumerDeliveryErrorDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange - subscribe then send _consumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -78,19 +77,17 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() //Assert - message should appear on DLQ var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Verify rejection metadata - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs index d314a18925..897e7f61ac 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs @@ -25,13 +25,12 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] -[Trait("Category", "Redis")] -[Trait("Fragile", "CI")] +[NotInParallel("Redis Shared Pool")] +[Category("Redis")] +[Property("Fragile", "CI")] public class RedisMessageConsumerNoChannelsRejectTests : IDisposable { private readonly RedisMessageProducer _messageProducer; @@ -56,8 +55,8 @@ public RedisMessageConsumerNoChannelsRejectTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_remove_from_inflight() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_remove_from_inflight() { //Arrange - subscribe then send _consumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -69,12 +68,12 @@ public void When_rejecting_message_with_no_channels_configured_should_remove_fro new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); //Assert - reject returns true and consumer can receive again without "unacked message" error - Assert.True(result); + await Assert.That(result).IsTrue(); // This would throw ChannelFailureException("Unacked message still in flight...") // if reject didn't remove from inflight var nextMessages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); - Assert.Empty(nextMessages); + await Assert.That(nextMessages).IsEmpty(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 708fc8a050..003d4060f1 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -25,13 +25,12 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] -[Trait("Category", "Redis")] -[Trait("Fragile", "CI")] +[NotInParallel("Redis Shared Pool")] +[Category("Redis")] +[Property("Fragile", "CI")] public class RedisMessageConsumerUnacceptableFallbackToDlqTests : IDisposable { private readonly RedisMessageProducer _messageProducer; @@ -62,8 +61,8 @@ public RedisMessageConsumerUnacceptableFallbackToDlqTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange - subscribe then send _consumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -78,10 +77,9 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou //Assert - message should fall back to DLQ var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 41cd8ece58..fd81feafa4 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -25,13 +25,12 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] -[Trait("Category", "Redis")] -[Trait("Fragile", "CI")] +[NotInParallel("Redis Shared Pool")] +[Category("Redis")] +[Property("Fragile", "CI")] public class RedisMessageConsumerUnacceptableInvalidChannelTests : IDisposable { private readonly RedisMessageProducer _messageProducer; @@ -66,8 +65,8 @@ public RedisMessageConsumerUnacceptableInvalidChannelTests() new MessageBody("test content")); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange - subscribe then send _consumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -83,14 +82,13 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval //Assert - message should appear on invalid channel, not on DLQ var invalidMessage = _invalidConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - invalidMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); // DLQ should be empty var dlqMessages = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)); - Assert.Empty(dlqMessages); + await Assert.That(dlqMessages).IsEmpty(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs index 836d71fe0f..a7729bbf6c 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs @@ -1,12 +1,12 @@ -using System; +using System; using System.Linq; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] -public class RedisRequeueMessageTests : IClassFixture +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class RedisRequeueMessageTests { private readonly RedisFixture _redisFixture; private readonly Message _messageOne; @@ -28,8 +28,8 @@ public RedisRequeueMessageTests(RedisFixture redisFixture) ); } - [Fact] - public void When_requeing_a_failed_message() + [Test] + public async Task When_requeing_a_failed_message() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); @@ -53,7 +53,7 @@ public void When_requeing_a_failed_message() var messageBodyOne = sentMessageOne.Body.Value; _redisFixture.MessageConsumer.Acknowledge(sentMessageOne); - Assert.Equal(_messageOne.Body.Value, messageBodyOne); - Assert.Equal(_messageTwo.Body.Value, messageBodyTwo); + await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); + await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 866b32f1d7..1ed55d7fb5 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Reflection; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -42,8 +41,8 @@ public RedisMessageConsumerFactoryDlqTests() _factory = new RedisMessageConsumerFactory(configuration); } - [Fact] - public void When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_redis_consumer_with_dlq_subscription_should_pass_routing_keys() { //Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -61,7 +60,7 @@ public void When_creating_redis_consumer_with_dlq_subscription_should_pass_routi _consumer = _factory.Create(subscription); //Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -69,17 +68,17 @@ public void When_creating_redis_consumer_with_dlq_subscription_should_pass_routi var invalidField = consumerType.GetField("_invalidMessageRoutingKey", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties.cs index a6321a0df0..a01b0d99fc 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; public class RedisSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_redis_subscription_with_dlq_routing_keys_should_expose_properties() { //Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -47,17 +46,17 @@ public void When_creating_redis_subscription_with_dlq_routing_keys_should_expose ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_redis_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_redis_subscription_without_dlq_routing_keys_should_default_to_null() { //Arrange & Act var subscription = new RedisSubscription( @@ -67,12 +66,12 @@ public void When_creating_redis_subscription_without_dlq_routing_keys_should_def ); //Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs index d53624ebd1..efb437b013 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs @@ -1,17 +1,16 @@ -using System; -using Xunit; +using System; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Redis.Tests.TestDoubles; using ServiceStack.Redis; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisGatewayConfigurationTests { - [Fact] - public void When_overriding_client_configuration_via_the_gateway() + [Test] + public async Task When_overriding_client_configuration_via_the_gateway() { var configuration = new RedisMessagingGatewayConfiguration { @@ -32,17 +31,17 @@ public void When_overriding_client_configuration_via_the_gateway() using var gateway = new TestRedisGateway(configuration, RoutingKey.Empty); //Redis Config is static, so we can just look at the values we should have initialized - Assert.Equal(configuration.BackoffMultiplier.Value, RedisConfig.BackOffMultiplier); - Assert.Equal(configuration.BackoffMultiplier.Value, RedisConfig.BackOffMultiplier); - Assert.Equal(configuration.DeactivatedClientsExpiry.Value, RedisConfig.DeactivatedClientsExpiry); - Assert.Equal(configuration.DefaultConnectTimeout.Value, RedisConfig.DefaultConnectTimeout); - Assert.Equal(configuration.DefaultIdleTimeOutSecs.Value, RedisConfig.DefaultIdleTimeOutSecs); - Assert.Equal(configuration.DefaultReceiveTimeout.Value, RedisConfig.DefaultReceiveTimeout); - Assert.Equal(configuration.DefaultSendTimeout.Value, RedisConfig.DefaultSendTimeout); - Assert.Equal(!configuration.DisableVerboseLogging.Value, RedisConfig.EnableVerboseLogging); - Assert.Equal(configuration.HostLookupTimeoutMs.Value, RedisConfig.HostLookupTimeoutMs); - Assert.Equal(configuration.MaxPoolSize.Value, RedisConfig.DefaultMaxPoolSize); - Assert.Equal(configuration.MessageTimeToLive.Value, gateway.MessageTimeToLive); - Assert.Equal(configuration.VerifyMasterConnections.Value, RedisConfig.VerifyMasterConnections); + await Assert.That(RedisConfig.BackOffMultiplier).IsEqualTo(configuration.BackoffMultiplier.Value); + await Assert.That(RedisConfig.BackOffMultiplier).IsEqualTo(configuration.BackoffMultiplier.Value); + await Assert.That(RedisConfig.DeactivatedClientsExpiry).IsEqualTo(configuration.DeactivatedClientsExpiry.Value); + await Assert.That(RedisConfig.DefaultConnectTimeout).IsEqualTo(configuration.DefaultConnectTimeout.Value); + await Assert.That(RedisConfig.DefaultIdleTimeOutSecs).IsEqualTo(configuration.DefaultIdleTimeOutSecs.Value); + await Assert.That(RedisConfig.DefaultReceiveTimeout).IsEqualTo(configuration.DefaultReceiveTimeout.Value); + await Assert.That(RedisConfig.DefaultSendTimeout).IsEqualTo(configuration.DefaultSendTimeout.Value); + await Assert.That(RedisConfig.EnableVerboseLogging).IsEqualTo(!configuration.DisableVerboseLogging.Value); + await Assert.That(RedisConfig.HostLookupTimeoutMs).IsEqualTo(configuration.HostLookupTimeoutMs.Value); + await Assert.That(RedisConfig.DefaultMaxPoolSize).IsEqualTo(configuration.MaxPoolSize.Value); + await Assert.That(gateway.MessageTimeToLive).IsEqualTo(configuration.MessageTimeToLive.Value); + await Assert.That(RedisConfig.VerifyMasterConnections).IsEqualTo(configuration.VerifyMasterConnections.Value); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs index 9803217839..deb43d856a 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs @@ -1,45 +1,44 @@ -using System; +using System; using System.Collections.Generic; -using Xunit; using Paramore.Brighter.MessagingGateway.Redis; using Paramore.Brighter.Observability; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class RedisGoodMessageParsingTests { private const string GoodMessage = "\n"; - [Fact] - public void When_parsing_a_good_redis_message_to_brighter() + [Test] + public async Task When_parsing_a_good_redis_message_to_brighter() { Message message = RedisMessageCreator.CreateMessage(GoodMessage); // Assert existing properties - Assert.Equal(DateTime.Parse("2018-02-07T09:38:36Z"), message.Header.TimeStamp); - Assert.Equal("test", message.Header.Topic.Value); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); - Assert.Equal(3, message.Header.HandledCount); - Assert.Equal(TimeSpan.FromMilliseconds(200), message.Header.Delayed); - Assert.Equal("0AF88BBC-07FD-4FC3-9CA7-BF68415A2535", message.Header.CorrelationId); - Assert.Equal("text/plain", message.Header.ContentType!.ToString()); - Assert.Equal("reply.queue", message.Header.ReplyTo!.ToString()); + await Assert.That(message.Header.TimeStamp).IsEqualTo(DateTime.Parse("2018-02-07T09:38:36Z")); + await Assert.That(message.Header.Topic.Value).IsEqualTo("test"); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); + await Assert.That(message.Header.HandledCount).IsEqualTo(3); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.FromMilliseconds(200)); + await Assert.That(message.Header.CorrelationId).IsEqualTo("0AF88BBC-07FD-4FC3-9CA7-BF68415A2535"); + await Assert.That(message.Header.ContentType!.ToString()).IsEqualTo("text/plain"); + await Assert.That(message.Header.ReplyTo!.ToString()).IsEqualTo("reply.queue"); // Assert new Cloud Events properties - Assert.Equal(new Uri("http://goparamore.io"), message.Header.Source); - Assert.Equal("goparamore.io.Paramore.Brighter.Message", message.Header.Type); - Assert.Equal(new Uri("http://schema.example.com/test"), message.Header.DataSchema); - Assert.Equal("test-subject", message.Header.Subject); + await Assert.That(message.Header.Source).IsEqualTo(new Uri("http://goparamore.io")); + await Assert.That(message.Header.Type).IsEqualTo("goparamore.io.Paramore.Brighter.Message"); + await Assert.That(message.Header.DataSchema).IsEqualTo(new Uri("http://schema.example.com/test")); + await Assert.That(message.Header.Subject).IsEqualTo("test-subject"); // Assert W3C Trace Context properties - Assert.Equal(new TraceParent("00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"), message.Header.TraceParent); - Assert.Equal(new TraceState("congo=t61rcWkgMzE"), message.Header.TraceState); - Assert.Contains(new KeyValuePair("userId", "alice"), message.Header.Baggage); + await Assert.That(message.Header.TraceParent).IsEqualTo(new TraceParent("00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01")); + await Assert.That(message.Header.TraceState).IsEqualTo(new TraceState("congo=t61rcWkgMzE")); + await Assert.That(message.Header.Baggage).Contains(new KeyValuePair("userId", "alice")); // Assert message body - Assert.Equal("more test content", message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo("more test content"); } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_forwards_scheduler_to_consumers.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_forwards_scheduler_to_consumers.cs index 59729b37af..0faff2a47d 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_forwards_scheduler_to_consumers.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_forwards_scheduler_to_consumers.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -33,8 +32,8 @@ public class When_redis_channel_factory_forwards_scheduler_to_consumers MaxPoolSize = 10 }; - [Fact] - public void Should_forward_scheduler_to_consumer_factory() + [Test] + public async Task Should_forward_scheduler_to_consumer_factory() { // Arrange var consumerFactory = new RedisMessageConsumerFactory(_configuration); @@ -45,11 +44,11 @@ public void Should_forward_scheduler_to_consumer_factory() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Assert — the consumer factory received the scheduler - Assert.Same(scheduler, consumerFactory.Scheduler); + await Assert.That(consumerFactory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_read_scheduler_from_consumer_factory() + [Test] + public async Task Should_read_scheduler_from_consumer_factory() { // Arrange — consumer factory has a scheduler from construction var scheduler = new StubMessageScheduler(); @@ -57,7 +56,7 @@ public void Should_read_scheduler_from_consumer_factory() var channelFactory = new ChannelFactory(consumerFactory); // Assert — channel factory reads from the consumer factory - Assert.Same(scheduler, ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler); + await Assert.That(((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler).IsSameReferenceAs(scheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs index 2d609d3809..e3d72d9130 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -1,5 +1,4 @@ using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -19,19 +18,19 @@ public class When_redis_channel_factory_has_scheduler_should_pass_to_consumers messagePumpType: MessagePumpType.Reactor ); - [Fact] - public void Should_implement_channel_factory_with_scheduler() + [Test] + public async Task Should_implement_channel_factory_with_scheduler() { // Arrange var consumerFactory = new RedisMessageConsumerFactory(_configuration); var channelFactory = new ChannelFactory(consumerFactory); // Assert - Assert.IsAssignableFrom(channelFactory); + await Assert.That(channelFactory).IsAssignableTo(); } - [Fact] - public void Should_create_sync_channel_when_scheduler_set() + [Test] + public async Task Should_create_sync_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -43,12 +42,12 @@ public void Should_create_sync_channel_when_scheduler_set() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_async_channel_when_scheduler_set() + [Test] + public async Task Should_create_async_channel_when_scheduler_set() { // Arrange var scheduler = new StubMessageScheduler(); @@ -60,12 +59,12 @@ public void Should_create_async_channel_when_scheduler_set() var channel = channelFactory.CreateAsyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } - [Fact] - public void Should_create_channel_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_channel_without_scheduler_for_backward_compat() { // Arrange — no scheduler set var consumerFactory = new RedisMessageConsumerFactory(_configuration); @@ -75,8 +74,8 @@ public void Should_create_channel_without_scheduler_for_backward_compat() var channel = channelFactory.CreateSyncChannel(_subscription); // Assert - Assert.NotNull(channel); - Assert.IsType(channel); + await Assert.That(channel).IsNotNull(); + await Assert.That(channel).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 9303250b98..0957de3208 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -25,7 +25,6 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -34,12 +33,12 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// lazily-created requeue producer, and that disposal works in all cases. /// Uses a non-zero delay to exercise the full scheduler path (lesson from Kafka/MQTT). /// -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class When_redis_consumer_creates_producer_should_configure_and_dispose_correctly { - [Fact] - public void When_requeuing_with_delay_should_wire_scheduler_to_producer() + [Test] + public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() { // Arrange var configuration = RedisFixture.RedisMessagingGatewayConfiguration(); @@ -58,16 +57,16 @@ public void When_requeuing_with_delay_should_wire_scheduler_to_producer() consumer.Requeue(message, TimeSpan.FromSeconds(5)); // Assert - scheduler was called, proving it was wired through to the producer - Assert.True(scheduler.ScheduleCalled); - Assert.Equal(message.Body.Value, scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), scheduler.ScheduledDelay); + await Assert.That(scheduler.ScheduleCalled).IsTrue(); + await Assert.That(scheduler.ScheduledMessage?.Body.Value).IsEqualTo(message.Body.Value); + await Assert.That(scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); // Cleanup consumer.Dispose(); } - [Fact] - public void When_disposing_after_requeue_should_not_throw() + [Test] + public async Task When_disposing_after_requeue_should_not_throw() { // Arrange var configuration = RedisFixture.RedisMessagingGatewayConfiguration(); @@ -85,12 +84,11 @@ public void When_disposing_after_requeue_should_not_throw() consumer.Requeue(message, TimeSpan.FromSeconds(5)); // Act & Assert - dispose after producer was created should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] - public void When_disposing_without_requeue_should_not_throw() + [Test] + public async Task When_disposing_without_requeue_should_not_throw() { // Arrange - create consumer but never requeue (producer never created) var configuration = RedisFixture.RedisMessagingGatewayConfiguration(); @@ -102,11 +100,10 @@ public void When_disposing_without_requeue_should_not_throw() var consumer = new RedisMessageConsumer(configuration, queueName, topic, scheduler); // Act & Assert - dispose without producer creation should not throw - var exception = Record.Exception(() => consumer.Dispose()); - Assert.Null(exception); + await Assert.That(() => consumer.Dispose()).ThrowsNothing(); } - [Fact] + [Test] public async Task When_disposing_async_after_requeue_should_not_throw() { // Arrange @@ -125,8 +122,7 @@ public async Task When_disposing_async_after_requeue_should_not_throw() consumer.Requeue(message, TimeSpan.FromSeconds(5)); // Act & Assert - async dispose after producer was created should not throw - var exception = await Record.ExceptionAsync(async () => await consumer.DisposeAsync()); - Assert.Null(exception); + await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); } private sealed class SpySchedulerSync : IAmAMessageSchedulerSync diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_creates_consumer_should_pass_scheduler.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_creates_consumer_should_pass_scheduler.cs index 7f25b8d0e0..613c2fddc1 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_creates_consumer_should_pass_scheduler.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_creates_consumer_should_pass_scheduler.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -41,8 +40,8 @@ public class When_redis_consumer_factory_creates_consumer_should_pass_scheduler messagePumpType: MessagePumpType.Reactor ); - [Fact] - public void Should_create_sync_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_sync_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -52,12 +51,12 @@ public void Should_create_sync_consumer_when_scheduler_provided() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_async_consumer_when_scheduler_provided() + [Test] + public async Task Should_create_async_consumer_when_scheduler_provided() { // Arrange — factory constructed with a scheduler var scheduler = new StubMessageScheduler(); @@ -67,12 +66,12 @@ public void Should_create_async_consumer_when_scheduler_provided() var consumer = factory.CreateAsync(_subscription); // Assert — consumer is created successfully - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } - [Fact] - public void Should_create_consumer_without_scheduler_for_backward_compat() + [Test] + public async Task Should_create_consumer_without_scheduler_for_backward_compat() { // Arrange — factory constructed without a scheduler (backward compat) var factory = new RedisMessageConsumerFactory(_configuration); @@ -81,8 +80,8 @@ public void Should_create_consumer_without_scheduler_for_backward_compat() var consumer = factory.Create(_subscription); // Assert — consumer is created successfully without scheduler - Assert.NotNull(consumer); - Assert.IsType(consumer); + await Assert.That(consumer).IsNotNull(); + await Assert.That(consumer).IsTypeOf(); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_scheduler_set_after_construction.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_scheduler_set_after_construction.cs index 1cc64df606..d8fdf5e7fb 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_scheduler_set_after_construction.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_factory_scheduler_set_after_construction.cs @@ -21,7 +21,6 @@ THE SOFTWARE. */ #endregion using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -33,8 +32,8 @@ public class When_redis_consumer_factory_scheduler_set_after_construction MaxPoolSize = 10 }; - [Fact] - public void Should_expose_scheduler_set_after_construction() + [Test] + public async Task Should_expose_scheduler_set_after_construction() { // Arrange — factory constructed without a scheduler var factory = new RedisMessageConsumerFactory(_configuration); @@ -44,22 +43,22 @@ public void Should_expose_scheduler_set_after_construction() factory.Scheduler = scheduler; // Assert — scheduler property reflects the updated value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_use_constructor_scheduler_when_property_not_set() + [Test] + public async Task Should_use_constructor_scheduler_when_property_not_set() { // Arrange — factory constructed with a scheduler via constructor var scheduler = new StubMessageScheduler(); var factory = new RedisMessageConsumerFactory(_configuration, scheduler); // Assert — scheduler property reflects the constructor value - Assert.Same(scheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(scheduler); } - [Fact] - public void Should_override_constructor_scheduler_with_property() + [Test] + public async Task Should_override_constructor_scheduler_with_property() { // Arrange — factory constructed with one scheduler var originalScheduler = new StubMessageScheduler(); @@ -70,8 +69,8 @@ public void Should_override_constructor_scheduler_with_property() factory.Scheduler = overrideScheduler; // Assert — property reflects the override, not the original - Assert.Same(overrideScheduler, factory.Scheduler); - Assert.NotSame(originalScheduler, factory.Scheduler); + await Assert.That(factory.Scheduler).IsSameReferenceAs(overrideScheduler); + await Assert.That(factory.Scheduler).IsNotSameReferenceAs(originalScheduler); } private class StubMessageScheduler : IAmAMessageScheduler; diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs index af0ffb83d3..57f8773b4d 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -26,7 +26,6 @@ THE SOFTWARE. */ using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -35,8 +34,8 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// it should delegate to the lazily-created producer's SendWithDelayAsync rather than /// adding it back to the list immediately. /// -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class When_redis_consumer_requeues_async_with_delay_should_use_producer : IAsyncDisposable { private readonly RedisMessageConsumer _consumer; @@ -59,19 +58,19 @@ public When_redis_consumer_requeues_async_with_delay_should_use_producer() new MessageBody("test content for async delayed requeue")); } - [Fact] + [Test] public async Task When_requeuing_async_with_delay_should_use_producer() { // Act - requeue with non-zero delay var result = await _consumer.RequeueAsync(_message, TimeSpan.FromSeconds(5)); // Assert - should return true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - async scheduler should have been called via the producer path - Assert.True(_scheduler.ScheduleAsyncCalled); - Assert.Equal(_message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleAsyncCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } public ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs index a477e29495..4c212ef0a0 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -33,8 +32,8 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// to a lazily-created producer's SendWithDelay rather than adding it back to the list immediately. /// This ensures the delay is respected via the scheduler instead of being ignored. /// -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class When_redis_consumer_requeues_with_delay_should_use_producer : IDisposable { private readonly RedisMessageConsumer _consumer; @@ -57,19 +56,19 @@ public When_redis_consumer_requeues_with_delay_should_use_producer() new MessageBody("test content for delayed requeue")); } - [Fact] - public void When_requeuing_with_delay_should_use_producer() + [Test] + public async Task When_requeuing_with_delay_should_use_producer() { // Act - requeue with non-zero delay var result = _consumer.Requeue(_message, TimeSpan.FromSeconds(5)); // Assert - should return true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - scheduler should have been called via the producer path - Assert.True(_scheduler.ScheduleCalled); - Assert.Equal(_message.Body.Value, _scheduler.ScheduledMessage?.Body.Value); - Assert.Equal(TimeSpan.FromSeconds(5), _scheduler.ScheduledDelay); + await Assert.That(_scheduler.ScheduleCalled).IsTrue(); + await Assert.That(_scheduler.ScheduledMessage?.Body.Value).IsEqualTo(_message.Body.Value); + await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs index c06a64f9ea..cad588ebc4 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2024 Ian Cooper @@ -24,7 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.MessagingGateway.Redis; -using Xunit; namespace Paramore.Brighter.Redis.Tests.MessagingGateway; @@ -33,8 +32,8 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// direct Redis list operations rather than creating a producer. This preserves existing /// behavior and ensures immediate requeue without scheduler overhead. /// -[Collection("Redis Shared Pool")] //shared connection pool so run sequentially -[Trait("Category", "Redis")] +[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially +[Category("Redis")] public class When_redis_consumer_requeues_with_zero_delay_should_use_direct_list : IDisposable { private readonly RedisMessageConsumer _consumer; @@ -57,25 +56,25 @@ public When_redis_consumer_requeues_with_zero_delay_should_use_direct_list() new MessageBody("test content for zero delay requeue")); } - [Fact] - public void When_requeuing_with_zero_delay_should_not_use_scheduler() + [Test] + public async Task When_requeuing_with_zero_delay_should_not_use_scheduler() { // Act - requeue with zero delay; the direct Redis list path will be attempted // which may fail without Redis, but the scheduler must NOT be called - Record.Exception(() => _consumer.Requeue(_message, TimeSpan.Zero)); + _consumer.Requeue(_message, TimeSpan.Zero); // Assert - scheduler should NOT have been called - Assert.False(_scheduler.ScheduleCalled); + await Assert.That(_scheduler.ScheduleCalled).IsFalse(); } - [Fact] - public void When_requeuing_with_null_delay_should_not_use_scheduler() + [Test] + public async Task When_requeuing_with_null_delay_should_not_use_scheduler() { // Act - requeue with null delay (defaults to zero) - Record.Exception(() => _consumer.Requeue(_message)); + _consumer.Requeue(_message); // Assert - scheduler should NOT have been called - Assert.False(_scheduler.ScheduleCalled); + await Assert.That(_scheduler.ScheduleCalled).IsFalse(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj b/tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj index 7a00207b22..b6ee8a6e57 100644 --- a/tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj +++ b/tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj @@ -1,29 +1,12 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs index 30c085aaf7..917a74c62e 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Org.Apache.Rocketmq; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RocketMQ; @@ -8,7 +8,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessageDispatch; @@ -65,15 +64,15 @@ public DispatchBuilderTests() .ConfigureInstrumentation(tracer); } - [Fact] - public void When_Building_A_Dispatcher() + [Test] + public async Task When_Building_A_Dispatcher() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); - Assert.NotNull(GetConnection("foo")); - Assert.NotNull(GetConnection("bar")); - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + await Assert.That(_dispatcher).IsNotNull(); + await Assert.That(GetConnection("foo")).IsNotNull(); + await Assert.That(GetConnection("bar")).IsNotNull(); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); Thread.Sleep(1000); @@ -81,11 +80,11 @@ public void When_Building_A_Dispatcher() Thread.Sleep(1000); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); _dispatcher.End().GetAwaiter().GetResult(); - Assert.Equal(DispatcherState.DS_STOPPED, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } private Subscription? GetConnection(string name) { diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_async.cs index d7ffe39de4..03c6a2e04f 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_async.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Org.Apache.Rocketmq; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RocketMQ; @@ -8,7 +8,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessageDispatch; @@ -66,16 +65,16 @@ public DispatchBuilderTestsAsync() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] + [Test] public async Task When_Building_A_Dispatcher_With_Async() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); - Assert.NotNull(GetConnection("foo")); - Assert.NotNull(GetConnection("bar")); + await Assert.That(_dispatcher).IsNotNull(); + await Assert.That(GetConnection("foo")).IsNotNull(); + await Assert.That(GetConnection("bar")).IsNotNull(); - Assert.Equal(DispatcherState.DS_AWAITING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); await Task.Delay(1000); @@ -83,7 +82,7 @@ public async Task When_Building_A_Dispatcher_With_Async() await Task.Delay(1000); - Assert.Equal(DispatcherState.DS_RUNNING, _dispatcher.State); + await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); await _dispatcher.End(); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs index b0fc392328..965f337730 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher_with_named_gateway.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Org.Apache.Rocketmq; using Paramore.Brighter.Extensions.DependencyInjection; using Paramore.Brighter.MessagingGateway.RocketMQ; @@ -8,7 +8,6 @@ using Paramore.Brighter.ServiceActivator; using Polly; using Polly.Registry; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessageDispatch; @@ -79,10 +78,10 @@ public DispatchBuilderWithNamedGateway() .ConfigureInstrumentation(tracer, instrumentationOptions); } - [Fact] - public void When_building_a_dispatcher_with_named_gateway() + [Test] + public async Task When_building_a_dispatcher_with_named_gateway() { _dispatcher = _builder.Build(); - Assert.NotNull(_dispatcher); + await Assert.That(_dispatcher).IsNotNull(); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs index dbdd2be6cf..192666cfec 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs @@ -1,10 +1,9 @@ -using Paramore.Brighter.MessagingGateway.RocketMQ; +using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class BufferedConsumerCloudEventsTestsAsync : IAsyncDisposable { private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); @@ -23,7 +22,7 @@ public BufferedConsumerCloudEventsTestsAsync() _producer = new RocketMqMessageProducer(connection, producer, publication); } - [Fact] + [Test] public async Task When_uses_cloud_events_async() { await _consumer.PurgeAsync(); @@ -46,13 +45,13 @@ public async Task When_uses_cloud_events_async() var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); - Assert.Equal(messageOne.Header.MessageId, messages[0].Header.MessageId); - Assert.Equal(messageOne.Header.Subject, messages[0].Header.Subject); - Assert.Equal(messageOne.Header.Type, messages[0].Header.Type); - Assert.Equal(messageOne.Header.Source, messages[0].Header.Source); - Assert.Equal(messageOne.Header.DataSchema, messages[0].Header.DataSchema); + await Assert.That(messages[0].Header.MessageId).IsEqualTo(messageOne.Header.MessageId); + await Assert.That(messages[0].Header.Subject).IsEqualTo(messageOne.Header.Subject); + await Assert.That(messages[0].Header.Type).IsEqualTo(messageOne.Header.Type); + await Assert.That(messages[0].Header.Source).IsEqualTo(messageOne.Header.Source); + await Assert.That(messages[0].Header.DataSchema).IsEqualTo(messageOne.Header.DataSchema); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 5f6ccd8834..7ff9154ee8 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -1,10 +1,9 @@ -using Paramore.Brighter.MessagingGateway.RocketMQ; +using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class BufferedConsumerTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; @@ -23,7 +22,7 @@ public BufferedConsumerTestsAsync() _messageProducer = new RocketMqMessageProducer(connection, producer, publication); } - [Fact] + [Test] public async Task When_a_message_consumer_reads_multiple_messages_async() { await _messageConsumer.PurgeAsync(); @@ -45,7 +44,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() var messages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Equal(3, messages.Length); + await Assert.That(messages.Length).IsEqualTo(3); //ack those to remove from the queue foreach (var message in messages) @@ -60,7 +59,7 @@ public async Task When_a_message_consumer_reads_multiple_messages_async() messages = await _messageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(500)); //This time, just the one message - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index b4326b4ee9..d0ca6a5630 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -1,14 +1,13 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class MessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; @@ -50,7 +49,7 @@ public MessageProducerSendAsyncTests() publication); } - [Fact] + [Test] public async Task When_posting_a_message_via_the_producer_async() { // arrange @@ -67,21 +66,21 @@ public async Task When_posting_a_message_via_the_producer_async() await _channel.AcknowledgeAsync(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_messageProducer.Publication.Topic!.Value, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_messageProducer.Publication.Topic!.Value); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index b959fd237a..80be1c6843 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -31,11 +31,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketMqDeliveryErrorDlqAsyncTests : IAsyncDisposable { private readonly RocketMqMessageProducer _producer; @@ -86,7 +85,7 @@ public RocketMqDeliveryErrorDlqAsyncTests() (object)new MyCommand { Value = "Test Async DLQ" }, JsonSerialisationOptions.Options))); } - [Fact] + [Test] public async Task When_rejecting_message_async_with_delivery_error_should_send_to_dlq() { // Arrange - send a message and consume it from the source topic @@ -101,23 +100,21 @@ public async Task When_rejecting_message_async_with_delivery_error_should_send_t new MessageRejectionReason(RejectionReason.DeliveryError, "Test async delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = await ConsumeMessageAsync(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } private static async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consumer) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs index 7be4d78e20..94518e3681 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs @@ -1,14 +1,13 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class MessageProducerRequeueTestsAsync { private readonly IAmAMessageProducerAsync _sender; @@ -51,7 +50,7 @@ public MessageProducerRequeueTestsAsync() _channel = channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_a_message_async() { await _channel.PurgeAsync(); @@ -72,6 +71,6 @@ public async Task When_requeueing_a_message_async() break; } - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index f8544f302a..94de6e637b 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -1,15 +1,14 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; -[Trait("Category", "RocketMQ")] -[Trait("Fragile", "CI")] +[Category("RocketMQ")] +[Property("Fragile", "CI")] public class MessageProducerDlqTestsAsync { private readonly RocketMqMessageProducer _sender; @@ -52,7 +51,7 @@ public MessageProducerDlqTestsAsync() _channel = channelFactory.CreateAsyncChannel(subscription); } - [Fact] + [Test] public async Task When_requeueing_redrives_to_the_queue_async() { await _channel.PurgeAsync(); @@ -70,6 +69,6 @@ public async Task When_requeueing_redrives_to_the_queue_async() } receivedMessage = await _channel.ReceiveAsync(TimeSpan.FromSeconds(1)); - Assert.Equal(MessageType.MT_NONE, receivedMessage.Header.MessageType); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs index 27365b167f..cf05c8e902 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs @@ -1,10 +1,9 @@ -using Paramore.Brighter.MessagingGateway.RocketMQ; +using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class BufferedConsumerCloudEventsTests : IDisposable { private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); @@ -23,8 +22,8 @@ public BufferedConsumerCloudEventsTests() _producer = new RocketMqMessageProducer(connection, producer, publication); } - [Fact] - public void When_uses_cloud_events() + [Test] + public async Task When_uses_cloud_events() { _consumer.Purge(); @@ -47,13 +46,13 @@ public void When_uses_cloud_events() var messages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); - Assert.Equal(messageOne.Header.MessageId, messages[0].Header.MessageId); - Assert.Equal(messageOne.Header.Subject, messages[0].Header.Subject); - Assert.Equal(messageOne.Header.Type, messages[0].Header.Type); - Assert.Equal(messageOne.Header.Source, messages[0].Header.Source); - Assert.Equal(messageOne.Header.DataSchema, messages[0].Header.DataSchema); + await Assert.That(messages[0].Header.MessageId).IsEqualTo(messageOne.Header.MessageId); + await Assert.That(messages[0].Header.Subject).IsEqualTo(messageOne.Header.Subject); + await Assert.That(messages[0].Header.Type).IsEqualTo(messageOne.Header.Type); + await Assert.That(messages[0].Header.Source).IsEqualTo(messageOne.Header.Source); + await Assert.That(messages[0].Header.DataSchema).IsEqualTo(messageOne.Header.DataSchema); } public void Dispose() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index a2d52a0c27..e7db6542d8 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -1,10 +1,9 @@ -using Paramore.Brighter.MessagingGateway.RocketMQ; +using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class BufferedConsumerTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -23,8 +22,8 @@ public BufferedConsumerTests() _messageProducer = new RocketMqMessageProducer(connection, producer, publication); } - [Fact] - public void When_a_message_consumer_reads_multiple_messages() + [Test] + public async Task When_a_message_consumer_reads_multiple_messages() { _messageConsumer.Purge(); //Post one more than batch size messages @@ -44,7 +43,7 @@ public void When_a_message_consumer_reads_multiple_messages() var messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); //We should only have three messages - Assert.Equal(3, messages.Length); + await Assert.That(messages.Length).IsEqualTo(3); //ack those to remove from the queue foreach (var message in messages) @@ -59,7 +58,7 @@ public void When_a_message_consumer_reads_multiple_messages() messages = _messageConsumer.Receive(TimeSpan.FromMilliseconds(500)); //This time, just the one message - Assert.Single(messages); + await Assert.That(messages).HasSingleItem(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index ef1de82bca..dc0feccc5f 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -1,14 +1,13 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class MessageProducerSendTests : IDisposable { private readonly Message _message; @@ -50,8 +49,8 @@ public MessageProducerSendTests() publication); } - [Fact] - public void When_posting_a_message_via_the_producer_async() + [Test] + public async Task When_posting_a_message_via_the_producer_async() { _channel.Purge(); @@ -67,21 +66,21 @@ public void When_posting_a_message_via_the_producer_async() _channel.Acknowledge(message); // should_send_the_message_to_aws_sqs - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); - Assert.Equal(_myCommand.Id, message.Id); - Assert.False(message.Redelivered); - Assert.Equal(_myCommand.Id, message.Header.MessageId); - Assert.Contains(_messageProducer.Publication.Topic!.Value, message.Header.Topic.Value); - Assert.Equal(_correlationId, message.Header.CorrelationId); - Assert.Equal(_replyTo, message.Header.ReplyTo); - Assert.Equal(0, message.Header.HandledCount); - Assert.Equal(_message.Header.Subject, message.Header.Subject); + await Assert.That(message.Id).IsEqualTo(_myCommand.Id); + await Assert.That(message.Redelivered).IsFalse(); + await Assert.That(message.Header.MessageId).IsEqualTo(_myCommand.Id); + await Assert.That(message.Header.Topic.Value).Contains(_messageProducer.Publication.Topic!.Value); + await Assert.That(message.Header.CorrelationId).IsEqualTo(_correlationId); + await Assert.That(message.Header.ReplyTo).IsEqualTo(_replyTo); + await Assert.That(message.Header.HandledCount).IsEqualTo(0); + await Assert.That(message.Header.Subject).IsEqualTo(_message.Header.Subject); // allow for clock drift in the following test, more important to have a contemporary timestamp than anything - Assert.True((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))); - Assert.Equal(TimeSpan.Zero, message.Header.Delayed); + await Assert.That((message.Header.TimeStamp) > (RoundToSeconds(DateTime.UtcNow.AddMinutes(-1)))).IsTrue(); + await Assert.That(message.Header.Delayed).IsEqualTo(TimeSpan.Zero); // {"Id":"cd581ced-c066-4322-aeaf-d40944de8edd","Value":"Test","WasCancelled":false,"TaskCompleted":false} - Assert.Equal(_message.Body.Value, message.Body.Value); + await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } public void Dispose() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index f381f6d866..260a89bb7a 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -30,11 +30,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketMqDeliveryErrorDlqTests : IDisposable { private readonly RocketMqMessageProducer _producer; @@ -85,8 +84,8 @@ public RocketMqDeliveryErrorDlqTests() (object)new MyCommand { Value = "Test DLQ" }, JsonSerialisationOptions.Options))); } - [Fact] - public void When_rejecting_message_with_delivery_error_should_send_to_dlq() + [Test] + public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { // Arrange - send a message and consume it from the source topic _consumer.Purge(); @@ -100,23 +99,21 @@ public void When_rejecting_message_with_delivery_error_should_send_to_dlq() new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present in header bag - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.Equal(originalTopic, dlqMessage.Header.Bag["originalTopic"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.DeliveryError.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalMessageType")); - Assert.Equal(MessageType.MT_COMMAND.ToString(), - dlqMessage.Header.Bag["originalMessageType"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalTopic"].ToString()).IsEqualTo(originalTopic); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.DeliveryError.ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionTimestamp")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalMessageType")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["originalMessageType"].ToString()).IsEqualTo(MessageType.MT_COMMAND.ToString()); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs index e2c8bdb43d..6e0fd073b1 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs @@ -30,11 +30,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketMqNoChannelsConfiguredTests : IDisposable { private readonly RocketMqMessageProducer _producer; @@ -72,8 +71,8 @@ public RocketMqNoChannelsConfiguredTests() (object)new MyCommand { Value = "Test No Channels" }, JsonSerialisationOptions.Options))); } - [Fact] - public void When_rejecting_message_with_no_channels_configured_should_ack_and_return_true() + [Test] + public async Task When_rejecting_message_with_no_channels_configured_should_ack_and_return_true() { // Arrange - send a message and consume it from the source topic _consumer.Purge(); @@ -85,7 +84,7 @@ public void When_rejecting_message_with_no_channels_configured_should_ack_and_re new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true (source Ack'd, breaking requeue loop) - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - consumer can continue to receive subsequent messages (not stuck in requeue loop) var followUpMessage = new Message( @@ -96,8 +95,8 @@ public void When_rejecting_message_with_no_channels_configured_should_ack_and_re _producer.Send(followUpMessage); var nextMessage = ConsumeMessage(_consumer); - Assert.NotEqual(MessageType.MT_NONE, nextMessage.Header.MessageType); - Assert.Equal(followUpMessage.Body.Value, nextMessage.Body.Value); + await Assert.That(nextMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(nextMessage.Body.Value).IsEqualTo(followUpMessage.Body.Value); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index ef8bfdedcc..2333036521 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -30,11 +30,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketMqUnacceptableFallbackToDlqTests : IDisposable { private readonly RocketMqMessageProducer _producer; @@ -85,8 +84,8 @@ public RocketMqUnacceptableFallbackToDlqTests() (object)new MyCommand { Value = "Test Fallback" }, JsonSerialisationOptions.Options))); } - [Fact] - public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() + [Test] + public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { // Arrange - send a message and consume it from the source topic _consumer.Purge(); @@ -99,18 +98,17 @@ public void When_rejecting_message_with_unacceptable_and_no_invalid_channel_shou new MessageRejectionReason(RejectionReason.Unacceptable, "Message failed validation")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on DLQ (fallback) var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.NotEqual(MessageType.MT_NONE, dlqMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, dlqMessage.Body.Value); + await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present - Assert.True(dlqMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.True(dlqMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - dlqMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(dlqMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index d01352eabe..945cb5fafd 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -30,11 +30,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketMqUnacceptableInvalidChannelTests : IDisposable { private readonly RocketMqMessageProducer _producer; @@ -98,8 +97,8 @@ public RocketMqUnacceptableInvalidChannelTests() (object)new MyCommand { Value = "Test Invalid" }, JsonSerialisationOptions.Options))); } - [Fact] - public void When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() + [Test] + public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { // Arrange - send a message and consume it from the source topic _consumer.Purge(); @@ -113,22 +112,21 @@ public void When_rejecting_message_with_unacceptable_reason_should_send_to_inval new MessageRejectionReason(RejectionReason.Unacceptable, "Message failed validation")); // Assert - reject returns true - Assert.True(result); + await Assert.That(result).IsTrue(); // Assert - message should appear on the invalid message channel var invalidMessage = ConsumeMessage(_invalidConsumer); - Assert.NotEqual(MessageType.MT_NONE, invalidMessage.Header.MessageType); - Assert.Equal(_message.Body.Value, invalidMessage.Body.Value); + await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); + await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); // Assert - rejection metadata present - Assert.True(invalidMessage.Header.Bag.ContainsKey("originalTopic")); - Assert.True(invalidMessage.Header.Bag.ContainsKey("rejectionReason")); - Assert.Equal(RejectionReason.Unacceptable.ToString(), - invalidMessage.Header.Bag["rejectionReason"].ToString()); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("originalTopic")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag.ContainsKey("rejectionReason")).IsTrue(); + await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); // Assert - DLQ should be empty (message went to invalid, not DLQ) var dlqMessage = ConsumeMessage(_dlqConsumer); - Assert.Equal(MessageType.MT_NONE, dlqMessage.Header.MessageType); + await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } private static Message ConsumeMessage(IAmAMessageConsumerSync consumer) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs index 23fe4cca1c..2d42ddd54f 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs @@ -1,14 +1,13 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class MessageProducerRequeueTests { private readonly IAmAMessageProducerSync _sender; @@ -51,8 +50,8 @@ public MessageProducerRequeueTests() _channel = channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_a_message_async() + [Test] + public async Task When_requeueing_a_message_async() { _channel.Purge(); _sender.Send(_message); @@ -72,6 +71,6 @@ public void When_requeueing_a_message_async() break; } - Assert.Equal(_receivedMessage.Body.Value, _requeuedMessage.Body.Value); + await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs index 36e903593b..2ffb1d3fff 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -1,15 +1,14 @@ -using System.Net.Mime; +using System.Net.Mime; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; -[Trait("Category", "RocketMQ")] -[Trait("Fragile", "CI")] +[Category("RocketMQ")] +[Property("Fragile", "CI")] public class MessageProducerDlqTests { private readonly RocketMqMessageProducer _sender; @@ -51,8 +50,8 @@ public MessageProducerDlqTests() _channel = channelFactory.CreateSyncChannel(subscription); } - [Fact] - public void When_requeueing_redrives_to_the_queue() + [Test] + public async Task When_requeueing_redrives_to_the_queue() { _channel.Purge(); _sender.Send(_message); @@ -69,6 +68,6 @@ public void When_requeueing_redrives_to_the_queue() } receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); - Assert.Equal(MessageType.MT_NONE, receivedMessage.Header.MessageType); + await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 3bdd9e0997..3fa62cb911 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -27,11 +27,10 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; using Paramore.Brighter.RocketMQ.Tests.Utils; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway; -[Trait("Category", "RocketMQ")] +[Category("RocketMQ")] public class RocketConsumerFactoryDlqTests : IDisposable { private readonly RocketMessageConsumerFactory _factory; @@ -44,8 +43,8 @@ public RocketConsumerFactoryDlqTests() _factory = new RocketMessageConsumerFactory(_connection); } - [Fact] - public void When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys() + [Test] + public async Task When_creating_rocket_consumer_with_dlq_subscription_should_pass_routing_keys() { // Arrange var dlqRoutingKey = new RoutingKey("orders-dlq"); @@ -64,7 +63,7 @@ public void When_creating_rocket_consumer_with_dlq_subscription_should_pass_rout _consumer = _factory.Create(subscription); // Assert - verify the factory passed routing keys to the consumer - Assert.NotNull(_consumer); + await Assert.That(_consumer).IsNotNull(); var consumerType = _consumer.GetType(); var dlqField = consumerType.GetField("_deadLetterRoutingKey", @@ -74,21 +73,21 @@ public void When_creating_rocket_consumer_with_dlq_subscription_should_pass_rout var connectionField = consumerType.GetField("_connection", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(dlqField); - Assert.NotNull(invalidField); - Assert.NotNull(connectionField); + await Assert.That(dlqField).IsNotNull(); + await Assert.That(invalidField).IsNotNull(); + await Assert.That(connectionField).IsNotNull(); var actualDlq = dlqField.GetValue(_consumer) as RoutingKey; var actualInvalid = invalidField.GetValue(_consumer) as RoutingKey; var actualConnection = connectionField.GetValue(_consumer); - Assert.NotNull(actualDlq); - Assert.Equal("orders-dlq", actualDlq.Value); + await Assert.That(actualDlq).IsNotNull(); + await Assert.That(actualDlq.Value).IsEqualTo("orders-dlq"); - Assert.NotNull(actualInvalid); - Assert.Equal("orders-invalid", actualInvalid.Value); + await Assert.That(actualInvalid).IsNotNull(); + await Assert.That(actualInvalid.Value).IsEqualTo("orders-invalid"); - Assert.NotNull(actualConnection); + await Assert.That(actualConnection).IsNotNull(); } public void Dispose() diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties.cs index 3ca2e1f55d..b0190266a1 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties.cs @@ -24,14 +24,13 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RocketMQ; using Paramore.Brighter.RocketMQ.Tests.TestDoubles; -using Xunit; namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway; public class RocketSubscriptionDlqRoutingKeyTests { - [Fact] - public void When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties() + [Test] + public async Task When_creating_rocket_subscription_with_dlq_routing_keys_should_expose_properties() { // Arrange var deadLetterRoutingKey = new RoutingKey("orders-dlq"); @@ -48,17 +47,17 @@ public void When_creating_rocket_subscription_with_dlq_routing_keys_should_expos ); // Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Equal(deadLetterRoutingKey, dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsEqualTo(deadLetterRoutingKey); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Equal(invalidMessageRoutingKey, invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsEqualTo(invalidMessageRoutingKey); } - [Fact] - public void When_creating_rocket_subscription_without_dlq_routing_keys_should_default_to_null() + [Test] + public async Task When_creating_rocket_subscription_without_dlq_routing_keys_should_default_to_null() { // Arrange & Act var subscription = new RocketMqSubscription( @@ -69,12 +68,12 @@ public void When_creating_rocket_subscription_without_dlq_routing_keys_should_de ); // Assert - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var dlqSupport = (IUseBrighterDeadLetterSupport)subscription; - Assert.Null(dlqSupport.DeadLetterRoutingKey); + await Assert.That(dlqSupport.DeadLetterRoutingKey).IsNull(); - Assert.IsAssignableFrom(subscription); + await Assert.That(subscription).IsAssignableTo(); var invalidSupport = (IUseBrighterInvalidMessageSupport)subscription; - Assert.Null(invalidSupport.InvalidMessageRoutingKey); + await Assert.That(invalidSupport.InvalidMessageRoutingKey).IsNull(); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj index ccf9e3800b..5e78f22153 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj @@ -1,30 +1,17 @@ - - - $(BrighterTestTargetFrameworks) - enable - false - true - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + $(BrighterTestTargetFrameworks) + enable + false + true + Exe + - - + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index a68f0b8609..9aa753c0f1 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index 8907e236f1..43d2398e45 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 6e37665338..6bfc41095a 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index d13265b024..02737017c5 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 0a00ef7e3b..bf20fcb615 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index e8ee4e8c56..bae133d58f 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 7ca708df22..40ed6e0a05 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 72d3842af2..4524956d49 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index c1f070b3c3..27dd0cea53 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index c5d6e1d223..0b437d7f12 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index 1c5178bfc8..dca537afc5 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index 5322b7fd0d..7f3fa02e19 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Binary.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 87e53f6c37..4a58e52a06 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 147a853a01..cf3610eeb9 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 4bc6116e2c..63db83b961 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 35e4e3dedb..1a047a998c 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 93c13a7684..cab6a4a1ba 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index ab8a5eef07..905d1ea381 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 886517bb0d..24a0a37e45 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 59077cf91e..1af860c769 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 3366ae5e81..576dc9d9b3 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 23cc4414dc..7e707c0c39 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 42bd68955d..221046b1e7 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 0c169e5a63..d2d4ef0acb 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs index 5abd561930..4c5dcee181 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenAddingADuplicateMessageItShouldNotThrowAsync : IAsyncLifetime +public class WhenAddingADuplicateMessageItShouldNotThrowAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenAddingADuplicateMessageItShouldNotThrowAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() { // Arrange @@ -47,6 +49,6 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw_Async() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs index ed9e0f35d9..cccb32f70e 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync : IAsyncLifetime +public class WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageItShouldBeStoredWithAllPropertiesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_Async() { // Arrange @@ -49,37 +51,37 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties_ var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs index 8562d98060..79825032e1 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStoredAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored_Async() { // Arrange @@ -54,6 +56,6 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs index f4ab2d3aff..3a3c0fa77f 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync : IAsyncLifetime +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommitAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit_Async() { // Arrange @@ -54,37 +56,37 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var storedMessage = await outbox.GetAsync(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs index 563ec63c69..a66baf7340 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -22,17 +21,20 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -58,8 +60,8 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs index c9b08db1ce..a2b0d54283 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync : IAsyncLifetime +public class WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -47,17 +46,20 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutboxAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Async() { // Arrange @@ -84,8 +86,8 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox_Asy .OutstandingMessagesAsync(TimeSpan.Zero, context)) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs index 6c2027ea62..d00dfdeb6d 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync : IAsyncLifetime +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message_Async() { // Arrange @@ -80,38 +82,38 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M var message = await outbox.GetAsync(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs index 874ee305a3..b14460199c 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync : IAsyncLifetime +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessageAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message_Async() { // Arrange @@ -45,6 +47,6 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ var message = await outbox.GetAsync(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs index 2a385fdcb8..995e797175 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync : IAsyncLifetime +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatchedAsync( _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched_Async() { // Arrange @@ -80,9 +82,9 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs index 563a3fe5b5..8d8814c0b6 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age_As var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs index af60199cb9..aaf2c01e2d 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -35,7 +34,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync : IAsyncLifetime +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -48,17 +47,20 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessagesAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages_Async() { // Arrange @@ -82,9 +84,9 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs index abdc355800..0c41ae868c 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Async/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async.cs @@ -1,8 +1,7 @@ -// +// // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +9,7 @@ namespace Paramore.Brighter.Sqlite.Tests.Outbox.Text.Async; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync : IAsyncLifetime +public class WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync { private readonly IAmAnOutboxProviderAsync _outboxProvider; private readonly IAmAMessageFactory _messageFactory; @@ -23,17 +22,20 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAgeAsync() _messageFactory = new DefaultMessageFactory(); } - public async Task InitializeAsync() + [Before(HookType.Test)] + public async Task Setup() { await _outboxProvider.CreateStoreAsync(); } - public async Task DisposeAsync() + [After(HookType.Test)] + + public async Task Cleanup() { await _outboxProvider.DeleteStoreAsync(_createdMessages); } - [Fact] + [Test] public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_Async() { // Arrange @@ -57,18 +59,18 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age_A var messagesOver4Hours = (await outbox.DispatchedMessagesAsync(TimeSpan.FromHours(4), context)).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } } diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index f702ff4a31..fbeae753c9 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingADuplicateMessageItShouldNotThrow() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() + [Test] + public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() { // Arrange var context = new RequestContext(); @@ -63,7 +62,7 @@ public void When_Adding_A_Duplicate_Message_It_Should_Not_Throw() // Assert // Just adding a simple assertion to remove any warning - Assert.True(true); + await Assert.That(true).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 63ef9f972d..7458df63ea 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageItShouldBeStoredWithAllProperties() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() + [Test] + public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() { // Arrange var context = new RequestContext(); @@ -64,38 +63,38 @@ public void When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties() var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 37f40e6437..a78c3e9c5a 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,7 +68,7 @@ public void When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_ var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(MessageType.MT_NONE, storedMessage.Header.MessageType); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 599d522107..3f87a7ae34 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() + [Test] + public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit() { // Arrange var outbox = _outboxProvider.CreateOutbox(); @@ -69,38 +68,38 @@ public void When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_C var storedMessage = outbox.Get(message.Id, context); // Assert - Assert.Equal(message.Body.Value, storedMessage.Body.Value); + await Assert.That(storedMessage.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, storedMessage.Header.Topic); - Assert.Equal(message.Header.MessageType, storedMessage.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, storedMessage.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, storedMessage.Header.HandledCount); // -- should be zero when read from outbox - Assert.Equal(TimeSpan.Zero, storedMessage.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, storedMessage.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, storedMessage.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.ToString(), storedMessage.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, storedMessage.Header.PartitionKey); + await Assert.That(storedMessage.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(storedMessage.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(storedMessage.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(storedMessage.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(storedMessage.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(storedMessage.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(storedMessage.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.ToString()); + await Assert.That(storedMessage.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, storedMessage.Header.Bag.Count); + await Assert.That(storedMessage.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, storedMessage.Header.Bag); - Assert.Equal(val, storedMessage.Header.Bag[key].ToString()); + await Assert.That(storedMessage.Header.Bag).ContainsKey(key); + await Assert.That(storedMessage.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, storedMessage.Header.WorkflowId); - Assert.Equal(message.Header.JobId, storedMessage.Header.JobId); + await Assert.That(storedMessage.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(storedMessage.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, storedMessage.Header.Source); - Assert.Equal(message.Header.Type, storedMessage.Header.Type); - Assert.Equal(message.Header.DataSchema, storedMessage.Header.DataSchema); - Assert.Equal(message.Header.Subject, storedMessage.Header.Subject); - Assert.Equal(message.Header.TraceParent, storedMessage.Header.TraceParent); - Assert.Equal(message.Header.TraceState, storedMessage.Header.TraceState); + await Assert.That(storedMessage.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(storedMessage.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(storedMessage.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(storedMessage.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(storedMessage.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index d94396b37f..f9743620fb 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(secondMessage.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 828e8f4ea6..321ddd4e8a 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() + [Test] + public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() { // Arrange var context = new RequestContext(); @@ -74,9 +73,9 @@ public void When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() .OutstandingMessages(TimeSpan.Zero, context) .ToArray(); - Assert.DoesNotContain(firstMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(secondMessage.Id, messages.Select(x => x.Id)); - Assert.Contains(thirdMessage.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(firstMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(secondMessage.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index 0e73b65cd2..1496bbaa58 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() + [Test] + public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message() { // Arrange var context = new RequestContext(); @@ -70,39 +69,39 @@ public void When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message var message = outbox.Get(dispatched.Id, context); // Assert - Assert.NotNull(message); - Assert.Equal(message.Body.Value, dispatched.Body.Value); + await Assert.That(message).IsNotNull(); + await Assert.That(dispatched.Body.Value).IsEqualTo(message.Body.Value); //should read the header from the sql outbox - Assert.Equal(message.Header.Topic, dispatched.Header.Topic); - Assert.Equal(message.Header.MessageType, dispatched.Header.MessageType); - Assert.Equal(message.Header.TimeStamp, dispatched.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(0, dispatched.Header.HandledCount); // -- should be zero when read from outbox - // Assert.Equal(TimeSpan.Zero, dispatched.Header.Delayed); // -- should be zero when read from outbox - Assert.Equal(message.Header.CorrelationId, dispatched.Header.CorrelationId); - Assert.Equal(message.Header.ReplyTo, dispatched.Header.ReplyTo); - Assert.StartsWith(message.Header.ContentType.MediaType, dispatched.Header.ContentType.ToString()); - Assert.Equal(message.Header.PartitionKey, dispatched.Header.PartitionKey); + await Assert.That(dispatched.Header.Topic).IsEqualTo(message.Header.Topic); + await Assert.That(dispatched.Header.MessageType).IsEqualTo(message.Header.MessageType); + await Assert.That(dispatched.Header.TimeStamp).IsEqualTo(message.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(dispatched.Header.HandledCount).IsEqualTo(0); // -- should be zero when read from outbox + // await Assert.That(dispatched.Header.Delayed).IsEqualTo(TimeSpan.Zero); // -- should be zero when read from outbox + await Assert.That(dispatched.Header.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(dispatched.Header.ReplyTo).IsEqualTo(message.Header.ReplyTo); + await Assert.That(dispatched.Header.ContentType.ToString()).StartsWith(message.Header.ContentType.MediaType); + await Assert.That(dispatched.Header.PartitionKey).IsEqualTo(message.Header.PartitionKey); //Bag serialization - Assert.Equal(message.Header.Bag.Count, dispatched.Header.Bag.Count); + await Assert.That(dispatched.Header.Bag.Count).IsEqualTo(message.Header.Bag.Count); foreach (var (key, val) in message.Header.Bag) { - Assert.Contains(key, dispatched.Header.Bag); - Assert.Equal(val.ToString(), dispatched.Header.Bag[key].ToString()); + await Assert.That(dispatched.Header.Bag).ContainsKey(key); + await Assert.That(dispatched.Header.Bag[key].ToString()).IsEqualTo(val.ToString()); } //Asserts for workflow properties - Assert.Equal(message.Header.WorkflowId, dispatched.Header.WorkflowId); - Assert.Equal(message.Header.JobId, dispatched.Header.JobId); + await Assert.That(dispatched.Header.WorkflowId).IsEqualTo(message.Header.WorkflowId); + await Assert.That(dispatched.Header.JobId).IsEqualTo(message.Header.JobId); // new fields assertions - Assert.Equal(message.Header.Source, dispatched.Header.Source); - Assert.Equal(message.Header.Type, dispatched.Header.Type); - Assert.Equal(message.Header.DataSchema, dispatched.Header.DataSchema); - Assert.Equal(message.Header.Subject, dispatched.Header.Subject); - Assert.Equal(message.Header.TraceParent, dispatched.Header.TraceParent); - Assert.Equal(message.Header.TraceState, dispatched.Header.TraceState); + await Assert.That(dispatched.Header.Source).IsEqualTo(message.Header.Source); + await Assert.That(dispatched.Header.Type).IsEqualTo(message.Header.Type); + await Assert.That(dispatched.Header.DataSchema).IsEqualTo(message.Header.DataSchema); + await Assert.That(dispatched.Header.Subject).IsEqualTo(message.Header.Subject); + await Assert.That(dispatched.Header.TraceParent).IsEqualTo(message.Header.TraceParent); + await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index f7876e2fca..dd4fb810f2 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() + [Test] + public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message() { // Arrange var context = new RequestContext(); @@ -60,7 +59,7 @@ public void When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Messag var message = outbox.Get(Id.Random(), context); // Assert - Assert.Equal(MessageType.MT_NONE, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 330d755771..50f3e720e2 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() + [Test] + public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched() { // Arrange var context = new RequestContext(); @@ -70,10 +69,10 @@ public void When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undi var messages = _outboxProvider.GetAllMessages().ToArray(); // Assert - Assert.True(messages.Length >= 3, "Expecting at least 3 messages"); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.Contains(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length >= 3).IsTrue(); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 954d6139de..7b38d58677 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingDispatchedMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index a987d81e29..b280e8db36 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() + [Test] + public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages() { // Arrange var context = new RequestContext(); @@ -72,10 +71,10 @@ public void When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Mess .ToArray(); // Assert - Assert.Equal(2, messages.Length); - Assert.Contains(earliest.Id, messages.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messages.Select(x => x.Id)); - Assert.Contains(undispatched.Id, messages.Select(x => x.Id)); + await Assert.That(messages.Length).IsEqualTo(2); + await Assert.That(messages.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messages.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index ded75a9dcb..dc74d742fa 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper @@ -27,7 +27,6 @@ THE SOFTWARE. */ // This file is auto-generated by Paramore.Brighter.Test.Generator // -using Xunit; using System; using System.Collections.Generic; using System.Linq; @@ -48,8 +47,8 @@ public WhenRetrievingOutstandingMessagesItShouldFilterByAge() _messageFactory = new DefaultMessageFactory(); } - [Fact] - public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() + [Test] + public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() { // Arrange var context = new RequestContext(); @@ -72,19 +71,19 @@ public void When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() var messagesOver4Hours = outbox.DispatchedMessages(TimeSpan.FromHours(4), context).ToArray(); // Assert - Assert.True(allDispatched.Length >= 2, "Expecting at least 2 messages"); - Assert.Contains(earliest.Id, allDispatched.Select(x => x.Id)); - Assert.Contains(dispatched.Id, allDispatched.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, allDispatched.Select(x => x.Id)); + await Assert.That(allDispatched.Length >= 2).IsTrue(); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(allDispatched.Select(x => x.Id)).Contains(dispatched.Id); + await Assert.That(allDispatched.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.True(messagesOverAnHour.Length >= 1, "Expecting at least 1 message"); - Assert.Contains(earliest.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOverAnHour.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOverAnHour.Select(x => x.Id)); + await Assert.That(messagesOverAnHour.Length >= 1).IsTrue(); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).Contains(earliest.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOverAnHour.Select(x => x.Id)).DoesNotContain(undispatched.Id); - Assert.DoesNotContain(earliest.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(dispatched.Id, messagesOver4Hours.Select(x => x.Id)); - Assert.DoesNotContain(undispatched.Id, messagesOver4Hours.Select(x => x.Id)); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(earliest.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(dispatched.Id); + await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } public void Dispose() diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj b/tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj index a8ebed9d5a..e9f4d14182 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj +++ b/tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj @@ -1,37 +1,21 @@ - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_creating_outbox_generator_with_logger_should_not_throw.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_creating_outbox_generator_with_logger_should_not_throw.cs index 790566b263..71a0a973a5 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_creating_outbox_generator_with_logger_should_not_throw.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_creating_outbox_generator_with_logger_should_not_throw.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using Microsoft.Extensions.Logging; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -19,14 +18,14 @@ public WhenCreatingOutboxGeneratorWithLoggerShouldNotThrow() _logger = factory.CreateLogger(); } - [Fact] - public void When_creating_outbox_generator_with_logger_should_not_throw() + [Test] + public async Task When_creating_outbox_generator_with_logger_should_not_throw() { // Arrange & Act var generator = new Generators.OutboxGenerator(_logger); // Assert - Assert.NotNull(generator); + await Assert.That(generator).IsNotNull(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_multiple_outboxes_should_complete_without_error.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_multiple_outboxes_should_complete_without_error.cs index 618377d9b0..e16cf103cb 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_multiple_outboxes_should_complete_without_error.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_multiple_outboxes_should_complete_without_error.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithMultipleOutboxesShouldCompleteWithoutError() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_with_single_outbox_should_complete_without_error() { // Arrange diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_outbox_without_transaction_support_should_complete.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_outbox_without_transaction_support_should_complete.cs index c52c52d7a0..e0fb8d815b 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_outbox_without_transaction_support_should_complete.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_outbox_without_transaction_support_should_complete.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithOutboxWithoutTransactionSupportShouldComplete() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_with_outbox_without_transaction_support_should_complete() { // Arrange diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_single_outbox_should_complete_without_error.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_single_outbox_should_complete_without_error.cs index d164bdc6bd..a974b3e64a 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_single_outbox_should_complete_without_error.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_with_single_outbox_should_complete_without_error.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithSingleOutboxShouldCompleteWithoutError() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_with_single_outbox_should_complete_without_error() { // Arrange diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_without_outbox_configuration_should_log_and_complete.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_without_outbox_configuration_should_log_and_complete.cs index e8cfe916c7..2bd367edf1 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_without_outbox_configuration_should_log_and_complete.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_generating_without_outbox_configuration_should_log_and_complete.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithoutOutboxConfigurationShouldLogAndComplete() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_without_outbox_configuration_should_log_and_complete() { // Arrange diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_multiple_outboxes_missing_prefix_should_use_key_as_prefix.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_multiple_outboxes_missing_prefix_should_use_key_as_prefix.cs index 406d4933cb..1d9c910d40 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_multiple_outboxes_missing_prefix_should_use_key_as_prefix.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_multiple_outboxes_missing_prefix_should_use_key_as_prefix.cs @@ -1,10 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -22,7 +21,7 @@ public WhenMultipleOutboxesMissingPrefixShouldUseKeyAsPrefix() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_multiple_outboxes_missing_prefix_should_use_key_as_prefix() { // Arrange @@ -49,7 +48,7 @@ public async Task When_multiple_outboxes_missing_prefix_should_use_key_as_prefix await generator.GenerateAsync(configuration); // Assert - prefix should be derived from key - Assert.Equal(".SqlServer", configuration.Outboxes["SqlServer"].Prefix); + await Assert.That(configuration.Outboxes["SqlServer"].Prefix).IsEqualTo(".SqlServer"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_message_factory_should_use_parent_factory.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_message_factory_should_use_parent_factory.cs index a57abe4e23..c6086e213b 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_message_factory_should_use_parent_factory.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_message_factory_should_use_parent_factory.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenOutboxConfigurationMissingMessageFactoryShouldUseParentFactory() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_outbox_configuration_missing_message_factory_should_use_parent_factory() { // Arrange @@ -43,7 +42,7 @@ public async Task When_outbox_configuration_missing_message_factory_should_use_p await generator.GenerateAsync(configuration); // Assert - message factory should be inherited from parent configuration - Assert.Equal("TestMessageFactory", configuration.Outbox.MessageFactory); + await Assert.That(configuration.Outbox.MessageFactory).IsEqualTo("TestMessageFactory"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_namespace_should_use_parent_namespace.cs b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_namespace_should_use_parent_namespace.cs index 84cca694a3..65268fea8a 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_namespace_should_use_parent_namespace.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/OutboxGenerator/When_outbox_configuration_missing_namespace_should_use_parent_namespace.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.OutboxGenerator; @@ -21,7 +20,7 @@ public WhenOutboxConfigurationMissingNamespaceShouldUseParentNamespace() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_outbox_configuration_missing_namespace_should_use_parent_namespace() { // Arrange @@ -43,7 +42,7 @@ public async Task When_outbox_configuration_missing_namespace_should_use_parent_ await generator.GenerateAsync(configuration); // Assert - namespace should be inherited from parent configuration - Assert.Equal("MyApp.Tests", configuration.Outbox.Namespace); + await Assert.That(configuration.Outbox.Namespace).IsEqualTo("MyApp.Tests"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Paramore.Brighter.Test.Generator.Tests.csproj b/tests/Paramore.Brighter.Test.Generator.Tests/Paramore.Brighter.Test.Generator.Tests.csproj index 3faaab3341..15c9310527 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Paramore.Brighter.Test.Generator.Tests.csproj +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Paramore.Brighter.Test.Generator.Tests.csproj @@ -1,28 +1,12 @@ - - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - + + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_complex_template_with_multiple_features_should_render_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_complex_template_with_multiple_features_should_render_correctly.cs index dd16b39ae8..c6956fcb1b 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_complex_template_with_multiple_features_should_render_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_complex_template_with_multiple_features_should_render_correctly.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -15,7 +14,7 @@ public WhenParsingComplexTemplateWithMultipleFeaturesShouldRenderCorrectly() Directory.CreateDirectory(_testDirectory); } - [Fact] + [Test] public async Task When_parsing_complex_template_with_multiple_features_should_render_correctly() { // Arrange @@ -26,8 +25,8 @@ namespace {{ Namespace }} public class {{ Prefix }}TransactionTests { {% for test in Tests %} - [Fact] - public void {{ test }}() { } + [Test] + public async Task {{ test }}() { } {% endfor %} } {% endif %} @@ -52,10 +51,10 @@ public class {{ Prefix }}TransactionTests // Assert var result = await File.ReadAllTextAsync(outputPath); - Assert.Contains("namespace MyApp.Tests", result); - Assert.Contains("SqlServerTransactionTests", result); - Assert.Contains("Test1", result); - Assert.Contains("Test2", result); + await Assert.That(result).Contains("namespace MyApp.Tests"); + await Assert.That(result).Contains("SqlServerTransactionTests"); + await Assert.That(result).Contains("Test1"); + await Assert.That(result).Contains("Test2"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_simple_template_should_render_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_simple_template_should_render_correctly.cs index 71b646085a..3b0d9448d8 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_simple_template_should_render_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_simple_template_should_render_correctly.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -19,7 +18,7 @@ public WhenParsingSimpleTemplateShouldRenderCorrectly() _outputPath = Path.Combine(_testDirectory, "output.txt"); } - [Fact] + [Test] public async Task When_parsing_simple_template_should_render_correctly() { // Arrange @@ -34,7 +33,7 @@ public async Task When_parsing_simple_template_should_render_correctly() // Assert var result = await File.ReadAllTextAsync(_outputPath); - Assert.Equal("Hello World!", result); + await Assert.That(result).IsEqualTo("Hello World!"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_conditional_should_render_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_conditional_should_render_correctly.cs index 7612fa28c2..9c7185698a 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_conditional_should_render_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_conditional_should_render_correctly.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -19,7 +18,7 @@ public WhenParsingTemplateWithConditionalShouldRenderCorrectly() _outputPath = Path.Combine(_testDirectory, "output.txt"); } - [Fact] + [Test] public async Task When_parsing_template_with_conditional_should_render_correctly() { // Arrange @@ -34,7 +33,7 @@ public async Task When_parsing_template_with_conditional_should_render_correctly // Assert var result = await File.ReadAllTextAsync(_outputPath); - Assert.Equal("Active", result); + await Assert.That(result).IsEqualTo("Active"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_empty_collection_should_render_empty.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_empty_collection_should_render_empty.cs index aff73dc9f1..040b1c79a9 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_empty_collection_should_render_empty.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_empty_collection_should_render_empty.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -15,7 +14,7 @@ public WhenParsingTemplateWithEmptyCollectionShouldRenderEmpty() Directory.CreateDirectory(_testDirectory); } - [Fact] + [Test] public async Task When_parsing_template_with_empty_collection_should_render_empty() { // Arrange @@ -33,7 +32,7 @@ public async Task When_parsing_template_with_empty_collection_should_render_empt // Assert var result = await File.ReadAllTextAsync(outputPath); - Assert.Empty(result); + await Assert.That(result).IsEmpty(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_false_conditional_should_skip_content.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_false_conditional_should_skip_content.cs index b0dd3284c0..82d63a52bc 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_false_conditional_should_skip_content.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_false_conditional_should_skip_content.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -15,7 +14,7 @@ public WhenParsingTemplateWithFalseConditionalShouldSkipContent() Directory.CreateDirectory(_testDirectory); } - [Fact] + [Test] public async Task When_parsing_template_with_false_conditional_should_skip_content() { // Arrange @@ -33,7 +32,7 @@ public async Task When_parsing_template_with_false_conditional_should_skip_conte // Assert var result = await File.ReadAllTextAsync(outputPath); - Assert.Empty(result); + await Assert.That(result).IsEmpty(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_filters_should_apply_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_filters_should_apply_correctly.cs index 1b388a4a7b..9f3f5dd0e0 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_filters_should_apply_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_filters_should_apply_correctly.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -15,7 +14,7 @@ public WhenParsingTemplateWithFiltersShouldApplyCorrectly() Directory.CreateDirectory(_testDirectory); } - [Fact] + [Test] public async Task When_parsing_template_with_filters_should_apply_correctly() { // Arrange @@ -33,7 +32,7 @@ public async Task When_parsing_template_with_filters_should_apply_correctly() // Assert var result = await File.ReadAllTextAsync(outputPath); - Assert.Equal("TEST", result); + await Assert.That(result).IsEqualTo("TEST"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_loop_should_render_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_loop_should_render_correctly.cs index d6b1115511..5486fa2abd 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_loop_should_render_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_loop_should_render_correctly.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -19,7 +18,7 @@ public WhenParsingTemplateWithLoopShouldRenderCorrectly() _outputPath = Path.Combine(_testDirectory, "output.txt"); } - [Fact] + [Test] public async Task When_parsing_template_with_loop_should_render_correctly() { // Arrange @@ -34,9 +33,9 @@ public async Task When_parsing_template_with_loop_should_render_correctly() // Assert var result = await File.ReadAllTextAsync(_outputPath); - Assert.Contains("Item1", result); - Assert.Contains("Item2", result); - Assert.Contains("Item3", result); + await Assert.That(result).Contains("Item1"); + await Assert.That(result).Contains("Item2"); + await Assert.That(result).Contains("Item3"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_outbox_configuration_should_render_correctly.cs b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_outbox_configuration_should_render_correctly.cs index ad67e86b64..3437e6c729 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_outbox_configuration_should_render_correctly.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/Parser/When_parsing_template_with_outbox_configuration_should_render_correctly.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.Parser; @@ -20,7 +19,7 @@ public WhenParsingTemplateWithOutboxConfigurationShouldRenderCorrectly() _outputPath = Path.Combine(_testDirectory, "output.txt"); } - [Fact] + [Test] public async Task When_parsing_template_with_outbox_configuration_should_render_correctly() { // Arrange @@ -35,8 +34,8 @@ public async Task When_parsing_template_with_outbox_configuration_should_render_ // Assert var result = await File.ReadAllTextAsync(_outputPath); - Assert.Contains("namespace MyApp.Tests", result); - Assert.Contains("public class SqlServerTests", result); + await Assert.That(result).Contains("namespace MyApp.Tests"); + await Assert.That(result).Contains("public class SqlServerTests"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_creating_shared_generator_with_logger_should_not_throw.cs b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_creating_shared_generator_with_logger_should_not_throw.cs index ac688f4c45..2ef9cea95a 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_creating_shared_generator_with_logger_should_not_throw.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_creating_shared_generator_with_logger_should_not_throw.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.IO; using Microsoft.Extensions.Logging; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.SharedGenerator; @@ -19,14 +18,14 @@ public WhenCreatingSharedGeneratorWithLoggerShouldNotThrow() _logger = factory.CreateLogger(); } - [Fact] - public void When_creating_shared_generator_with_logger_should_not_throw() + [Test] + public async Task When_creating_shared_generator_with_logger_should_not_throw() { // Arrange & Act var generator = new Generators.SharedGenerator(_logger); // Assert - Assert.NotNull(generator); + await Assert.That(generator).IsNotNull(); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_custom_message_factory_should_preserve_it.cs b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_custom_message_factory_should_preserve_it.cs index 59862c5588..a011c85168 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_custom_message_factory_should_preserve_it.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_custom_message_factory_should_preserve_it.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.SharedGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithCustomMessageFactoryShouldPreserveIt() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_with_custom_message_factory_should_preserve_it() { // Arrange @@ -37,7 +36,7 @@ public async Task When_generating_with_custom_message_factory_should_preserve_it await generator.GenerateAsync(configuration); // Assert - Assert.Equal("CustomMessageFactory", configuration.MessageFactory); + await Assert.That(configuration.MessageFactory).IsEqualTo("CustomMessageFactory"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_no_message_factory_should_use_default.cs b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_no_message_factory_should_use_default.cs index d5b62be88d..166aa5e187 100644 --- a/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_no_message_factory_should_use_default.cs +++ b/tests/Paramore.Brighter.Test.Generator.Tests/SharedGenerator/When_generating_with_no_message_factory_should_use_default.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Paramore.Brighter.Test.Generator.Configuration; -using Xunit; namespace Paramore.Brighter.Test.Generator.Tests.SharedGenerator; @@ -21,7 +20,7 @@ public WhenGeneratingWithNoMessageFactoryShouldUseDefault() _logger = factory.CreateLogger(); } - [Fact] + [Test] public async Task When_generating_with_no_message_factory_should_use_default() { // Arrange @@ -36,7 +35,7 @@ public async Task When_generating_with_no_message_factory_should_use_default() await generator.GenerateAsync(configuration); // Assert - Assert.Equal("DefaultMessageFactory", configuration.MessageFactory); + await Assert.That(configuration.MessageFactory).IsEqualTo("DefaultMessageFactory"); } public void Dispose() diff --git a/tests/Paramore.Brighter.Testing.Tests/Paramore.Brighter.Testing.Tests.csproj b/tests/Paramore.Brighter.Testing.Tests/Paramore.Brighter.Testing.Tests.csproj index 01a712be39..61a3e2cdb9 100644 --- a/tests/Paramore.Brighter.Testing.Tests/Paramore.Brighter.Testing.Tests.csproj +++ b/tests/Paramore.Brighter.Testing.Tests/Paramore.Brighter.Testing.Tests.csproj @@ -2,25 +2,11 @@ false $(BrighterTestTargetFrameworks) + Exe + + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.Testing.Tests/When_async_methods_called_should_record_async_command_types.cs b/tests/Paramore.Brighter.Testing.Tests/When_async_methods_called_should_record_async_command_types.cs index fe4374e073..bee00db4c1 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_async_methods_called_should_record_async_command_types.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_async_methods_called_should_record_async_command_types.cs @@ -22,8 +22,6 @@ THE SOFTWARE. */ #endregion using System.Threading.Tasks; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -31,54 +29,54 @@ public class SpyCommandProcessorRecordTests { private readonly SpyCommandProcessor _spy = new(); - [Fact] + [Test] public async Task Then_send_async_should_record_send_async() { //Act await _spy.SendAsync(new TestCommand()); //Assert - _spy.Commands.ShouldContain(CommandType.SendAsync); + await Assert.That(_spy.Commands).Contains(CommandType.SendAsync); } - [Fact] + [Test] public async Task Then_publish_async_should_record_publish_async() { //Act await _spy.PublishAsync(new TestEvent()); //Assert - _spy.Commands.ShouldContain(CommandType.PublishAsync); + await Assert.That(_spy.Commands).Contains(CommandType.PublishAsync); } - [Fact] + [Test] public async Task Then_post_async_should_record_post_async() { //Act await _spy.PostAsync(new TestCommand()); //Assert - _spy.Commands.ShouldContain(CommandType.PostAsync); + await Assert.That(_spy.Commands).Contains(CommandType.PostAsync); } - [Fact] + [Test] public async Task Then_deposit_post_async_should_record_deposit_async() { //Act await _spy.DepositPostAsync(new TestCommand()); //Assert - _spy.Commands.ShouldContain(CommandType.DepositAsync); + await Assert.That(_spy.Commands).Contains(CommandType.DepositAsync); } - [Fact] + [Test] public async Task Then_clear_outbox_async_should_record_clear_async() { //Act await _spy.ClearOutboxAsync([Id.Random()]); //Assert - _spy.Commands.ShouldContain(CommandType.ClearAsync); + await Assert.That(_spy.Commands).Contains(CommandType.ClearAsync); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_call_count_returns_invocation_count.cs b/tests/Paramore.Brighter.Testing.Tests/When_call_count_returns_invocation_count.cs index 2c24fa7a13..1e404580fa 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_call_count_returns_invocation_count.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_call_count_returns_invocation_count.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -32,25 +30,25 @@ public class SpyCommandProcessorCountTests { private readonly SpyCommandProcessor _spy = new(); - [Fact] - public void Then_call_count_returns_zero_before_any_calls() + [Test] + public async Task Then_call_count_returns_zero_before_any_calls() { //Assert - _spy.CallCount(CommandType.Send).ShouldBe(0); + await Assert.That(_spy.CallCount(CommandType.Send)).IsEqualTo(0); } - [Fact] - public void Then_call_count_returns_one_after_single_call() + [Test] + public async Task Then_call_count_returns_one_after_single_call() { //Act _spy.Send(new TestCommand()); //Assert - _spy.CallCount(CommandType.Send).ShouldBe(1); + await Assert.That(_spy.CallCount(CommandType.Send)).IsEqualTo(1); } - [Fact] - public void Then_call_count_returns_three_after_three_calls() + [Test] + public async Task Then_call_count_returns_three_after_three_calls() { //Act _spy.Send(new TestCommand()); @@ -58,18 +56,18 @@ public void Then_call_count_returns_three_after_three_calls() _spy.Send(new TestCommand()); //Assert - _spy.CallCount(CommandType.Send).ShouldBe(3); + await Assert.That(_spy.CallCount(CommandType.Send)).IsEqualTo(3); } - [Fact] - public void Then_call_count_returns_zero_for_different_method() + [Test] + public async Task Then_call_count_returns_zero_for_different_method() { //Act _spy.Send(new TestCommand()); _spy.Send(new TestCommand()); //Assert - _spy.CallCount(CommandType.Publish).ShouldBe(0); + await Assert.That(_spy.CallCount(CommandType.Publish)).IsEqualTo(0); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_call_invoked_records_and_returns_null.cs b/tests/Paramore.Brighter.Testing.Tests/When_call_invoked_records_and_returns_null.cs index 8603c1e3b9..f152aff2bb 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_call_invoked_records_and_returns_null.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_call_invoked_records_and_returns_null.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -45,41 +43,41 @@ public SpyCommandProcessorCallTests() _response = _spy.Call(_request); } - [Fact] - public void Then_should_record_call_command_type() + [Test] + public async Task Then_should_record_call_command_type() { //Assert - _spy.Commands.ShouldContain(CommandType.Call); + await Assert.That(_spy.Commands).Contains(CommandType.Call); } - [Fact] - public void Then_should_return_null() + [Test] + public async Task Then_should_return_null() { //Assert - _response.ShouldBeNull(); + await Assert.That(_response).IsNull(); } - [Fact] - public void Then_should_capture_request_in_recorded_calls() + [Test] + public async Task Then_should_capture_request_in_recorded_calls() { //Assert - _spy.RecordedCalls.Count.ShouldBe(1); - _spy.RecordedCalls[0].Request.ShouldBeSameAs(_request); - _spy.RecordedCalls[0].Type.ShouldBe(CommandType.Call); + await Assert.That(_spy.RecordedCalls.Count).IsEqualTo(1); + await Assert.That(_spy.RecordedCalls[0].Request).IsSameReferenceAs(_request); + await Assert.That(_spy.RecordedCalls[0].Type).IsEqualTo(CommandType.Call); } - [Fact] - public void Then_was_called_should_return_true() + [Test] + public async Task Then_was_called_should_return_true() { //Assert - _spy.WasCalled(CommandType.Call).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Call)).IsTrue(); } - [Fact] - public void Then_call_count_should_be_one() + [Test] + public async Task Then_call_count_should_be_one() { //Assert - _spy.CallCount(CommandType.Call).ShouldBe(1); + await Assert.That(_spy.CallCount(CommandType.Call)).IsEqualTo(1); } private sealed class TestCallRequest : ICall diff --git a/tests/Paramore.Brighter.Testing.Tests/When_clear_outbox_moves_requests_to_queue.cs b/tests/Paramore.Brighter.Testing.Tests/When_clear_outbox_moves_requests_to_queue.cs index b23cc438f7..b08dea6c56 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_clear_outbox_moves_requests_to_queue.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_clear_outbox_moves_requests_to_queue.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using System.Threading.Tasks; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -35,19 +33,19 @@ public class SpyCommandProcessorOutboxTests private readonly MyCommand _command1 = new() { Value = "first" }; private readonly MyCommand _command2 = new() { Value = "second" }; - [Fact] - public void Should_not_be_observable_before_clear() + [Test] + public Task Should_not_be_observable_before_clear() { // Arrange _spy.DepositPost(_command1); // Act & Assert - request is NOT in observation queue yet - var observeAction = () => _spy.Observe(); - observeAction.ShouldThrow(); + Assert.ThrowsExactly(() => _spy.Observe()); + return Task.CompletedTask; } - [Fact] - public void Should_be_observable_after_clear() + [Test] + public async Task Should_be_observable_after_clear() { // Arrange var id = _spy.DepositPost(_command1); @@ -57,11 +55,11 @@ public void Should_be_observable_after_clear() // Assert - request IS now in observation queue var observed = _spy.Observe(); - observed.ShouldBe(_command1); + await Assert.That(observed).IsEqualTo(_command1); } - [Fact] - public void Should_clear_multiple_requests() + [Test] + public async Task Should_clear_multiple_requests() { // Arrange var id1 = _spy.DepositPost(_command1); @@ -71,12 +69,12 @@ public void Should_clear_multiple_requests() _spy.ClearOutbox([id1, id2]); // Assert - both requests are now observable in order - _spy.Observe().ShouldBe(_command1); - _spy.Observe().ShouldBe(_command2); + await Assert.That(_spy.Observe()).IsEqualTo(_command1); + await Assert.That(_spy.Observe()).IsEqualTo(_command2); } - [Fact] - public void Should_record_clear_command_type() + [Test] + public async Task Should_record_clear_command_type() { // Arrange var id = _spy.DepositPost(_command1); @@ -85,10 +83,10 @@ public void Should_record_clear_command_type() _spy.ClearOutbox([id]); // Assert - _spy.WasCalled(CommandType.Clear).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Clear)).IsTrue(); } - [Fact] + [Test] public async Task Should_work_with_async_clear() { // Arrange @@ -98,8 +96,8 @@ public async Task Should_work_with_async_clear() await _spy.ClearOutboxAsync([id]); // Assert - _spy.Observe().ShouldBe(_command1); - _spy.WasCalled(CommandType.ClearAsync).ShouldBeTrue(); + await Assert.That(_spy.Observe()).IsEqualTo(_command1); + await Assert.That(_spy.WasCalled(CommandType.ClearAsync)).IsTrue(); } private sealed class MyCommand : Command diff --git a/tests/Paramore.Brighter.Testing.Tests/When_deposit_post_called_tracks_in_deposited_requests.cs b/tests/Paramore.Brighter.Testing.Tests/When_deposit_post_called_tracks_in_deposited_requests.cs index ffabb6cb76..aeba48e6b0 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_deposit_post_called_tracks_in_deposited_requests.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_deposit_post_called_tracks_in_deposited_requests.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -34,8 +32,8 @@ public class SpyCommandProcessorDepositTests private readonly MyCommand _command1 = new() { Value = "first" }; private readonly MyCommand _command2 = new() { Value = "second" }; - [Fact] - public void Should_return_id_from_deposit_post() + [Test] + public async Task Should_return_id_from_deposit_post() { // Arrange - command has a known Id @@ -43,11 +41,11 @@ public void Should_return_id_from_deposit_post() var returnedId = _spy.DepositPost(_command1); // Assert - returnedId.ShouldBe(_command1.Id); + await Assert.That(returnedId).IsEqualTo(_command1.Id); } - [Fact] - public void Should_track_deposited_request_by_id() + [Test] + public async Task Should_track_deposited_request_by_id() { // Arrange var id = _spy.DepositPost(_command1); @@ -56,41 +54,41 @@ public void Should_track_deposited_request_by_id() var depositedRequest = _spy.DepositedRequests[id]; // Assert - depositedRequest.ShouldBe(_command1); + await Assert.That(depositedRequest).IsEqualTo(_command1); } - [Fact] - public void Should_track_multiple_deposits_independently() + [Test] + public async Task Should_track_multiple_deposits_independently() { // Arrange & Act var id1 = _spy.DepositPost(_command1); var id2 = _spy.DepositPost(_command2); // Assert - _spy.DepositedRequests[id1].ShouldBe(_command1); - _spy.DepositedRequests[id2].ShouldBe(_command2); - _spy.DepositedRequests.Count.ShouldBe(2); + await Assert.That(_spy.DepositedRequests[id1]).IsEqualTo(_command1); + await Assert.That(_spy.DepositedRequests[id2]).IsEqualTo(_command2); + await Assert.That(_spy.DepositedRequests.Count).IsEqualTo(2); } - [Fact] + [Test] public async Task Should_track_async_deposits() { // Arrange & Act var id = await _spy.DepositPostAsync(_command1); // Assert - _spy.DepositedRequests[id].ShouldBe(_command1); + await Assert.That(_spy.DepositedRequests[id]).IsEqualTo(_command1); } - [Fact] - public void Should_not_add_deposited_requests_to_observation_queue() + [Test] + public Task Should_not_add_deposited_requests_to_observation_queue() { // Arrange & Act _spy.DepositPost(_command1); // Assert - DepositPost should NOT add to observation queue (that's ClearOutbox's job) - var observeAction = () => _spy.Observe(); - observeAction.ShouldThrow(); + Assert.ThrowsExactly(() => _spy.Observe()); + return Task.CompletedTask; } private sealed class MyCommand : Command diff --git a/tests/Paramore.Brighter.Testing.Tests/When_get_calls_returns_matching_recorded_calls.cs b/tests/Paramore.Brighter.Testing.Tests/When_get_calls_returns_matching_recorded_calls.cs index beda3f5557..f6d838983c 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_get_calls_returns_matching_recorded_calls.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_get_calls_returns_matching_recorded_calls.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using System.Linq; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -36,8 +34,8 @@ public class SpyCommandProcessorFindRecordedCallsTests private readonly MyCommand _command2 = new() { Value = "second" }; private readonly MyEvent _event1 = new() { Data = "event" }; - [Fact] - public void Should_return_all_calls_for_command_type() + [Test] + public async Task Should_return_all_calls_for_command_type() { // Arrange _spy.Send(_command1); @@ -48,14 +46,14 @@ public void Should_return_all_calls_for_command_type() var sendCalls = _spy.GetCalls(CommandType.Send); // Assert - sendCalls.ShouldNotBeNull(); - sendCalls.Count().ShouldBe(2); - sendCalls.Select(c => c.Request).ShouldContain(_command1); - sendCalls.Select(c => c.Request).ShouldContain(_command2); + await Assert.That(sendCalls).IsNotNull(); + await Assert.That(sendCalls.Count()).IsEqualTo(2); + await Assert.That(sendCalls.Select(c => c.Request)).Contains(_command1); + await Assert.That(sendCalls.Select(c => c.Request)).Contains(_command2); } - [Fact] - public void Should_return_recorded_call_with_full_details() + [Test] + public async Task Should_return_recorded_call_with_full_details() { // Arrange var context = new RequestContext(); @@ -66,16 +64,16 @@ public void Should_return_recorded_call_with_full_details() // Assert var call = calls.Single(); - call.Type.ShouldBe(CommandType.Send); - call.Request.ShouldBe(_command1); - call.Context.ShouldBe(context); - call.Timestamp.ShouldBeInRange( + await Assert.That(call.Type).IsEqualTo(CommandType.Send); + await Assert.That(call.Request).IsEqualTo(_command1); + await Assert.That(call.Context).IsEqualTo(context); + await Assert.That(call.Timestamp).IsBetween( DateTime.UtcNow.AddSeconds(-5), DateTime.UtcNow.AddSeconds(1)); } - [Fact] - public void Should_return_empty_when_no_matching_calls() + [Test] + public async Task Should_return_empty_when_no_matching_calls() { // Arrange _spy.Send(_command1); @@ -84,11 +82,11 @@ public void Should_return_empty_when_no_matching_calls() var publishCalls = _spy.GetCalls(CommandType.Publish); // Assert - publishCalls.ShouldBeEmpty(); + await Assert.That(publishCalls).IsEmpty(); } - [Fact] - public void Should_filter_to_specific_command_type_only() + [Test] + public async Task Should_filter_to_specific_command_type_only() { // Arrange _spy.Send(_command1); @@ -99,8 +97,8 @@ public void Should_filter_to_specific_command_type_only() var publishCalls = _spy.GetCalls(CommandType.Publish); // Assert - publishCalls.Count().ShouldBe(1); - publishCalls.Single().Request.ShouldBe(_event1); + await Assert.That(publishCalls.Count()).IsEqualTo(1); + await Assert.That(publishCalls.Single().Request).IsEqualTo(_event1); } private sealed class MyCommand : Command diff --git a/tests/Paramore.Brighter.Testing.Tests/When_get_requests_returns_matching_requests.cs b/tests/Paramore.Brighter.Testing.Tests/When_get_requests_returns_matching_requests.cs index d21b182edf..8ff5c4cd0e 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_get_requests_returns_matching_requests.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_get_requests_returns_matching_requests.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using System.Linq; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -35,8 +33,8 @@ public class SpyCommandProcessorGetRequestsTests private readonly MyCommand _command2 = new() { Value = "second" }; private readonly MyEvent _event1 = new() { Data = "event" }; - [Fact] - public void Should_return_all_requests_of_type() + [Test] + public async Task Should_return_all_requests_of_type() { // Arrange _spy.Send(_command1); @@ -47,14 +45,14 @@ public void Should_return_all_requests_of_type() var commands = _spy.GetRequests(); // Assert - commands.ShouldNotBeNull(); - commands.Count().ShouldBe(2); - commands.ShouldContain(_command1); - commands.ShouldContain(_command2); + await Assert.That(commands).IsNotNull(); + await Assert.That(commands.Count()).IsEqualTo(2); + await Assert.That(commands).Contains(_command1); + await Assert.That(commands).Contains(_command2); } - [Fact] - public void Should_be_non_destructive() + [Test] + public async Task Should_be_non_destructive() { // Arrange _spy.Send(_command1); @@ -65,13 +63,13 @@ public void Should_be_non_destructive() var secondCall = _spy.GetRequests().ToList(); // Assert - both calls return the same results - firstCall.Count.ShouldBe(2); - secondCall.Count.ShouldBe(2); - firstCall.ShouldBe(secondCall); + await Assert.That(firstCall.Count).IsEqualTo(2); + await Assert.That(secondCall.Count).IsEqualTo(2); + await Assert.That(firstCall).IsEquivalentTo(secondCall); } - [Fact] - public void Should_return_empty_when_no_matching_requests() + [Test] + public async Task Should_return_empty_when_no_matching_requests() { // Arrange - send only events, no commands _spy.Publish(_event1); @@ -80,11 +78,11 @@ public void Should_return_empty_when_no_matching_requests() var commands = _spy.GetRequests(); // Assert - commands.ShouldBeEmpty(); + await Assert.That(commands).IsEmpty(); } - [Fact] - public void Should_filter_to_specific_type_only() + [Test] + public async Task Should_filter_to_specific_type_only() { // Arrange _spy.Send(_command1); @@ -94,8 +92,8 @@ public void Should_filter_to_specific_type_only() var events = _spy.GetRequests(); // Assert - events.Count().ShouldBe(1); - events.Single().ShouldBe(_event1); + await Assert.That(events.Count()).IsEqualTo(1); + await Assert.That(events.Single()).IsEqualTo(_event1); } private sealed class MyCommand : Command diff --git a/tests/Paramore.Brighter.Testing.Tests/When_method_called_should_capture_request_details.cs b/tests/Paramore.Brighter.Testing.Tests/When_method_called_should_capture_request_details.cs index 3a6205fcf4..2e58495b01 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_method_called_should_capture_request_details.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_method_called_should_capture_request_details.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -50,35 +48,35 @@ public SpyCommandProcessorCaptureRequestDetailsTests() _afterCall = DateTime.UtcNow; } - [Fact] - public void Then_recorded_call_should_have_correct_type() + [Test] + public async Task Then_recorded_call_should_have_correct_type() { //Assert - _spy.RecordedCalls.ShouldHaveSingleItem(); - _spy.RecordedCalls[0].Type.ShouldBe(CommandType.Send); + await Assert.That(_spy.RecordedCalls).HasSingleItem(); + await Assert.That(_spy.RecordedCalls[0].Type).IsEqualTo(CommandType.Send); } - [Fact] - public void Then_recorded_call_should_have_exact_request() + [Test] + public async Task Then_recorded_call_should_have_exact_request() { //Assert - _spy.RecordedCalls[0].Request.ShouldBeSameAs(_command); + await Assert.That(_spy.RecordedCalls[0].Request).IsSameReferenceAs(_command); } - [Fact] - public void Then_recorded_call_should_have_timestamp_within_range() + [Test] + public async Task Then_recorded_call_should_have_timestamp_within_range() { //Assert var timestamp = _spy.RecordedCalls[0].Timestamp; - timestamp.ShouldBeGreaterThanOrEqualTo(_beforeCall); - timestamp.ShouldBeLessThanOrEqualTo(_afterCall); + await Assert.That(timestamp).IsGreaterThanOrEqualTo(_beforeCall); + await Assert.That(timestamp).IsLessThanOrEqualTo(_afterCall); } - [Fact] - public void Then_recorded_call_should_capture_request_context() + [Test] + public async Task Then_recorded_call_should_capture_request_context() { //Assert - _spy.RecordedCalls[0].Context.ShouldBeSameAs(_context); + await Assert.That(_spy.RecordedCalls[0].Context).IsSameReferenceAs(_context); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_observe_dequeues_requests_in_order.cs b/tests/Paramore.Brighter.Testing.Tests/When_observe_dequeues_requests_in_order.cs index 8f90408560..ff3ded0b83 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_observe_dequeues_requests_in_order.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_observe_dequeues_requests_in_order.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -47,42 +45,43 @@ public SpyCommandProcessorObserveTests() _spy.Send(_command2); } - [Fact] - public void Then_first_observe_returns_first_request() + [Test] + public async Task Then_first_observe_returns_first_request() { //Act var observed = _spy.Observe(); //Assert - observed.ShouldBeSameAs(_command1); - observed.Name.ShouldBe("first"); + await Assert.That(observed).IsSameReferenceAs(_command1); + await Assert.That(observed.Name).IsEqualTo("first"); } - [Fact] - public void Then_second_observe_returns_second_request() + [Test] + public async Task Then_second_observe_returns_second_request() { //Act _spy.Observe(); // Dequeue first var observed = _spy.Observe(); //Assert - observed.ShouldBeSameAs(_command2); - observed.Name.ShouldBe("second"); + await Assert.That(observed).IsSameReferenceAs(_command2); + await Assert.That(observed.Name).IsEqualTo("second"); } - [Fact] - public void Then_observe_throws_when_queue_is_empty() + [Test] + public Task Then_observe_throws_when_queue_is_empty() { //Act _spy.Observe(); // Dequeue first _spy.Observe(); // Dequeue second //Assert - Should.Throw(() => _spy.Observe()); + Assert.ThrowsExactly(() => _spy.Observe()); + return Task.CompletedTask; } - [Fact] - public void Then_observe_filters_by_request_type() + [Test] + public async Task Then_observe_filters_by_request_type() { //Arrange - add a different type _spy.Publish(new TestEvent()); @@ -91,7 +90,7 @@ public void Then_observe_filters_by_request_type() var observed = _spy.Observe(); //Assert - observed.ShouldBeOfType(); + await Assert.That(observed).IsTypeOf(); } private sealed class TestCommand(string name) : Command(Id.Random()) diff --git a/tests/Paramore.Brighter.Testing.Tests/When_reset_clears_all_state.cs b/tests/Paramore.Brighter.Testing.Tests/When_reset_clears_all_state.cs index e49c2ed729..e6b99d5d38 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_reset_clears_all_state.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_reset_clears_all_state.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -33,40 +31,40 @@ public class SpyCommandProcessorClearTests private readonly SpyCommandProcessor _spy = new(); private readonly MyCommand _command = new() { Value = "test" }; - [Fact] - public void Should_clear_recorded_calls() + [Test] + public async Task Should_clear_recorded_calls() { // Arrange _spy.Send(_command); - _spy.RecordedCalls.Count.ShouldBe(1); + await Assert.That(_spy.RecordedCalls.Count).IsEqualTo(1); // Act _spy.Reset(); // Assert - _spy.RecordedCalls.ShouldBeEmpty(); + await Assert.That(_spy.RecordedCalls).IsEmpty(); } - [Fact] - public void Should_clear_commands() + [Test] + public async Task Should_clear_commands() { // Arrange _spy.Send(_command); - _spy.Commands.Count.ShouldBe(1); + await Assert.That(_spy.Commands.Count).IsEqualTo(1); // Act _spy.Reset(); // Assert - _spy.Commands.ShouldBeEmpty(); + await Assert.That(_spy.Commands).IsEmpty(); } - [Fact] - public void Should_clear_observation_queue() + [Test] + public async Task Should_clear_observation_queue() { // Arrange _spy.Send(_command); - _spy.Observe().ShouldBe(_command); // Confirm it was observable + await Assert.That(_spy.Observe()).IsEqualTo(_command); // Confirm it was observable _spy.Send(_command); // Add another one @@ -74,51 +72,50 @@ public void Should_clear_observation_queue() _spy.Reset(); // Assert - observation queue is empty - var observeAction = () => _spy.Observe(); - observeAction.ShouldThrow(); + Assert.ThrowsExactly(() => _spy.Observe()); } - [Fact] - public void Should_clear_deposited_requests() + [Test] + public async Task Should_clear_deposited_requests() { // Arrange var id = _spy.DepositPost(_command); - _spy.DepositedRequests.Count.ShouldBe(1); + await Assert.That(_spy.DepositedRequests.Count).IsEqualTo(1); // Act _spy.Reset(); // Assert - _spy.DepositedRequests.ShouldBeEmpty(); + await Assert.That(_spy.DepositedRequests).IsEmpty(); } - [Fact] - public void Should_reset_was_called_to_false() + [Test] + public async Task Should_reset_was_called_to_false() { // Arrange _spy.Send(_command); - _spy.WasCalled(CommandType.Send).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Send)).IsTrue(); // Act _spy.Reset(); // Assert - _spy.WasCalled(CommandType.Send).ShouldBeFalse(); + await Assert.That(_spy.WasCalled(CommandType.Send)).IsFalse(); } - [Fact] - public void Should_reset_call_count_to_zero() + [Test] + public async Task Should_reset_call_count_to_zero() { // Arrange _spy.Send(_command); _spy.Send(_command); - _spy.CallCount(CommandType.Send).ShouldBe(2); + await Assert.That(_spy.CallCount(CommandType.Send)).IsEqualTo(2); // Act _spy.Reset(); // Assert - _spy.CallCount(CommandType.Send).ShouldBe(0); + await Assert.That(_spy.CallCount(CommandType.Send)).IsEqualTo(0); } private sealed class MyCommand : Command diff --git a/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs b/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs index 9ea66e5c01..8ab3b9f5fd 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs @@ -25,8 +25,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -49,32 +47,32 @@ public SpyCommandProcessorScheduledSendTests() _sendDelayId = _spy.Send(delay, command); } - [Fact] - public void Then_should_record_scheduler_type_for_send_at() + [Test] + public async Task Then_should_record_scheduler_type_for_send_at() { //Assert - _spy.Commands[0].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_should_record_scheduler_type_for_send_delay() + [Test] + public async Task Then_should_record_scheduler_type_for_send_delay() { //Assert - _spy.Commands[1].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_send_at_should_return_scheduler_id() + [Test] + public async Task Then_send_at_should_return_scheduler_id() { //Assert - _sendAtId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_sendAtId)).IsFalse(); } - [Fact] - public void Then_send_delay_should_return_scheduler_id() + [Test] + public async Task Then_send_delay_should_return_scheduler_id() { //Assert - _sendDelayId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_sendDelayId)).IsFalse(); } private sealed class TestCommand() : Command(Id.Random()); @@ -99,32 +97,32 @@ public SpyCommandProcessorScheduledPublishTests() _publishDelayId = _spy.Publish(delay, @event); } - [Fact] - public void Then_should_record_scheduler_type_for_publish_at() + [Test] + public async Task Then_should_record_scheduler_type_for_publish_at() { //Assert - _spy.Commands[0].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_should_record_scheduler_type_for_publish_delay() + [Test] + public async Task Then_should_record_scheduler_type_for_publish_delay() { //Assert - _spy.Commands[1].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_publish_at_should_return_scheduler_id() + [Test] + public async Task Then_publish_at_should_return_scheduler_id() { //Assert - _publishAtId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_publishAtId)).IsFalse(); } - [Fact] - public void Then_publish_delay_should_return_scheduler_id() + [Test] + public async Task Then_publish_delay_should_return_scheduler_id() { //Assert - _publishDelayId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_publishDelayId)).IsFalse(); } private sealed class TestEvent() : Event(Id.Random()); @@ -149,32 +147,32 @@ public SpyCommandProcessorScheduledPostTests() _postDelayId = _spy.Post(delay, command); } - [Fact] - public void Then_should_record_scheduler_type_for_post_at() + [Test] + public async Task Then_should_record_scheduler_type_for_post_at() { //Assert - _spy.Commands[0].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_should_record_scheduler_type_for_post_delay() + [Test] + public async Task Then_should_record_scheduler_type_for_post_delay() { //Assert - _spy.Commands[1].ShouldBe(CommandType.Scheduler); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.Scheduler); } - [Fact] - public void Then_post_at_should_return_scheduler_id() + [Test] + public async Task Then_post_at_should_return_scheduler_id() { //Assert - _postAtId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_postAtId)).IsFalse(); } - [Fact] - public void Then_post_delay_should_return_scheduler_id() + [Test] + public async Task Then_post_delay_should_return_scheduler_id() { //Assert - _postDelayId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_postDelayId)).IsFalse(); } private sealed class TestCommand() : Command(Id.Random()); @@ -202,44 +200,44 @@ public SpyCommandProcessorScheduledAsyncTests() _postAsyncAtId = _spy.PostAsync(at, command).GetAwaiter().GetResult(); } - [Fact] - public void Then_should_record_scheduler_async_for_send() + [Test] + public async Task Then_should_record_scheduler_async_for_send() { //Assert - _spy.Commands[0].ShouldBe(CommandType.SchedulerAsync); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.SchedulerAsync); } - [Fact] - public void Then_should_record_scheduler_async_for_publish() + [Test] + public async Task Then_should_record_scheduler_async_for_publish() { //Assert - _spy.Commands[1].ShouldBe(CommandType.SchedulerAsync); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.SchedulerAsync); } - [Fact] - public void Then_should_record_scheduler_async_for_post() + [Test] + public async Task Then_should_record_scheduler_async_for_post() { //Assert - _spy.Commands[2].ShouldBe(CommandType.SchedulerAsync); + await Assert.That(_spy.Commands[2]).IsEqualTo(CommandType.SchedulerAsync); } - [Fact] - public void Then_async_scheduled_methods_should_return_ids() + [Test] + public async Task Then_async_scheduled_methods_should_return_ids() { //Assert - _sendAsyncAtId.ShouldNotBeNullOrEmpty(); - _publishAsyncDelayId.ShouldNotBeNullOrEmpty(); - _postAsyncAtId.ShouldNotBeNullOrEmpty(); + await Assert.That(string.IsNullOrEmpty(_sendAsyncAtId)).IsFalse(); + await Assert.That(string.IsNullOrEmpty(_publishAsyncDelayId)).IsFalse(); + await Assert.That(string.IsNullOrEmpty(_postAsyncAtId)).IsFalse(); } - [Fact] - public void Then_should_record_requests_in_recorded_calls() + [Test] + public async Task Then_should_record_requests_in_recorded_calls() { //Assert - _spy.RecordedCalls.Count.ShouldBe(3); - _spy.RecordedCalls[0].Request.ShouldBeOfType(); - _spy.RecordedCalls[1].Request.ShouldBeOfType(); - _spy.RecordedCalls[2].Request.ShouldBeOfType(); + await Assert.That(_spy.RecordedCalls.Count).IsEqualTo(3); + await Assert.That(_spy.RecordedCalls[0].Request).IsTypeOf(); + await Assert.That(_spy.RecordedCalls[1].Request).IsTypeOf(); + await Assert.That(_spy.RecordedCalls[2].Request).IsTypeOf(); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_send_is_called_should_record_command_type.cs b/tests/Paramore.Brighter.Testing.Tests/When_send_is_called_should_record_command_type.cs index 055a2af29b..be9c62e4f7 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_send_is_called_should_record_command_type.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_send_is_called_should_record_command_type.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -42,18 +40,18 @@ public SpyCommandProcessorCommandTypeTests() _spy.Send(command); } - [Fact] - public void Then_commands_should_contain_send() + [Test] + public async Task Then_commands_should_contain_send() { //Assert - _spy.Commands.ShouldContain(CommandType.Send); + await Assert.That(_spy.Commands).Contains(CommandType.Send); } - [Fact] - public void Then_commands_should_have_single_entry() + [Test] + public async Task Then_commands_should_have_single_entry() { //Assert - _spy.Commands.Count.ShouldBe(1); + await Assert.That(_spy.Commands.Count).IsEqualTo(1); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_subclass_overrides_executes_custom_behavior.cs b/tests/Paramore.Brighter.Testing.Tests/When_subclass_overrides_executes_custom_behavior.cs index d3a8c06d17..a222dacc58 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_subclass_overrides_executes_custom_behavior.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_subclass_overrides_executes_custom_behavior.cs @@ -24,8 +24,6 @@ THE SOFTWARE. */ using System; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -33,7 +31,6 @@ public class SpyCommandProcessorSubclassOverrideSendTests { private readonly ThrowingSpyCommandProcessor _spy; private readonly TestCommand _command; - private readonly InvalidOperationException _caughtException; public SpyCommandProcessorSubclassOverrideSendTests() { @@ -42,29 +39,30 @@ public SpyCommandProcessorSubclassOverrideSendTests() _command = new TestCommand(); //Act - _caughtException = Should.Throw(() => _spy.Send(_command)); + try { _spy.Send(_command); } catch (InvalidOperationException) { } } - [Fact] - public void Then_should_throw_custom_exception() + [Test] + public Task Then_should_throw_custom_exception() { //Assert - _caughtException.Message.ShouldBe("Send is not allowed in this test"); + Assert.ThrowsExactly(() => _spy.Send(new TestCommand())); + return Task.CompletedTask; } - [Fact] - public void Then_base_should_have_recorded_the_call() + [Test] + public async Task Then_base_should_have_recorded_the_call() { //Assert - _spy.WasCalled(CommandType.Send).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Send)).IsTrue(); } - [Fact] - public void Then_request_should_be_captured_in_recorded_calls() + [Test] + public async Task Then_request_should_be_captured_in_recorded_calls() { //Assert - _spy.RecordedCalls.Count.ShouldBe(1); - _spy.RecordedCalls[0].Request.ShouldBeSameAs(_command); + await Assert.That(_spy.RecordedCalls.Count).IsEqualTo(1); + await Assert.That(_spy.RecordedCalls[0].Request).IsSameReferenceAs(_command); } private sealed class TestCommand() : Command(Id.Random()); @@ -74,7 +72,6 @@ public class SpyCommandProcessorSubclassOverridePublishTests { private readonly ThrowingSpyCommandProcessor _spy; private readonly TestEvent _event; - private readonly InvalidOperationException _caughtException; public SpyCommandProcessorSubclassOverridePublishTests() { @@ -83,21 +80,22 @@ public SpyCommandProcessorSubclassOverridePublishTests() _event = new TestEvent(); //Act - _caughtException = Should.Throw(() => _spy.Publish(_event)); + try { _spy.Publish(_event); } catch (InvalidOperationException) { } } - [Fact] - public void Then_should_throw_custom_exception() + [Test] + public Task Then_should_throw_custom_exception() { //Assert - _caughtException.Message.ShouldBe("Publish is not allowed in this test"); + Assert.ThrowsExactly(() => _spy.Publish(new TestEvent())); + return Task.CompletedTask; } - [Fact] - public void Then_base_should_have_recorded_the_call() + [Test] + public async Task Then_base_should_have_recorded_the_call() { //Assert - _spy.WasCalled(CommandType.Publish).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Publish)).IsTrue(); } private sealed class TestEvent() : Event(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs b/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs index 2a6ac35eb4..f19311046b 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs @@ -26,8 +26,6 @@ THE SOFTWARE. */ using System.Threading.Tasks; using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -55,50 +53,50 @@ public SpyCommandProcessorTransactionProviderSyncTests() new[] { _batchCommand1, _batchCommand2 }, transactionProvider); } - [Fact] - public void Then_single_deposit_should_record_deposit_type() + [Test] + public async Task Then_single_deposit_should_record_deposit_type() { //Assert - _spy.Commands[0].ShouldBe(CommandType.Deposit); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.Deposit); } - [Fact] - public void Then_single_deposit_should_return_request_id() + [Test] + public async Task Then_single_deposit_should_return_request_id() { //Assert - _singleId.ShouldBe(_singleCommand.Id); + await Assert.That(_singleId).IsEqualTo(_singleCommand.Id); } - [Fact] - public void Then_single_deposit_should_be_in_deposited_requests() + [Test] + public async Task Then_single_deposit_should_be_in_deposited_requests() { //Assert - _spy.DepositedRequests[_singleId].ShouldBeSameAs(_singleCommand); + await Assert.That(_spy.DepositedRequests[_singleId]).IsSameReferenceAs(_singleCommand); } - [Fact] - public void Then_batch_deposit_should_record_deposit_types() + [Test] + public async Task Then_batch_deposit_should_record_deposit_types() { //Assert - _spy.Commands[1].ShouldBe(CommandType.Deposit); - _spy.Commands[2].ShouldBe(CommandType.Deposit); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.Deposit); + await Assert.That(_spy.Commands[2]).IsEqualTo(CommandType.Deposit); } - [Fact] - public void Then_batch_deposit_should_return_ids_for_each_request() + [Test] + public async Task Then_batch_deposit_should_return_ids_for_each_request() { //Assert - _batchIds.Length.ShouldBe(2); - _batchIds[0].ShouldBe(_batchCommand1.Id); - _batchIds[1].ShouldBe(_batchCommand2.Id); + await Assert.That(_batchIds.Length).IsEqualTo(2); + await Assert.That(_batchIds[0]).IsEqualTo(_batchCommand1.Id); + await Assert.That(_batchIds[1]).IsEqualTo(_batchCommand2.Id); } - [Fact] - public void Then_batch_deposits_should_be_in_deposited_requests() + [Test] + public async Task Then_batch_deposits_should_be_in_deposited_requests() { //Assert - _spy.DepositedRequests[_batchIds[0]].ShouldBeSameAs(_batchCommand1); - _spy.DepositedRequests[_batchIds[1]].ShouldBeSameAs(_batchCommand2); + await Assert.That(_spy.DepositedRequests[_batchIds[0]]).IsSameReferenceAs(_batchCommand1); + await Assert.That(_spy.DepositedRequests[_batchIds[1]]).IsSameReferenceAs(_batchCommand2); } private sealed class TestCommand() : Command(Id.Random()); @@ -130,49 +128,49 @@ public SpyCommandProcessorTransactionProviderAsyncTests() .GetAwaiter().GetResult(); } - [Fact] - public void Then_single_async_deposit_should_record_deposit_async_type() + [Test] + public async Task Then_single_async_deposit_should_record_deposit_async_type() { //Assert - _spy.Commands[0].ShouldBe(CommandType.DepositAsync); + await Assert.That(_spy.Commands[0]).IsEqualTo(CommandType.DepositAsync); } - [Fact] - public void Then_single_async_deposit_should_return_request_id() + [Test] + public async Task Then_single_async_deposit_should_return_request_id() { //Assert - _singleId.ShouldBe(_singleCommand.Id); + await Assert.That(_singleId).IsEqualTo(_singleCommand.Id); } - [Fact] - public void Then_single_async_deposit_should_be_in_deposited_requests() + [Test] + public async Task Then_single_async_deposit_should_be_in_deposited_requests() { //Assert - _spy.DepositedRequests[_singleId].ShouldBeSameAs(_singleCommand); + await Assert.That(_spy.DepositedRequests[_singleId]).IsSameReferenceAs(_singleCommand); } - [Fact] - public void Then_batch_async_deposit_should_record_deposit_async_types() + [Test] + public async Task Then_batch_async_deposit_should_record_deposit_async_types() { //Assert - _spy.Commands[1].ShouldBe(CommandType.DepositAsync); - _spy.Commands[2].ShouldBe(CommandType.DepositAsync); + await Assert.That(_spy.Commands[1]).IsEqualTo(CommandType.DepositAsync); + await Assert.That(_spy.Commands[2]).IsEqualTo(CommandType.DepositAsync); } - [Fact] - public void Then_batch_async_deposit_should_return_ids_for_each_request() + [Test] + public async Task Then_batch_async_deposit_should_return_ids_for_each_request() { //Assert - _batchIds.Length.ShouldBe(2); - _batchIds[0].ShouldBe(_batchCommand1.Id); - _batchIds[1].ShouldBe(_batchCommand2.Id); + await Assert.That(_batchIds.Length).IsEqualTo(2); + await Assert.That(_batchIds[0]).IsEqualTo(_batchCommand1.Id); + await Assert.That(_batchIds[1]).IsEqualTo(_batchCommand2.Id); } - [Fact] - public void Then_total_call_count_should_be_three() + [Test] + public async Task Then_total_call_count_should_be_three() { //Assert - _spy.CallCount(CommandType.DepositAsync).ShouldBe(3); + await Assert.That(_spy.CallCount(CommandType.DepositAsync)).IsEqualTo(3); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_was_called_checks_for_invoked_method.cs b/tests/Paramore.Brighter.Testing.Tests/When_was_called_checks_for_invoked_method.cs index e4018df7dc..c215d1aa9d 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_was_called_checks_for_invoked_method.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_was_called_checks_for_invoked_method.cs @@ -23,8 +23,6 @@ THE SOFTWARE. */ using Paramore.Brighter; using Paramore.Brighter.Testing; -using Shouldly; -using Xunit; namespace Paramore.Brighter.Testing.Tests; @@ -32,31 +30,31 @@ public class SpyCommandProcessorInvokedMethodTests { private readonly SpyCommandProcessor _spy = new(); - [Fact] - public void Then_was_called_returns_false_before_any_calls() + [Test] + public async Task Then_was_called_returns_false_before_any_calls() { //Assert - _spy.WasCalled(CommandType.Send).ShouldBeFalse(); + await Assert.That(_spy.WasCalled(CommandType.Send)).IsFalse(); } - [Fact] - public void Then_was_called_returns_true_after_send_called() + [Test] + public async Task Then_was_called_returns_true_after_send_called() { //Act _spy.Send(new TestCommand()); //Assert - _spy.WasCalled(CommandType.Send).ShouldBeTrue(); + await Assert.That(_spy.WasCalled(CommandType.Send)).IsTrue(); } - [Fact] - public void Then_was_called_returns_false_for_different_method() + [Test] + public async Task Then_was_called_returns_false_for_different_method() { //Act _spy.Send(new TestCommand()); //Assert - _spy.WasCalled(CommandType.Publish).ShouldBeFalse(); + await Assert.That(_spy.WasCalled(CommandType.Publish)).IsFalse(); } private sealed class TestCommand() : Command(Id.Random()); diff --git a/tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj b/tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj index 040fc9e590..27cba7060c 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj +++ b/tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj @@ -1,32 +1,16 @@ - - + $(BrighterTestTargetFrameworks) enable - false true Paramore.Brighter.TickerQ.Tests + Exe - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + - - - - - - - - + \ No newline at end of file diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs index 6c5d13db2a..3fee474e8b 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.TickerQ.Tests.TestDoubles; using Paramore.Brighter.TickerQ.Tests.TestDoubles.Fixtures; @@ -6,8 +6,9 @@ namespace Paramore.Brighter.TickerQ.Tests; -[Collection("Scheduler")] -public class TickerQSchedulerMessageTests : IClassFixture, IDisposable +[NotInParallel("Scheduler")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class TickerQSchedulerMessageTests : IDisposable { private readonly TickerQMessageTestFixture _fixture; @@ -17,67 +18,67 @@ public TickerQSchedulerMessageTests(TickerQMessageTestFixture fixture) _fixture = fixture; } - [Fact] - public void When_scheduler_a_message_with_a_datetimeoffset_sync() + [Test] + public async Task When_scheduler_a_message_with_a_datetimeoffset_sync() { Message message = GetMessage(); var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, _fixture.Outbox.Get(message.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_a_message_with_a_timespan_sync() + [Test] + public async Task When_scheduler_a_message_with_a_timespan_sync() { Message message = GetMessage(); var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(1)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, _fixture.Outbox.Get(message.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] - public void When_reschedule_a_message_with_a_datetimeoffset_sync() + [Test] + public async Task When_reschedule_a_message_with_a_datetimeoffset_sync() { var message = GetMessage(); var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); scheduler.ReScheduler(id, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(5)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); - Assert.Equivalent(message, _fixture.Outbox.Get(message.Id, new RequestContext())); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); + await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_timespan_sync() { var message = GetMessage(); @@ -85,28 +86,28 @@ public async Task When_reschedule_a_message_with_a_timespan_sync() var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(2)); - Assert.True((id)?.Any()); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); scheduler.ReScheduler(id, TimeSpan.FromSeconds(5)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(5)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); - Assert.Equivalent(message, _fixture.Outbox.Get(message.Id, new RequestContext())); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); + await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] - public void When_cancel_scheduler_message_with_a_datetimeoffset() + [Test] + public async Task When_cancel_scheduler_message_with_a_datetimeoffset() { var message = GetMessage(); var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(2)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -115,30 +116,30 @@ public void When_cancel_scheduler_message_with_a_datetimeoffset() var expected = Message.Empty; var actual = _fixture.Outbox.Get(message.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_cancel_scheduler_request_with_a_timespan() + [Test] + public async Task When_cancel_scheduler_request_with_a_timespan() { var message = GetMessage(); var scheduler = (IAmAMessageSchedulerSync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = scheduler.Schedule(message, TimeSpan.FromSeconds(2)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); scheduler.Cancel(id); @@ -147,18 +148,18 @@ public void When_cancel_scheduler_request_with_a_timespan() var expected = Message.Empty; var actual = _fixture.Outbox.Get(message.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } private Message GetMessage() diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs index 5f730ea935..f764f3c006 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Text.Json; using Paramore.Brighter.TickerQ.Tests.TestDoubles; using Paramore.Brighter.TickerQ.Tests.TestDoubles.Fixtures; @@ -6,8 +6,9 @@ namespace Paramore.Brighter.TickerQ.Tests; -[Collection("Scheduler")] -public class TickerQSchedulerMessageAsyncTests : IClassFixture, IDisposable +[NotInParallel("Scheduler")] +[ClassDataSource(Shared = SharedType.PerClass)] + public class TickerQSchedulerMessageAsyncTests : IDisposable { private readonly TickerQMessageTestFixture _fixture; @@ -16,7 +17,7 @@ public TickerQSchedulerMessageAsyncTests(TickerQMessageTestFixture tickerQTestFi _fixture = tickerQTestFixture; } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_datetimeoffset_async() { Message message = GetMessage(); @@ -25,18 +26,18 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(message, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Equivalent(message, await _fixture.Outbox.GetAsync(message.Id, new RequestContext())); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_a_message_with_a_timespan_async() { Message message = GetMessage(); @@ -44,18 +45,18 @@ public async Task When_scheduler_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromSeconds(4)); - Assert.NotEqual(0, id.Length); + await Assert.That(id.Length).IsNotEqualTo(0); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(6)); - Assert.Equivalent(message, await _fixture.Outbox.GetAsync(message.Id, new RequestContext())); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_datetimeoffset_async() { var message = GetMessage(); @@ -63,20 +64,20 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = await scheduler.ScheduleAsync(message, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await scheduler.ReSchedulerAsync(id, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(5)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); - Assert.Equivalent(message, await _fixture.Outbox.GetAsync(message.Id, new RequestContext())); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_reschedule_a_message_with_a_timespan_async() { var message = GetMessage(); @@ -84,20 +85,20 @@ public async Task When_reschedule_a_message_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = await scheduler.ScheduleAsync(message, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); var reScheduled = await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)); - Assert.True(reScheduled); + await Assert.That(reScheduled).IsTrue(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(6)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); - Assert.Equivalent(message, await _fixture.Outbox.GetAsync(message.Id, new RequestContext())); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); } - [Fact] + [Test] public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() { var message = GetMessage(); @@ -105,7 +106,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var scheduler = (IAmAMessageSchedulerAsync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.CancelAsync(id); @@ -114,22 +115,22 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() var expected = Message.Empty; var actual = await _fixture.Outbox.GetAsync(message.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_cancel_scheduler_request_with_a_timespan_async() { var message = GetMessage(); @@ -137,7 +138,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var scheduler = (IAmAMessageSchedulerAsync)_fixture.SchedulerFactory.Create(_fixture.Processor); var id = await scheduler.ScheduleAsync(message, TimeSpan.FromHours(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.CancelAsync(id); @@ -146,18 +147,18 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() var expected = Message.Empty; var actual = await _fixture.Outbox.GetAsync(message.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } private Message GetMessage() diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs index 55d5e08a25..336c688016 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs @@ -1,11 +1,12 @@ -using Paramore.Brighter.TickerQ.Tests.TestDoubles; +using Paramore.Brighter.TickerQ.Tests.TestDoubles; using Paramore.Brighter.TickerQ.Tests.TestDoubles.Fixtures; namespace Paramore.Brighter.TickerQ.Tests { - [Collection("Scheduler")] - public class TickerQSchedulerRequestTests : IClassFixture, IDisposable + [NotInParallel("Scheduler")] + [ClassDataSource(Shared = SharedType.PerClass)] + public class TickerQSchedulerRequestTests : IDisposable { private readonly TickerQRequestTestFixture _fixture; @@ -15,327 +16,327 @@ public TickerQSchedulerRequestTests(TickerQRequestTestFixture tickerQTestFixture } #region Scheduler - [Fact] - public void When_scheduler_send_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_send_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_send_request_with_a_timespan() + [Test] + public async Task When_scheduler_send_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_publish_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_publish_request_with_a_timespan() + [Test] + public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] - public void When_scheduler_post_request_with_a_datetimeoffset() + [Test] + public async Task When_scheduler_post_request_with_a_datetimeoffset() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty, _fixture.Outbox.Get(req.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] - public void When_scheduler_post_request_with_a_timespan() + [Test] + public async Task When_scheduler_post_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _fixture.Outbox.Get(req.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, type, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); scheduler.ReScheduler(id, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(5)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] - public void When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(2)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.ReScheduler(id, TimeSpan.FromSeconds(5)); Thread.Sleep(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); Thread.Sleep(TimeSpan.FromSeconds(5)); - Assert.Contains(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, type, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(3)); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] - public void When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] + public async Task When_cancel_scheduler_request_with_a_timespan(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateSync(_fixture.Processor); var id = scheduler.Schedule(req, type, TimeSpan.FromSeconds(2)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); scheduler.Cancel(id); Thread.Sleep(TimeSpan.FromSeconds(3)); - Assert.DoesNotContain(nameof(MyEventHandler), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs index c78436266b..9bfa2015bd 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs @@ -1,12 +1,13 @@ -using System; +using System; using Paramore.Brighter.TickerQ.Tests.TestDoubles; using Paramore.Brighter.TickerQ.Tests.TestDoubles.Fixtures; namespace Paramore.Brighter.TickerQ.Tests { - [Collection("Scheduler")] - public class TickerQSchedulerRequestAsyncTests : IClassFixture, IDisposable + [NotInParallel("Scheduler")] + [ClassDataSource(Shared = SharedType.PerClass)] + public class TickerQSchedulerRequestAsyncTests : IDisposable { private readonly TickerQRequestAsyncTestFixture _fixture; @@ -17,7 +18,7 @@ public TickerQSchedulerRequestAsyncTests(TickerQRequestAsyncTestFixture tickerQT #region Scheduler - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -25,64 +26,64 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_send_request_with_a_timespan_asc() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Send, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -90,64 +91,64 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_publish_request_with_a_timespan() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Publish, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_datetimeoffset_async() { var req = new MyEvent(); @@ -155,122 +156,122 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(1))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEqual(Message.Empty, _fixture.Outbox.Get(req.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } - [Fact] + [Test] public async Task When_scheduler_post_request_with_a_timespan_async() { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, RequestSchedulerType.Post, TimeSpan.FromSeconds(1)); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.Empty(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey) ?? []).IsEmpty(); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.NotEmpty(_fixture.InternalBus.Stream(_fixture.RoutingKey)); + await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - Assert.NotEqual(Message.Empty, _fixture.Outbox.Get(req.Id, new RequestContext())); + await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion #region Rescheduler - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, type, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); await scheduler.ReSchedulerAsync(id, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(5))); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(5)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_reschedule_send_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(2)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.ReSchedulerAsync(id, TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(2)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await Task.Delay(TimeSpan.FromSeconds(5)); - Assert.Contains(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion #region Cancel - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSchedulerType type) { var req = new MyEvent(); @@ -278,65 +279,65 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch var id = await scheduler.ScheduleAsync(req, type, _fixture.TimeProvider.GetUtcNow().Add(TimeSpan.FromSeconds(2))); - Assert.True((id)?.Any()); + await Assert.That((id)?.Any()).IsTrue(); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(3)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - [Theory] - [InlineData(RequestSchedulerType.Send)] - [InlineData(RequestSchedulerType.Post)] - [InlineData(RequestSchedulerType.Publish)] + [Test] + [Arguments(RequestSchedulerType.Send)] + [Arguments(RequestSchedulerType.Post)] + [Arguments(RequestSchedulerType.Publish)] public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSchedulerType type) { var req = new MyEvent(); var scheduler = _fixture.SchedulerFactory.CreateAsync(_fixture.Processor); var id = await scheduler.ScheduleAsync(req, type, TimeSpan.FromSeconds(2)); - Assert.True((id)?.Any()); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That((id)?.Any()).IsTrue(); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); await scheduler.CancelAsync(id); await Task.Delay(TimeSpan.FromSeconds(3)); - Assert.DoesNotContain(nameof(MyEventHandlerAsync), _fixture.ReceivedMessages); + await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); - Assert.Equivalent(expected.Body, actual.Body); - Assert.Equal(expected.Id, actual.Id); - Assert.Equal(expected.Persist, actual.Persist); - Assert.Equal(expected.Redelivered, actual.Redelivered); - Assert.Equal(expected.DeliveryTag, actual.DeliveryTag); - Assert.Equal(expected.Header.MessageType, actual.Header.MessageType); - Assert.Equal(expected.Header.Topic, actual.Header.Topic); - Assert.Equal(expected.Header.TimeStamp, actual.Header.TimeStamp, TimeSpan.FromSeconds(1)); - Assert.Equal(expected.Header.CorrelationId, actual.Header.CorrelationId); - Assert.Equal(expected.Header.ReplyTo, actual.Header.ReplyTo); - Assert.Equal(expected.Header.ContentType, actual.Header.ContentType); - Assert.Equal(expected.Header.HandledCount, actual.Header.HandledCount); + await Assert.That(actual.Body).IsEquivalentTo(expected.Body); + await Assert.That(actual.Id).IsEqualTo(expected.Id); + await Assert.That(actual.Persist).IsEqualTo(expected.Persist); + await Assert.That(actual.Redelivered).IsEqualTo(expected.Redelivered); + await Assert.That(actual.DeliveryTag).IsEqualTo(expected.DeliveryTag); + await Assert.That(actual.Header.MessageType).IsEqualTo(expected.Header.MessageType); + await Assert.That(actual.Header.Topic).IsEqualTo(expected.Header.Topic); + await Assert.That(actual.Header.TimeStamp).IsEqualTo(expected.Header.TimeStamp).Within(TimeSpan.FromSeconds(1)); + await Assert.That(actual.Header.CorrelationId).IsEqualTo(expected.Header.CorrelationId); + await Assert.That(actual.Header.ReplyTo).IsEqualTo(expected.Header.ReplyTo); + await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); + await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } #endregion diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs index b18ed034c7..ae4bc7ec79 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs @@ -1,17 +1,16 @@ -using System; +using System; using System.Net; using System.Text.Json; using System.Text.Json.Nodes; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Transformers.JustSaying; -using Xunit; namespace Paramore.Brighter.Transforms.Adaptors.Tests.JustSaying; public class JustSayingMessageMapperTest { - [Fact] - public void MapToMessage_when_mapping_a_justsaying_command_property_should_not_be_override() + [Test] + public async Task MapToMessage_when_mapping_a_justsaying_command_property_should_not_be_override() { var mapper = new JustSayingMessageMapper(); var command = new SomeJustSayingCommand @@ -28,19 +27,19 @@ public void MapToMessage_when_mapping_a_justsaying_command_property_should_not_b var message = mapper.MapToMessage(command, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.Equal(command.Id, obj.Id); - Assert.Equal(command.Conversation, obj.Conversation); - Assert.Equal(command.RaisingComponent, obj.RaisingComponent); - Assert.Equal(command.Tenant, obj.Tenant); - Assert.Equal(command.Version, obj.Version); - Assert.Equal(command.TimeStamp, obj.TimeStamp); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj).IsNotNull(); + await Assert.That(obj.Id).IsEqualTo(command.Id); + await Assert.That(obj.Conversation).IsEqualTo(command.Conversation); + await Assert.That(obj.RaisingComponent).IsEqualTo(command.RaisingComponent); + await Assert.That(obj.Tenant).IsEqualTo(command.Tenant); + await Assert.That(obj.Version).IsEqualTo(command.Version); + await Assert.That(obj.TimeStamp).IsEqualTo(command.TimeStamp); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void MapToMessage_when_mapping_a_justsaying_event_property_should_not_be_override() + [Test] + public async Task MapToMessage_when_mapping_a_justsaying_event_property_should_not_be_override() { var mapper = new JustSayingMessageMapper(); var @event = new SomeJustSayingEvent @@ -58,20 +57,20 @@ public void MapToMessage_when_mapping_a_justsaying_event_property_should_not_be_ var message = mapper.MapToMessage(@event, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.Equal(@event.Id, obj.Id); - Assert.Equal(@event.Conversation, obj.Conversation); - Assert.Equal(@event.RaisingComponent, obj.RaisingComponent); - Assert.Equal(@event.Tenant, obj.Tenant); - Assert.Equal(@event.Version, obj.Version); - Assert.Equal(@event.TimeStamp, obj.TimeStamp); - Assert.Equal(@event.Name, obj.Name); - Assert.Equal(IPAddress.Loopback, obj.SourceIp); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); + await Assert.That(obj).IsNotNull(); + await Assert.That(obj.Id).IsEqualTo(@event.Id); + await Assert.That(obj.Conversation).IsEqualTo(@event.Conversation); + await Assert.That(obj.RaisingComponent).IsEqualTo(@event.RaisingComponent); + await Assert.That(obj.Tenant).IsEqualTo(@event.Tenant); + await Assert.That(obj.Version).IsEqualTo(@event.Version); + await Assert.That(obj.TimeStamp).IsEqualTo(@event.TimeStamp); + await Assert.That(obj.Name).IsEqualTo(@event.Name); + await Assert.That(obj.SourceIp).IsEqualTo(IPAddress.Loopback); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] - public void MapToMessage_when_mapping_a_command_property_should_not_be_override() + [Test] + public async Task MapToMessage_when_mapping_a_command_property_should_not_be_override() { var mapper = new JustSayingMessageMapper(); var command = new WithJustSayingProperty @@ -88,19 +87,19 @@ public void MapToMessage_when_mapping_a_command_property_should_not_be_override( var message = mapper.MapToMessage(command, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.Equal(command.Id, obj.Id); - Assert.Equal(command.Conversation, obj.Conversation); - Assert.Equal(command.RaisingComponent, obj.RaisingComponent); - Assert.Equal(command.Tenant, obj.Tenant); - Assert.Equal(command.Version, obj.Version); - Assert.Equal(command.TimeStamp, obj.TimeStamp); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj).IsNotNull(); + await Assert.That(obj.Id).IsEqualTo(command.Id); + await Assert.That(obj.Conversation).IsEqualTo(command.Conversation); + await Assert.That(obj.RaisingComponent).IsEqualTo(command.RaisingComponent); + await Assert.That(obj.Tenant).IsEqualTo(command.Tenant); + await Assert.That(obj.Version).IsEqualTo(command.Version); + await Assert.That(obj.TimeStamp).IsEqualTo(command.TimeStamp); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void MapToMessage_when_mapping_a_justsaying_command_property_should_set_from_request_context() + [Test] + public async Task MapToMessage_when_mapping_a_justsaying_command_property_should_set_from_request_context() { var mapper = new JustSayingMessageMapper(); var command = new SomeJustSayingCommand @@ -126,24 +125,24 @@ public void MapToMessage_when_mapping_a_justsaying_command_property_should_set_f }; var message = mapper.MapToMessage(command, new Publication()); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.False(Id.IsNullOrEmpty(obj.Id)); - Assert.NotNull(obj.Conversation); - Assert.False(Id.IsNullOrEmpty(obj.Conversation)); - Assert.NotEqual(DateTimeOffset.MinValue, obj.TimeStamp); + await Assert.That(obj).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Id)).IsFalse(); + await Assert.That(obj.Conversation).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Conversation)).IsFalse(); + await Assert.That(obj.TimeStamp).IsNotEqualTo(DateTimeOffset.MinValue); - Assert.Equal(raisingComponent, obj.RaisingComponent); - Assert.Equal(tenant, obj.Tenant); - Assert.Equal(version, obj.Version); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj.RaisingComponent).IsEqualTo(raisingComponent); + await Assert.That(obj.Tenant).IsEqualTo(tenant); + await Assert.That(obj.Version).IsEqualTo(version); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void MapToMessage_when_mapping_a_request_command_property_should_set_from_request_context() + [Test] + public async Task MapToMessage_when_mapping_a_request_command_property_should_set_from_request_context() { var mapper = new JustSayingMessageMapper(); var command = new WithJustSayingProperty @@ -169,24 +168,24 @@ public void MapToMessage_when_mapping_a_request_command_property_should_set_from }; var message = mapper.MapToMessage(command, new Publication()); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.False(Id.IsNullOrEmpty(obj.Id)); - Assert.NotNull(obj.Conversation); - Assert.NotEmpty(obj.Conversation); - Assert.NotEqual(DateTimeOffset.MinValue, obj.TimeStamp); + await Assert.That(obj).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Id)).IsFalse(); + await Assert.That(obj.Conversation).IsNotNull(); + await Assert.That(obj.Conversation).IsNotEmpty(); + await Assert.That(obj.TimeStamp).IsNotEqualTo(DateTimeOffset.MinValue); - Assert.Equal(raisingComponent, obj.RaisingComponent); - Assert.Equal(tenant, obj.Tenant); - Assert.Equal(version, obj.Version); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj.RaisingComponent).IsEqualTo(raisingComponent); + await Assert.That(obj.Tenant).IsEqualTo(tenant); + await Assert.That(obj.Version).IsEqualTo(version); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void MapToMessage_when_mapping_a_command_with_partial_justsaying_property_should_set_from_request_context() + [Test] + public async Task MapToMessage_when_mapping_a_command_with_partial_justsaying_property_should_set_from_request_context() { var mapper = new JustSayingMessageMapper(); var command = new WithPartialJustSayingProperty @@ -212,33 +211,33 @@ public void MapToMessage_when_mapping_a_command_with_partial_justsaying_property }; var message = mapper.MapToMessage(command, new Publication()); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.False(Id.IsNullOrEmpty(obj.Id)); - Assert.NotEqual(DateTimeOffset.MinValue, obj.TimeStamp); - Assert.Equal(tenant, obj.Tenant); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Id)).IsFalse(); + await Assert.That(obj.TimeStamp).IsNotEqualTo(DateTimeOffset.MinValue); + await Assert.That(obj.Tenant).IsEqualTo(tenant); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); var doc = JsonNode.Parse(message.Body.Bytes, new JsonNodeOptions{ PropertyNameCaseInsensitive = true}); - Assert.NotNull(doc); + await Assert.That(doc).IsNotNull(); var nodeConversation = doc[nameof(IJustSayingRequest.Conversation)]?.GetValue(); - Assert.NotNull(nodeConversation); - Assert.NotEmpty(nodeConversation); + await Assert.That(nodeConversation).IsNotNull(); + await Assert.That(nodeConversation).IsNotEmpty(); var nodeRaisingComponent = doc[nameof(IJustSayingRequest.RaisingComponent)]?.GetValue(); - Assert.Equal(raisingComponent, nodeRaisingComponent); + await Assert.That(nodeRaisingComponent).IsEqualTo(raisingComponent); var nodeVersion = doc[nameof(IJustSayingRequest.Version)]?.GetValue(); - Assert.Equal(version, nodeVersion); + await Assert.That(nodeVersion).IsEqualTo(version); } - [Fact] - public void MapToMessage_when_mapping_a_command_with_non_justsaying_property_should_set_from_request_context() + [Test] + public async Task MapToMessage_when_mapping_a_command_with_non_justsaying_property_should_set_from_request_context() { var mapper = new JustSayingMessageMapper(); var command = new NonJustSayingProperty @@ -264,37 +263,37 @@ public void MapToMessage_when_mapping_a_command_with_non_justsaying_property_sho }; var message = mapper.MapToMessage(command, new Publication()); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.False(Id.IsNullOrEmpty(obj.Id)); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Id)).IsFalse(); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); var doc = JsonNode.Parse(message.Body.Bytes, new JsonNodeOptions{ PropertyNameCaseInsensitive = true}); - Assert.NotNull(doc); + await Assert.That(doc).IsNotNull(); var nodeTimeStamp = doc[nameof(IJustSayingRequest.TimeStamp)]?.GetValue(); - Assert.NotNull(nodeTimeStamp); - Assert.NotEmpty(nodeTimeStamp); + await Assert.That(nodeTimeStamp).IsNotNull(); + await Assert.That(nodeTimeStamp).IsNotEmpty(); var nodeConversation = doc[nameof(IJustSayingRequest.Conversation)]?.GetValue(); - Assert.NotNull(nodeConversation); - Assert.NotEmpty(nodeConversation); + await Assert.That(nodeConversation).IsNotNull(); + await Assert.That(nodeConversation).IsNotEmpty(); var nodeTenant = doc[nameof(IJustSayingRequest.Tenant)]?.GetValue(); - Assert.Equal(tenant, nodeTenant); + await Assert.That(nodeTenant).IsEqualTo(tenant); var nodeRaisingComponent = doc[nameof(IJustSayingRequest.RaisingComponent)]?.GetValue(); - Assert.Equal(raisingComponent, nodeRaisingComponent); + await Assert.That(nodeRaisingComponent).IsEqualTo(raisingComponent); var nodeVersion = doc[nameof(IJustSayingRequest.Version)]?.GetValue(); - Assert.Equal(version, nodeVersion); + await Assert.That(nodeVersion).IsEqualTo(version); } - [Fact] - public void MapToMessage_when_mapping_a_request_command_property_should_set_from_publication() + [Test] + public async Task MapToMessage_when_mapping_a_request_command_property_should_set_from_publication() { var mapper = new JustSayingMessageMapper(); var command = new WithJustSayingProperty @@ -312,18 +311,18 @@ public void MapToMessage_when_mapping_a_request_command_property_should_set_from Source = source }); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(obj); - Assert.False(Id.IsNullOrEmpty(obj.Id)); - Assert.NotNull(obj.Conversation); - Assert.NotEmpty(obj.Conversation); - Assert.NotEqual(DateTimeOffset.MinValue, obj.TimeStamp); + await Assert.That(obj).IsNotNull(); + await Assert.That(Id.IsNullOrEmpty(obj.Id)).IsFalse(); + await Assert.That(obj.Conversation).IsNotNull(); + await Assert.That(obj.Conversation).IsNotEmpty(); + await Assert.That(obj.TimeStamp).IsNotEqualTo(DateTimeOffset.MinValue); - Assert.Equal(source.ToString(), obj.RaisingComponent); - Assert.Equal(command.Name, obj.Name); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(obj.RaisingComponent).IsEqualTo(source.ToString()); + await Assert.That(obj.Name).IsEqualTo(command.Name); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } public class SomeJustSayingCommand : JustSayingCommand diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingTransformTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingTransformTest.cs index 0e54933d13..e480fb2795 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingTransformTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingTransformTest.cs @@ -1,8 +1,7 @@ -using System; +using System; using System.Text.Json; using System.Text.Json.Nodes; using Paramore.Brighter.Transformers.JustSaying; -using Xunit; namespace Paramore.Brighter.Transforms.Adaptors.Tests.JustSaying; @@ -10,8 +9,8 @@ public class JustSayingTransformTest { private readonly JustSayingTransform _transform = new(); - [Fact] - public void wrap_should_set_properties_when_it_missing() + [Test] + public async Task wrap_should_set_properties_when_it_missing() { var raisingComponent = $"RaisingComponent{Guid.NewGuid()}"; var version = $"Version{Guid.NewGuid()}"; @@ -34,28 +33,28 @@ public void wrap_should_set_properties_when_it_missing() new JsonNodeOptions { PropertyNameCaseInsensitive = true }, new JsonDocumentOptions { MaxDepth = 0 }); - Assert.Equal(subject, message.Header.Subject); + await Assert.That(message.Header.Subject).IsEqualTo(subject); - Assert.NotNull(node); + await Assert.That(node).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.Id)]); - Assert.NotNull(node[nameof(IJustSayingRequest.TimeStamp)]); + await Assert.That(node[nameof(IJustSayingRequest.Id)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.TimeStamp)]).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.RaisingComponent)]); - Assert.Equal(raisingComponent, node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()).IsEqualTo(raisingComponent); - Assert.NotNull(node[nameof(IJustSayingRequest.Version)]); - Assert.Equal(version, node[nameof(IJustSayingRequest.Version)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Version)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Version)]!.GetValue()).IsEqualTo(version); - Assert.NotNull(node[nameof(IJustSayingRequest.Tenant)]); - Assert.Equal(tenant, node[nameof(IJustSayingRequest.Tenant)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]!.GetValue()).IsEqualTo(tenant); - Assert.NotNull(node[nameof(IJustSayingRequest.Conversation)]); - Assert.Equal(correlationId, node[nameof(IJustSayingRequest.Conversation)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Conversation)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Conversation)]!.GetValue()).IsEqualTo(correlationId); } - [Fact] - public void wrap_should_set_properties_from_request_context_when_it_missing() + [Test] + public async Task wrap_should_set_properties_from_request_context_when_it_missing() { var raisingComponent = $"RaisingComponent{Guid.NewGuid()}"; var version = $"Version{Guid.NewGuid()}"; @@ -84,25 +83,25 @@ public void wrap_should_set_properties_from_request_context_when_it_missing() new JsonDocumentOptions { MaxDepth = 0 }); - Assert.NotNull(node); + await Assert.That(node).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.Id)]); - Assert.NotNull(node[nameof(IJustSayingRequest.Conversation)]); - Assert.NotNull(node[nameof(IJustSayingRequest.TimeStamp)]); + await Assert.That(node[nameof(IJustSayingRequest.Id)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Conversation)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.TimeStamp)]).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.RaisingComponent)]); - Assert.Equal(raisingComponent, node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()).IsEqualTo(raisingComponent); - Assert.NotNull(node[nameof(IJustSayingRequest.Version)]); - Assert.Equal(version, node[nameof(IJustSayingRequest.Version)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Version)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Version)]!.GetValue()).IsEqualTo(version); - Assert.NotNull(node[nameof(IJustSayingRequest.Tenant)]); - Assert.Equal(tenant, node[nameof(IJustSayingRequest.Tenant)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]!.GetValue()).IsEqualTo(tenant); } - [Fact] - public void wrap_should_not_override_properties_when_it_is_in_payload() + [Test] + public async Task wrap_should_not_override_properties_when_it_is_in_payload() { var raisingComponent = $"RaisingComponent{Guid.NewGuid()}"; var version = $"Version{Guid.NewGuid()}"; @@ -133,20 +132,20 @@ public void wrap_should_not_override_properties_when_it_is_in_payload() new JsonNodeOptions { PropertyNameCaseInsensitive = true }, new JsonDocumentOptions { MaxDepth = 0 }); - Assert.NotNull(node); + await Assert.That(node).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.Id)]); - Assert.NotNull(node[nameof(IJustSayingRequest.Conversation)]); - Assert.NotNull(node[nameof(IJustSayingRequest.TimeStamp)]); + await Assert.That(node[nameof(IJustSayingRequest.Id)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Conversation)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.TimeStamp)]).IsNotNull(); - Assert.NotNull(node[nameof(IJustSayingRequest.RaisingComponent)]); - Assert.NotEqual(raisingComponent, node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.RaisingComponent)]!.GetValue()).IsNotEqualTo(raisingComponent); - Assert.NotNull(node[nameof(IJustSayingRequest.Version)]); - Assert.NotEqual(version, node[nameof(IJustSayingRequest.Version)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Version)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Version)]!.GetValue()).IsNotEqualTo(version); - Assert.NotNull(node[nameof(IJustSayingRequest.Tenant)]); - Assert.NotEqual(tenant, node[nameof(IJustSayingRequest.Tenant)]!.GetValue()); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]).IsNotNull(); + await Assert.That(node[nameof(IJustSayingRequest.Tenant)]!.GetValue()).IsNotEqualTo(tenant); } } diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs index de189ba4bc..236d255378 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Text.Json; using System.Threading.Tasks; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Transformers.MassTransit; -using Xunit; namespace Paramore.Brighter.Transforms.Adaptors.Tests.MassTransit; @@ -16,41 +15,41 @@ public class MassTransitMessageMapperTests Source = new Uri("http://source") }; - [Fact] - public void MapToMessage_CommandType_SetsMT_COMMAND() + [Test] + public async Task MapToMessage_CommandType_SetsMT_COMMAND() { var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestCommand(); var message = mapper.MapToMessage(request, _publication); - Assert.Equal(MessageType.MT_COMMAND, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } - [Fact] - public void MapToMessage_EventType_SetsMT_EVENT() + [Test] + public async Task MapToMessage_EventType_SetsMT_EVENT() { var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestEvent(); var message = mapper.MapToMessage(request, _publication); - Assert.Equal(MessageType.MT_EVENT, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } - [Fact] - public void MapToMessage_OtherType_SetsMT_DOCUMENT() + [Test] + public async Task MapToMessage_OtherType_SetsMT_DOCUMENT() { var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); var message = mapper.MapToMessage(request, _publication); - Assert.Equal(MessageType.MT_DOCUMENT, message.Header.MessageType); + await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_DOCUMENT); } - [Fact] - public void MapToMessage_ContextHasCorrelationId_UsesIt() + [Test] + public async Task MapToMessage_ContextHasCorrelationId_UsesIt() { const string correlationId = "test-correlation"; _context.Bag[MassTransitHeaderNames.CorrelationId] = correlationId; @@ -60,22 +59,22 @@ public void MapToMessage_ContextHasCorrelationId_UsesIt() var request = new TestOtherRequest(); var message = mapper.MapToMessage(request, _publication); - Assert.Equal(correlationId, message.Header.CorrelationId); + await Assert.That(message.Header.CorrelationId).IsEqualTo(correlationId); } - [Fact] - public void MapToMessage_NoCorrelationIdInContext_GeneratesNew() + [Test] + public async Task MapToMessage_NoCorrelationIdInContext_GeneratesNew() { var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); var message = mapper.MapToMessage(request, _publication); - Assert.NotEqual(Guid.Empty.ToString(), message.Header.CorrelationId.Value); + await Assert.That(message.Header.CorrelationId.Value).IsNotEqualTo(Guid.Empty.ToString()); } - [Fact] - public void MapToRequest_DeserializesEnvelopeCorrectly() + [Test] + public async Task MapToRequest_DeserializesEnvelopeCorrectly() { var expectedId = Guid.NewGuid().ToString(); var envelope = new MassTransitMessageEnvelop @@ -101,11 +100,11 @@ public void MapToRequest_DeserializesEnvelopeCorrectly() var mapper = new MassTransitMessageMapper(); var result = mapper.MapToRequest(message); - Assert.Equal(expectedId, result.Id); + await Assert.That(result.Id).IsEqualTo(expectedId); } - [Fact] - public void MapToMessage_EnvelopeContainsConversationIdFromContext() + [Test] + public async Task MapToMessage_EnvelopeContainsConversationIdFromContext() { const string conversationId = "conv123"; _context.Bag[MassTransitHeaderNames.ConversationId] = conversationId; @@ -117,10 +116,10 @@ public void MapToMessage_EnvelopeContainsConversationIdFromContext() var envelope = JsonSerializer.Deserialize>(message.Body.Bytes, JsonSerialisationOptions.Options); - Assert.Equal(conversationId, envelope?.ConversationId?.Value); + await Assert.That(envelope?.ConversationId?.Value).IsEqualTo(conversationId); } - [Fact] + [Test] public async Task MapToMessageAsync_CallsMapToMessage() { var mapper = new MassTransitMessageMapper(); @@ -128,10 +127,10 @@ public async Task MapToMessageAsync_CallsMapToMessage() var message = await mapper.MapToMessageAsync(request, _publication); - Assert.NotNull(message); + await Assert.That(message).IsNotNull(); } - [Fact] + [Test] public async Task MapToRequestAsync_CallsMapToRequest() { var expectedId = Id.Random(); @@ -159,7 +158,7 @@ public async Task MapToRequestAsync_CallsMapToRequest() var mapper = new MassTransitMessageMapper(); var result = await mapper.MapToRequestAsync(message); - Assert.Equal(expectedId, result.Id); + await Assert.That(result.Id).IsEqualTo(expectedId); } } diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitTransformTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitTransformTest.cs index 2bf0a29f4d..89cecb027c 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitTransformTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitTransformTest.cs @@ -1,9 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Text.Json; using Paramore.Brighter.JsonConverters; using Paramore.Brighter.Transformers.MassTransit; -using Xunit; namespace Paramore.Brighter.Transforms.Adaptors.Tests.MassTransit; @@ -11,8 +10,8 @@ public class MassTransitTransformTest { private readonly MassTransitTransform _transform = new(); - [Fact] - public void wrap_should_use_default_value() + [Test] + public async Task wrap_should_use_default_value() { var message = new Message( new MessageHeader @@ -28,22 +27,22 @@ public void wrap_should_use_default_value() var envelop = JsonSerializer.Deserialize>(wrap.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(envelop); - Assert.Null(envelop.ConversationId); - Assert.Null(envelop.DestinationAddress); - Assert.Null(envelop.FaultAddress); - Assert.Null(envelop.MessageType); - Assert.Null(envelop.RequestId); - Assert.Null(envelop.ResponseAddress); - Assert.Null(envelop.SourceAddress); - Assert.Null(envelop.ExpirationTime); - Assert.Equal(message.Header.MessageId, envelop.MessageId); - Assert.Equal(message.Header.CorrelationId, envelop.CorrelationId); - Assert.Equal(message.Header.TimeStamp.DateTime, envelop.SentTime); + await Assert.That(envelop).IsNotNull(); + await Assert.That(envelop.ConversationId).IsNull(); + await Assert.That(envelop.DestinationAddress).IsNull(); + await Assert.That(envelop.FaultAddress).IsNull(); + await Assert.That(envelop.MessageType).IsNull(); + await Assert.That(envelop.RequestId).IsNull(); + await Assert.That(envelop.ResponseAddress).IsNull(); + await Assert.That(envelop.SourceAddress).IsNull(); + await Assert.That(envelop.ExpirationTime).IsNull(); + await Assert.That(envelop.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(envelop.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(envelop.SentTime).IsEqualTo(message.Header.TimeStamp.DateTime); } - [Fact] - public void wrap_should_use_from_request_context() + [Test] + public async Task wrap_should_use_from_request_context() { var message = new Message( new MessageHeader @@ -85,22 +84,22 @@ public void wrap_should_use_from_request_context() var envelop = JsonSerializer.Deserialize>(wrap.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(envelop); - Assert.Equal(conversationId, envelop.ConversationId?.Value); - Assert.Equal(destinationAddress, envelop.DestinationAddress?.ToString()); - Assert.Equal(faultAddress, envelop.FaultAddress?.ToString()); - Assert.Equal(messageType, envelop.MessageType); - Assert.Equal(requestId, envelop.RequestId?.Value); - Assert.Equal(responseAddress, envelop.ResponseAddress?.ToString()); - Assert.Equal(sourceAddress, envelop.SourceAddress?.ToString()); - Assert.Equal(expirationTime, envelop.ExpirationTime); - Assert.Equal(message.Header.MessageId, envelop.MessageId); - Assert.Equal(message.Header.CorrelationId, envelop.CorrelationId); - Assert.Equal(message.Header.TimeStamp.DateTime, envelop.SentTime); + await Assert.That(envelop).IsNotNull(); + await Assert.That(envelop.ConversationId?.Value).IsEqualTo(conversationId); + await Assert.That(envelop.DestinationAddress?.ToString()).IsEqualTo(destinationAddress); + await Assert.That(envelop.FaultAddress?.ToString()).IsEqualTo(faultAddress); + await Assert.That(envelop.MessageType).IsEqualTo(messageType); + await Assert.That(envelop.RequestId?.Value).IsEqualTo(requestId); + await Assert.That(envelop.ResponseAddress?.ToString()).IsEqualTo(responseAddress); + await Assert.That(envelop.SourceAddress?.ToString()).IsEqualTo(sourceAddress); + await Assert.That(envelop.ExpirationTime).IsEqualTo(expirationTime); + await Assert.That(envelop.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(envelop.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(envelop.SentTime).IsEqualTo(message.Header.TimeStamp.DateTime); } - [Fact] - public void wrap_should_use_from_transform() + [Test] + public async Task wrap_should_use_from_transform() { var message = new Message( new MessageHeader @@ -139,22 +138,22 @@ public void wrap_should_use_from_transform() var envelop = JsonSerializer.Deserialize>(wrap.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(envelop); - Assert.Equal(conversationId, envelop.ConversationId?.Value); - Assert.Equal(destinationAddress, envelop.DestinationAddress?.ToString()); - Assert.Equal(faultAddress, envelop.FaultAddress?.ToString()); - Assert.Equal(messageType, envelop.MessageType); - Assert.Equal(requestId, envelop.RequestId?.Value); - Assert.Equal(responseAddress, envelop.ResponseAddress?.ToString()); - Assert.Equal(sourceAddress, envelop.SourceAddress?.ToString()); - Assert.Equal(expirationTime, envelop.ExpirationTime); - Assert.Equal(message.Header.MessageId, envelop.MessageId); - Assert.Equal(message.Header.CorrelationId, envelop.CorrelationId); - Assert.Equal(message.Header.TimeStamp.DateTime, envelop.SentTime); + await Assert.That(envelop).IsNotNull(); + await Assert.That(envelop.ConversationId?.Value).IsEqualTo(conversationId); + await Assert.That(envelop.DestinationAddress?.ToString()).IsEqualTo(destinationAddress); + await Assert.That(envelop.FaultAddress?.ToString()).IsEqualTo(faultAddress); + await Assert.That(envelop.MessageType).IsEqualTo(messageType); + await Assert.That(envelop.RequestId?.Value).IsEqualTo(requestId); + await Assert.That(envelop.ResponseAddress?.ToString()).IsEqualTo(responseAddress); + await Assert.That(envelop.SourceAddress?.ToString()).IsEqualTo(sourceAddress); + await Assert.That(envelop.ExpirationTime).IsEqualTo(expirationTime); + await Assert.That(envelop.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(envelop.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(envelop.SentTime).IsEqualTo(message.Header.TimeStamp.DateTime); } - [Fact] - public void unwrap() + [Test] + public async Task unwrap() { var message = new Message( new MessageHeader @@ -197,19 +196,19 @@ public void unwrap() var envelop = JsonSerializer.Deserialize>(wrap.Body.Bytes, JsonSerialisationOptions.Options); - Assert.NotNull(envelop); - Assert.Equal(conversationId, envelop.ConversationId?.Value); - Assert.Equal(destinationAddress, envelop.DestinationAddress?.ToString()); - Assert.Equal(faultAddress, envelop.FaultAddress?.ToString()); - Assert.Equal(messageType, envelop.MessageType); - Assert.Equal(requestId, envelop.RequestId?.Value); - Assert.Equal(responseAddress, envelop.ResponseAddress?.ToString()); - Assert.Equal(sourceAddress, envelop.SourceAddress?.ToString()); - Assert.Equal(expirationTime, envelop.ExpirationTime); - Assert.Equal(message.Header.MessageId, envelop.MessageId); - Assert.Equal(message.Header.CorrelationId, envelop.CorrelationId); - Assert.Equal(message.Header.TimeStamp.DateTime, envelop.SentTime); - Assert.Single(message.Header.Bag); + await Assert.That(envelop).IsNotNull(); + await Assert.That(envelop.ConversationId?.Value).IsEqualTo(conversationId); + await Assert.That(envelop.DestinationAddress?.ToString()).IsEqualTo(destinationAddress); + await Assert.That(envelop.FaultAddress?.ToString()).IsEqualTo(faultAddress); + await Assert.That(envelop.MessageType).IsEqualTo(messageType); + await Assert.That(envelop.RequestId?.Value).IsEqualTo(requestId); + await Assert.That(envelop.ResponseAddress?.ToString()).IsEqualTo(responseAddress); + await Assert.That(envelop.SourceAddress?.ToString()).IsEqualTo(sourceAddress); + await Assert.That(envelop.ExpirationTime).IsEqualTo(expirationTime); + await Assert.That(envelop.MessageId).IsEqualTo(message.Header.MessageId); + await Assert.That(envelop.CorrelationId).IsEqualTo(message.Header.CorrelationId); + await Assert.That(envelop.SentTime).IsEqualTo(message.Header.TimeStamp.DateTime); + await Assert.That(message.Header.Bag).HasSingleItem(); } public class SomeEvent() : Event(Guid.NewGuid()) diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj index aa1580ee96..9802b8d879 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj @@ -1,30 +1,15 @@ - - - - $(BrighterTestTargetFrameworks) - false - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + + + $(BrighterTestTargetFrameworks) + false + Exe + + + + + + + + + + \ No newline at end of file diff --git a/tests/Paramore.Test.Helpers/Base/ITestClassBase.cs b/tests/Paramore.Test.Helpers/Base/ITestClassBase.cs index 3f0f63c6db..2f6ab9d0c2 100644 --- a/tests/Paramore.Test.Helpers/Base/ITestClassBase.cs +++ b/tests/Paramore.Test.Helpers/Base/ITestClassBase.cs @@ -1,6 +1,5 @@ -using System; +using System; using Paramore.Test.Helpers.TestOutput; -using Xunit.Abstractions; namespace Paramore.Test.Helpers.Base { @@ -26,19 +25,6 @@ public interface ITestClassBase : IDisposable /// IServiceProvider ServiceProvider { get; } - /// - /// Gets the current xUnit test instance associated with the test execution. - /// - /// - /// An instance of representing the current test, - /// or null if no test is associated. - /// - /// - /// This property provides access to the xUnit test metadata, such as the test's display name - /// and other related information. It may return null if the test context is not initialized. - /// - ITest? XunitTest { get; } - /// /// Gets the fully qualified name of the test, including its namespace and class name. /// This property is useful for uniquely identifying a test within the test suite. diff --git a/tests/Paramore.Test.Helpers/Base/TestClassBase.cs b/tests/Paramore.Test.Helpers/Base/TestClassBase.cs index 3c0b154ddc..e34857d295 100644 --- a/tests/Paramore.Test.Helpers/Base/TestClassBase.cs +++ b/tests/Paramore.Test.Helpers/Base/TestClassBase.cs @@ -1,17 +1,13 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Reflection; +using System; using Microsoft.Extensions.DependencyInjection; using Paramore.Test.Helpers.Extensions; using Paramore.Test.Helpers.TestOutput; -using Xunit.Abstractions; namespace Paramore.Test.Helpers.Base { /// /// Serves as a base class for test classes in the AOT test suite. /// This abstract class provides shared setup and utility functionality for derived test classes. - /// Implements the interface to support shared test context. /// /// /// The type parameter representing the specific test class deriving from this base class. @@ -23,16 +19,11 @@ public abstract class TestClassBase : ITestClassBase /// /// Initializes a new instance of the class. - /// This constructor is used to set up the shared test context and output helper for derived test classes. + /// This constructor sets up the shared test context and output helper for derived test classes. /// - /// - /// An instance of used to capture test output during execution. - /// - protected TestClassBase(ITestOutputHelper testOutputHelper) + protected TestClassBase() { - ArgumentNullException.ThrowIfNull(testOutputHelper); - - TestOutputHelper = new CoreTestOutputHelper(this, testOutputHelper); + TestOutputHelper = new CoreTestOutputHelper(this, Console.Out); _serviceProviderLazy = new Lazy(() => BuildServiceProvider(new ServiceCollection(), TestOutputHelper)); } @@ -43,10 +34,7 @@ protected TestClassBase(ITestOutputHelper testOutputHelper) public ICoreTestOutputHelper TestOutputHelper { get; } /// - public ITest? XunitTest => (ITest?)GetTestField(TestOutputHelper.WrappedTestOutputHelper)?.GetValue(TestOutputHelper.WrappedTestOutputHelper); - - /// - public string TestQualifiedName => XunitTest?.DisplayName ?? typeof(T).GetLoggerCategoryName(); + public string TestQualifiedName => typeof(T).GetLoggerCategoryName(); /// public string TestDisplayName => TestQualifiedName.RemoveNamespace(); @@ -59,10 +47,6 @@ protected virtual IServiceProvider BuildServiceProvider(IServiceCollection servi /// /// Releases all resources used by the instance. /// - /// - /// This method is responsible for performing cleanup operations for the current instance of the class. - /// It ensures that any unmanaged resources are released and any disposable objects are properly disposed. - /// protected virtual void Dispose(bool disposing) { if (!_disposedValue) @@ -83,27 +67,5 @@ public void Dispose() Dispose(disposing: true); GC.SuppressFinalize(this); } - - /// - /// Retrieves the private field named 'test' from the specified instance. - /// - /// - /// An instance of from which the private field is to be retrieved. - /// - /// - /// A object representing the 'test' field if it exists; otherwise, null. - /// - /// - /// This method uses reflection to access a private field named 'test' within the provided - /// instance. The field is expected to exist in the implementation. - /// - /// - /// Thrown if the parameter is null. - /// - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075", Justification = "The field 'test' is known to exist in the ITestOutputHelper implementation.")] - private static FieldInfo? GetTestField(ITestOutputHelper testOutputHelper) - { - return testOutputHelper.GetType().GetField("test", BindingFlags.Instance | BindingFlags.NonPublic); - } } } diff --git a/tests/Paramore.Test.Helpers/Paramore.Test.Helpers.csproj b/tests/Paramore.Test.Helpers/Paramore.Test.Helpers.csproj index ef403da8a9..6ab9ef480d 100644 --- a/tests/Paramore.Test.Helpers/Paramore.Test.Helpers.csproj +++ b/tests/Paramore.Test.Helpers/Paramore.Test.Helpers.csproj @@ -1,30 +1,17 @@ - - + $(BrighterTestTargetFrameworks) false + Exe - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + - - \ No newline at end of file diff --git a/tests/Paramore.Test.Helpers/TestOutput/CoreTestOutputHelper.cs b/tests/Paramore.Test.Helpers/TestOutput/CoreTestOutputHelper.cs index 15158a5c33..758a0dbd7d 100644 --- a/tests/Paramore.Test.Helpers/TestOutput/CoreTestOutputHelper.cs +++ b/tests/Paramore.Test.Helpers/TestOutput/CoreTestOutputHelper.cs @@ -1,15 +1,15 @@ -using System; +using System; using System.Globalization; +using System.IO; using System.Text; using System.Threading; using Paramore.Test.Helpers.Base; using Paramore.Test.Helpers.Extensions; -using Xunit.Abstractions; namespace Paramore.Test.Helpers.TestOutput { /// - /// Class CoreTestOutputHelper. Base class for all xUnit tests. + /// Class CoreTestOutputHelper. Provides test output capture and formatting. /// public class CoreTestOutputHelper : ICoreTestOutputHelper { @@ -21,17 +21,18 @@ public class CoreTestOutputHelper : ICoreTestOutputHelper /// /// Initializes a new instance of the class. /// - /// The test output helper instance. - public CoreTestOutputHelper(ITestClassBase testCase, ITestOutputHelper testOutputHelper) + /// The test case instance. + /// The used for test output. + public CoreTestOutputHelper(ITestClassBase testCase, TextWriter writer) { TestCase = testCase; - WrappedTestOutputHelper = testOutputHelper ?? throw new ArgumentNullException(nameof(testOutputHelper)); + WrappedTestOutputHelper = writer ?? throw new ArgumentNullException(nameof(writer)); } public ITestClassBase TestCase { get; } /// - public ITestOutputHelper WrappedTestOutputHelper { get; } + public TextWriter WrappedTestOutputHelper { get; } /// public DateTime DateTimeStart { get; } = DateTime.UtcNow; diff --git a/tests/Paramore.Test.Helpers/TestOutput/ICoreTestOutputHelper.cs b/tests/Paramore.Test.Helpers/TestOutput/ICoreTestOutputHelper.cs index 8736ad8aed..c1a5b30bab 100644 --- a/tests/Paramore.Test.Helpers/TestOutput/ICoreTestOutputHelper.cs +++ b/tests/Paramore.Test.Helpers/TestOutput/ICoreTestOutputHelper.cs @@ -1,10 +1,10 @@ -using System; +using System; +using System.IO; using Paramore.Test.Helpers.Base; -using Xunit.Abstractions; namespace Paramore.Test.Helpers.TestOutput { - public interface ICoreTestOutputHelper : ITestOutputHelper, IDisposable + public interface ICoreTestOutputHelper : IDisposable { /// /// Gets the test case associated with the current test output helper. @@ -17,9 +17,9 @@ public interface ICoreTestOutputHelper : ITestOutputHelper, IDisposable ITestClassBase TestCase { get; } /// - /// Gets the wrapped instance of used for test output handling. + /// Gets the wrapped used for test output handling. /// - ITestOutputHelper WrappedTestOutputHelper { get; } + TextWriter WrappedTestOutputHelper { get; } /// /// Gets the UTC date and time when the test output helper was initialized. From 7e8d1624b1927cdea7d6201438cbd72b58ef5a32 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 16:41:11 +0100 Subject: [PATCH 04/14] test(scheduler): isolate tests for parallelism --- .../TestDoubles/BrighterActivator.cs | 9 ++++-- .../When_scheduling_a_message.cs | 28 +++++++++---------- .../When_scheduling_a_message_async.cs | 26 ++++++++--------- .../When_scheduling_a_request.cs | 26 ++++++++--------- .../When_scheduling_a_request_async.cs | 26 ++++++++--------- .../Scheduler/When_scheduling_a_message.cs | 1 - .../When_scheduling_a_message_async.cs | 1 - .../Scheduler/When_scheduling_a_request.cs | 1 - .../When_scheduling_a_request_async.cs | 1 - .../TestDoubles/BrighterResolver.cs | 7 +++-- .../When_scheduling_a_message.cs | 17 +++++++---- .../When_scheduling_a_message_async.cs | 17 +++++++---- .../When_scheduling_a_request.cs | 17 +++++++---- .../When_scheduling_a_request_async.cs | 17 +++++++---- .../When_scheduling_a_message.cs | 6 ++-- .../When_scheduling_a_message_async.cs | 6 ++-- .../When_scheduling_a_request.cs | 6 ++-- .../When_scheduling_a_request_async.cs | 6 ++-- 18 files changed, 117 insertions(+), 101 deletions(-) diff --git a/tests/Paramore.Brighter.Hangfire.Tests/TestDoubles/BrighterActivator.cs b/tests/Paramore.Brighter.Hangfire.Tests/TestDoubles/BrighterActivator.cs index 6ec41ace90..7d4e3b75f8 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/TestDoubles/BrighterActivator.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/TestDoubles/BrighterActivator.cs @@ -5,13 +5,18 @@ namespace Paramore.Brighter.Hangfire.Tests.TestDoubles; public class BrighterActivator : JobActivator { - public static IAmACommandProcessor Processor { get; set; } + private readonly IAmACommandProcessor _processor; + + public BrighterActivator(IAmACommandProcessor processor) + { + _processor = processor; + } public override object ActivateJob(Type jobType) { if (jobType == typeof(BrighterHangfireSchedulerJob)) { - return new BrighterHangfireSchedulerJob(Processor); + return new BrighterHangfireSchedulerJob(_processor); } return base.ActivateJob(jobType); diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs index 981b998b9f..4d6822dd06 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs @@ -13,11 +13,11 @@ namespace Paramore.Brighter.Hangfire.Tests; -[NotInParallel("Scheduler")] public class HangfireSchedulerMessageTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; private readonly BackgroundJobServer _server; + private readonly JobStorage _storage; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -70,18 +70,6 @@ public HangfireSchedulerMessageTests() _outbox ); - GlobalConfiguration.Configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }) - .UseActivator(new BrighterActivator()); - - _server = new BackgroundJobServer(new BackgroundJobServerOptions - { - WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = new BrighterActivator(), - }); - _scheduler = new HangfireMessageSchedulerFactory(); _processor = new CommandProcessor( @@ -94,7 +82,19 @@ public HangfireSchedulerMessageTests() _scheduler ); - BrighterActivator.Processor = _processor; + GlobalConfiguration.Configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings(); + + _storage = new InMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }); + var activator = new BrighterActivator(_processor); + _server = new BackgroundJobServer(new BackgroundJobServerOptions + { + WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = activator, + }, _storage); + + _scheduler.Client = new BackgroundJobClient(_storage); } [Test] diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs index c4ec1c900a..30a800a73b 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs @@ -13,11 +13,11 @@ namespace Paramore.Brighter.Hangfire.Tests; -[NotInParallel("Scheduler")] public class HangfireSchedulerMessageAsyncTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; private readonly BackgroundJobServer _server; + private readonly JobStorage _storage; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -77,17 +77,6 @@ public HangfireSchedulerMessageAsyncTests() _outbox ); - GlobalConfiguration.Configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }) - .UseActivator(new BrighterActivator()); - - _server = new BackgroundJobServer(new BackgroundJobServerOptions - { - WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = new BrighterActivator(), - }); _scheduler = new HangfireMessageSchedulerFactory(); _processor = new CommandProcessor( @@ -100,7 +89,18 @@ public HangfireSchedulerMessageAsyncTests() _scheduler ); - BrighterActivator.Processor = _processor; + GlobalConfiguration.Configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings(); + + _storage = new InMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }); + var activator = new BrighterActivator(_processor); + _server = new BackgroundJobServer(new BackgroundJobServerOptions + { + WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = activator, + }, _storage); + _scheduler.Client = new BackgroundJobClient(_storage); } [Test] diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs index e308e3db04..a86a985ccc 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs @@ -12,11 +12,11 @@ namespace Paramore.Brighter.Hangfire.Tests; -[NotInParallel("Scheduler")] public class HangfireSchedulerRequestTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; private readonly BackgroundJobServer _server; + private readonly JobStorage _storage; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -71,17 +71,6 @@ public HangfireSchedulerRequestTests() _outbox ); - GlobalConfiguration.Configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }) - .UseActivator(new BrighterActivator()); - - _server = new BackgroundJobServer(new BackgroundJobServerOptions - { - WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = new BrighterActivator(), - }); _scheduler = new HangfireMessageSchedulerFactory(); _processor = new CommandProcessor( @@ -94,7 +83,18 @@ public HangfireSchedulerRequestTests() _scheduler ); - BrighterActivator.Processor = _processor; + GlobalConfiguration.Configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings(); + + _storage = new InMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }); + var activator = new BrighterActivator(_processor); + _server = new BackgroundJobServer(new BackgroundJobServerOptions + { + WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = activator, + }, _storage); + _scheduler.Client = new BackgroundJobClient(_storage); } #region Scheduler diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs index bda99ca19f..139f32bed9 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs @@ -13,11 +13,11 @@ namespace Paramore.Brighter.Hangfire.Tests; -[NotInParallel("Scheduler")] public class HangfireSchedulerRequestAsyncTests : IDisposable { private readonly HangfireMessageSchedulerFactory _scheduler; private readonly BackgroundJobServer _server; + private readonly JobStorage _storage; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -79,17 +79,6 @@ public HangfireSchedulerRequestAsyncTests() _outbox ); - GlobalConfiguration.Configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }) - .UseActivator(new BrighterActivator()); - - _server = new BackgroundJobServer(new BackgroundJobServerOptions - { - WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = new BrighterActivator(), - }); _scheduler = new HangfireMessageSchedulerFactory(); _processor = new CommandProcessor( @@ -102,7 +91,18 @@ public HangfireSchedulerRequestAsyncTests() _scheduler ); - BrighterActivator.Processor = _processor; + GlobalConfiguration.Configuration + .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings(); + + _storage = new InMemoryStorage(new InMemoryStorageOptions { IdType = InMemoryStorageIdType.Guid }); + var activator = new BrighterActivator(_processor); + _server = new BackgroundJobServer(new BackgroundJobServerOptions + { + WorkerCount = 1, SchedulePollingInterval = TimeSpan.FromSeconds(1), Activator = activator, + }, _storage); + _scheduler.Client = new BackgroundJobClient(_storage); } #region Scheduler diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs index 09671f5f0c..3b80b972a6 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs @@ -14,7 +14,6 @@ namespace Paramore.Brighter.InMemory.Tests.Scheduler; [Category("InMemory")] -[NotInParallel("CommandProcess")] public class InMemorySchedulerMessageTests { private readonly InMemorySchedulerFactory _scheduler; diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs index 5c49b6a7a5..b299d4bbe7 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs @@ -16,7 +16,6 @@ namespace Paramore.Brighter.InMemory.Tests.Scheduler; [Category("InMemory")] -[NotInParallel("CommandProcess")] public class InMemorySchedulerMessageAsyncTests { private readonly InMemorySchedulerFactory _scheduler; diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs index a7deb3efc8..9b8cdd1c43 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs @@ -14,7 +14,6 @@ namespace Paramore.Brighter.InMemory.Tests.Scheduler; [Category("InMemory")] -[NotInParallel("CommandProcess")] public class InMemorySchedulerRequestTests { private readonly InMemorySchedulerFactory _scheduler; diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs index 0ab44fc2bc..e3d395c0ec 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs @@ -16,7 +16,6 @@ namespace Paramore.Brighter.InMemory.Tests.Scheduler; [Category("InMemory")] -[NotInParallel("CommandProcess")] public class InMemorySchedulerRequestAsyncTests { private readonly InMemorySchedulerFactory _scheduler; diff --git a/tests/Paramore.Brighter.Quartz.Tests/TestDoubles/BrighterResolver.cs b/tests/Paramore.Brighter.Quartz.Tests/TestDoubles/BrighterResolver.cs index f1b55fc216..a311708a5b 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/TestDoubles/BrighterResolver.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/TestDoubles/BrighterResolver.cs @@ -8,10 +8,13 @@ namespace ParamoreBrighter.Quartz.Tests.TestDoubles; public class BrighterResolver : PropertySettingJobFactory { - public static IAmACommandProcessor Processor { get; set; } + public const string ProcessorContextKey = "BrighterProcessor"; public override IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) { - return new QuartzBrighterJob(Processor); + var processor = scheduler.Context[ProcessorContextKey] as IAmACommandProcessor + ?? throw new InvalidOperationException("Quartz scheduler context is missing the Brighter command processor."); + + return new QuartzBrighterJob(processor); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs index ab912d1cc0..c4f5c4faea 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs @@ -14,10 +14,10 @@ namespace ParamoreBrighter.Quartz.Tests; -[NotInParallel("Scheduler")] -public class QuartzSchedulerMessageTests +public class QuartzSchedulerMessageTests : IDisposable { private readonly QuartzSchedulerFactory _scheduler; + private readonly IScheduler _quartzScheduler; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -75,10 +75,10 @@ public QuartzSchedulerMessageTests() .UseJobFactory() .Build(); - var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - scheduler.Start().GetAwaiter().GetResult(); + _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + _quartzScheduler.Start().GetAwaiter().GetResult(); - _scheduler = new QuartzSchedulerFactory(scheduler); + _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( subscriberRegistry, @@ -90,7 +90,7 @@ public QuartzSchedulerMessageTests() _scheduler ); - BrighterResolver.Processor = _processor; + _quartzScheduler.Context.Put(BrighterResolver.ProcessorContextKey, _processor); } [Test] @@ -262,4 +262,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan() await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } + + public void Dispose() + { + _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs index 2d145f9d95..750eb517ee 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs @@ -14,10 +14,10 @@ namespace ParamoreBrighter.Quartz.Tests; -[NotInParallel("Scheduler")] -public class QuartzSchedulerMessageAsyncTests +public class QuartzSchedulerMessageAsyncTests : IDisposable { private readonly QuartzSchedulerFactory _scheduler; + private readonly IScheduler _quartzScheduler; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -82,10 +82,10 @@ public QuartzSchedulerMessageAsyncTests() .UseJobFactory() .Build(); - var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - scheduler.Start().GetAwaiter().GetResult(); + _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + _quartzScheduler.Start().GetAwaiter().GetResult(); - _scheduler = new QuartzSchedulerFactory(scheduler); + _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( subscriberRegistry, @@ -97,7 +97,7 @@ public QuartzSchedulerMessageAsyncTests() _scheduler ); - BrighterResolver.Processor = _processor; + _quartzScheduler.Context.Put(BrighterResolver.ProcessorContextKey, _processor); } [Test] @@ -269,4 +269,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() await Assert.That(actual.Header.ContentType).IsEqualTo(expected.Header.ContentType); await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } + + public void Dispose() + { + _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs index 19cafe6eed..80facf021f 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs @@ -13,10 +13,10 @@ namespace ParamoreBrighter.Quartz.Tests; -[NotInParallel("Scheduler")] -public class QuartzSchedulerRequestTests +public class QuartzSchedulerRequestTests : IDisposable { private readonly QuartzSchedulerFactory _scheduler; + private readonly IScheduler _quartzScheduler; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -76,10 +76,10 @@ public QuartzSchedulerRequestTests() .UseJobFactory() .Build(); - var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - scheduler.Start().GetAwaiter().GetResult(); + _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + _quartzScheduler.Start().GetAwaiter().GetResult(); - _scheduler = new QuartzSchedulerFactory(scheduler); + _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( subscriberRegistry, @@ -91,7 +91,7 @@ public QuartzSchedulerRequestTests() _scheduler ); - BrighterResolver.Processor = _processor; + _quartzScheduler.Context.Put(BrighterResolver.ProcessorContextKey, _processor); } #region Scheduler @@ -420,4 +420,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler } #endregion + + public void Dispose() + { + _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs index beb1e62644..5aab4960ae 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs @@ -14,10 +14,10 @@ namespace ParamoreBrighter.Quartz.Tests; -[NotInParallel("Scheduler")] -public class QuartzSchedulerRequestAsyncTests +public class QuartzSchedulerRequestAsyncTests : IDisposable { private readonly QuartzSchedulerFactory _scheduler; + private readonly IScheduler _quartzScheduler; private readonly IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); @@ -85,10 +85,10 @@ public QuartzSchedulerRequestAsyncTests() .UseJobFactory() .Build(); - var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - scheduler.Start().GetAwaiter().GetResult(); + _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + _quartzScheduler.Start().GetAwaiter().GetResult(); - _scheduler = new QuartzSchedulerFactory(scheduler); + _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( subscriberRegistry, @@ -100,7 +100,7 @@ public QuartzSchedulerRequestAsyncTests() _scheduler ); - BrighterResolver.Processor = _processor; + _quartzScheduler.Context.Put(BrighterResolver.ProcessorContextKey, _processor); } #region Scheduler @@ -428,4 +428,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSch } #endregion + + public void Dispose() + { + _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + } } diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs index 3fee474e8b..729e344b86 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs @@ -6,16 +6,14 @@ namespace Paramore.Brighter.TickerQ.Tests; -[NotInParallel("Scheduler")] -[ClassDataSource(Shared = SharedType.PerClass)] public class TickerQSchedulerMessageTests : IDisposable { private readonly TickerQMessageTestFixture _fixture; - public TickerQSchedulerMessageTests(TickerQMessageTestFixture fixture) + public TickerQSchedulerMessageTests() { - _fixture = fixture; + _fixture = new TickerQMessageTestFixture(); } [Test] diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs index f764f3c006..d6b974605d 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message_async.cs @@ -6,15 +6,13 @@ namespace Paramore.Brighter.TickerQ.Tests; -[NotInParallel("Scheduler")] -[ClassDataSource(Shared = SharedType.PerClass)] public class TickerQSchedulerMessageAsyncTests : IDisposable { private readonly TickerQMessageTestFixture _fixture; - public TickerQSchedulerMessageAsyncTests(TickerQMessageTestFixture tickerQTestFixture) + public TickerQSchedulerMessageAsyncTests() { - _fixture = tickerQTestFixture; + _fixture = new TickerQMessageTestFixture(); } [Test] diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs index 336c688016..8ee043f269 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs @@ -4,15 +4,13 @@ namespace Paramore.Brighter.TickerQ.Tests { - [NotInParallel("Scheduler")] - [ClassDataSource(Shared = SharedType.PerClass)] public class TickerQSchedulerRequestTests : IDisposable { private readonly TickerQRequestTestFixture _fixture; - public TickerQSchedulerRequestTests(TickerQRequestTestFixture tickerQTestFixture) + public TickerQSchedulerRequestTests() { - _fixture = tickerQTestFixture; + _fixture = new TickerQRequestTestFixture(); } #region Scheduler diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs index 9bfa2015bd..98939aa757 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs @@ -5,15 +5,13 @@ namespace Paramore.Brighter.TickerQ.Tests { - [NotInParallel("Scheduler")] - [ClassDataSource(Shared = SharedType.PerClass)] public class TickerQSchedulerRequestAsyncTests : IDisposable { private readonly TickerQRequestAsyncTestFixture _fixture; - public TickerQSchedulerRequestAsyncTests(TickerQRequestAsyncTestFixture tickerQTestFixture) + public TickerQSchedulerRequestAsyncTests() { - _fixture = tickerQTestFixture; + _fixture = new TickerQRequestAsyncTestFixture(); } #region Scheduler From 93a59316c57309d89c396c1fbecd0ee2ec97f40d Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 16:57:06 +0100 Subject: [PATCH 05/14] test: isolate transport tests for parallelism --- .../Messages/Sns/When_Scheduling_A_Sns_Message.cs | 5 +++-- .../Sns/When_Scheduling_A_Sns_Message_Async.cs | 5 +++-- ...en_Scheduling_A_Sns_Message_Via_FireScheduler.cs | 5 +++-- ...eduling_A_Sns_Message_Via_FireScheduler_Async.cs | 5 +++-- .../Messages/Sqs/When_Scheduling_A_Sqs_Message.cs | 5 +++-- .../Sqs/When_Scheduling_A_Sqs_Message_Async.cs | 5 +++-- ...en_Scheduling_A_Sqs_Message_Via_FireScheduler.cs | 5 +++-- ...eduling_A_Sqs_Message_Via_FireScheduler_Async.cs | 5 +++-- .../Requests/Sns/When_Scheduling_A_Sns_Request.cs | 5 +++-- .../Sns/When_Scheduling_A_Sns_Request_Async.cs | 5 +++-- .../Requests/Sqs/When_Scheduling_A_Sqs_Request.cs | 5 +++-- .../Sqs/When_Scheduling_A_Sqs_Request_Async.cs | 5 +++-- .../Messages/Sns/When_Scheduling_A_Sns_Message.cs | 5 +++-- .../Sns/When_Scheduling_A_Sns_Message_Async.cs | 5 +++-- ...en_Scheduling_A_Sns_Message_Via_FireScheduler.cs | 5 +++-- ...eduling_A_Sns_Message_Via_FireScheduler_Async.cs | 5 +++-- .../Messages/Sqs/When_Scheduling_A_Sqs_Message.cs | 5 +++-- .../Sqs/When_Scheduling_A_Sqs_Message_Async.cs | 5 +++-- ...en_Scheduling_A_Sqs_Message_Via_FireScheduler.cs | 5 +++-- ...eduling_A_Sqs_Message_Via_FireScheduler_Async.cs | 5 +++-- .../Requests/Sns/When_Scheduling_A_Sns_Request.cs | 5 +++-- .../Sns/When_Scheduling_A_Sns_Request_Async.cs | 5 +++-- .../Requests/Sqs/When_Scheduling_A_Sqs_Request.cs | 5 +++-- .../Sqs/When_Scheduling_A_Sqs_Request_Async.cs | 5 +++-- ...a_message_is_acknowledged_update_offset_async.cs | 2 +- ..._set_of_messages_is_sent_preserve_order_async.cs | 2 +- ...When_consumer_assumes_topic_but_missing_async.cs | 2 +- .../Proactor/When_consumer_declares_topic_async.cs | 2 +- ...requeues_async_with_delay_should_use_producer.cs | 2 +- ...king_a_message_it_should_be_redelivered_async.cs | 2 +- ...ts_awaiting_next_acknowledge_sweep_them_async.cs | 2 +- .../Proactor/When_posting_a_message_async.cs | 2 +- ...hen_posting_a_message_with_header_bytes_async.cs | 2 +- ..._a_message_without_partition_key_header_async.cs | 2 +- ..._with_delivery_error_should_send_to_dlq_async.cs | 2 +- ...s_configured_should_acknowledge_and_log_async.cs | 2 +- ..._invalid_channel_should_fallback_to_dlq_async.cs | 2 +- ...e_reason_should_send_to_invalid_channel_async.cs | 2 +- ..._with_unknown_reason_should_send_to_dlq_async.cs | 2 +- ...ached_should_commit_uncommitted_offsets_async.cs | 2 +- .../When_a_message_is_acknowledged_update_offset.cs | 2 +- ...When_a_set_of_messages_is_sent_preserve_order.cs | 2 +- ...mitting_offsets_during_revoke_should_not_race.cs | 2 +- .../When_consumer_assumes_topic_but_missing.cs | 2 +- .../Reactor/When_consumer_declares_topic.cs | 2 +- ...When_converting_brighterheader_to_kafkaheader.cs | 2 +- ...When_converting_kafkaheader_to_brighterheader.cs | 2 +- ...with_make_channels_create_should_create_topic.cs | 2 +- ...umer_disposes_should_dispose_requeue_producer.cs | 2 +- ...sumer_requeues_with_delay_should_use_producer.cs | 2 +- ...umer_requeues_with_delay_should_use_scheduler.cs | 2 +- ...en_nacking_a_message_it_should_be_redelivered.cs | 2 +- ..._offsets_awaiting_next_acknowledge_sweep_them.cs | 2 +- .../Reactor/When_posting_a_message.cs | 2 +- .../When_posting_a_message_with_header_bytes.cs | 2 +- ...ieving_a_message_without_partition_key_header.cs | 2 +- ...hen_rejecting_message_should_include_metadata.cs | 2 +- ...essage_with_delivery_error_should_send_to_dlq.cs | 2 +- ...hannels_configured_should_acknowledge_and_log.cs | 2 +- ...and_no_invalid_channel_should_fallback_to_dlq.cs | 2 +- ...eptable_reason_should_send_to_invalid_channel.cs | 2 +- ...essage_with_unknown_reason_should_send_to_dlq.cs | 2 +- ...When_revoked_partitions_offsets_are_committed.cs | 2 +- ...ached_should_commit_uncommitted_offsets_async.cs | 2 +- ...ing_a_message_without_offset_should_not_throw.cs | 13 ++++++++----- .../Helpers/Base/MqttTestClassBase.cs | 10 +++++++--- ...requeues_async_with_delay_should_use_producer.cs | 2 +- ...iples_message_via_the_messaging_gateway_async.cs | 2 +- .../Proactor/When_queue_is_purged_async.cs | 2 +- ..._with_delivery_error_should_send_to_dlq_async.cs | 2 +- ...oducer_should_configure_and_dispose_correctly.cs | 2 +- ...sumer_requeues_with_delay_should_use_producer.cs | 2 +- ...g_multiples_message_via_the_messaging_gateway.cs | 2 +- .../Reactor/When_queue_is_purged.cs | 2 +- ...essage_with_delivery_error_should_send_to_dlq.cs | 2 +- ...ith_no_channels_configured_should_return_true.cs | 2 +- ...and_no_invalid_channel_should_fallback_to_dlq.cs | 2 +- ...eptable_reason_should_send_to_invalid_channel.cs | 2 +- ...ith_dlq_subscription_should_pass_routing_keys.cs | 7 ++++--- .../When_a_message_consumer_a_cloud_events.cs | 2 +- ...en_a_message_consumer_reads_multiple_messages.cs | 2 +- ...s_an_already_closed_exception_when_connecting.cs | 2 +- ...ws_an_not_supported_exception_when_connecting.cs | 2 +- ...eration_interrupted_exception_when_connecting.cs | 2 +- .../When_binding_a_channel_to_multiple_topics.cs | 2 +- ...g_multiple_messages_via_the_messaging_gateway.cs | 2 +- ...g_posting_a_message_via_the_messaging_gateway.cs | 2 +- .../When_infrastructure_exists_can_assert.cs | 3 +-- .../When_infrastructure_exists_can_validate.cs | 3 +-- ...hreads_try_to_post_a_message_at_the_same_time.cs | 2 +- .../When_posting_a_message_but_no_broker_created.cs | 3 +-- ..._message_to_persist_via_the_messaging_gateway.cs | 2 +- ...n_posting_a_message_via_the_messaging_gateway.cs | 2 +- ...ng_a_message_via_the_messaging_gateway_quorum.cs | 2 +- ..._queue_length_causes_a_message_to_be_rejected.cs | 2 +- ...g_a_delayed_message_via_the_messaging_gateway.cs | 2 +- ...en_rejecting_a_message_to_a_dead_letter_queue.cs | 2 +- ...requeuing_a_message_via_the_messaging_gateway.cs | 2 +- ...en_resetting_a_connection_that_does_not_exist.cs | 2 +- ...hen_retry_limits_force_a_message_onto_the_DLQ.cs | 2 +- ...eues_without_native_delay_should_use_producer.cs | 2 +- .../MessagingGateway/TestHelpers.cs | 2 +- ...en_a_message_consumer_reads_multiple_messages.cs | 2 +- ...s_an_already_closed_exception_when_connecting.cs | 2 +- ...ws_an_not_supported_exception_when_connecting.cs | 2 +- ...eration_interrupted_exception_when_connecting.cs | 2 +- .../When_binding_a_channel_to_multiple_topics.cs | 2 +- ...g_posting_a_message_via_the_messaging_gateway.cs | 2 +- .../When_infrastructure_exists_can_assert.cs | 2 +- .../When_infrastructure_exists_can_validate.cs | 2 +- ...hreads_try_to_post_a_message_at_the_same_time.cs | 2 +- .../When_posting_a_message_but_no_broker_created.cs | 2 +- ..._message_to_persist_via_the_messaging_gateway.cs | 2 +- ...n_posting_a_message_via_the_messaging_gateway.cs | 2 +- ..._queue_length_causes_a_message_to_be_rejected.cs | 2 +- ...g_a_delayed_message_via_the_messaging_gateway.cs | 2 +- ...en_rejecting_a_message_to_a_dead_letter_queue.cs | 2 +- ...requeuing_a_message_via_the_messaging_gateway.cs | 2 +- ...en_resetting_a_connection_that_does_not_exist.cs | 2 +- ...hen_retry_limits_force_a_message_onto_the_DLQ.cs | 2 +- ...eues_without_native_delay_should_use_producer.cs | 2 +- ...exception_when_connecting_to_the_server_async.cs | 2 +- ...t_exception_when_connecting_to_the_pool_async.cs | 2 +- ...ing_a_message_via_the_messaging_gateway_async.cs | 2 +- ...iple_messages_via_the_messaging_gateway_async.cs | 2 +- ..._with_delivery_error_should_send_to_dlq_async.cs | 2 +- .../When_requeing_a_failed_message_async.cs | 2 +- ...ocket_exception_when_connecting_to_the_server.cs | 2 +- ...timeout_exception_when_connecting_to_the_pool.cs | 2 +- ...n_posting_a_message_via_the_messaging_gateway.cs | 2 +- ...g_multiple_messages_via_the_messaging_gateway.cs | 2 +- ...essage_with_delivery_error_should_send_to_dlq.cs | 2 +- ...annels_configured_should_remove_from_inflight.cs | 2 +- ...and_no_invalid_channel_should_fallback_to_dlq.cs | 2 +- ...eptable_reason_should_send_to_invalid_channel.cs | 2 +- .../Reactor/When_requeing_a_failed_message.cs | 2 +- ...erriding_client_configuration_via_the_gateway.cs | 2 +- ...When_parsing_a_good_redis_message_to_brighter.cs | 2 +- ...oducer_should_configure_and_dispose_correctly.cs | 2 +- ...requeues_async_with_delay_should_use_producer.cs | 2 +- ...sumer_requeues_with_delay_should_use_producer.cs | 2 +- ...queues_with_zero_delay_should_use_direct_list.cs | 2 +- 142 files changed, 206 insertions(+), 177 deletions(-) diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index ed127ab1df..49fb522832 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -53,7 +52,7 @@ public SnsSchedulingMessageTest() _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create }; @@ -103,3 +102,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index 02778ac727..5629b578d6 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -53,7 +52,7 @@ public SnsSchedulingAsyncMessageTest() _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create @@ -101,3 +100,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 95e74c7d4b..6692b63bc4 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -54,7 +53,7 @@ public SnsSchedulingMessageViaFireSchedulerTest() )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -108,3 +107,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index 2c2ef1ffb3..a1fb77e9fc 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); @@ -54,7 +53,7 @@ public SnsSchedulingMessageViaFireSchedulerAsyncTest() )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -108,3 +107,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 1cbd9f3b35..361fd4b87b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -41,7 +40,7 @@ public SqsSchedulingMessageTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create @@ -90,3 +89,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index 92be2e552b..4ad8d00bf5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -41,7 +40,7 @@ public SqsSchedulingAsyncMessageTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true }; @@ -90,3 +89,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index dcb88f535b..7424a5e05b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); @@ -43,7 +42,7 @@ public SqsSchedulingMessageViaFireSchedulerTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, @@ -98,3 +97,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index 52aed8caa9..368b396980 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -43,7 +42,7 @@ public SqsSchedulingAsyncMessageViaFireSchedulerTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, @@ -99,3 +98,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 3aa1e1ae5d..068713ec87 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -13,7 +13,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -59,7 +58,7 @@ public SnsSchedulingMessageViaFireSchedulerRequestTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -239,3 +238,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index 4c0a0ce219..51f406eac5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -13,7 +13,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingRequestAsyncTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -59,7 +58,7 @@ public SnsSchedulingRequestAsyncTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -243,3 +242,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 6353ff2aca..b11d8b0490 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestTest : IDisposable { private const int BufferSize = 3; @@ -46,7 +45,7 @@ public SqsSchedulingRequestTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -230,3 +229,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index 38e813c1f3..4d52b89192 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -56,7 +55,7 @@ public SqsSchedulingRequestAsyncTest() new SqsPublication{ QueueAttributes = sqsAttributes, MakeChannels = OnMissingChannel.Create }); _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -110,3 +109,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index 3ced056be0..5de446325b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -53,7 +52,7 @@ public SnsSchedulingMessageTest() _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create }; @@ -103,3 +102,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index 6505ec396b..f434fbeb48 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 minutes per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -53,7 +52,7 @@ public SnsSchedulingAsyncMessageTest() _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create @@ -101,3 +100,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 84a14304e2..41a85f922c 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -54,7 +53,7 @@ public SnsSchedulingMessageViaFireSchedulerTest() )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -108,3 +107,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index 128c704a00..ca238257b6 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); @@ -54,7 +53,7 @@ public SnsSchedulingMessageViaFireSchedulerAsyncTest() )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -108,3 +107,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index ef876d2276..1797b52bb9 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -41,7 +40,7 @@ public SqsSchedulingMessageTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create @@ -90,3 +89,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index 7687dd51fe..8681bfbcb5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -41,7 +40,7 @@ public SqsSchedulingAsyncMessageTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true }; @@ -90,3 +89,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index f9fbead0c5..675d0904c5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); @@ -43,7 +42,7 @@ public SqsSchedulingMessageViaFireSchedulerTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, @@ -98,3 +97,5 @@ public void Dispose() _consumer.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index 73846f4c11..a70beccfa5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -43,7 +42,7 @@ public SqsSchedulingAsyncMessageViaFireSchedulerTest() _messageProducer = new SqsMessageProducer(awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, @@ -99,3 +98,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index ef9e4bf290..699d0563b3 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -13,7 +13,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -59,7 +58,7 @@ public SnsSchedulingMessageViaFireSchedulerRequestTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -239,3 +238,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index c483f9e2af..f7101fd943 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -13,7 +13,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SNS")] public class SnsSchedulingRequestAsyncTest : IDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -59,7 +58,7 @@ public SnsSchedulingRequestAsyncTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -243,3 +242,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 1ce20391f4..063a2fd0c5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestTest : IDisposable { private const int BufferSize = 3; @@ -46,7 +45,7 @@ public SqsSchedulingRequestTest() _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -230,3 +229,5 @@ public void Dispose() _scheduler.Dispose(); } } + + diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index c9f06dc48a..c74dc8a86a 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -[NotInParallel("Scheduler SQS")] public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); @@ -57,7 +56,7 @@ public SqsSchedulingRequestAsyncTest() ); _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, "brighter-scheduler") + _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -111,3 +110,5 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs index 2f898bbb3a..f9e1947396 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_message_is_acknowledged_update_offset_async.cs @@ -11,7 +11,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] [Property("Fragile", "CI")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerUpdateOffsetAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -170,3 +169,4 @@ public void Dispose() _producerRegistry.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs index 83ce619399..51278ab065 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_a_set_of_messages_is_sent_preserve_order_async.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerPreservesOrderAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -170,3 +169,4 @@ public void Dispose() _producerRegistry.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs index fe84515033..78f2bc8405 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_assumes_topic_but_missing_async.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaProducerAssumeTestsAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -79,3 +78,4 @@ public void Dispose() _producerRegistry.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs index 82fe343e39..43cbd956a1 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaConsumerDeclareTestsAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -125,3 +124,4 @@ public async ValueTask DisposeAsync() } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs index 9710d8980e..934b745c7f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs @@ -35,7 +35,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; /// so that requeued messages are actually redelivered. /// [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaConsumerRequeueAsyncTests : IAsyncDisposable, IDisposable { private readonly string _topic = Guid.NewGuid().ToString(); @@ -153,3 +152,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs index 68677494e7..9ce7b47102 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_nacking_a_message_it_should_be_redelivered_async.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerNackRedeliveryAsync : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -172,3 +171,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs index c3f5a19b25..fdd6a90fed 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerSweepOffsetsAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -157,3 +156,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs index f34b14476c..2a435b70a2 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerSendTestsAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -161,3 +160,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs index bdb322a990..f4036178c8 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs @@ -12,7 +12,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerHeaderBytesSendTestsAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -171,3 +170,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs index f67285943b..6d756e026d 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs @@ -11,7 +11,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerMissingHeaderTestsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -144,3 +143,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 9ccce67d4e..2109c1d523 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerDLQAsyncTests : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -203,3 +202,4 @@ public async ValueTask DisposeAsync() await Task.CompletedTask; } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs index a411ce3427..138185cadc 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerNoChannelsAsyncTests : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -174,3 +173,4 @@ public async ValueTask DisposeAsync() } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs index 28f867e86f..8b3a3309fc 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageFallbackAsyncTests : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -205,3 +204,4 @@ public async ValueTask DisposeAsync() await Task.CompletedTask; } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs index 71e1471e1a..05b696195b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageAsyncTests : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -204,3 +203,4 @@ public async ValueTask DisposeAsync() await Task.CompletedTask; } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs index 3a449b27c3..4e2f385d6f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerUnknownReasonAsyncTests : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -204,3 +203,4 @@ public async ValueTask DisposeAsync() await Task.CompletedTask; } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index e7d6a79edf..3c54b2ae34 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -31,7 +31,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -184,3 +183,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs index 04ac9f30aa..be7d8cf01e 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerUpdateOffset : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -160,3 +159,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs index 5ba6e7391d..28f72a3b50 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerPreservesOrder : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -161,3 +160,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs index b5e1b00ec1..f1e79007e8 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] [Property("Fragile", "CI")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerCommitRevokeConcurrency : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -198,3 +197,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs index 394e50b903..9bfa0a2ef5 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_assumes_topic_but_missing.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaProducerAssumeTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -76,3 +75,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs index dc3891afe5..b45fec4536 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaConsumerDeclareTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -120,3 +119,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs index c66209f9df..817cdba0dc 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_brighterheader_to_kafkaheader.cs @@ -8,7 +8,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] // public class KafkaDefaultMessageHeaderBuilderTests { [Test] @@ -77,3 +76,4 @@ public async Task When_converting_brighterheader_to_kafkaheader() } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs index a693591f0c..ac85fdee32 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_converting_kafkaheader_to_brighterheader.cs @@ -9,7 +9,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] // public class KafkaHeaderToBrighterTests { [Test] @@ -76,3 +75,4 @@ public async Task When_converting_kafkaheader_to_brighterheader() await Assert.That(readMessage.Header.Bag["mydatetime"]).IsEqualTo(((DateTime)bag["mydatetime"]).ToString(CultureInfo.InvariantCulture)); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs index 19b49e10dc..fd210a95b2 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerMakeChannelsTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -202,3 +201,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs index eabc974c54..5a6e756eef 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs @@ -34,7 +34,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// If no requeue was ever performed, disposal should succeed without error. /// [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaConsumerDisposesRequeueProducerTests : IDisposable { private readonly string _topic = Guid.NewGuid().ToString(); @@ -147,3 +146,4 @@ public void Dispose() try { _consumer?.Dispose(); } catch { /* already disposed */ } } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs index a7cf4bb934..56aa5fdf2e 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs @@ -35,7 +35,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// so that requeued messages are actually redelivered. /// [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaConsumerRequeueTests : IDisposable { private readonly string _topic = Guid.NewGuid().ToString(); @@ -149,3 +148,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs index c29ff063f3..c50727adc5 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs @@ -35,7 +35,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; /// constructor is wired through to the producer's Scheduler property. /// [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaConsumerRequeueSchedulerTests : IDisposable { private readonly string _topic = Guid.NewGuid().ToString(); @@ -173,3 +172,4 @@ public string Schedule(Message message, TimeSpan delay) public void Cancel(string id) { } } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs index 198a65e048..a57aabe4a7 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_nacking_a_message_it_should_be_redelivered.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerNackRedelivery : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -172,3 +171,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs index 84150ba458..1b94ecf824 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerSweepOffsets : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -147,3 +146,4 @@ public void Dispose() _consumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs index 0613e5fb29..4c79dd774a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs @@ -12,7 +12,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerSendTests : IDisposable { private readonly string _channelName = Guid.NewGuid().ToString(); @@ -192,3 +191,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs index 8a97b146d3..6bd5938a40 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs @@ -12,7 +12,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageProducerHeaderBytesSendTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -169,3 +168,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs index c160d3e6cd..2ca415b4cc 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs @@ -11,7 +11,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] // public class KafkaMessageProducerMissingHeaderTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -141,3 +140,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs index 237f1a928f..517ee0ea26 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerMetadataTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -224,3 +223,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index ec1aba0836..2faf6ccf7d 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerDLQTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -199,3 +198,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 51420a6693..2b7f53bfdb 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerNoChannelsTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -169,3 +168,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 3adec4c0c4..eb6b348cd7 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageFallbackTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -201,3 +200,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index bb7d5a3fde..d900f5c8ff 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerInvalidMessageTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -200,3 +199,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs index 437c4e6a52..62fb0ffc9b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] public class KafkaMessageConsumerUnknownReasonTests : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -200,3 +199,4 @@ public void Dispose() _producer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs index c8f03eedb1..e03ee5d7a4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs @@ -10,7 +10,6 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] [Property("Fragile", "CI")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class KafkaMessageConsumerCommitOnRevoke : IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -230,3 +229,4 @@ public void Dispose() _producerRegistry?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index 53120400c6..3d0b477ada 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -31,7 +31,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -[NotInParallel("Kafka")] //Kafka doesn't like multiple consumers of a partition public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets : IAsyncDisposable, IDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); @@ -183,3 +182,4 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs index 0be28cbeb0..1fe6646e25 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_nacking_a_message_without_offset_should_not_throw.cs @@ -5,20 +5,22 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway; [Category("Kafka")] -[NotInParallel("Kafka")] public class When_nacking_a_message_without_offset_should_not_throw : IDisposable { private readonly KafkaMessageConsumer _consumer; + private readonly RoutingKey _topic = new(Guid.NewGuid().ToString("N")); public When_nacking_a_message_without_offset_should_not_throw() { + var groupId = Guid.NewGuid().ToString("N"); + _consumer = new KafkaMessageConsumer( new KafkaMessagingGatewayConfiguration { Name = "test", BootStrapServers = ["localhost:9092"] }, - routingKey: new RoutingKey("test.topic"), - groupId: "test-group", + routingKey: _topic, + groupId: groupId, offsetDefault: AutoOffsetReset.Earliest, numPartitions: 1, replicationFactor: 1, @@ -31,7 +33,7 @@ public async Task When_message_has_no_partition_offset_in_bag_should_not_throw() { //Arrange - a message with no PARTITION_OFFSET in the header bag var message = new Message( - new MessageHeader("test-id", new RoutingKey("test.topic"), MessageType.MT_COMMAND), + new MessageHeader("test-id", _topic, MessageType.MT_COMMAND), new MessageBody("test body") ); @@ -44,7 +46,7 @@ public async Task When_message_has_wrong_type_for_partition_offset_should_not_th { //Arrange - a message with PARTITION_OFFSET set to the wrong type var message = new Message( - new MessageHeader("test-id", new RoutingKey("test.topic"), MessageType.MT_COMMAND), + new MessageHeader("test-id", _topic, MessageType.MT_COMMAND), new MessageBody("test body") ); message.Header.Bag[HeaderNames.PARTITION_OFFSET] = "not-a-TopicPartitionOffset"; @@ -58,3 +60,4 @@ public void Dispose() _consumer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs index d61fa60b51..696aa02f3d 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs @@ -43,6 +43,10 @@ public abstract class MqttTestClassBase : TestClassBase protected MqttTestClassBase(string clientID, string topicPrefix) : base() { + var uniqueSuffix = Guid.NewGuid().ToString("N"); + var uniqueClientId = $"{clientID}-{uniqueSuffix}"; + var uniqueTopicPrefix = $"{topicPrefix}/{uniqueSuffix}"; + ApplicationLogging.LoggerFactory = LoggerFactory.Create(configure => { configure.Services.AddSingleton(TestOutputHelper); @@ -61,7 +65,7 @@ protected MqttTestClassBase(string clientID, string topicPrefix) { Hostname = IPAddress.Loopback.ToString(), Port = serverPort, - TopicPrefix = topicPrefix + TopicPrefix = uniqueTopicPrefix }; MqttMessagePublisher mqttMessagePublisher = new(mqttProducerConfig); @@ -71,8 +75,8 @@ protected MqttTestClassBase(string clientID, string topicPrefix) { Hostname = IPAddress.Loopback.ToString(), Port = serverPort, - TopicPrefix = topicPrefix, - ClientID = clientID + TopicPrefix = uniqueTopicPrefix, + ClientID = uniqueClientId }; MessageConsumerAsync = new MqttMessageConsumer(mqttConsumerConfig); diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs index a95c1198e2..2543b348e1 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_mqtt_consumer_requeues_async_with_delay_should_use_producer.cs @@ -35,7 +35,6 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; /// to the producer so that requeued messages are actually redelivered. /// [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttConsumerRequeueAsyncTests() : MqttTestClassBase(ClientId, TopicPrefix) { @@ -84,3 +83,4 @@ private async Task ReceiveMessageAsync() throw new Exception($"Failed to receive message after {maxTries} attempts"); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs index 0af4aa1ff3..64f1e5799e 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_posting_multiples_message_via_the_messaging_gateway_async.cs @@ -7,7 +7,6 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor { [Category("MQTT")] - [NotInParallel("MQTT")] public class MqttMessageProducerSendMessageTestsAsync : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Produce"; @@ -69,3 +68,4 @@ public async Task When_posting_multiples_message_via_the_messaging_gateway_async } } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs index cd8e8c0df0..502c502b4d 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_queue_is_purged_async.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor { [Category("MQTT")] - [NotInParallel("MQTT")] public class WhenQueueIsPurgedAsync : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Purge"; @@ -41,3 +40,4 @@ public async Task WhenPurgingTheQueueOnTheMessagingGatewayAsync() } } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 0156ff1bbd..ecf0d40b67 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Proactor; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqAsyncSource"; @@ -137,3 +136,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 967c4b9610..e7111168c2 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -36,7 +36,6 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; /// passed to the consumer. When the consumer is disposed, the producer should also be disposed. /// [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttConsumerProducerConfigAndDisposeTests : IDisposable { private readonly MqttTestServer? _mqttTestServer; @@ -174,3 +173,4 @@ public string Schedule(Message message, TimeSpan delay) public void Cancel(string id) { } } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs index 992a86d5b6..3688965124 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_requeues_with_delay_should_use_producer.cs @@ -34,7 +34,6 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; /// delegates to the producer so that requeued messages are actually redelivered. /// [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttConsumerRequeueTests : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Requeue"; @@ -90,3 +89,4 @@ private Message ReceiveMessage() throw new Exception($"Failed to receive message after {maxTries} attempts"); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs index b3514dfc18..650cfd62fa 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_posting_multiples_message_via_the_messaging_gateway.cs @@ -31,7 +31,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor { [Category("MQTT")] - [NotInParallel("MQTT")] public class MqttMessageProducerSendMessageTests : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Produce"; @@ -113,3 +112,4 @@ public async Task When_posting_multiples_message_via_the_messaging_gateway_sync( } } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs index 657f6840b5..966093aad1 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_queue_is_purged.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor { [Category("MQTT")] - [NotInParallel("MQTT")] public class When_queue_is_Purged : MqttTestClassBase { private const string ClientId = "BrighterIntegrationTests-Purge"; @@ -95,3 +94,4 @@ public async Task When_purging_the_queue_on_the_messaging_gateway() } } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 26b39aca4d..8440830f1b 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerRejectDeliveryErrorDlqTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqSource"; @@ -143,3 +142,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs index 15bf7abd12..fda795b763 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerRejectNoChannelsTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/NoChannels"; @@ -106,3 +105,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index cab1488a42..d13e616a33 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerRejectUnacceptableFallbackToDlqTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/FallbackSource"; @@ -131,3 +130,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 030c94af82..c3b1cab43a 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerRejectUnacceptableInvalidChannelTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/InvalidSource"; @@ -149,3 +148,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 68062d58a3..78af8fe812 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.MQTT.Tests; [Category("MQTT")] -[NotInParallel("MQTT")] public class MqttMessageConsumerFactoryDlqTests : IDisposable { private readonly MqttTestServer? _mqttTestServer; @@ -45,6 +44,7 @@ public MqttMessageConsumerFactoryDlqTests() //Arrange var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); + var uniqueSuffix = Guid.NewGuid().ToString("N"); _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); @@ -52,8 +52,8 @@ public MqttMessageConsumerFactoryDlqTests() { Hostname = IPAddress.Loopback.ToString(), Port = serverPort, - TopicPrefix = "BrighterTests/FactoryDlq", - ClientID = "BrighterTests-FactoryDlq" + TopicPrefix = $"BrighterTests/FactoryDlq/{uniqueSuffix}", + ClientID = $"BrighterTests-FactoryDlq-{uniqueSuffix}" }; _factory = new MqttMessageConsumerFactory(configuration); @@ -105,3 +105,4 @@ public void Dispose() _mqttTestServer?.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs index a1b3788909..99fa632c9c 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RMQBufferedConsumerCloudEventsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -68,3 +67,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 53365cde45..de554d1117 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RMQBufferedConsumerTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -75,3 +74,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs index ca45d29f99..51d886ad34 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerConnectionClosedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -62,3 +61,4 @@ public void Dispose() _receiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs index c8f8038446..54f20a1190 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerChannelFailureTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -80,3 +79,4 @@ public void Dispose() _badReceiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs index 9617b85140..65fc1d1a28 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerOperationInterruptedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -81,3 +80,4 @@ public void Dispose() _receiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs index 9848e31b67..69d7f50d7a 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerMultipleTopicTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -69,3 +68,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs index 474e23fc3f..1512c86873 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs @@ -31,7 +31,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsMultipleMessagesTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -92,3 +91,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index b74f400900..1cff97f350 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsSendMessageTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -90,3 +89,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs index b2343363b6..6542a10b05 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs @@ -2,8 +2,6 @@ using Paramore.Brighter.MessagingGateway.RMQ.Async; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; - -[NotInParallel("RMQ")] public class RmqAssumeExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -65,3 +63,4 @@ public void Dispose() _messageConsumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs index 7e7969394c..d6c9c20e6d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs @@ -2,8 +2,6 @@ using Paramore.Brighter.MessagingGateway.RMQ.Async; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; - -[NotInParallel("RMQ")] public class RmqValidateExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -65,3 +63,4 @@ public void Dispose() _messageConsumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs index 03cd287ea9..949cc6d69f 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSupportsMultipleThreadsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -53,3 +52,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs index d8f44bf226..e0dce749bb 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs @@ -2,8 +2,6 @@ using Paramore.Brighter.MessagingGateway.RMQ.Async; namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; - -[NotInParallel("RMQ")] public class RmqBrokerNotPreCreatedTests : IDisposable { private Message _message; @@ -37,3 +35,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs index 3ede48fa53..344ce9cc2e 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSendPersistentMessageTests : IDisposable { private IAmAMessageProducerSync _messageProducer; @@ -55,3 +54,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 6b27962957..c7f3ccfd4b 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -32,7 +32,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -130,3 +129,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs index 1820f7d176..50ad21de39 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs @@ -33,7 +33,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageQuorumTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -140,3 +139,4 @@ public void Dispose() _messageConsumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs index 1509d87ebc..bdf0bccc8e 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerQueueLengthTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -100,3 +99,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs index f9ccecd335..04fdd3815c 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerDelayedMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -117,3 +116,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs index 55b2d8508d..5a49bc7235 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerDLQTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -105,3 +104,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs index c4562b03f7..88a455401a 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs @@ -32,7 +32,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerRequeuingMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -142,3 +141,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs index fd5e73ec79..7c833718c7 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageGatewayConnectionPoolResetConnectionDoesNotExist { private readonly RmqMessageGatewayConnectionPool _connectionPool = new("MyConnectionName", 7); @@ -54,3 +53,4 @@ public async Task When_resetting_a_connection_that_does_not_exist() } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 33b3994ec7..8ef972ba08 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -14,7 +14,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RMQMessageConsumerRetryDLQTests : IDisposable { private readonly IAmAMessagePump _messagePump; @@ -159,3 +158,4 @@ public void Dispose() } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs index 5770487a7b..7923055a83 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_rmq_async_consumer_requeues_without_native_delay_should_use_producer.cs @@ -36,7 +36,6 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; /// the delayed redelivery. /// [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerDelayTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -107,3 +106,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs index 47bee9eb9a..4e98bd5bfe 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/TestHelpers.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ using Paramore.Brighter.MessagingGateway.RMQ.Async; using RabbitMQ.Client; -[assembly: TUnit.Core.NotInParallel("RMQ")] namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway; internal sealed class QueueFactory(RmqMessagingGatewayConnection connection, ChannelName channelName, RoutingKeys routingKeys, bool isDurable = false, QueueType queueType = QueueType.Classic) @@ -68,3 +67,4 @@ await connection1.CreateChannelAsync(new CreateChannelOptions( } } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 62eaf8bbaf..ac1bba92bf 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RMQBufferedConsumerTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -75,3 +74,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs index a5516ccc5a..60cb55ef62 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerConnectionClosedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -62,3 +61,4 @@ public void Dispose() _receiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs index 79c2342d50..7191e84231 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerChannelFailureTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -80,3 +79,4 @@ public void Dispose() _badReceiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs index 2aaad3a0c0..779af0762e 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerOperationInterruptedTests : IDisposable { private readonly IAmAMessageProducerSync _sender; @@ -81,3 +80,4 @@ public void Dispose() _receiver.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs index c6cf7b6a5c..2457296a74 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageConsumerMultipleTopicTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -72,3 +71,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index 1cb8980b16..25a6d1b7e2 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerConfirmationsSendMessageTests : IDisposable { private readonly RmqMessageProducer _messageProducer; @@ -88,3 +87,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs index e444e59e23..11fe5fb708 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_assert.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqAssumeExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -63,3 +62,4 @@ public void Dispose() _messageConsumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs index 9b5b533361..e2c9fe1ad4 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_infrastructure_exists_can_validate.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqValidateExistingInfrastructureTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -63,3 +62,4 @@ public void Dispose() _messageConsumer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs index 65e98377ed..e6935fe8a5 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_multiple_threads_try_to_post_a_message_at_the_same_time.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSupportsMultipleThreadsTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -53,3 +52,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs index 3f330be2ef..9a39006ea9 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_but_no_broker_created.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqBrokerNotPreCreatedTests : IDisposable { private Message _message; @@ -38,3 +37,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs index 3a81b5dff1..36a6f5a54d 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_to_persist_via_the_messaging_gateway.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSendPersistentMessageTests : IDisposable { private IAmAMessageProducerSync _messageProducer; @@ -52,3 +51,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 1d9cdd1740..55f7729910 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -31,7 +31,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerSendMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -127,3 +126,4 @@ public void Dispose() } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs index a6cd3ec347..8c03d5c814 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_queue_length_causes_a_message_to_be_rejected.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerQueueLengthTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -100,3 +99,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs index 0ed7269230..f2eea472d5 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_reading_a_delayed_message_via_the_messaging_gateway.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerDelayedMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -117,3 +116,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs index ca7ad6ad82..99602e59eb 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rejecting_a_message_to_a_dead_letter_queue.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerDLQTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -105,3 +104,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs index fe9fd74e6e..02962cf76a 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_requeuing_a_message_via_the_messaging_gateway.cs @@ -32,7 +32,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageProducerRequeuingMessageTests : IDisposable { private readonly IAmAMessageProducerSync _messageProducer; @@ -140,3 +139,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs index 95aa255d4e..4fe3d1a6ef 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_resetting_a_connection_that_does_not_exist.cs @@ -30,7 +30,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqMessageGatewayConnectionPoolResetConnectionDoesNotExist { private readonly RmqMessageGatewayConnectionPool _connectionPool = new("MyConnectionName", 7); @@ -54,3 +53,4 @@ public async Task When_resetting_a_connection_that_does_not_exist() } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 026b3cc9f9..47875e4510 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -13,7 +13,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; [Category("RMQ")] -[NotInParallel("RMQ")] public class RMQMessageConsumerRetryDLQTests : IDisposable { private readonly IAmAMessagePump _messagePump; @@ -158,3 +157,4 @@ public void Dispose() } } + diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs index 6926aad8e6..1feae0b154 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_rmq_sync_consumer_requeues_without_native_delay_should_use_producer.cs @@ -36,7 +36,6 @@ namespace Paramore.Brighter.RMQ.Sync.Tests.MessagingGateway.Reactor; /// with Task.Delay().Wait(). This also verifies lazy producer creation and disposal. /// [Category("RMQ")] -[NotInParallel("RMQ")] public class RmqSyncConsumerDelayTests : IDisposable { private readonly IAmAMessageProducerSync _sendProducer; @@ -142,3 +141,4 @@ public void Dispose() _sendProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs index 65e9cb693c..89dbb0f009 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server_async.cs @@ -6,7 +6,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisMessageConsumerRedisNotAvailableTestsAsync { @@ -33,3 +32,4 @@ public async Task When_a_message_consumer_throws_a_socket_exception_when_connect //Do not dispose of fake client } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs index e17563e7df..c3610f4eba 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool_async.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisMessageConsumerOperationInterruptedTestsAsync { @@ -32,3 +31,4 @@ public async Task When_a_message_consumer_throws_a_timeout_exception_when_gettin //do not dispose a fake client } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 6744e528cc..827668100b 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisMessageProducerSendTestsAsync @@ -33,3 +32,4 @@ public async Task When_posting_a_message_via_the_messaging_gateway_async() await Assert.That(messageBody).IsEqualTo(_message.Body.Value); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs index 650ceb9496..5516cc9979 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_posting_multiple_messages_via_the_messaging_gateway_async.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisMessageProducerMultipleSendTestsAsync @@ -53,3 +52,4 @@ public async Task When_posting_multiple_messages_via_the_messaging_gateway_async await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 47339e35da..9638ac9ce4 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -29,7 +29,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] [Category("Redis")] [Property("Fragile", "CI")] public class RedisMessageConsumerDeliveryErrorDlqAsyncTests : IAsyncDisposable @@ -100,3 +99,4 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs index 7b3dd2d101..c619c76354 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Proactor/When_requeing_a_failed_message_async.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Proactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisRequeueMessageTestsAsync : IAsyncDisposable @@ -65,3 +64,4 @@ public async ValueTask DisposeAsync() await _redisFixture.MessageProducer.DisposeAsync(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs index 8f69add954..2bc0c9235a 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_socket_exception_when_connecting_to_the_server.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisMessageConsumerRedisNotAvailableTests { @@ -33,3 +32,4 @@ public async Task When_a_message_consumer_throws_a_socket_exception_when_connect //Do not dispose a fake client } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs index e1ad87ac5c..e8043efaf2 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_a_message_consumer_throws_a_timeout_exception_when_connecting_to_the_pool.cs @@ -4,7 +4,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisMessageConsumerOperationInterruptedTests { @@ -31,3 +30,4 @@ public async Task When_a_message_consumer_throws_a_timeout_exception_when_gettin //don't try to dispose, not a real client } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index ece0762d6e..9c4f12f0ab 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisMessageProducerSendTests @@ -99,3 +98,4 @@ public async Task When_posting_a_message_via_the_messaging_gateway() await Assert.That(sentMessage.Header.Baggage).IsEqualTo(_baggage); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs index 1399df9c8a..03c0725b78 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs @@ -3,7 +3,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisMessageProducerMultipleSendTests @@ -52,3 +51,4 @@ public async Task When_posting_a_message_via_the_messaging_gateway() await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index c3b3b22f7c..508bd52a81 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -28,7 +28,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] [Category("Redis")] [Property("Fragile", "CI")] public class RedisMessageConsumerDeliveryErrorDlqTests : IDisposable @@ -99,3 +98,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs index 897e7f61ac..ed33cad15b 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs @@ -28,7 +28,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] [Category("Redis")] [Property("Fragile", "CI")] public class RedisMessageConsumerNoChannelsRejectTests : IDisposable @@ -83,3 +82,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 003d4060f1..4c9daf0905 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -28,7 +28,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] [Category("Redis")] [Property("Fragile", "CI")] public class RedisMessageConsumerUnacceptableFallbackToDlqTests : IDisposable @@ -91,3 +90,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index fd81feafa4..632a34c6d5 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -28,7 +28,6 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] [Category("Redis")] [Property("Fragile", "CI")] public class RedisMessageConsumerUnacceptableInvalidChannelTests : IDisposable @@ -102,3 +101,4 @@ public void Dispose() _messageProducer.Dispose(); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs index a7729bbf6c..73fa835d71 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs @@ -3,7 +3,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway.Reactor; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] [ClassDataSource(Shared = SharedType.PerClass)] public class RedisRequeueMessageTests @@ -57,3 +56,4 @@ public async Task When_requeing_a_failed_message() await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs index efb437b013..46d4689c3c 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_overriding_client_configuration_via_the_gateway.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisGatewayConfigurationTests { @@ -45,3 +44,4 @@ public async Task When_overriding_client_configuration_via_the_gateway() await Assert.That(RedisConfig.VerifyMasterConnections).IsEqualTo(configuration.VerifyMasterConnections.Value); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs index deb43d856a..2e9cae54a9 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_parsing_a_good_redis_message_to_brighter.cs @@ -5,7 +5,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class RedisGoodMessageParsingTests { @@ -42,3 +41,4 @@ public async Task When_parsing_a_good_redis_message_to_brighter() await Assert.That(message.Body.Value).IsEqualTo("more test content"); } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 0957de3208..3cd58f99d5 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -33,7 +33,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// lazily-created requeue producer, and that disposal works in all cases. /// Uses a non-zero delay to exercise the full scheduler path (lesson from Kafka/MQTT). /// -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class When_redis_consumer_creates_producer_should_configure_and_dispose_correctly { @@ -151,3 +150,4 @@ public string Schedule(Message message, TimeSpan delay) public void Cancel(string id) { } } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs index 57f8773b4d..8021731776 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_async_with_delay_should_use_producer.cs @@ -34,7 +34,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// it should delegate to the lazily-created producer's SendWithDelayAsync rather than /// adding it back to the list immediately. /// -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class When_redis_consumer_requeues_async_with_delay_should_use_producer : IAsyncDisposable { @@ -109,3 +108,4 @@ public Task CancelAsync(string id, CancellationToken cancellationToken = default => Task.CompletedTask; } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs index 4c212ef0a0..84656faada 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs @@ -32,7 +32,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// to a lazily-created producer's SendWithDelay rather than adding it back to the list immediately. /// This ensures the delay is respected via the scheduler instead of being ignored. /// -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class When_redis_consumer_requeues_with_delay_should_use_producer : IDisposable { @@ -102,3 +101,4 @@ public string Schedule(Message message, TimeSpan delay) public void Cancel(string id) { } } } + diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs index cad588ebc4..7c12da919a 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs @@ -32,7 +32,6 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway; /// direct Redis list operations rather than creating a producer. This preserves existing /// behavior and ensures immediate requeue without scheduler overhead. /// -[NotInParallel("Redis Shared Pool")] //shared connection pool so run sequentially [Category("Redis")] public class When_redis_consumer_requeues_with_zero_delay_should_use_direct_list : IDisposable { @@ -103,3 +102,4 @@ public string Schedule(Message message, TimeSpan delay) public void Cancel(string id) { } } } + From fcf4039c44cd6aff965ebd5596a5144f9d476d15 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:15:32 +0100 Subject: [PATCH 06/14] test(core): isolate more tests for parallelism --- ...Bag_Should_Be_Accessible_In_The_Handler.cs | 9 ++--- .../TestDoubles/ContextCapture.cs | 6 ++++ .../MyContextAwareCommandHandler.cs | 6 ++-- .../MyContextAwareCommandHandlerAsync.cs | 6 ++-- .../TestDoubles/MyContextAwareEventHandler.cs | 6 ++-- .../MyContextAwareEventHandlerAsync.cs | 6 ++-- .../When_A_Request_Context_Is_Provided.cs | 36 +++++++------------ .../When_No_Request_Context_Is_Provided.cs | 36 +++++++------------ .../MyFailsWithDivideByZeroHandler.cs | 12 ++----- .../MyFailsWithDivideByZeroHandlerAsync.cs | 12 ++----- ...hat_Repeatedely_Fails_Break_The_Circuit.cs | 16 ++++++--- ...peatedely_Fails_Break_The_Circuit_Async.cs | 15 +++++--- ...ing_A_Command_That_Should_Retry_Failure.cs | 16 ++++++--- .../TestDoubles/MyCommandHandlerAsync.cs | 7 ++-- .../TestDoubles/MyEventHandlerAsync.cs | 6 ++-- .../TestDoubles/MyFaultHandlerAsync.cs | 6 ++-- .../TestDoubles/MyOtherCommandHandler.cs | 6 ++-- .../TestDoubles/WorkflowExecutionLog.cs | 14 ++++++++ .../When_running_a_blocking_wait_workflow.cs | 6 ++-- .../When_running_a_change_workflow.cs | 6 ++-- ..._running_a_failing_choice_workflow_step.cs | 14 ++++---- ...running_a_multistep_workflow_with_reply.cs | 14 ++++---- ..._running_a_passing_choice_workflow_step.cs | 14 ++++---- .../When_running_a_single_step_workflow.cs | 9 +++-- .../When_running_a_two_step_workflow.cs | 11 +++--- ...unning_a_workflow_with_a_parallel_split.cs | 11 +++--- .../When_running_a_workflow_with_reply.cs | 14 ++++---- ...ng_a_workflow_with_robust_reply_nofault.cs | 17 ++++----- ...a_workflow_with_robust_reply_with_fault.cs | 19 +++++----- .../When_running_multiple_workflows.cs | 11 +++--- 30 files changed, 176 insertions(+), 191 deletions(-) create mode 100644 tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/ContextCapture.cs create mode 100644 tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/WorkflowExecutionLog.cs diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs index 7d8b234e29..bb852df526 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Context/When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_The_Handler.cs @@ -9,13 +9,14 @@ public class ContextBagVisibilityTests private const string I_AM_A_TEST_OF_THE_CONTEXT_BAG = "I am a test of the context bag"; private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand; + private readonly MyContextAwareCommandHandler _handler; public ContextBagVisibilityTests() { var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); + _handler = new MyContextAwareCommandHandler(); + var handlerFactory = new SimpleHandlerFactorySync(_ => _handler); _myCommand = new MyCommand(); - MyContextAwareCommandHandler.TestString = null; _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } @@ -25,8 +26,8 @@ public async Task When_Putting_A_Variable_Into_The_Bag_Should_Be_Accessible_In_T var requestContext = new RequestContext(); requestContext.Bag["TestString"] = I_AM_A_TEST_OF_THE_CONTEXT_BAG; _commandProcessor.Send(_myCommand, requestContext); - await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(I_AM_A_TEST_OF_THE_CONTEXT_BAG); + await Assert.That(_handler.TestString).IsEqualTo(I_AM_A_TEST_OF_THE_CONTEXT_BAG); await Assert.That(requestContext.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/ContextCapture.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/ContextCapture.cs new file mode 100644 index 0000000000..01388839b6 --- /dev/null +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/ContextCapture.cs @@ -0,0 +1,6 @@ +namespace Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; + +internal sealed class ContextCapture +{ + public string? TestString { get; set; } +} diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandler.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandler.cs index 1b7396006d..59d925765b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandler.cs @@ -24,9 +24,9 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles { - internal sealed class MyContextAwareCommandHandler : RequestHandler + internal sealed class MyContextAwareCommandHandler(ContextCapture? contextCapture = null) : RequestHandler { - public static string? TestString { get; set; } + public string? TestString { get; private set; } public override MyCommand Handle(MyCommand myCommand) { @@ -37,6 +37,8 @@ public override MyCommand Handle(MyCommand myCommand) private void LogContext() { TestString = (string)Context!.Bag["TestString"]; + if (contextCapture is not null) + contextCapture.TestString = TestString; Context.Bag["MyContextAwareCommandHandler"] = "I was called and set the context"; } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandlerAsync.cs index 0bd868f0e9..99a0188a59 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareCommandHandlerAsync.cs @@ -27,9 +27,9 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles { - internal sealed class MyContextAwareCommandHandlerAsync : RequestHandlerAsync + internal sealed class MyContextAwareCommandHandlerAsync(ContextCapture? contextCapture = null) : RequestHandlerAsync { - public static string? TestString { get; set; } + public string? TestString { get; private set; } public override async Task HandleAsync(MyCommand command, CancellationToken cancellationToken = default(CancellationToken)) { @@ -40,6 +40,8 @@ internal sealed class MyContextAwareCommandHandlerAsync : RequestHandlerAsync + internal sealed class MyContextAwareEventHandler(ContextCapture? contextCapture = null) : RequestHandler { - public static string? TestString { get; set; } + public string? TestString { get; private set; } public override MyEvent Handle(MyEvent myEvent) { @@ -37,6 +37,8 @@ public override MyEvent Handle(MyEvent myEvent) private void LogContext() { TestString = (string)Context!.Bag["TestString"]; + if (contextCapture is not null) + contextCapture.TestString = TestString; Context.Bag["MyContextAwareEventHandler"] = "I was called and set the context"; } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareEventHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareEventHandlerAsync.cs index 75c65a8543..34be04494f 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareEventHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/TestDoubles/MyContextAwareEventHandlerAsync.cs @@ -27,9 +27,9 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles { - internal sealed class MyContextAwareEventHandlerAsync : RequestHandlerAsync + internal sealed class MyContextAwareEventHandlerAsync(ContextCapture? contextCapture = null) : RequestHandlerAsync { - public static string? TestString { get; set; } + public string? TestString { get; private set; } public override async Task HandleAsync(MyEvent @event, CancellationToken cancellationToken = default(CancellationToken)) { @@ -40,6 +40,8 @@ internal sealed class MyContextAwareEventHandlerAsync : RequestHandlerAsync _resiliencePipelineRegistry; public RequestContextPresentTests() { - MyContextAwareCommandHandler.TestString = null; - MyContextAwareCommandHandlerAsync.TestString = null; - MyContextAwareEventHandler.TestString = null; - MyContextAwareEventHandlerAsync.TestString = null; _policyRegistry = new DefaultPolicy(); _resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); _requestContextFactory = new SpyContextFactory @@ -35,7 +30,8 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Send() //arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler(contextCapture)); var spyRequestContextFactory = new SpyContextFactory(); var policyRegistry = new DefaultPolicy(); var commandProcessor = new CommandProcessor(registry, handlerFactory, spyRequestContextFactory, policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); @@ -46,7 +42,7 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Send() commandProcessor.Send(new MyCommand(), context); //assert await Assert.That(spyRequestContextFactory.CreateWasCalled).IsFalse(); - await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(testBagValue); + await Assert.That(contextCapture.TestString).IsEqualTo(testBagValue); await Assert.That(context.Bag.Keys).Contains("MyContextAwareCommandHandler"); await Assert.That(context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } @@ -57,7 +53,8 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Send_Async() //arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync(contextCapture)); var spyRequestContextFactory = new SpyContextFactory(); var policyRegistry = new DefaultPolicy(); var commandProcessor = new CommandProcessor(registry, handlerFactory, spyRequestContextFactory, policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); @@ -68,7 +65,7 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Send_Async() await commandProcessor.SendAsync(new MyCommand(), context); //assert await Assert.That(spyRequestContextFactory.CreateWasCalled).IsFalse(); - await Assert.That(MyContextAwareCommandHandlerAsync.TestString).IsEqualTo(testBagValue); + await Assert.That(contextCapture.TestString).IsEqualTo(testBagValue); await Assert.That(context.Bag.Keys).Contains("MyContextAwareCommandHandler"); await Assert.That(context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } @@ -79,7 +76,8 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Publish() //arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler(contextCapture)); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); @@ -88,7 +86,7 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Publish() commandProcessor.Publish(new MyEvent(), context); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); - await Assert.That(MyContextAwareEventHandler.TestString).IsEqualTo(testBagValue); + await Assert.That(contextCapture.TestString).IsEqualTo(testBagValue); await Assert.That(context.Bag.Keys).Contains("MyContextAwareEventHandler"); await Assert.That(context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } @@ -99,7 +97,8 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Publish_Async() //arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync(contextCapture)); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, _policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act var context = new RequestContext(); @@ -108,7 +107,7 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Publish_Async() await commandProcessor.PublishAsync(new MyEvent(), context); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); - await Assert.That(MyContextAwareEventHandlerAsync.TestString).IsEqualTo(testBagValue); + await Assert.That(contextCapture.TestString).IsEqualTo(testBagValue); await Assert.That(context.Bag.Keys).Contains("MyContextAwareEventHandler"); await Assert.That(context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } @@ -222,13 +221,4 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Clear_Async() //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsFalse(); } - - [After(Test)] - public void Dispose() - { - MyContextAwareCommandHandler.TestString = null; - MyContextAwareCommandHandlerAsync.TestString = null; - MyContextAwareEventHandler.TestString = null; - MyContextAwareEventHandlerAsync.TestString = null; - } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs index ce70e2f3d9..8c3836abba 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/When_No_Request_Context_Is_Provided.cs @@ -9,7 +9,6 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.CommandProcessors; -[NotInParallel("ContextAware")] public class RequestContextFromFactoryTests { private readonly SpyContextFactory _requestContextFactory; @@ -17,10 +16,6 @@ public class RequestContextFromFactoryTests private readonly ResiliencePipelineRegistry _resiliencePipelineRegistry; public RequestContextFromFactoryTests() { - MyContextAwareCommandHandler.TestString = null; - MyContextAwareCommandHandlerAsync.TestString = null; - MyContextAwareEventHandler.TestString = null; - MyContextAwareEventHandlerAsync.TestString = null; _policyRegistry = new DefaultPolicy(); _resiliencePipelineRegistry = new ResiliencePipelineRegistry().AddBrighterDefault(); _requestContextFactory = new SpyContextFactory @@ -36,14 +31,15 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Send() //arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareCommandHandler(contextCapture)); var myCommand = new MyCommand(); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act commandProcessor.Send(myCommand); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); - await Assert.That(MyContextAwareCommandHandler.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); + await Assert.That(contextCapture.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } @@ -53,14 +49,15 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Send_Async() //arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareCommandHandlerAsync(contextCapture)); var myCommand = new MyCommand(); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act await commandProcessor.SendAsync(myCommand); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); - await Assert.That(MyContextAwareCommandHandlerAsync.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); + await Assert.That(contextCapture.TestString).IsEqualTo(_requestContextFactory.Context!.Bag["TestString"].ToString()); await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareCommandHandler"]).IsEqualTo("I was called and set the context"); } @@ -70,14 +67,15 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Publish() //arrange var registry = new SubscriberRegistry(); registry.Register(); - var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactorySync(_ => new MyContextAwareEventHandler(contextCapture)); var myEvent = new MyEvent(); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act commandProcessor.Publish(myEvent); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); - await Assert.That(MyContextAwareEventHandler.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); + await Assert.That(contextCapture.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } @@ -87,14 +85,15 @@ public async Task When_No_Request_Context_Is_Provided_On_A_Publish_Async() //arrange var registry = new SubscriberRegistry(); registry.RegisterAsync(); - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync()); + var contextCapture = new ContextCapture(); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyContextAwareEventHandlerAsync(contextCapture)); var myEvent = new MyEvent(); var commandProcessor = new CommandProcessor(registry, handlerFactory, _requestContextFactory, new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); //act await commandProcessor.PublishAsync(myEvent); //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); - await Assert.That(MyContextAwareEventHandlerAsync.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); + await Assert.That(contextCapture.TestString).IsEqualTo(_requestContextFactory.Context.Bag["TestString"].ToString()); await Assert.That(_requestContextFactory.Context.Bag["MyContextAwareEventHandler"]).IsEqualTo("I was called and set the context"); } @@ -195,13 +194,4 @@ public async Task When_A_Request_Context_Is_Provided_On_A_Clear_Async() //assert await Assert.That(_requestContextFactory.CreateWasCalled).IsTrue(); } - - [After(Test)] - public void Dispose() - { - MyContextAwareCommandHandler.TestString = null; - MyContextAwareCommandHandlerAsync.TestString = null; - MyContextAwareEventHandler.TestString = null; - MyContextAwareEventHandlerAsync.TestString = null; - } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandler.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandler.cs index 6f6d9865e9..c341f1b820 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandler.cs @@ -30,12 +30,7 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles { internal sealed class MyFailsWithDivideByZeroHandler : RequestHandler { - public static bool ReceivedCommand { get; set; } - - static MyFailsWithDivideByZeroHandler() - { - ReceivedCommand = false; - } + public bool ReceivedCommand { get; private set; } [UsePolicy("MyDivideByZeroPolicy", 1)] public override MyCommand Handle(MyCommand myCommand) @@ -44,9 +39,6 @@ public override MyCommand Handle(MyCommand myCommand) throw new DivideByZeroException(); } - public static bool ShouldReceive(MyCommand myCommand) - { - return ReceivedCommand; - } + public bool ShouldReceive(MyCommand myCommand) => ReceivedCommand; } } diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandlerAsync.cs index dd046bbe2b..cc73cc2283 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/TestDoubles/MyFailsWithDivideByZeroHandlerAsync.cs @@ -32,12 +32,7 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy.TestDoubles { internal sealed class MyFailsWithDivideByZeroHandlerAsync : RequestHandlerAsync { - public static bool ReceivedCommand { get; set; } - - static MyFailsWithDivideByZeroHandlerAsync() - { - ReceivedCommand = false; - } + public bool ReceivedCommand { get; private set; } [UsePolicyAsync("MyDivideByZeroPolicy", 1)] public override async Task HandleAsync(MyCommand command, CancellationToken cancellationToken = default) @@ -52,9 +47,6 @@ public override async Task HandleAsync(MyCommand command, Cancellatio throw new DivideByZeroException(); } - public static bool ShouldReceive(MyCommand myCommand) - { - return ReceivedCommand; - } + public bool ShouldReceive(MyCommand myCommand) => ReceivedCommand; } } diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs index e920fd5711..3cb632e43b 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit.cs @@ -11,7 +11,6 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { - [NotInParallel("ExceptionPolicy")] public class CommandProcessorWithCircuitBreakerTests { private readonly CommandProcessor _commandProcessor; @@ -19,6 +18,7 @@ public class CommandProcessorWithCircuitBreakerTests private Exception _thirdException; private Exception _firstException; private Exception _secondException; + private readonly ServiceProvider _provider; public CommandProcessorWithCircuitBreakerTests() { var registry = new SubscriberRegistry(); @@ -27,11 +27,11 @@ public CommandProcessorWithCircuitBreakerTests() container.AddSingleton(); container.AddSingleton>(); container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); + _provider = container.BuildServiceProvider(); + var handlerFactory = new ServiceProviderHandlerFactory(_provider); var policyRegistry = new PolicyRegistry(); var policy = Policy.Handle().CircuitBreaker(2, TimeSpan.FromMinutes(1)); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandler.ReceivedCommand = false; _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } @@ -45,7 +45,7 @@ public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit //this one should tell us that the circuit is broken _thirdException = Catch.Exception(() => _commandProcessor.Send(_myCommand)); // Should send the command to the command handler - await Assert.That(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)).IsTrue(); + await Assert.That(_provider.GetRequiredService().ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception @@ -53,5 +53,11 @@ public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit // Should break the circuit after two fails await Assert.That(_thirdException).IsTypeOf(); } + + [After(Test)] + public void Dispose() + { + _provider.Dispose(); + } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs index ce32eb5e37..ab1bcc1b25 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Repeatedely_Fails_Break_The_Circuit_Async.cs @@ -19,6 +19,7 @@ public class CommandProcessorWithCircuitBreakerAsyncTests private Exception? _thirdException; private Exception? _firstException; private Exception? _secondException; + private readonly ServiceProvider _provider; public CommandProcessorWithCircuitBreakerAsyncTests() { var registry = new SubscriberRegistry(); @@ -27,11 +28,11 @@ public CommandProcessorWithCircuitBreakerAsyncTests() container.AddSingleton(); container.AddSingleton>(); container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); + _provider = container.BuildServiceProvider(); + var handlerFactory = new ServiceProviderHandlerFactory(_provider); var policyRegistry = new PolicyRegistry(); var policy = Policy.Handle().CircuitBreakerAsync(2, TimeSpan.FromMinutes(1)); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandlerAsync.ReceivedCommand = false; _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } @@ -45,7 +46,7 @@ public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit //this one should tell us that the circuit is broken _thirdException = await Catch.ExceptionAsync(() => _commandProcessor.SendAsync(_myCommand)); // Should send the command to the command handler - await Assert.That(MyFailsWithDivideByZeroHandlerAsync.ShouldReceive(_myCommand)).IsTrue(); + await Assert.That(_provider.GetRequiredService().ShouldReceive(_myCommand)).IsTrue(); // Should bubble up the first exception await Assert.That(_firstException).IsTypeOf(); // Should bubble up the second exception @@ -53,5 +54,11 @@ public async Task When_Sending_A_Command_That_Repeatedly_Fails_Break_The_Circuit // Should break the circuit after two fails await Assert.That(_thirdException).IsTypeOf(); } + + [After(Test)] + public void Dispose() + { + _provider.Dispose(); + } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs index fa9bea6bde..2acab22b98 100644 --- a/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs +++ b/tests/Paramore.Brighter.Core.Tests/ExceptionPolicy/When_Sending_A_Command_That_Should_Retry_Failure.cs @@ -10,12 +10,12 @@ namespace Paramore.Brighter.Core.Tests.ExceptionPolicy { - [NotInParallel("ExceptionPolicy")] public class CommandProcessorWithRetryPolicyTests { private readonly CommandProcessor _commandProcessor; private readonly MyCommand _myCommand = new MyCommand(); private int _retryCount; + private readonly ServiceProvider _provider; public CommandProcessorWithRetryPolicyTests() { var registry = new SubscriberRegistry(); @@ -24,11 +24,11 @@ public CommandProcessorWithRetryPolicyTests() container.AddSingleton(); container.AddSingleton>(); container.AddSingleton(new BrighterOptions { HandlerLifetime = ServiceLifetime.Transient }); - var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider()); + _provider = container.BuildServiceProvider(); + var handlerFactory = new ServiceProviderHandlerFactory(_provider); var policyRegistry = new PolicyRegistry(); var policy = Policy.Handle().WaitAndRetry([TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(20), TimeSpan.FromMilliseconds(30)], (exception, timeSpan) => _retryCount++); policyRegistry.Add("MyDivideByZeroPolicy", policy); - MyFailsWithDivideByZeroHandler.ReceivedCommand = false; _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry, new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); } @@ -38,9 +38,15 @@ public async Task When_Sending_A_Command_That_Should_Retry_Failure() { Catch.Exception(() => _commandProcessor.Send(_myCommand)); //_should_send_the_command_to_the_command_handler - await Assert.That(MyFailsWithDivideByZeroHandler.ShouldReceive(_myCommand)).IsTrue(); + await Assert.That(_provider.GetRequiredService().ShouldReceive(_myCommand)).IsTrue(); //_should_retry_three_times await Assert.That(_retryCount).IsEqualTo(3); } + + [After(Test)] + public void Dispose() + { + _provider.Dispose(); + } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyCommandHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyCommandHandlerAsync.cs index 5fd95797f0..fc89f2a3fe 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyCommandHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyCommandHandlerAsync.cs @@ -28,11 +28,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Workflows.TestDoubles { - internal class MyCommandHandlerAsync(IAmACommandProcessor? commandProcessor, bool raiseFault = false) : RequestHandlerAsync + internal class MyCommandHandlerAsync(IAmACommandProcessor? commandProcessor, WorkflowExecutionLog executionLog, bool raiseFault = false) : RequestHandlerAsync { - public static List ReceivedCommands { get; } = []; - - public override async Task HandleAsync(MyCommand command, CancellationToken cancellationToken = default) { LogCommand(command); @@ -47,7 +44,7 @@ public override async Task HandleAsync(MyCommand command, Cancellatio private void LogCommand(MyCommand request) { - ReceivedCommands.Add(request); + executionLog.Commands.Add(request); } } } diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyEventHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyEventHandlerAsync.cs index 6da286c4f9..ce9f51fdd6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyEventHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyEventHandlerAsync.cs @@ -29,10 +29,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Workflows.TestDoubles { - internal class MyEventHandlerAsync(Scheduler? scheduler) : RequestHandlerAsync + internal class MyEventHandlerAsync(Scheduler? scheduler, WorkflowExecutionLog executionLog) : RequestHandlerAsync { - public static List ReceivedEvents { get; } = []; - public override async Task HandleAsync(MyEvent @event, CancellationToken cancellationToken = default) { LogEvent(@event); @@ -42,7 +40,7 @@ public override async Task HandleAsync(MyEvent @event, CancellationToke private void LogEvent(MyEvent request) { - ReceivedEvents.Add(request); + executionLog.Events.Add(request); } } } diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyFaultHandlerAsync.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyFaultHandlerAsync.cs index fb4161bab1..ac96e7a65d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyFaultHandlerAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyFaultHandlerAsync.cs @@ -29,10 +29,8 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Core.Tests.Workflows.TestDoubles { - internal class MyFaultHandlerAsync(Scheduler? scheduler) : RequestHandlerAsync + internal class MyFaultHandlerAsync(Scheduler? scheduler, WorkflowExecutionLog executionLog) : RequestHandlerAsync { - public static List ReceivedFaults { get; } = []; - public override async Task HandleAsync(MyFault @event, CancellationToken cancellationToken = default) { LogEvent(@event); @@ -42,7 +40,7 @@ public override async Task HandleAsync(MyFault @event, CancellationToke private void LogEvent(MyFault request) { - ReceivedFaults.Add(request); + executionLog.Faults.Add(request); } } } diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyOtherCommandHandler.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyOtherCommandHandler.cs index 650f0fb4e1..a515ba8829 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyOtherCommandHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/MyOtherCommandHandler.cs @@ -4,10 +4,8 @@ namespace Paramore.Brighter.Core.Tests.Workflows.TestDoubles; -public class MyOtherCommandHandlerAsync(IAmACommandProcessor commandProcessor) : RequestHandlerAsync +internal class MyOtherCommandHandlerAsync(IAmACommandProcessor commandProcessor, WorkflowExecutionLog executionLog) : RequestHandlerAsync { - public static List ReceivedCommands { get; set; } = []; - public override async Task HandleAsync(MyOtherCommand command, CancellationToken cancellationToken = default) { LogCommand(command); @@ -17,7 +15,7 @@ public override async Task HandleAsync(MyOtherCommand command, C private void LogCommand(MyOtherCommand request) { - ReceivedCommands.Add(request); + executionLog.OtherCommands.Add(request); } } diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/WorkflowExecutionLog.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/WorkflowExecutionLog.cs new file mode 100644 index 0000000000..793fee1e0a --- /dev/null +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/TestDoubles/WorkflowExecutionLog.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Paramore.Brighter.Core.Tests.Workflows.TestDoubles; + +internal sealed class WorkflowExecutionLog +{ + public List Commands { get; } = []; + + public List OtherCommands { get; } = []; + + public List Events { get; } = []; + + public List Faults { get; } = []; +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs index ec61d57173..66d92e4773 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_blocking_wait_workflow.cs @@ -7,12 +7,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorWaitStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; private readonly FakeTimeProvider _timeProvider = new(); private readonly Waker _waker; @@ -21,7 +21,7 @@ public MediatorWaitStepFlowTests() var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; @@ -60,4 +60,4 @@ public async Task When_running_a_wait_workflow() await Assert.That(_stepCompleted).IsTrue(); await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs index cd7c01688b..3fea471191 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_change_workflow.cs @@ -6,19 +6,19 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorChangeStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; public MediatorChangeStepFlowTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData { @@ -65,4 +65,4 @@ public async Task When_running_a_change_workflow() await Assert.That(_stepCompleted).IsTrue(); await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Altered"); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs index 1e9c82f2e7..9fc8e75d31 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_failing_choice_workflow_step.cs @@ -7,12 +7,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorFailingChoiceFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompletedOne; private bool _stepCompletedTwo; private bool _stepCompletedThree; @@ -25,8 +25,8 @@ public MediatorFailingChoiceFlowTests() IAmACommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new MyOtherCommandHandlerAsync(commandProcessor), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog), + _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new MyOtherCommandHandlerAsync(commandProcessor, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -54,8 +54,6 @@ public MediatorFailingChoiceFlowTests() [Test] public async Task When_running_a_choice_workflow_step() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyOtherCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -72,7 +70,7 @@ public async Task When_running_a_choice_workflow_step() await Assert.That(_stepCompletedOne).IsTrue(); await Assert.That(_stepCompletedTwo).IsFalse(); await Assert.That(_stepCompletedThree).IsTrue(); - await Assert.That(MyOtherCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Fail"); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands.Any()).IsFalse(); + await Assert.That(_executionLog.OtherCommands).Contains(c => c.Value == "Fail"); + await Assert.That(_executionLog.Commands.Any()).IsFalse(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs index 3f1941942f..074459fd9a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_multistep_workflow_with_reply.cs @@ -6,12 +6,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorReplyMultiStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompletedOne; private bool _stepCompletedTwo; public MediatorReplyMultiStepFlowTests() @@ -22,8 +22,8 @@ public MediatorReplyMultiStepFlowTests() IAmACommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -47,8 +47,6 @@ public MediatorReplyMultiStepFlowTests() [Test] public async Task When_running_a_workflow_with_reply() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyEventHandlerAsync.ReceivedEvents.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -63,8 +61,8 @@ public async Task When_running_a_workflow_with_reply() await Assert.That(_stepCompletedOne).IsTrue(); await Assert.That(_stepCompletedTwo).IsTrue(); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Events).Contains(e => e.Value == "Test"); await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs index 48e1bcd2bc..d8fb784142 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_passing_choice_workflow_step.cs @@ -7,12 +7,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorPassingChoiceFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompletedOne; private bool _stepCompletedTwo; private bool _stepCompletedThree; @@ -25,8 +25,8 @@ public MediatorPassingChoiceFlowTests() IAmACommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new(commandProcessor), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog), + _ when handlerType == typeof(MyOtherCommandHandlerAsync) => new(commandProcessor, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -54,8 +54,6 @@ public MediatorPassingChoiceFlowTests() [Test] public async Task When_running_a_choice_workflow_step() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyOtherCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -71,8 +69,8 @@ public async Task When_running_a_choice_workflow_step() await Assert.That(_stepCompletedOne).IsTrue(); await Assert.That(_stepCompletedTwo).IsTrue(); await Assert.That(_stepCompletedThree).IsFalse(); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Pass"); - await Assert.That(MyOtherCommandHandlerAsync.ReceivedCommands.Any()).IsFalse(); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Pass"); + await Assert.That(_executionLog.OtherCommands.Any()).IsFalse(); await Assert.That(_stepCompletedOne).IsTrue(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs index 4d0f494ac8..be04899f47 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_single_step_workflow.cs @@ -6,19 +6,19 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorOneStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; public MediatorOneStepFlowTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; @@ -37,7 +37,6 @@ public MediatorOneStepFlowTests() [Test] public async Task When_running_a_single_step_workflow() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -50,8 +49,8 @@ public async Task When_running_a_single_step_workflow() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); await Assert.That(_job.State).IsEqualTo(JobState.Done); await Assert.That(_stepCompleted).IsTrue(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs index 7dd2860604..440dcc861f 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_two_step_workflow.cs @@ -6,19 +6,19 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorTwoStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepsCompleted; public MediatorTwoStepFlowTests() { var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); workflowData.Bag["MyValue"] = "Test"; @@ -41,7 +41,6 @@ public MediatorTwoStepFlowTests() [Test] public async Task When_running_a_two_step_workflow() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -54,9 +53,9 @@ public async Task When_running_a_two_step_workflow() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "TestTwo"); await Assert.That(_job.State).IsEqualTo(JobState.Done); await Assert.That(_stepsCompleted).IsTrue(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs index 89f612dd1a..e722ef7210 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_a_parallel_split.cs @@ -6,12 +6,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorParallelSplitFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _firstBranchFinished; private bool _secondBranchFinished; public MediatorParallelSplitFlowTests() @@ -19,7 +19,7 @@ public MediatorParallelSplitFlowTests() var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); _job = new Job(workflowData); @@ -47,7 +47,6 @@ public MediatorParallelSplitFlowTests() [Test] public async Task When_running_a_workflow_with_a_parallel_split() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(3)); @@ -60,10 +59,10 @@ public async Task When_running_a_workflow_with_a_parallel_split() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "TestTwo"); await Assert.That(_firstBranchFinished).IsTrue(); await Assert.That(_secondBranchFinished).IsTrue(); await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs index 9cc21c4032..2817eeb336 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_reply.cs @@ -10,12 +10,12 @@ using MyEventHandlerAsync = Paramore.Brighter.Core.Tests.Workflows.TestDoubles.MyEventHandlerAsync; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorReplyStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; public MediatorReplyStepFlowTests() { @@ -25,8 +25,8 @@ public MediatorReplyStepFlowTests() IAmACommandProcessor? commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -49,8 +49,6 @@ public MediatorReplyStepFlowTests() [Test] public async Task When_running_a_workflow_with_reply() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyEventHandlerAsync.ReceivedEvents.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(3)); @@ -64,8 +62,8 @@ public async Task When_running_a_workflow_with_reply() } await Assert.That(_stepCompleted).IsTrue(); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Events).Contains(e => e.Value == "Test"); await Assert.That(_job.State).IsEqualTo(JobState.Done); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs index 4b8c0d5e47..73052f3d00 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_nofault.cs @@ -6,12 +6,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorRobustReplyNoFaultStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; private bool _stepFaulted; public MediatorRobustReplyNoFaultStepFlowTests() @@ -22,8 +22,8 @@ public MediatorRobustReplyNoFaultStepFlowTests() IAmACommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -52,9 +52,6 @@ public MediatorRobustReplyNoFaultStepFlowTests() [Test] public async Task When_running_a_workflow_with_reply() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyEventHandlerAsync.ReceivedEvents.Clear(); - MyFaultHandlerAsync.ReceivedFaults.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -67,13 +64,13 @@ public async Task When_running_a_workflow_with_reply() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyEventHandlerAsync.ReceivedEvents).Contains(e => e.Value == "Test"); - await Assert.That(MyFaultHandlerAsync.ReceivedFaults).IsEmpty(); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Events).Contains(e => e.Value == "Test"); + await Assert.That(_executionLog.Faults).IsEmpty(); await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Test"); await Assert.That(_job.Data.Bag["MyReply"]).IsEqualTo("Test"); await Assert.That(_job.State).IsEqualTo(JobState.Done); await Assert.That(_stepCompleted).IsTrue(); await Assert.That(_stepFaulted).IsFalse(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs index ce019c4cff..48969cdbfb 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_a_workflow_with_robust_reply_with_fault.cs @@ -6,12 +6,12 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorRobustReplyFaultStepFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _job; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _stepCompleted; private bool _stepFaulted; public MediatorRobustReplyFaultStepFlowTests() @@ -23,9 +23,9 @@ public MediatorRobustReplyFaultStepFlowTests() IAmACommandProcessor commandProcessor = null; var handlerFactory = new SimpleHandlerFactoryAsync((handlerType) => handlerType switch { - _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, raiseFault: true), - _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler), - _ when handlerType == typeof(MyFaultHandlerAsync) => new MyFaultHandlerAsync(_scheduler), + _ when handlerType == typeof(MyCommandHandlerAsync) => new MyCommandHandlerAsync(commandProcessor, _executionLog, raiseFault: true), + _ when handlerType == typeof(MyEventHandlerAsync) => new MyEventHandlerAsync(_scheduler, _executionLog), + _ when handlerType == typeof(MyFaultHandlerAsync) => new MyFaultHandlerAsync(_scheduler, _executionLog), _ => throw new InvalidOperationException($"The handler type {handlerType} is not supported")}); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var workflowData = new WorkflowTestData(); @@ -54,9 +54,6 @@ public MediatorRobustReplyFaultStepFlowTests() [Test] public async Task When_running_a_workflow_with_reply() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); - MyEventHandlerAsync.ReceivedEvents.Clear(); - MyFaultHandlerAsync.ReceivedFaults.Clear(); await _scheduler.ScheduleAsync(_job); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(1)); @@ -69,13 +66,13 @@ public async Task When_running_a_workflow_with_reply() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyFaultHandlerAsync.ReceivedFaults).Contains(e => e.Value == "Test"); - await Assert.That(MyEventHandlerAsync.ReceivedEvents).IsEmpty(); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Faults).Contains(e => e.Value == "Test"); + await Assert.That(_executionLog.Events).IsEmpty(); await Assert.That(_job.Data.Bag["MyValue"]).IsEqualTo("Test"); await Assert.That(_job.Data.Bag["MyFault"]).IsEqualTo("Test"); await Assert.That(_job.State).IsEqualTo(JobState.Done); await Assert.That(_stepCompleted).IsTrue(); await Assert.That(_stepFaulted).IsFalse(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs index f0b8796c71..8c7ed62cd4 100644 --- a/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs +++ b/tests/Paramore.Brighter.Core.Tests/Workflows/When_running_multiple_workflows.cs @@ -6,13 +6,13 @@ using Polly.Registry; namespace Paramore.Brighter.Core.Tests.Workflows; -[NotInParallel("Workflows")] public class MediatorMultipleWorkflowFlowTests { private readonly Scheduler _scheduler; private readonly Runner _runner; private readonly Job _firstJob; private readonly Job _secondJob; + private readonly WorkflowExecutionLog _executionLog = new(); private bool _jobOneCompleted; private bool _jobTwoCompleted; public MediatorMultipleWorkflowFlowTests() @@ -20,7 +20,7 @@ public MediatorMultipleWorkflowFlowTests() var registry = new SubscriberRegistry(); registry.RegisterAsync(); CommandProcessor? commandProcessor = null; - var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor)); + var handlerFactory = new SimpleHandlerFactoryAsync(_ => new MyCommandHandlerAsync(commandProcessor, _executionLog)); commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry(), new ResiliencePipelineRegistry(), new InMemorySchedulerFactory()); var firstWorkflowData = new WorkflowTestData { @@ -52,7 +52,6 @@ public MediatorMultipleWorkflowFlowTests() [Test] public async Task When_running_a_single_step_workflow() { - MyCommandHandlerAsync.ReceivedCommands.Clear(); await _scheduler.ScheduleAsync([_firstJob, _secondJob]); var ct = new CancellationTokenSource(); ct.CancelAfter(TimeSpan.FromSeconds(120)); @@ -65,11 +64,11 @@ public async Task When_running_a_single_step_workflow() Console.WriteLine(e.ToString()); } - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "Test"); - await Assert.That(MyCommandHandlerAsync.ReceivedCommands).Contains(c => c.Value == "TestTwo"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "Test"); + await Assert.That(_executionLog.Commands).Contains(c => c.Value == "TestTwo"); await Assert.That(_firstJob.State).IsEqualTo(JobState.Done); await Assert.That(_secondJob.State).IsEqualTo(JobState.Done); await Assert.That(_jobOneCompleted).IsTrue(); await Assert.That(_jobTwoCompleted).IsTrue(); } -} \ No newline at end of file +} From 66e565e90b38c870b70fa0f672b8f2fdd3e81128 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:32:41 +0100 Subject: [PATCH 07/14] fix: restore public API and isolate pipeline caches --- src/Paramore.Brighter/Id.cs | 2 +- src/Paramore.Brighter/PipelineBuilder.cs | 57 +++++++++++++------ src/Paramore.Brighter/RoutingKey.cs | 2 +- .../TransformPipelineBuilder.cs | 9 +++ .../TransformPipelineBuilderAsync.cs | 9 +++ 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/src/Paramore.Brighter/Id.cs b/src/Paramore.Brighter/Id.cs index 4a9e46bd66..521229ce3f 100644 --- a/src/Paramore.Brighter/Id.cs +++ b/src/Paramore.Brighter/Id.cs @@ -92,7 +92,7 @@ public static bool IsNullOrEmpty([NotNullWhen(false)] Id? id) /// /// The to convert. /// The value of the identifier. - public static implicit operator string(Id id) => id?.Value!; + public static implicit operator string(Id id) => id.Value; /// /// Implicitly converts a string to an Id. diff --git a/src/Paramore.Brighter/PipelineBuilder.cs b/src/Paramore.Brighter/PipelineBuilder.cs index a76ddfdbc9..4d52c8ec9f 100644 --- a/src/Paramore.Brighter/PipelineBuilder.cs +++ b/src/Paramore.Brighter/PipelineBuilder.cs @@ -245,6 +245,18 @@ public AsyncPipelines BuildAsync(TRequest request, IRequestContext req } } + /// + /// Clears any cached pipeline definitions. + /// + /// + /// Intended primarily for testing scenarios where static caches may cause shared state between tests. + /// + public static void ClearPipelineCache() + { + s_preAttributesMemento.Clear(); + s_postAttributesMemento.Clear(); + } + /// /// Disposes all instance scopes created by this builder. /// @@ -261,9 +273,16 @@ private IHandleRequests BuildPipeline(RequestHandler implici implicitHandler.Context = requestContext; - var preCacheKey = GetPreAttributesCacheKey(implicitHandler.Name.ToString()); - if (!s_preAttributesMemento.TryGetValue(preCacheKey, - out IReadOnlyList? preAttributes)) + IReadOnlyList? preAttributes = null; + var shouldCachePreAttributes = _inboxConfiguration == null; + + if (shouldCachePreAttributes) + { + s_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), + out preAttributes); + } + + if (preAttributes is null) { var orderedPreAttributes = implicitHandler.FindHandlerMethod() @@ -274,7 +293,11 @@ private IHandleRequests BuildPipeline(RequestHandler implici AddGlobalInboxAttributes(ref orderedPreAttributes, implicitHandler); preAttributes = orderedPreAttributes.ToList().AsReadOnly(); - s_preAttributesMemento.TryAdd(preCacheKey, preAttributes); + + if (shouldCachePreAttributes) + { + s_preAttributesMemento.TryAdd(implicitHandler.Name.ToString(), preAttributes); + } } var firstInPipeline = PushOntoPipeline(preAttributes, implicitHandler, requestContext, instanceScope); @@ -309,8 +332,15 @@ private IHandleRequestsAsync BuildAsyncPipeline(RequestHandlerAsync? preAttributes)) + IReadOnlyList? preAttributes = null; + var shouldCachePreAttributes = _inboxConfiguration == null; + + if (shouldCachePreAttributes) + { + s_preAttributesMemento.TryGetValue(implicitHandler.Name.ToString(), out preAttributes); + } + + if (preAttributes is null) { var orderedPreAttributes = implicitHandler.FindHandlerMethod() @@ -321,7 +351,11 @@ private IHandleRequestsAsync BuildAsyncPipeline(RequestHandlerAsync handler.Step); } - /// - /// Builds a cache key for pre-attributes that accounts for inbox configuration. - /// The global inbox adds a dynamic to the pipeline attributes, - /// so pipelines built with and without inbox configuration must be cached separately. - /// Post-attributes are not affected by inbox configuration and use the handler name directly. - /// - private string GetPreAttributesCacheKey(string handlerName) - => _inboxConfiguration != null ? $"{handlerName}:inbox" : handlerName; - private IHandleRequests PushOntoPipeline(IEnumerable attributes, IHandleRequests lastInPipeline, IRequestContext requestContext, IAmALifetime instanceScope) { diff --git a/src/Paramore.Brighter/RoutingKey.cs b/src/Paramore.Brighter/RoutingKey.cs index d5c61a49f9..74095c7e68 100644 --- a/src/Paramore.Brighter/RoutingKey.cs +++ b/src/Paramore.Brighter/RoutingKey.cs @@ -92,7 +92,7 @@ public override string ToString() /// The result of the conversion. public static implicit operator string(RoutingKey rhs) { - return rhs?.ToString()!; + return rhs.ToString(); } /// diff --git a/src/Paramore.Brighter/TransformPipelineBuilder.cs b/src/Paramore.Brighter/TransformPipelineBuilder.cs index f8d829a6f3..bdf1683e4a 100644 --- a/src/Paramore.Brighter/TransformPipelineBuilder.cs +++ b/src/Paramore.Brighter/TransformPipelineBuilder.cs @@ -221,6 +221,15 @@ private IEnumerable BuildTransformPipeline(IEnum return new TransformPipelineDescription(mapperType, isDefault, wrapTransforms, unwrapTransforms); } + /// + /// Clears any cached transform pipeline definitions. + /// + public static void ClearPipelineCache() + { + s_wrapTransformsMemento.Clear(); + s_unWrapTransformsMemento.Clear(); + } + private IAmAMessageMapper FindMessageMapper() where TRequest : class, IRequest { var messageMapper = _mapperRegistry.Get(); diff --git a/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs b/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs index 7b6fb023e4..dca503a5eb 100644 --- a/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs +++ b/src/Paramore.Brighter/TransformPipelineBuilderAsync.cs @@ -184,6 +184,15 @@ private IEnumerable BuildTransformPipeline( return transforms; } + /// + /// Clears any cached async transform pipeline definitions. + /// + public static void ClearPipelineCache() + { + s_wrapTransformsMemento.Clear(); + s_unWrapTransformsMemento.Clear(); + } + private IAmAMessageMapperAsync FindMessageMapper() where TRequest : class, IRequest { var messageMapper = _mapperRegistryAsync.GetAsync(); From e888c85144bad3760e065752ce0edad199efc56a Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:38:16 +0100 Subject: [PATCH 08/14] build: remove xunit package references --- Directory.Packages.props | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index b587558c52..0da86b6574 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -141,14 +141,7 @@ - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - @@ -194,4 +187,4 @@ runtime; build; native; contentfiles; analyzers - \ No newline at end of file + From e7688c64d87e1d1f87d56d325d89fb54bd816ea0 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:46:26 +0100 Subject: [PATCH 09/14] ci: update dotnet test tree filters --- .github/workflows/ci.yml | 56 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f2b1364689..6266a9a96c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,9 +66,9 @@ jobs: core.exportVariable('ACTIONS_RESULTS_URL', process.env['ACTIONS_RESULTS_URL']); - name: Core Tests run: | - dotnet test tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj --filter "Fragile!=CI" -c Release --logger GitHubActions --no-restore --no-build --verbosity d - dotnet test tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d - dotnet test tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" -c Release --logger GitHubActions --no-restore --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d - name: Upload packages as artifacts uses: actions/upload-artifact@v7 @@ -110,7 +110,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: In Memory Transport Tests - run: dotnet test ./tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n hangfire: runs-on: ubuntu-latest @@ -128,7 +128,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Hangfire Tests - run: dotnet test ./tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n quartz: runs-on: ubuntu-latest @@ -146,7 +146,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Quartz Tests - run: dotnet test ./tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n tickerq: runs-on: ubuntu-latest @@ -164,7 +164,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: TickerQ Tests - run: dotnet test ./tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n redis-ci: runs-on: ubuntu-latest @@ -196,7 +196,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Redis Transport Tests - run: dotnet test ./tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n mqtt-ci: runs-on: ubuntu-latest @@ -221,7 +221,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MQTT Transport Tests - run: dotnet test ./tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj --filter "Category=MQTT&Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj --treenode-filter "/*/*/*/*[Category=MQTT]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n rabbitmq-ci: runs-on: ubuntu-latest @@ -251,9 +251,9 @@ jobs: - name: Install dependencies run: dotnet restore - name: RMQ Async Transport Tests - run: dotnet test ./tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj --filter "Fragile!=CI&Requires!=Docker-mTLS" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - name: RMQ Sync Transport Tests - run: dotnet test ./tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj --filter "Fragile!=CI&Requires!=Docker-mTLS" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n kafka-ci: runs-on: ubuntu-latest @@ -328,7 +328,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Kafka Transport Tests - run: dotnet test ./tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj --filter "Category=Kafka&Category!=Confluent&Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj --treenode-filter "/*/*/*/*[Category=Kafka]&[Category!=Confluent]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n postgres-ci: runs-on: ubuntu-latest @@ -359,7 +359,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Postgres Tests - run: dotnet test ./tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n sqlserver-ci: runs-on: ubuntu-latest @@ -385,7 +385,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MSSQL Tests - run: dotnet test ./tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n mysql-ci: runs-on: ubuntu-latest @@ -420,7 +420,7 @@ jobs: sleep 1 done - name: MySQL Tests - run: dotnet test ./tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n dynamo-ci: runs-on: ubuntu-latest @@ -445,8 +445,8 @@ jobs: run: dotnet restore - name: DynamoDB Tests run: | - dotnet test ./tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test ./tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n localstack-ci: runs-on: ubuntu-latest @@ -483,8 +483,8 @@ jobs: Linux-nuget- - name: AWS Tests run: | - dotnet test ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n aws-ci: runs-on: ubuntu-latest @@ -517,8 +517,8 @@ jobs: aws-region: eu-west-1 - name: AWS SNS, SQS and S3 Tests run: | - dotnet test ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - name: Cleanup orphaned test resources if: always() run: | @@ -557,8 +557,8 @@ jobs: aws-region: eu-west-1 - name: Scheduler Tests run: | - dotnet test ./tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test ./tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - name: Cleanup orphaned test resources if: always() run: | @@ -582,7 +582,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Sqlite Tests - run: dotnet test ./tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n azure-ci: runs-on: ubuntu-latest @@ -604,7 +604,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Azure Tests - run: dotnet test ./tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n mongodb-ci: runs-on: ubuntu-latest @@ -636,7 +636,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MongoDB Tests - run: dotnet test ./tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n gcp-ci: runs-on: ubuntu-latest @@ -673,7 +673,7 @@ jobs: run: dotnet restore - name: GCP Tests - run: dotnet test ./tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj --filter "Category!=Spanner&Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj --treenode-filter "/*/*/*/*[Category!=Spanner]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n # TODO: Rafael Andrade is working on how to run RocketMQ on GHA # rocketmq-ci: @@ -737,4 +737,4 @@ jobs: # run: dotnet restore # # - name: RocketMQ Tests -# run: dotnet test ./tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj --filter "Fragile!=CI" --configuration Release --logger "console;verbosity=normal" --blame -v n +# run: dotnet test --project ./tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --blame -v n From 438adf9955bf6d0a6b9133385865debbeac05fdb Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:54:13 +0100 Subject: [PATCH 10/14] ci: remove unsupported test loggers --- .github/workflows/ci.yml | 56 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6266a9a96c..5e2fa80943 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,9 +66,9 @@ jobs: core.exportVariable('ACTIONS_RESULTS_URL', process.env['ACTIONS_RESULTS_URL']); - name: Core Tests run: | - dotnet test --project tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" -c Release --logger GitHubActions --no-restore --no-build --verbosity d - dotnet test --project tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d - dotnet test --project tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj -c Release --no-restore --logger GitHubActions --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Core.Tests/Paramore.Brighter.Core.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" -c Release --no-restore --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Extensions.Tests/Paramore.Brighter.Extensions.Tests.csproj -c Release --no-restore --no-build --verbosity d + dotnet test --project tests/Paramore.Brighter.Transforms.Adaptors.Tests/Paramore.Brighter.Transforms.Adaptors.Tests.csproj -c Release --no-restore --no-build --verbosity d - name: Upload packages as artifacts uses: actions/upload-artifact@v7 @@ -110,7 +110,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: In Memory Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.InMemory.Tests/Paramore.Brighter.InMemory.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n hangfire: runs-on: ubuntu-latest @@ -128,7 +128,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Hangfire Tests - run: dotnet test --project ./tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Hangfire.Tests/Paramore.Brighter.Hangfire.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n quartz: runs-on: ubuntu-latest @@ -146,7 +146,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Quartz Tests - run: dotnet test --project ./tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Quartz.Tests/Paramore.Brighter.Quartz.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n tickerq: runs-on: ubuntu-latest @@ -164,7 +164,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: TickerQ Tests - run: dotnet test --project ./tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.TickerQ.Tests/Paramore.Brighter.TickerQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n redis-ci: runs-on: ubuntu-latest @@ -196,7 +196,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Redis Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Redis.Tests/Paramore.Brighter.Redis.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n mqtt-ci: runs-on: ubuntu-latest @@ -221,7 +221,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MQTT Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj --treenode-filter "/*/*/*/*[Category=MQTT]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MQTT.Tests/Paramore.Brighter.MQTT.Tests.csproj --treenode-filter "/*/*/*/*[Category=MQTT]&[Fragile!=CI]" --configuration Release --blame -v n rabbitmq-ci: runs-on: ubuntu-latest @@ -251,9 +251,9 @@ jobs: - name: Install dependencies run: dotnet restore - name: RMQ Async Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Async.Tests/Paramore.Brighter.RMQ.Async.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --blame -v n - name: RMQ Sync Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.RMQ.Sync.Tests/Paramore.Brighter.RMQ.Sync.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]&[Requires!=Docker-mTLS]" --configuration Release --blame -v n kafka-ci: runs-on: ubuntu-latest @@ -328,7 +328,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Kafka Transport Tests - run: dotnet test --project ./tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj --treenode-filter "/*/*/*/*[Category=Kafka]&[Category!=Confluent]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Kafka.Tests/Paramore.Brighter.Kafka.Tests.csproj --treenode-filter "/*/*/*/*[Category=Kafka]&[Category!=Confluent]&[Fragile!=CI]" --configuration Release --blame -v n postgres-ci: runs-on: ubuntu-latest @@ -359,7 +359,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Postgres Tests - run: dotnet test --project ./tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.PostgresSQL.Tests/Paramore.Brighter.PostgresSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n sqlserver-ci: runs-on: ubuntu-latest @@ -385,7 +385,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MSSQL Tests - run: dotnet test --project ./tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MSSQL.Tests/Paramore.Brighter.MSSQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n mysql-ci: runs-on: ubuntu-latest @@ -420,7 +420,7 @@ jobs: sleep 1 done - name: MySQL Tests - run: dotnet test --project ./tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MySQL.Tests/Paramore.Brighter.MySQL.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n dynamo-ci: runs-on: ubuntu-latest @@ -445,8 +445,8 @@ jobs: run: dotnet restore - name: DynamoDB Tests run: | - dotnet test --project ./tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test --project ./tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.DynamoDB.Tests/Paramore.Brighter.DynamoDB.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n + dotnet test --project ./tests/Paramore.Brighter.DynamoDB.V4.Tests/Paramore.Brighter.DynamoDB.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n localstack-ci: runs-on: ubuntu-latest @@ -483,8 +483,8 @@ jobs: Linux-nuget- - name: AWS Tests run: | - dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n aws-ci: runs-on: ubuntu-latest @@ -517,8 +517,8 @@ jobs: aws-region: eu-west-1 - name: AWS SNS, SQS and S3 Tests run: | - dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.Tests/Paramore.Brighter.AWS.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWS.V4.Tests/Paramore.Brighter.AWS.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n - name: Cleanup orphaned test resources if: always() run: | @@ -557,8 +557,8 @@ jobs: aws-region: eu-west-1 - name: Scheduler Tests run: | - dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n - dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.Tests/Paramore.Brighter.AWSScheduler.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n + dotnet test --project ./tests/Paramore.Brighter.AWSScheduler.V4.Tests/Paramore.Brighter.AWSScheduler.V4.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n - name: Cleanup orphaned test resources if: always() run: | @@ -582,7 +582,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Sqlite Tests - run: dotnet test --project ./tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Sqlite.Tests/Paramore.Brighter.Sqlite.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n azure-ci: runs-on: ubuntu-latest @@ -604,7 +604,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: Azure Tests - run: dotnet test --project ./tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.AzureServiceBus.Tests/Paramore.Brighter.AzureServiceBus.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n mongodb-ci: runs-on: ubuntu-latest @@ -636,7 +636,7 @@ jobs: - name: Install dependencies run: dotnet restore - name: MongoDB Tests - run: dotnet test --project ./tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.MongoDb.Tests/Paramore.Brighter.MongoDb.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n gcp-ci: runs-on: ubuntu-latest @@ -673,7 +673,7 @@ jobs: run: dotnet restore - name: GCP Tests - run: dotnet test --project ./tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj --treenode-filter "/*/*/*/*[Category!=Spanner]&[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --logger GitHubActions --blame -v n + run: dotnet test --project ./tests/Paramore.Brighter.Gcp.Tests/Paramore.Brighter.Gcp.Tests.csproj --treenode-filter "/*/*/*/*[Category!=Spanner]&[Fragile!=CI]" --configuration Release --blame -v n # TODO: Rafael Andrade is working on how to run RocketMQ on GHA # rocketmq-ci: @@ -737,4 +737,4 @@ jobs: # run: dotnet restore # # - name: RocketMQ Tests -# run: dotnet test --project ./tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --logger "console;verbosity=normal" --blame -v n +# run: dotnet test --project ./tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests.csproj --treenode-filter "/*/*/*/*[Fragile!=CI]" --configuration Release --blame -v n From e9812f05c69138b769e949a7bdfb21afd50b21b4 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 20:29:44 +0100 Subject: [PATCH 11/14] Switch many calls to async overloads --- Directory.Packages.props | 1 + tests/Directory.Build.props | 3 ++ ..._consumer_reads_multiple_messages_async.cs | 28 +++++----- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_arn_async.cs | 30 ++++++----- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 20 ++++---- ...When_queues_missing_verify_throws_async.cs | 9 ++-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 28 +++++----- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_arn.cs | 34 +++++++------ ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 20 ++++---- .../When_queues_missing_verify_throws.cs | 20 ++++---- .../When_raw_message_delivery_disabled.cs | 9 ++-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 38 +++++++------- ...n_throwing_defer_action_respect_redrive.cs | 19 +++---- ..._consumer_reads_multiple_messages_async.cs | 26 +++++----- ...creating_a_topic_with_custom_tags_async.cs | 9 ++-- ...hen_customising_aws_client_config_async.cs | 9 ++-- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_arn_async.cs | 28 +++++----- ...e_exists_can_verify_by_convention_async.cs | 9 ++-- ...ng_a_message_resources_are_tagged_async.cs | 9 ++-- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 22 ++++---- ...When_queues_missing_verify_throws_async.cs | 9 ++-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 28 +++++----- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_customising_aws_client_config.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_arn.cs | 30 ++++++----- ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 32 ++++++------ .../When_queues_missing_verify_throws.cs | 28 +++++----- .../When_raw_message_delivery_disabled.cs | 9 ++-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- .../Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 38 +++++++------- ...n_throwing_defer_action_respect_redrive.cs | 21 ++++---- ..._consumer_reads_multiple_messages_async.cs | 29 ++++++----- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_url_async.cs | 26 +++++----- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 7 +-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- ...delivery_error_should_send_to_dlq_async.cs | 13 ++--- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 ++-- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_url.cs | 32 ++++++------ ...ing_a_message_via_the_messaging_gateway.cs | 11 ++-- .../When_queues_missing_assume_throws.cs | 7 +-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++--- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 19 +++---- ...n_throwing_defer_action_respect_redrive.cs | 23 +++++---- ..._consumer_reads_multiple_messages_async.cs | 35 ++++++------- ...hen_customising_aws_client_config_async.cs | 9 ++-- ..._infrastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...infrastructure_exists_can_verify_by_url.cs | 30 ++++++----- ...tructure_exists_can_verify_by_url_async.cs | 26 +++++----- ...ng_a_message_resources_are_tagged_async.cs | 7 +-- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 16 +++--- ..._message_should_delete_from_queue_async.cs | 9 ++-- ...delivery_error_should_send_to_dlq_async.cs | 13 ++--- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 ++-- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_customising_aws_client_config.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infrastructure_exists_can_verify.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 7 +-- .../When_queues_missing_verify_throws.cs | 7 +-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++--- ...s_configured_should_acknowledge_and_log.cs | 9 ++-- ..._invalid_channel_should_fallback_to_dlq.cs | 13 ++--- ...e_reason_should_send_to_invalid_channel.cs | 17 ++++--- .../Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 19 +++---- ...n_throwing_defer_action_respect_redrive.cs | 21 ++++---- ..._consumer_reads_multiple_messages_async.cs | 28 +++++----- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_arn_async.cs | 30 ++++++----- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 20 ++++---- ...When_queues_missing_verify_throws_async.cs | 9 ++-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 28 +++++----- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_arn.cs | 34 +++++++------ ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 16 +++--- .../When_queues_missing_verify_throws.cs | 16 +++--- .../When_raw_message_delivery_disabled.cs | 9 ++-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 38 +++++++------- ...n_throwing_defer_action_respect_redrive.cs | 21 ++++---- ..._consumer_reads_multiple_messages_async.cs | 26 +++++----- ...hen_customising_aws_client_config_async.cs | 9 ++-- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_arn_async.cs | 26 +++++----- ...e_exists_can_verify_by_convention_async.cs | 9 ++-- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 16 +++--- ...When_queues_missing_verify_throws_async.cs | 9 ++-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 28 +++++----- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_customising_aws_client_config.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_arn.cs | 30 ++++++----- ...ructure_exists_can_verify_by_convention.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 16 +++--- .../When_queues_missing_verify_throws.cs | 16 +++--- .../When_raw_message_delivery_disabled.cs | 9 ++-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- .../Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 38 +++++++------- ...n_throwing_defer_action_respect_redrive.cs | 21 ++++---- ..._consumer_reads_multiple_messages_async.cs | 27 +++++----- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_url_async.cs | 26 +++++----- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 7 +-- ...hen_raw_message_delivery_disabled_async.cs | 9 ++-- ..._message_should_delete_from_queue_async.cs | 9 ++-- ...delivery_error_should_send_to_dlq_async.cs | 13 ++--- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 ++-- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ..._infastructure_exists_can_verify_by_url.cs | 32 ++++++------ ...ing_a_message_via_the_messaging_gateway.cs | 11 ++-- .../When_queues_missing_assume_throws.cs | 7 +-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++--- .../Fifo/Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 19 +++---- ...n_throwing_defer_action_respect_redrive.cs | 23 +++++---- ..._consumer_reads_multiple_messages_async.cs | 33 ++++++------ ...hen_customising_aws_client_config_async.cs | 9 ++-- ...n_infastructure_exists_can_assume_async.cs | 9 ++-- ..._infastructure_exists_can_verify_by_url.cs | 30 ++++++----- ..._infrastructure_exists_can_verify_async.cs | 9 ++-- ...tructure_exists_can_verify_by_url_async.cs | 26 +++++----- ...message_via_the_messaging_gateway_async.cs | 9 ++-- ...When_queues_missing_assume_throws_async.cs | 16 +++--- ..._message_should_delete_from_queue_async.cs | 9 ++-- ...delivery_error_should_send_to_dlq_async.cs | 13 ++--- .../When_requeueing_a_message_async.cs | 9 ++-- ...en_requeueing_redrives_to_the_dlq_async.cs | 9 ++-- ...wing_defer_action_respect_redrive_async.cs | 9 ++-- ...essage_consumer_reads_multiple_messages.cs | 9 ++-- .../When_customising_aws_client_config.cs | 9 ++-- .../When_infastructure_exists_can_assume.cs | 9 ++-- .../When_infastructure_exists_can_verify.cs | 9 ++-- ...ing_a_message_via_the_messaging_gateway.cs | 9 ++-- .../When_queues_missing_assume_throws.cs | 7 +-- .../When_queues_missing_verify_throws.cs | 7 +-- ...ting_a_message_should_delete_from_queue.cs | 9 ++-- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++--- ...s_configured_should_acknowledge_and_log.cs | 9 ++-- ..._invalid_channel_should_fallback_to_dlq.cs | 13 ++--- ...e_reason_should_send_to_invalid_channel.cs | 17 ++++--- .../Reactor/When_requeueing_a_message.cs | 9 ++-- .../When_requeueing_redrives_to_the_dlq.cs | 19 +++---- ...n_throwing_defer_action_respect_redrive.cs | 21 ++++---- .../Sns/When_Scheduling_A_Sns_Message.cs | 9 ++-- .../When_Scheduling_A_Sns_Message_Async.cs | 32 +++++++----- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 9 ++-- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 9 ++-- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 7 +-- .../When_Scheduling_A_Sqs_Message_Async.cs | 30 ++++++----- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 7 +-- ...g_A_Sqs_Message_Via_FireScheduler_Async.cs | 32 +++++++----- .../Sns/When_Scheduling_A_Sns_Request.cs | 9 ++-- .../When_Scheduling_A_Sns_Request_Async.cs | 9 ++-- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 7 +-- .../When_Scheduling_A_Sqs_Request_Async.cs | 40 ++++++++------- .../Sns/When_Scheduling_A_Sns_Message.cs | 9 ++-- .../When_Scheduling_A_Sns_Message_Async.cs | 32 +++++++----- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 9 ++-- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 9 ++-- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 7 +-- .../When_Scheduling_A_Sqs_Message_Async.cs | 30 ++++++----- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 7 +-- ...g_A_Sqs_Message_Via_FireScheduler_Async.cs | 32 +++++++----- .../Sns/When_Scheduling_A_Sns_Request.cs | 9 ++-- .../When_Scheduling_A_Sns_Request_Async.cs | 9 ++-- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 7 +-- .../When_Scheduling_A_Sqs_Request_Async.cs | 38 +++++++------- ...en_consuming_a_message_via_the_consumer.cs | 43 +++++++++------- ...osting_a_large_message_via_the_producer.cs | 48 +++++++++-------- ...When_posting_a_message_via_the_producer.cs | 9 ++-- .../Inbox/InboxAsyncTest.cs | 1 - .../Locking/DistributedLockingAsyncTest.cs | 1 - .../Outbox/OutboxAsyncTest.cs | 6 --- ...essage_is_requeued_until_rejected_async.cs | 20 +++++--- ...lay_Then_message_is_requeued_with_delay.cs | 2 +- ...d_exception_Then_message_is_acked_async.cs | 21 +++++--- ..._to_connect_a_channel_and_handler_async.cs | 17 +++---- ...ew_connection_added_while_running_async.cs | 10 ++-- ...essage_dispatcher_restarts_a_connection.cs | 14 +++-- ...fter_all_connections_have_stopped_async.cs | 14 ++--- ...age_dispatcher_shuts_a_connection_async.cs | 17 ++++--- ...er_starts_different_types_of_performers.cs | 16 +++--- ...atcher_starts_multiple_performers_async.cs | 16 +++--- ..._throw_a_reject_message_exception_async.cs | 7 ++- ...message_is_requeued_until_rejectedAsync.cs | 20 +++++--- ...d_exception_Then_message_is_acked_async.cs | 21 +++++--- ...nside_async_context_should_not_deadlock.cs | 3 +- ...n_a_thread_should_be_able_to_stop_async.cs | 4 +- ...as_a_new_connection_added_while_running.cs | 4 +- ..._asked_to_connect_a_channel_and_handler.cs | 10 ++-- ...essage_dispatcher_restarts_a_connection.cs | 12 ++--- ...tion_after_all_connections_have_stopped.cs | 8 +-- ...a_message_dispatcher_shuts_a_connection.cs | 4 +- ...er_starts_different_types_of_performers.cs | 10 ++-- ...e_dispatcher_starts_multiple_performers.cs | 4 +- ...pump_on_a_thread_should_be_able_to_stop.cs | 4 +- .../BrighterSynchronizationContextsTests.cs | 7 ++- ..._consumer_reads_multiple_messages_async.cs | 17 ++++--- ...essage_consumer_reads_multiple_messages.cs | 7 +-- ..._consumer_reads_multiple_messages_async.cs | 17 ++++--- ...essage_consumer_reads_multiple_messages.cs | 7 +-- .../When_consumer_declares_topic_async.cs | 7 +-- ...es_async_with_delay_should_use_producer.cs | 18 ++++--- ...iting_next_acknowledge_sweep_them_async.cs | 16 +++--- .../Proactor/When_posting_a_message_async.cs | 16 +++--- ...sting_a_message_with_header_bytes_async.cs | 22 ++++---- ...sage_without_partition_key_header_async.cs | 3 +- ...should_commit_uncommitted_offsets_async.cs | 24 +++++---- ...a_message_is_acknowledged_update_offset.cs | 6 +-- ..._set_of_messages_is_sent_preserve_order.cs | 12 ++--- ...g_offsets_during_revoke_should_not_race.cs | 10 ++-- .../Reactor/When_consumer_declares_topic.cs | 6 +-- ...ake_channels_create_should_create_topic.cs | 8 +-- ...isposes_should_dispose_requeue_producer.cs | 6 +-- ...requeues_with_delay_should_use_producer.cs | 8 +-- ...equeues_with_delay_should_use_scheduler.cs | 6 +-- .../Reactor/When_posting_a_message.cs | 6 +-- ...hen_posting_a_message_with_header_bytes.cs | 6 +-- ..._a_message_without_partition_key_header.cs | 8 +-- ...jecting_message_should_include_metadata.cs | 8 +-- ..._with_delivery_error_should_send_to_dlq.cs | 8 +-- ...s_configured_should_acknowledge_and_log.cs | 8 +-- ..._invalid_channel_should_fallback_to_dlq.cs | 8 +-- ...e_reason_should_send_to_invalid_channel.cs | 8 +-- ..._with_unknown_reason_should_send_to_dlq.cs | 8 +-- ...evoked_partitions_offsets_are_committed.cs | 8 +-- ...should_commit_uncommitted_offsets_async.cs | 21 ++++---- .../Helpers/Base/MqttTestClassBase.cs | 21 +++++--- .../Helpers/Server/MqttTestServer.cs | 4 +- ...delivery_error_should_send_to_dlq_async.cs | 13 ++++- ..._should_configure_and_dispose_correctly.cs | 16 ++++-- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++++- ..._channels_configured_should_return_true.cs | 13 ++++- ..._invalid_channel_should_fallback_to_dlq.cs | 13 ++++- ...e_reason_should_send_to_invalid_channel.cs | 13 ++++- ...q_subscription_should_pass_routing_keys.cs | 13 ++++- .../When_a_message_is_sent_async.cs | 16 +++--- ...When_a_message_is_sent_keep_order_async.cs | 16 +++--- .../When_queue_is_purged_async.cs | 22 ++++---- .../When_requeueing_a_message_aync.cs | 15 ++++-- ...When_a_message_is_sent_keep_order_async.cs | 18 ++++--- .../When_queue_is_purged_async.cs | 22 ++++---- .../When_requeueing_a_message_aync.cs | 18 ++++--- .../When_scheduling_a_message.cs | 50 ++++++++++-------- .../When_scheduling_a_message_async.cs | 50 ++++++++++-------- .../When_scheduling_a_request.cs | 50 ++++++++++-------- .../When_scheduling_a_request_async.cs | 51 +++++++++++-------- ..._consumer_reads_multiple_messages_async.cs | 23 ++++++--- ..._closed_exception_when_connecting_async.cs | 5 +- ...pported_exception_when_connecting_async.cs | 24 +++++---- ...rrupted_exception_when_connecting_async.cs | 26 ++++++---- ...ding_a_channel_to_multiple_topics_async.cs | 36 ++++++++----- ..._infrastructure_exists_can_assert_async.cs | 5 +- ...nfrastructure_exists_can_validate_async.cs | 5 +- ...o_post_a_message_at_the_same_time_async.cs | 5 +- ...persist_via_the_messaging_gateway_async.cs | 5 +- ...message_via_the_messaging_gateway_async.cs | 5 +- ..._via_the_messaging_gateway_quorum_async.cs | 5 +- ...h_causes_a_message_to_be_rejected_async.cs | 5 +- ...message_via_the_messaging_gateway_async.cs | 5 +- ..._a_message_to_a_dead_letter_queue_async.cs | 5 +- .../When_ttl_causes_a_message_to_expire.cs | 40 ++++++++------- ...essage_consumer_reads_multiple_messages.cs | 18 +++++-- ...en_binding_a_channel_to_multiple_topics.cs | 33 +++++++----- ...essage_via_the_messaging_gateway_quorum.cs | 2 +- ...try_limits_force_a_message_onto_the_DLQ.cs | 1 - ...try_limits_force_a_message_onto_the_DLQ.cs | 1 - .../MessagingGateway/TestHelpers.cs | 3 +- .../MessagingGateway/RedisFixture.cs | 5 +- .../When_building_a_dispatcher.cs | 2 +- ...a_message_consumer_a_cloud_events_async.cs | 13 ++--- ..._consumer_reads_multiple_messages_async.cs | 13 ++--- ...message_via_the_messaging_gateway_async.cs | 19 +++---- ...delivery_error_should_send_to_dlq_async.cs | 13 ++--- .../When_requeueing_a_message_async.cs | 13 ++--- ...en_requeueing_redrives_to_the_dlq_async.cs | 17 ++++--- .../When_a_message_consumer_a_cloud_events.cs | 13 ++--- ...essage_consumer_reads_multiple_messages.cs | 13 ++--- ...ing_a_message_via_the_messaging_gateway.cs | 19 +++---- ..._with_delivery_error_should_send_to_dlq.cs | 13 ++--- ...s_configured_should_ack_and_log_warning.cs | 11 ++-- ..._invalid_channel_should_fallback_to_dlq.cs | 13 ++--- ...e_reason_should_send_to_invalid_channel.cs | 17 ++++--- .../Reactor/When_requeueing_a_message.cs | 13 ++--- .../When_requeueing_redrives_to_the_dlq.cs | 17 ++++--- ...cheduled_methods_record_scheduler_types.cs | 17 ++++--- ...ion_provider_overloads_record_correctly.cs | 17 ++++--- .../Fixtures/BaseTickerQFixture.cs | 7 ++- 360 files changed, 2780 insertions(+), 2200 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 0da86b6574..a5ba6af373 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -86,6 +86,7 @@ + diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index f1044fd592..cf830843ec 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -8,4 +8,7 @@ false false + + + diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 71c71bd4da..d5119c0365 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _topicName; - private readonly ChannelFactory _channelFactory; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _topicName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -33,7 +34,7 @@ public SqsBufferedConsumerTestsAsync() //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, @@ -44,9 +45,9 @@ public SqsBufferedConsumerTestsAsync() type: SqsType.Fifo, deduplicationScope: DeduplicationScope.MessageGroup, fifoThroughputLimit: FifoThroughputLimit.PerMessageGroupId, - tags: new Dictionary { { "Environment", "Test" } }), + tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - makeChannels: OnMissingChannel.Create)).GetAwaiter().GetResult(); + makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -147,10 +148,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index 42949438e5..ddf39df1d8 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -80,11 +80,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 23860e0f7a..afbbbc47b2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -85,11 +85,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 19987a4d1c..b483bb77db 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -12,15 +12,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -36,9 +37,9 @@ public AwsValidateInfrastructureByArnTestsAsync() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Proactor, + messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create); _message = new Message( @@ -52,7 +53,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)).Result; + var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); subscription.MakeChannels = OnMissingChannel.Validate; @@ -95,11 +96,12 @@ private static async Task FindTopicArn(AWSMessagingGatewayConnection con return topicResponse.TopicArn; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index d429fa1d47..ef3e37a651 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -108,11 +108,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 605cc7baad..fa20a80345 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AwsAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -26,9 +27,9 @@ public AwsAssumeQueuesTestsAsync() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes( type:SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes( type:SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Proactor, + messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Assume); var awsConnection = GatewayFactory.CreateFactory(); @@ -41,7 +42,7 @@ public AwsAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); @@ -58,9 +59,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index 929f6a1e3e..f76148edfe 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -11,11 +11,12 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTestsAsync() { MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 70c7344c2f..0900f07ea6 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -89,10 +89,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index d3d0ec5417..1854cf3b45 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -77,10 +77,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs index 6c9a3bff08..cd4fe305f5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 6336c628f1..e1939ef045 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,16 +15,17 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelAsync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly ChannelName _deadLetterChannel; - - public SqsMessageProducerDlqTestsAsync() + private SnsMessageProducer _sender; + private IAmAChannelAsync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private ChannelName _deadLetterChannel; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -66,7 +67,7 @@ public SqsMessageProducerDlqTestsAsync() TopicAttributes = topicAttributes }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); _channel = _channelFactory.CreateAsyncChannel(subscription); @@ -111,10 +112,11 @@ private async Task GetDLQCountAsync() return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 09c5c8c186..edd597e9b7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -146,10 +146,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 2f7394bf18..a0b745ff34 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -148,11 +148,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() await Assert.That(messagesReceivedCount).IsEqualTo(4); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index c35496206b..4757a8fa52 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -96,11 +96,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index 86d1aa86b9..f12d02aa96 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -95,11 +95,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 6c2e36b3ee..97900c99a7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("CI", "Fragile")] -public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByArnTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTests() + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { const string replyTo = "http:\\queueUrl"; var contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -38,9 +39,9 @@ public AwsValidateInfrastructureByArnTests() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Reactor, + messagePumpType: MessagePumpType.Reactor, makeChannels: OnMissingChannel.Create); _message = new Message( @@ -57,7 +58,7 @@ public AwsValidateInfrastructureByArnTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); + var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); //Now change the subscription to validate, just check what we made @@ -96,11 +97,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -113,10 +115,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) + private static async Task FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) { using var snsClient = new AWSClientFactory(connection).CreateSnsClient(); - var topicResponse = snsClient.FindTopicAsync(topicName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.FindTopicAsync(topicName); return topicResponse.TopicArn; } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 886e22146f..7dd418623b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByConventionTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -95,11 +95,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index a68968b9e4..8c8c44986a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -86,11 +86,12 @@ public async Task When_infrastructure_exists_can_verify_async() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); (_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 72db9aae71..694e45addc 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -112,11 +112,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs index 58cf4633cf..563de221f5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AwsAssumeQueuesTests : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly SqsMessageConsumer _consumer; + private ChannelFactory _channelFactory; + private SqsMessageConsumer _consumer; - public AwsAssumeQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -29,7 +30,7 @@ public AwsAssumeQueuesTests() messagePumpType: MessagePumpType.Reactor, queueAttributes: new SqsAttributes( type: SqsType.Fifo, - tags: new Dictionary { { "Environment", "Test" } }), + tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, makeChannels: OnMissingChannel.Assume); @@ -37,14 +38,14 @@ public AwsAssumeQueuesTests() //create the topic, we want the queue to be the issue //We need to create the topic at least, to check the queues - + var producer = new SnsMessageProducer(awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); @@ -60,9 +61,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs index 3cd04856ce..3f19c61ed1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -9,13 +9,14 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable +public class AwsValidateQueuesTests : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -27,9 +28,9 @@ public AwsValidateQueuesTests() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Reactor, + messagePumpType: MessagePumpType.Reactor, makeChannels: OnMissingChannel.Validate); _awsConnection = GatewayFactory.CreateFactory(); @@ -40,7 +41,7 @@ public AwsValidateQueuesTests() { MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] @@ -52,10 +53,11 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { if (_channelFactory != null) - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index c83e551887..68b7b92f44 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable +public class SqsRawMessageDeliveryTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -93,10 +93,11 @@ public async Task When_raw_message_delivery_disabled() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 4e57ca29c2..13d0c6a042 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -79,10 +79,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs index a8b0b93949..eab67a2cad 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message? _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 933a042ecc..86a0faf61e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,16 +15,17 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelSync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly string _dlqChannelName; - - public SqsMessageProducerDlqTests() + private SnsMessageProducer _sender; + private IAmAChannelSync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private string _dlqChannelName; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -69,7 +70,7 @@ public SqsMessageProducerDlqTests() TopicAttributes = topicAttributes }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); @@ -93,19 +94,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = ["All", "ApproximateReceiveCount"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -116,10 +117,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 9feba70eef..88887633c3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -117,17 +117,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = ["All"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -159,13 +159,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index c3f3652d8b..adeac8c9de 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -12,17 +12,18 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _topicName; - private readonly ChannelFactory _channelFactory; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _topicName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -33,7 +34,7 @@ public SqsBufferedConsumerTestsAsync() //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, @@ -41,7 +42,7 @@ public SqsBufferedConsumerTestsAsync() messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }), - topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]))).GetAwaiter().GetResult(); + topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -124,10 +125,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs index 31dcbd6061..31c8a09364 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs @@ -14,7 +14,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerCreateTopicWithTagsAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerCreateTopicWithTagsAsyncTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -80,10 +80,11 @@ public async Task When_creating_a_topic_with_custom_tags_async() await Assert.That(tagsResponse.Tags).Contains(t => t.Key == "Environment" && t.Value == "Test"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs index d884398eba..d88987e352 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -88,11 +88,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index cfe7c150ba..f0e39cccf4 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; private readonly SnsMessageProducer _messageProducer; @@ -83,11 +83,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 888d3621d7..d6aa195c4a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor { [Category("AWS")] - public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable + public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -83,11 +83,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 4956871ad1..b6a6ff38d2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -15,15 +15,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; string correlationId = Id.Random(); @@ -54,9 +55,9 @@ public AwsValidateInfrastructureByArnTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.Value).Result; + var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); - + subscription.MakeChannels = OnMissingChannel.Validate; subscription.RoutingKey = routingKeyArn; subscription.FindTopicBy = TopicFindBy.Arn; @@ -96,11 +97,12 @@ private static async Task FindTopicArn(AWSMessagingGatewayConnection con return topicResponse.TopicArn; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index 1d948cf066..ff61039fe8 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -83,11 +83,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index 5de051477c..04aab6b3dd 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -14,7 +14,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -95,10 +95,11 @@ public async Task When_posting_a_message_resources_are_tagged_async() await Assert.That(queueTagsResponse.Tags["Environment"]).IsEqualTo("Test"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 0b842e5478..48e7b308f1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -96,11 +96,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index d1efe96783..221b9dbbfb 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -10,12 +10,13 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AwsAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -26,7 +27,7 @@ public AwsAssumeQueuesTestsAsync() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - messagePumpType: MessagePumpType.Proactor, + messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Assume, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }])); @@ -41,11 +42,11 @@ public AwsAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); - + await producer.ConfirmTopicExistsAsync(topicName); + _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - + //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); } @@ -58,9 +59,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs index 3bbc530bae..0191f4311f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -12,11 +12,12 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTestsAsync() { MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs index b5a5d19693..9146b49aa9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -84,10 +84,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 8b01b23ac3..24bfa751cd 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -71,10 +71,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs index 500b929d64..4988b9060a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message? _requeuedMessage; @@ -72,10 +72,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index fd55cea346..d775b287f6 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -16,16 +16,17 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelAsync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly ChannelName _deadLetterChannel; - - public SqsMessageProducerDlqTestsAsync() + private SnsMessageProducer _sender; + private IAmAChannelAsync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private ChannelName _deadLetterChannel; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -60,7 +61,7 @@ public SqsMessageProducerDlqTestsAsync() _sender = new SnsMessageProducer(_awsConnection, new SnsPublication { Topic = routingKey, MakeChannels = OnMissingChannel.Create }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); _channel = _channelFactory.CreateAsyncChannel(subscription); @@ -105,10 +106,11 @@ private async Task GetDLQCountAsync() return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index aae802dc26..7e5509947a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -18,7 +18,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -144,10 +144,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 415d447ee5..e73c32a7a0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -124,11 +124,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index 2f2417de89..11eb8c7fb3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -83,11 +83,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index 585031f8f9..539b949deb 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -80,11 +80,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index 6ab6dfa324..ca51dd8641 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -88,11 +88,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 1ab0851eea..7935d12d4b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -15,15 +15,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByArnTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTests() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -57,7 +58,7 @@ public AwsValidateInfrastructureByArnTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.Value); + var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); //Now change the subscription to validate, just check what we made @@ -97,11 +98,12 @@ public async Task When_infrastructure_exists_can_verify() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } @@ -114,10 +116,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) + private static async Task FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) { using var snsClient = new AWSClientFactory(connection).CreateSnsClient(); - var topicResponse = snsClient.FindTopicAsync(topicName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.FindTopicAsync(topicName); return topicResponse.TopicArn; } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 915565a8ac..d6e9409d11 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByConventionTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -86,11 +86,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 6f16d099b3..ae80b301f6 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -94,11 +94,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs index fa94a286d5..d8e6c30453 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -10,17 +10,18 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AwsAssumeQueuesTests : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly SqsMessageConsumer _consumer; + private ChannelFactory _channelFactory; + private SqsMessageConsumer _consumer; - public AwsAssumeQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var routingKey = new RoutingKey(topicName); - + var subscription = new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), @@ -30,22 +31,22 @@ public AwsAssumeQueuesTests() makeChannels: OnMissingChannel.Assume, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }])); - + var awsConnection = GatewayFactory.CreateFactory(); - + //create the topic, we want the queue to be the issue //We need to create the topic at least, to check the queues - var producer = new SnsMessageProducer(awsConnection, + var producer = new SnsMessageProducer(awsConnection, new SnsPublication { - MakeChannels = OnMissingChannel.Create + MakeChannels = OnMissingChannel.Create }); - - producer.ConfirmTopicExistsAsync(topicName).Wait(); - + + await producer.ConfirmTopicExistsAsync(topicName); + _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - + //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName()); } @@ -57,9 +58,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs index 0a676a05b7..f684654695 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -10,18 +10,19 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable +public class AwsValidateQueuesTests : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var routingKey = new RoutingKey(topicName); - + _subscription = new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), @@ -31,17 +32,17 @@ public AwsValidateQueuesTests() makeChannels: OnMissingChannel.Validate, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }])); - + _awsConnection = GatewayFactory.CreateFactory(); - + //We need to create the topic at least, to check the queues - var producer = new SnsMessageProducer(_awsConnection, + var producer = new SnsMessageProducer(_awsConnection, new SnsPublication { - MakeChannels = OnMissingChannel.Create + MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); - + await producer.ConfirmTopicExistsAsync(topicName); + } [Test] @@ -53,10 +54,11 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { if (_channelFactory != null) - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index d6abe95b43..d0a5fadf18 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable +public class SqsRawMessageDeliveryTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -83,10 +83,11 @@ public async Task When_raw_message_delivery_disabled() await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 27cf3bba7a..242732cd19 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -73,10 +73,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs index f36326efbc..13d1010cf5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message? _requeuedMessage; @@ -75,10 +75,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index b4975cf48a..a18ff95684 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -16,16 +16,17 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelSync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly string _dlqChannelName; - - public SqsMessageProducerDlqTests() + private SnsMessageProducer _sender; + private IAmAChannelSync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private string _dlqChannelName; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -59,7 +60,7 @@ public SqsMessageProducerDlqTests() _sender = new SnsMessageProducer(_awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); @@ -83,19 +84,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = new List { "All", "ApproximateReceiveCount" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -106,10 +107,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index ab81b746ee..43eb3f9f7b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -18,7 +18,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -116,17 +116,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { - using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -158,13 +158,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 6775d6cc23..4cc0337cb2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _queueName; - private readonly ChannelFactory _channelFactory; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _queueName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -37,8 +38,8 @@ public SqsBufferedConsumerTestsAsync() deduplicationScope: DeduplicationScope.MessageGroup, fifoThroughputLimit: FifoThroughputLimit.PerMessageGroupId, tags: new Dictionary { { "Environment", "Test" } }); - - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(_queueName), channelName: channelName, channelType: ChannelType.PointToPoint, @@ -46,8 +47,7 @@ public SqsBufferedConsumerTestsAsync() bufferSize: BufferSize, queueAttributes: queueAttributes, messagePumpType: MessagePumpType.Proactor, - makeChannels: OnMissingChannel.Create)) - .GetAwaiter().GetResult(); + makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -146,10 +146,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index c3bf8efffa..167fd414e6 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -86,11 +86,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index e21f17587c..e511966211 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -81,11 +81,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index ae1b566134..78a8b5e20b 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -54,7 +55,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)).Result; + var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); subscription.MakeChannels = OnMissingChannel.Validate; @@ -93,11 +94,12 @@ private static async Task FindQueueUrl(AWSMessagingGatewayConnection con return topicResponse.QueueUrl; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 5d22ecaaaf..415c40f472 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -108,11 +108,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index f5653e7ca2..a3ec40015c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly IAmAMessageConsumerAsync _consumer; @@ -46,9 +46,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 0b79fc3fd9..75048b7f93 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -96,10 +96,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index a6d81aff6b..4d4a164b37 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -78,10 +78,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs index cbd1b279a3..6cc13724c2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -140,12 +140,13 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs index 37e30e7b1d..ec5fcab28f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message? _requeuedMessage; @@ -74,10 +74,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 6069ac6090..20736e79da 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelAsync _channel; @@ -107,10 +107,11 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 1a0d6e205f..c6cb3de602 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -145,10 +145,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index d992fc493d..2d18255b3d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -147,11 +147,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() await Assert.That(messagesReceivedCount).IsEqualTo(4); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index cd392e1be5..4e14fb9405 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -84,11 +84,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index e5fe51631b..78e68ad529 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -91,11 +91,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index 7df7d5f03a..136099f9c9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByUrlTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTests () + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { var replyTo = new RoutingKey("http:\\queueUrl"); var contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -61,7 +62,7 @@ public AwsValidateInfrastructureByUrlTests () _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); + var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); //Now change the subscription to validate, just check what we made subscription.MakeChannels = OnMissingChannel.Validate; @@ -98,11 +99,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -115,10 +117,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) + private static async Task FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) { - using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); - var topicResponse = snsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); + using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); + var topicResponse = await snsClient.GetQueueUrlAsync(queueName); return topicResponse.QueueUrl; } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index d64539d287..e8c3c791a3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -77,7 +77,7 @@ public async Task When_posting_a_message_via_the_producer() _message.Header.Subject = "test subject"; _messageProducer.Send(_message); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -107,11 +107,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs index 5fdb4a6d50..5eda21a309 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AWSAssumeQueuesTests : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly SqsMessageConsumer _consumer; @@ -46,9 +46,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index c5a83c2f94..bc75b20b26 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -74,10 +74,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index a069176751..87e351b83c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -140,12 +140,13 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs index 0d91e22043..6e1dcb8446 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 464c337b24..046f9831d3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelSync _channel; @@ -87,19 +87,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = ["All", "ApproximateReceiveCount"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -110,10 +110,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 829cb9f2eb..de6d4217c0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -104,17 +104,17 @@ public SnsReDrivePolicySDlqTests() }; } - public int GetDLQCountAsync(string queueName) + public async Task GetDLQCountAsync(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName.ToValidSQSQueueName(true)).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName.ToValidSQSQueueName(true)); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -131,23 +131,24 @@ public async Task When_throwing_defer_action_respect_redrive_async() _sender.Send(_message); var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - Task.Delay(5000).GetAwaiter().GetResult(); + await Task.Delay(5000); var quitMessage = MessageFactory.CreateQuitMessage(_subscription.RoutingKey); _channel.Enqueue(quitMessage); Task.WaitAll(task); - Task.Delay(5000).GetAwaiter().GetResult(); + await Task.Delay(5000); - var dlqCount = GetDLQCountAsync(_dlqChannelName); + var dlqCount = await GetDLQCountAsync(_dlqChannelName); await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 84f52dbc11..8c1e7be081 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SQSBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SQSBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _queueName; - private readonly ChannelFactory _channelFactory; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _queueName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SQSBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -32,16 +33,15 @@ public SQSBufferedConsumerTestsAsync() //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); var channelName = new ChannelName(_queueName); - - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: channelName, - channelType: ChannelType.PointToPoint, - routingKey: routingKey, - bufferSize: BufferSize, + channelType: ChannelType.PointToPoint, + routingKey: routingKey, + bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))) - .GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -126,10 +126,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs index 2c3c9a7d10..7cc722fca2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -85,11 +85,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs index d1df4eb884..2dd5ce6528 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AWSAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -82,11 +82,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index b9c1ca741a..b5e99f5075 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor { [Category("AWS")] [Property("Fragile", "CI")] - public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable + public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -78,11 +78,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs index aa629030f4..138ee47091 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable +public class AWSValidateInfrastructureByUrlTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AWSValidateInfrastructureByUrlTests() + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; var replyTo = new RoutingKey("http:\\queueUrl"); @@ -50,7 +51,7 @@ public AWSValidateInfrastructureByUrlTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.Value); + var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); //Now change the subscription to validate, just check what we made subscription = new SqsSubscription( @@ -93,11 +94,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -110,10 +112,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) + private static async Task FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) { using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); - var topicResponse = snsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.GetQueueUrlAsync(queueName); return topicResponse.QueueUrl; } } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 18c211436f..acb2ecff4c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -53,7 +54,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.Value).Result; + var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); subscription = new( subscriptionName: new SubscriptionName(subscriptionName), @@ -98,11 +99,12 @@ private static async Task FindQueueUrl(AWSMessagingGatewayConnection con return response.QueueUrl; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index 70e09e4825..8b8c1ef5db 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerResourcesAreTaggedAsyncTests : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -75,9 +75,10 @@ public async Task When_posting_a_message_resources_are_tagged_async() await Assert.That(queueTagsResponse.Tags["Environment"]).IsEqualTo("Test"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 9337ec1586..f3c115ec56 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -94,11 +94,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 9e67bf8ecb..cdd3e85f62 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class AWSAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AWSAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AWSAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var queueName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -36,7 +37,7 @@ public AWSAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(queueName).Wait(); + await producer.ConfirmTopicExistsAsync(queueName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); @@ -52,9 +53,10 @@ public async Task When_queues_missing_assume_throws_async() await Assert.That(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index a880d79bca..db20097e27 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -75,10 +75,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index e04433c2d5..0c5646a5ff 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -126,12 +126,13 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs index d9be83dd34..99d5ea2eb8 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message _requeuedMessage; @@ -67,10 +67,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index c953c2c62b..e316275ecc 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelAsync _channel; @@ -103,10 +103,11 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index caed08e869..27e02c8f77 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -143,10 +143,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 35f7397169..52b305606e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SQSBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SQSBufferedConsumerTests : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -122,11 +122,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index 3bb2ad7247..9008f108c9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -80,11 +80,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index 87def3965d..e6435b0eca 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AWSAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -83,11 +83,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs index a41ee6beaa..47ed679131 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AWSValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -90,11 +90,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 8d79c326fb..06dc92d9bf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -95,11 +95,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs index e312825932..79de69d336 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AWSAssumeQueuesTests : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly SqsMessageConsumer _consumer; @@ -42,9 +42,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs index edef7d30fe..34e05fe7b7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class AWSValidateQueuesTests : IDisposable, IAsyncDisposable +public class AWSValidateQueuesTests : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; private readonly SqsSubscription _subscription; @@ -39,9 +39,10 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 4e9bc07b78..da64523fb2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -76,10 +76,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 250d7f379e..3e56ad1c12 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerDeliveryErrorDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerDeliveryErrorDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -126,12 +126,13 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 91cdfa49a5..f7c1d24c21 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerNoChannelsRejectTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerNoChannelsRejectTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -93,10 +93,11 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index b9c9f51ae0..edd6ae44cf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -127,12 +127,13 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 56ca3b23e0..a1d30db6ca 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerUnacceptableInvalidChannelTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerUnacceptableInvalidChannelTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -148,14 +148,15 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _invalidChannelFactory.DeleteTopicAsync().Wait(); - _invalidChannelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _invalidChannelFactory.DeleteTopicAsync(); + await _invalidChannelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs index 9e5e73552c..8623bfb27c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message _requeuedMessage; @@ -77,10 +77,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index 08cb106085..0ac12a50b3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelSync _channel; @@ -85,19 +85,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = new List { "All", "ApproximateReceiveCount" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -108,10 +108,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 4ce1918694..772541aec3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -116,17 +116,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { - using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -158,13 +158,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index c64b1054d5..f84e9bf2d9 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _topicName; - private readonly ChannelFactory _channelFactory; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _topicName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -33,7 +34,7 @@ public SqsBufferedConsumerTestsAsync() //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, @@ -44,9 +45,9 @@ public SqsBufferedConsumerTestsAsync() type: SqsType.Fifo, deduplicationScope: DeduplicationScope.MessageGroup, fifoThroughputLimit: FifoThroughputLimit.PerMessageGroupId, - tags: new Dictionary { { "Environment", "Test" } }), + tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - makeChannels: OnMissingChannel.Create)).GetAwaiter().GetResult(); + makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -147,10 +148,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index db5a45439b..847bfbdc9e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -80,11 +80,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index f30b428799..a3a166f391 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -85,11 +85,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index f2f040531c..8bc2167a62 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -12,15 +12,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -36,9 +37,9 @@ public AwsValidateInfrastructureByArnTestsAsync() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Proactor, + messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create); _message = new Message( @@ -52,7 +53,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)).Result; + var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); subscription.MakeChannels = OnMissingChannel.Validate; @@ -95,11 +96,12 @@ private static async Task FindTopicArn(AWSMessagingGatewayConnection con return topicResponse.TopicArn; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 6925ef1ffe..439dbabe72 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -108,11 +108,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index a40be11b6c..6a6217f906 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AwsAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -26,9 +27,9 @@ public AwsAssumeQueuesTestsAsync() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes( type:SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes( type:SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Proactor, + messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Assume); var awsConnection = GatewayFactory.CreateFactory(); @@ -41,7 +42,7 @@ public AwsAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); @@ -58,9 +59,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs index 8928ad135f..23a81d23fe 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_verify_throws_async.cs @@ -11,11 +11,12 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTestsAsync() { MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index 1ff9733567..51bbc9aedf 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -89,10 +89,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 502bfa0b67..79b0b60046 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -77,10 +77,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs index 075f8f0d8a..217b64d61c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index d1e35406ba..617f221591 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,16 +15,17 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelAsync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly ChannelName _deadLetterChannel; - - public SqsMessageProducerDlqTestsAsync() + private SnsMessageProducer _sender; + private IAmAChannelAsync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private ChannelName _deadLetterChannel; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -66,7 +67,7 @@ public SqsMessageProducerDlqTestsAsync() TopicAttributes = topicAttributes }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); _channel = _channelFactory.CreateAsyncChannel(subscription); @@ -111,10 +112,11 @@ private async Task GetDLQCountAsync() return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 65fb5a2478..878da9010c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -146,10 +146,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 26912ede2c..ff94af698c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -148,11 +148,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() await Assert.That(messagesReceivedCount).IsEqualTo(4); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 41f4c4f71f..9b6d187e07 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -96,11 +96,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index 647d588e1c..01fc4dbd68 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -95,11 +95,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index f79bdb6198..4d9e2ebbd1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("CI", "Fragile")] -public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByArnTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTests() + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { const string replyTo = "http:\\queueUrl"; var contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -38,9 +39,9 @@ public AwsValidateInfrastructureByArnTests() channelName: new ChannelName(channelName), channelType: ChannelType.PubSub, routingKey: routingKey, - queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), + queueAttributes: new SqsAttributes(type: SqsType.Fifo, tags: new Dictionary { { "Environment", "Test" } }), topicAttributes: topicAttributes, - messagePumpType: MessagePumpType.Reactor, + messagePumpType: MessagePumpType.Reactor, makeChannels: OnMissingChannel.Create); _message = new Message( @@ -57,7 +58,7 @@ public AwsValidateInfrastructureByArnTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); + var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); //Now change the subscription to validate, just check what we made @@ -96,11 +97,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -113,10 +115,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) + private static async Task FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) { using var snsClient = new AWSClientFactory(connection).CreateSnsClient(); - var topicResponse = snsClient.FindTopicAsync(topicName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.FindTopicAsync(topicName); return topicResponse.TopicArn; } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index acd8fad750..c1d0936722 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByConventionTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -95,11 +95,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index 3e62a4154b..08f25e068d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -86,11 +86,12 @@ public async Task When_infrastructure_exists_can_verify_async() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); (_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 84b240ac96..621881191f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -112,11 +112,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs index c1fd3192b0..dacb2ae9dd 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AwsAssumeQueuesTests : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly SqsMessageConsumer _consumer; + private ChannelFactory _channelFactory; + private SqsMessageConsumer _consumer; - public AwsAssumeQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -44,7 +45,7 @@ public AwsAssumeQueuesTests() MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); @@ -60,9 +61,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs index 38281311fb..2885ece17f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_queues_missing_verify_throws.cs @@ -9,13 +9,14 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable +public class AwsValidateQueuesTests : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTests() { MakeChannels = OnMissingChannel.Create, TopicAttributes = topicAttributes }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] @@ -52,10 +53,11 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { if (_channelFactory != null) - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index ad00255d7e..74e2a77070 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable +public class SqsRawMessageDeliveryTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -93,10 +93,11 @@ public async Task When_raw_message_delivery_disabled() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 0b90d8e168..8b620b9508 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -79,10 +79,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs index 0309f4f149..ad32deaaae 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_a_message.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message? _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index c07e2ed89b..7cfb1fd6b9 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,16 +15,17 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelSync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly string _dlqChannelName; - - public SqsMessageProducerDlqTests() + private SnsMessageProducer _sender; + private IAmAChannelSync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private string _dlqChannelName; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -69,7 +70,7 @@ public SqsMessageProducerDlqTests() TopicAttributes = topicAttributes }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); @@ -93,19 +94,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = ["All", "ApproximateReceiveCount"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -116,10 +117,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 27decf2046..fe417cb150 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -117,17 +117,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = ["All"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -149,7 +149,7 @@ public async Task When_throwing_defer_action_respect_redrive() var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(5000); - //send a quit message to the pump to terminate it + //send a quit message to the pump to terminate it var quitMessage = MessageFactory.CreateQuitMessage(_subscription.RoutingKey); _channel.Enqueue(quitMessage); @@ -159,13 +159,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index c8860712d0..eb5a8e236e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -12,17 +12,18 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _topicName; - private readonly ChannelFactory _channelFactory; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _topicName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -33,7 +34,7 @@ public SqsBufferedConsumerTestsAsync() //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, @@ -41,7 +42,7 @@ public SqsBufferedConsumerTestsAsync() messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }), - topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]))).GetAwaiter().GetResult(); + topicAttributes: new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -128,10 +129,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs index b58efbb07b..0335e38f64 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -88,11 +88,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["async_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index 127c428d47..8f3003ea6b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; private readonly SnsMessageProducer _messageProducer; @@ -83,11 +83,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 3f05f1ab9d..2578b435f1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor { [Category("AWS")] - public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable + public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -83,11 +83,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 8ab349c099..d6e56f0d92 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -15,15 +15,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByArnTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; string correlationId = Id.Random(); @@ -54,7 +55,7 @@ public AwsValidateInfrastructureByArnTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.Value).Result; + var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); subscription.MakeChannels = OnMissingChannel.Validate; @@ -96,11 +97,12 @@ private static async Task FindTopicArn(AWSMessagingGatewayConnection con return topicResponse.TopicArn; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index c22f7b4f44..f96238ef08 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByConventionTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -83,11 +83,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 4adc02048e..417f9981ea 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -99,11 +99,12 @@ public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index faf4deac89..7148fcf370 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -10,12 +10,13 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AwsAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -41,7 +42,7 @@ public AwsAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); @@ -58,9 +59,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs index 09152cb135..052ddedbcf 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_verify_throws_async.cs @@ -12,11 +12,12 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] public class AwsValidateQueuesTestsAsync : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTestsAsync() { MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } [Test] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs index 0880cc4fa4..e67480b69d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_raw_message_delivery_disabled_async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -84,10 +84,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSend.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 3718035ac9..9ca973844d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -71,10 +71,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs index 921a4b925a..50ba450df7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_a_message_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message? _requeuedMessage; @@ -72,10 +72,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 1b8bc68ef8..376c3b8ec1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -16,16 +16,17 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelAsync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly ChannelName _deadLetterChannel; - - public SqsMessageProducerDlqTestsAsync() + private SnsMessageProducer _sender; + private IAmAChannelAsync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private ChannelName _deadLetterChannel; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -60,7 +61,7 @@ public SqsMessageProducerDlqTestsAsync() _sender = new SnsMessageProducer(_awsConnection, new SnsPublication { Topic = routingKey, MakeChannels = OnMissingChannel.Create }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); _channel = _channelFactory.CreateAsyncChannel(subscription); @@ -105,10 +106,11 @@ private async Task GetDLQCountAsync() return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 4cf71ecd15..cfec9ca08a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -18,7 +18,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -144,10 +144,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 5035d817df..d2ee52aa55 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -129,11 +129,12 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index 7d418617e4..6b72ee1392 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -83,11 +83,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sync_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index 56e05c8d77..df45c419d7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -80,11 +80,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index 03edc61788..0883d12e2b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -88,11 +88,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 32a4df8d47..dd6cb43cdb 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -15,15 +15,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByArnTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByArnTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SnsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByArnTests() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SnsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -57,7 +58,7 @@ public AwsValidateInfrastructureByArnTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var topicArn = FindTopicArn(awsConnection, routingKey.Value); + var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); //Now change the subscription to validate, just check what we made @@ -97,11 +98,12 @@ public async Task When_infrastructure_exists_can_verify() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } @@ -114,10 +116,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) + private static async Task FindTopicArn(AWSMessagingGatewayConnection connection, string topicName) { using var snsClient = new AWSClientFactory(connection).CreateSnsClient(); - var topicResponse = snsClient.FindTopicAsync(topicName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.FindTopicAsync(topicName); return topicResponse.TopicArn; } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 350973d285..078453b4a9 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateInfrastructureByConventionTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByConventionTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -86,11 +86,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 3009f2ced7..be0217269d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -97,11 +97,12 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs index 11a7f1d0b3..488544fa83 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -10,12 +10,13 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AwsAssumeQueuesTests : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly SqsMessageConsumer _consumer; + private ChannelFactory _channelFactory; + private SqsMessageConsumer _consumer; - public AwsAssumeQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -41,7 +42,7 @@ public AwsAssumeQueuesTests() MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); @@ -57,9 +58,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs index 8e0fb3e23f..74f4f65853 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -10,13 +10,14 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class AwsValidateQueuesTests : IDisposable, IAsyncDisposable +public class AwsValidateQueuesTests : IAsyncDisposable { - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly SqsSubscription _subscription; + private AWSMessagingGatewayConnection _awsConnection; + private SqsSubscription _subscription; private ChannelFactory? _channelFactory; - public AwsValidateQueuesTests() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); string topicName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -40,7 +41,7 @@ public AwsValidateQueuesTests() { MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(topicName).Wait(); + await producer.ConfirmTopicExistsAsync(topicName); } @@ -53,10 +54,11 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { if (_channelFactory != null) - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index 00af8be5be..43732a1095 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsRawMessageDeliveryTests : IDisposable, IAsyncDisposable +public class SqsRawMessageDeliveryTests : IAsyncDisposable { private readonly SnsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -83,10 +83,11 @@ public async Task When_raw_message_delivery_disabled() await Assert.That(messageReceived.Body.Value).IsEqualTo(messageToSent.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index a483184ca4..a37484be01 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -73,10 +73,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs index 0f3447e1b2..43e3f3f276 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_a_message.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message? _requeuedMessage; @@ -75,10 +75,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index 642ff62070..eee9dbf740 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -16,16 +16,17 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { - private readonly SnsMessageProducer _sender; - private readonly IAmAChannelSync _channel; - private readonly ChannelFactory _channelFactory; - private readonly Message _message; - private readonly AWSMessagingGatewayConnection _awsConnection; - private readonly string _dlqChannelName; - - public SqsMessageProducerDlqTests() + private SnsMessageProducer _sender; + private IAmAChannelSync _channel; + private ChannelFactory _channelFactory; + private Message _message; + private AWSMessagingGatewayConnection _awsConnection; + private string _dlqChannelName; + + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new MyCommand { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); @@ -59,7 +60,7 @@ public SqsMessageProducerDlqTests() _sender = new SnsMessageProducer(_awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create }); - _sender.ConfirmTopicExistsAsync(topicName).Wait(); + await _sender.ConfirmTopicExistsAsync(topicName); //We need to do this manually in a test - will create the channel from subscriber parameters _channelFactory = new ChannelFactory(_awsConnection); @@ -83,19 +84,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = new List { "All", "ApproximateReceiveCount" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -106,10 +107,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index e75e87072d..4a83e15547 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -18,7 +18,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sns.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -116,17 +116,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { - using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -158,13 +158,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 6922f885c1..c12d1588f7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _queueName; - private readonly ChannelFactory _channelFactory; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _queueName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SqsBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -38,7 +39,7 @@ public SqsBufferedConsumerTestsAsync() fifoThroughputLimit: FifoThroughputLimit.PerMessageGroupId, tags: new Dictionary { { "Environment", "Test" } }); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(_queueName), channelName: channelName, channelType: ChannelType.PointToPoint, @@ -46,8 +47,7 @@ public SqsBufferedConsumerTestsAsync() bufferSize: BufferSize, queueAttributes: queueAttributes, messagePumpType: MessagePumpType.Proactor, - makeChannels: OnMissingChannel.Create)) - .GetAwaiter().GetResult(); + makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -146,10 +146,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs index 54d9008f80..b9912eac2c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -86,11 +86,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 309d3c8e0e..622ba5a715 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -81,11 +81,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index eecb02c0ae..7f0babff43 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -54,7 +55,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)).Result; + var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); subscription.MakeChannels = OnMissingChannel.Validate; @@ -93,11 +94,12 @@ private static async Task FindQueueUrl(AWSMessagingGatewayConnection con return topicResponse.QueueUrl; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 9e3d90c0aa..04a4ab34dd 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -108,11 +108,12 @@ public async Task When_posting_a_message_via_the_producer_async() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 203b739e23..0475b08335 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class AwsAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AwsAssumeQueuesTestsAsync : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly IAmAMessageConsumerAsync _consumer; @@ -46,9 +46,10 @@ await Assert.ThrowsAsync(async () => await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs index ed7e18c959..2241093fc2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_raw_message_delivery_disabled_async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable, IDisposable +public class SqsRawMessageDeliveryTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly ChannelFactory _channelFactory; @@ -96,10 +96,11 @@ public async Task When_raw_message_delivery_disabled_async() await Assert.That(messageReceived.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index 587cceb9de..e88e2cfad3 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -78,10 +78,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs index 8831fcd671..3e0d471917 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq_async.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerFifoDeliveryErrorDlqTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -140,12 +140,13 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs index 484705b221..730061c46e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_a_message_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message? _requeuedMessage; @@ -74,10 +74,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 44ba534095..fd216a327a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelAsync _channel; @@ -107,10 +107,11 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 6089a28116..97e896e0cc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -145,10 +145,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 7fe0ce389f..c16bcb8162 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SqsBufferedConsumerTests : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -147,11 +147,12 @@ public async Task When_a_message_consumer_reads_multiple_messages() await Assert.That(messagesReceivedCount).IsEqualTo(4); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 13742644c3..f36f3f04ea 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -84,11 +84,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index fd263675d3..2588ac189d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -91,11 +91,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index 0a22f6649d..21d249e147 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable +public class AwsValidateInfrastructureByUrlTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTests () + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { var replyTo = new RoutingKey("http:\\queueUrl"); var contentType = new ContentType(MediaTypeNames.Text.Plain); @@ -61,7 +62,7 @@ public AwsValidateInfrastructureByUrlTests () _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); + var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); //Now change the subscription to validate, just check what we made subscription.MakeChannels = OnMissingChannel.Validate; @@ -98,11 +99,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -115,10 +117,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) + private static async Task FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) { - using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); - var topicResponse = snsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); + using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); + var topicResponse = await snsClient.GetQueueUrlAsync(queueName); return topicResponse.QueueUrl; } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index a5dc506141..2d2e07b60e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -77,7 +77,7 @@ public async Task When_posting_a_message_via_the_producer() _message.Header.Subject = "test subject"; _messageProducer.Send(_message); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); @@ -107,11 +107,12 @@ public async Task When_posting_a_message_via_the_producer() await Assert.That(message.Header.Bag[HeaderNames.DeduplicationId]).IsEqualTo(_deduplicationId); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs index c28cd80240..9d41074cdc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_queues_missing_assume_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AWSAssumeQueuesTests : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly SqsMessageConsumer _consumer; @@ -46,9 +46,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 04c36a5a64..93cab625bc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -74,10 +74,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index b21c90303c..a4310ed77b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerFifoDeliveryErrorDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -140,12 +140,13 @@ public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs index 190681edf5..75501a086d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_a_message.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message _requeuedMessage; @@ -76,10 +76,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 85836a77d6..c5cab34113 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelSync _channel; @@ -87,19 +87,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName + ".fifo")).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = ["All", "ApproximateReceiveCount"] - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -110,10 +110,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 902ede1b89..535e4c4b9e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Fifo.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -104,17 +104,17 @@ public SnsReDrivePolicySDlqTests() }; } - public int GetDLQCountAsync(string queueName) + public async Task GetDLQCountAsync(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName.ToValidSQSQueueName(true)).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName.ToValidSQSQueueName(true)); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -131,23 +131,24 @@ public async Task When_throwing_defer_action_respect_redrive_async() _sender.Send(_message); var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); - Task.Delay(5000).GetAwaiter().GetResult(); + await Task.Delay(5000); var quitMessage = MessageFactory.CreateQuitMessage(_subscription.RoutingKey); _channel.Enqueue(quitMessage); Task.WaitAll(task); - Task.Delay(5000).GetAwaiter().GetResult(); + await Task.Delay(5000); - var dlqCount = GetDLQCountAsync(_dlqChannelName); + var dlqCount = await GetDLQCountAsync(_dlqChannelName); await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 18f6aa44d5..bb60cd46bc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,17 +11,18 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SQSBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class SQSBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; - private readonly string _queueName; - private readonly ChannelFactory _channelFactory; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; + private string _queueName; + private ChannelFactory _channelFactory; private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; private const int MessageCount = 4; - public SQSBufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { var awsConnection = GatewayFactory.CreateFactory(); @@ -33,15 +34,14 @@ public SQSBufferedConsumerTestsAsync() var routingKey = new RoutingKey(_queueName); var channelName = new ChannelName(_queueName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: channelName, - channelType: ChannelType.PointToPoint, - routingKey: routingKey, - bufferSize: BufferSize, + channelType: ChannelType.PointToPoint, + routingKey: routingKey, + bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))) - .GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties @@ -131,10 +131,11 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs index 35a88a047d..b65bdd1319 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_customising_aws_client_config_async.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class CustomisingAwsClientConfigTestsAsync : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -85,11 +85,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_async_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs index c5f6418550..9fc1267115 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_assume_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSAssumeInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class AWSAssumeInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -82,11 +82,12 @@ public async Task When_infastructure_exists_can_assume() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs index ceee561ca5..72cfb7709e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSValidateInfrastructureByUrlTests : IDisposable, IAsyncDisposable +public class AWSValidateInfrastructureByUrlTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerSync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AWSValidateInfrastructureByUrlTests() + private Message _message; + private IAmAMessageConsumerSync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; var replyTo = new RoutingKey("http:\\queueUrl"); @@ -50,7 +51,7 @@ public AWSValidateInfrastructureByUrlTests() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateSyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.Value); + var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); //Now change the subscription to validate, just check what we made subscription = new SqsSubscription( @@ -93,11 +94,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } @@ -110,10 +112,10 @@ public async ValueTask DisposeAsync() await _messageProducer.DisposeAsync(); } - private static string FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) + private static async Task FindQueueUrl(AWSMessagingGatewayConnection connection, string queueName) { using var snsClient = new AWSClientFactory(connection).CreateSqsClient(); - var topicResponse = snsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); + var topicResponse = await snsClient.GetQueueUrlAsync(queueName); return topicResponse.QueueUrl; } } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 827027767a..0f04517de7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor { [Category("AWS")] [Property("Fragile", "CI")] - public class AwsValidateInfrastructureTestsAsync : IDisposable, IAsyncDisposable + public class AwsValidateInfrastructureTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerAsync _consumer; @@ -78,11 +78,12 @@ public async Task When_infrastructure_exists_can_verify_async() await _consumer.AcknowledgeAsync(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 3902c6f39f..c326c87659 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -13,15 +13,16 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable, IDisposable +public class AwsValidateInfrastructureByUrlTestsAsync : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly SqsMessageProducer _messageProducer; - private readonly ChannelFactory _channelFactory; - private readonly MyCommand _myCommand; - - public AwsValidateInfrastructureByUrlTestsAsync() + private Message _message; + private IAmAMessageConsumerAsync _consumer; + private SqsMessageProducer _messageProducer; + private ChannelFactory _channelFactory; + private MyCommand _myCommand; + + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; const string replyTo = "http:\\queueUrl"; @@ -53,7 +54,7 @@ public AwsValidateInfrastructureByUrlTestsAsync() _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); - var queueUrl = FindQueueUrl(awsConnection, routingKey.Value).Result; + var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); subscription = new( subscriptionName: new SubscriptionName(subscriptionName), @@ -98,11 +99,12 @@ private static async Task FindQueueUrl(AWSMessagingGatewayConnection con return response.QueueUrl; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index a65a724a27..14d850ea1b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerSendAsyncTests : IAsyncDisposable, IDisposable +public class SqsMessageProducerSendAsyncTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -98,11 +98,12 @@ public async Task When_posting_a_message_via_the_producer_async(bool fairQueue) await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index d294a7c4c4..ce6a00165f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -9,12 +9,13 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class AWSAssumeQueuesTestsAsync : IAsyncDisposable, IDisposable +public class AWSAssumeQueuesTestsAsync : IAsyncDisposable { - private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageConsumerAsync _consumer; + private ChannelFactory _channelFactory; + private IAmAMessageConsumerAsync _consumer; - public AWSAssumeQueuesTestsAsync() + [Before(Test)] + public async Task Setup() { var channelName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var queueName = $"Producer-Send-Tests-{Guid.NewGuid().ToString()}".Truncate(45); @@ -36,7 +37,7 @@ public AWSAssumeQueuesTestsAsync() MakeChannels = OnMissingChannel.Create }); - producer.ConfirmTopicExistsAsync(queueName).Wait(); + await producer.ConfirmTopicExistsAsync(queueName); _channelFactory = new ChannelFactory(awsConnection); var channel = _channelFactory.CreateAsyncChannel(subscription); @@ -52,9 +53,10 @@ public async Task When_queues_missing_assume_throws_async() await Assert.That(() => _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs index c8d2abec6d..47e2df1d1a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_a_message_should_delete_from_queue_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerRejectTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -75,10 +75,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue_async() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index bb243e3f17..82aa079d72 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageConsumerDeliveryErrorDlqTestsAsync : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelAsync _channel; @@ -126,12 +126,13 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq_ await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs index 4a18da0165..34678597c9 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_a_message_async.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] -public class SqsMessageProducerRequeueTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private Message _requeuedMessage; @@ -67,10 +67,11 @@ public async Task When_requeueing_a_message_async() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 157d1df457..a4c13617a5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTestsAsync : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTestsAsync : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelAsync _channel; @@ -103,10 +103,11 @@ private async Task GetDLQCountAsync(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs index 859261e678..740d6b0a46 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_throwing_defer_action_respect_redrive_async.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Proactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTestsAsync : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTestsAsync : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -143,10 +143,11 @@ public async Task When_throwing_defer_action_respect_redrive_async() await Assert.That(dlqCount).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index a775b7b9b4..ea8c7899bc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SQSBufferedConsumerTests : IDisposable, IAsyncDisposable +public class SQSBufferedConsumerTests : IAsyncDisposable { private readonly SqsMessageProducer _messageProducer; private readonly SqsMessageConsumer _consumer; @@ -127,11 +127,12 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index 80f76e3f87..82e68164d5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -11,7 +11,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class CustomisingAwsClientConfigTests : IDisposable, IAsyncDisposable +public class CustomisingAwsClientConfigTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -80,11 +80,12 @@ public async Task When_customising_aws_client_config() await Assert.That((InterceptingDelegatingHandler.RequestCount["sqs_sync_pub"]) > (0)).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index 1e53011058..64a553bf8b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSAssumeInfrastructureTests : IDisposable, IAsyncDisposable +public class AWSAssumeInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly SqsMessageConsumer _consumer; @@ -83,11 +83,12 @@ public async Task When_infastructure_exists_can_assume() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs index b12f7da784..828613f74f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class AWSValidateInfrastructureTests : IDisposable, IAsyncDisposable +public class AWSValidateInfrastructureTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAMessageConsumerSync _consumer; @@ -90,11 +90,12 @@ public async Task When_infrastructure_exists_can_verify() _consumer.Acknowledge(message); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index cbc0cdf567..36959c6a3b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerSendTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerSendTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -98,11 +98,12 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) await Assert.That(message.Body.Value).IsEqualTo(_message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { //Clean up resources that we have created - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs index d8781f823e..e72e78ea3d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_assume_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class AWSAssumeQueuesTests : IDisposable, IAsyncDisposable +public class AWSAssumeQueuesTests : IAsyncDisposable { private readonly ChannelFactory _channelFactory; private readonly SqsMessageConsumer _consumer; @@ -42,9 +42,10 @@ public async Task When_queues_missing_assume_throws() await Assert.That(() => _consumer.Receive(TimeSpan.FromMilliseconds(1000))).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs index d3cc0f25c5..c6ca7207a0 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_queues_missing_verify_throws.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class AWSValidateQueuesTests : IDisposable, IAsyncDisposable +public class AWSValidateQueuesTests : IAsyncDisposable { private readonly AWSMessagingGatewayConnection _awsConnection; private readonly SqsSubscription _subscription; @@ -39,9 +39,10 @@ public async Task When_queues_missing_verify_throws() await Assert.That(() => _channelFactory.CreateSyncChannel(_subscription)).ThrowsExactly(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index edd7f346d7..97c906f105 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerRejectTests : IDisposable +public class SqsMessageConsumerRejectTests { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -76,10 +76,11 @@ public async Task When_rejecting_a_message_should_delete_from_queue() await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 4659d16168..ccbcfd5e4d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerDeliveryErrorDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerDeliveryErrorDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -126,12 +126,13 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 00dadcf63b..ff0e0bd2fe 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerNoChannelsRejectTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerNoChannelsRejectTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -93,10 +93,11 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 9937021e3c..ef5b398cce 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerUnacceptableFallbackToDlqTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -127,12 +127,13 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 6182ceb034..f6dd4d43f1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -35,7 +35,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageConsumerUnacceptableInvalidChannelTests : IDisposable, IAsyncDisposable +public class SqsMessageConsumerUnacceptableInvalidChannelTests : IAsyncDisposable { private readonly Message _message; private readonly IAmAChannelSync _channel; @@ -148,14 +148,15 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to await Assert.That(sourceMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); - _invalidChannelFactory.DeleteTopicAsync().Wait(); - _invalidChannelFactory.DeleteQueueAsync().Wait(); - _dlqChannelFactory.DeleteTopicAsync().Wait(); - _dlqChannelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); + await _invalidChannelFactory.DeleteTopicAsync(); + await _invalidChannelFactory.DeleteQueueAsync(); + await _dlqChannelFactory.DeleteTopicAsync(); + await _dlqChannelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs index 11fcf454cf..c59853ffab 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_a_message.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] -public class SqsMessageProducerRequeueTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerRequeueTests : IAsyncDisposable { private readonly IAmAMessageProducerSync _sender; private Message _requeuedMessage; @@ -77,10 +77,11 @@ public async Task When_requeueing_a_message() await Assert.That(_requeuedMessage.Body.Value).IsEqualTo(_receivedMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index a41ef1e13d..aced168332 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -15,7 +15,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SqsMessageProducerDlqTests : IDisposable, IAsyncDisposable +public class SqsMessageProducerDlqTests : IAsyncDisposable { private readonly SqsMessageProducer _sender; private readonly IAmAChannelSync _channel; @@ -85,19 +85,19 @@ public async Task When_requeueing_redrives_to_the_queue() Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageAttributeNames = new List { "All", "ApproximateReceiveCount" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -108,10 +108,11 @@ private int GetDLQCount(string queueName) return response.Messages.Count; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index ac401a136e..c1226e780e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -17,7 +17,7 @@ namespace Paramore.Brighter.AWS.V4.Tests.MessagingGateway.Sqs.Standard.Reactor; [Category("AWS")] [Property("Fragile", "CI")] -public class SnsReDrivePolicySDlqTests : IDisposable, IAsyncDisposable +public class SnsReDrivePolicySDlqTests : IAsyncDisposable { private readonly IAmAMessagePump _messagePump; private readonly Message _message; @@ -116,17 +116,17 @@ public SnsReDrivePolicySDlqTests() }; } - private int GetDLQCount(string queueName) + private async Task GetDLQCount(string queueName) { - using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); - var queueUrlResponse = sqsClient.GetQueueUrlAsync(queueName).GetAwaiter().GetResult(); - var response = sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest + using var sqsClient = new AWSClientFactory(_awsConnection).CreateSqsClient(); + var queueUrlResponse = await sqsClient.GetQueueUrlAsync(queueName); + var response = await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = queueUrlResponse.QueueUrl, WaitTimeSeconds = 5, MessageSystemAttributeNames = ["ApproximateReceiveCount"], MessageAttributeNames = new List { "All" } - }).GetAwaiter().GetResult(); + }); if (response.HttpStatusCode != HttpStatusCode.OK) { @@ -158,13 +158,14 @@ public async Task When_throwing_defer_action_respect_redrive() await Task.Delay(5000); //inspect the dlq - await Assert.That(GetDLQCount(_dlqChannelName)).IsEqualTo(1); + await Assert.That(await GetDLQCount(_dlqChannelName)).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteTopicAsync().Wait(); - _channelFactory.DeleteQueueAsync().Wait(); + await _channelFactory.DeleteTopicAsync(); + await _channelFactory.DeleteQueueAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index 49fb522832..f4da2e8f18 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -8,7 +8,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageTest : IDisposable +public class SnsSchedulingMessageTest { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -94,10 +94,11 @@ public async Task When_Scheduling_A_Sns_Message() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index 5629b578d6..3e77c7d14a 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -12,47 +12,53 @@ public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _topicName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SnsSchedulingAsyncMessageTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - //we need the channel to create the queues and notifications + _channelFactory = new ChannelFactory(_awsConnection); _topicName = $"Producer-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + //we need the channel to create the queues and notifications var channelName = $"Producer-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) - )).GetAwaiter().GetResult(); + )); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SnsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SnsMessageProducer(_awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create, TopicAttributes = new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]) }); // Enforce topic to be created - _messageProducer.SendAsync(new Message( + await _messageProducer.SendAsync(new Message( new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_COMMAND, correlationId: Guid.NewGuid().ToString(), contentType: _contentType), new MessageBody("test content one") - )).GetAwaiter().GetResult(); + )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 6692b63bc4..13eca849d9 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -99,10 +99,11 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index a1fb77e9fc..7da853a912 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerAsyncTest { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -99,10 +99,11 @@ public async Task When_Scheduling_A_Sns_Message_Async() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 361fd4b87b..724f7d37ea 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -7,7 +7,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingMessageTest : IDisposable +public class SqsSchedulingMessageTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -82,9 +82,10 @@ public async Task When_Scheduling_A_Sqs_Message() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index 4ad8d00bf5..cd08e0f0d6 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -11,36 +11,42 @@ public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingAsyncMessageTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))).GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SqsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SqsMessageProducer(_awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true }; @@ -89,5 +95,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index 7424a5e05b..e9112b6245 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable +public class SqsSchedulingMessageViaFireSchedulerTest { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -90,9 +90,10 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index 368b396980..2ab4a10180 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -13,39 +13,45 @@ public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingAsyncMessageViaFireSchedulerTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))).GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SqsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SqsMessageProducer(_awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, - MakeRole = OnMissingRole.Create, + MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; } @@ -98,5 +104,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 068713ec87..20d22d49e2 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerRequestTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -229,10 +229,11 @@ public async Task When_Cancel_A_Sns_Request(RequestSchedulerType schedulerType) await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index 51f406eac5..1e747f7862 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingRequestAsyncTest : IDisposable +public class SnsSchedulingRequestAsyncTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -233,10 +233,11 @@ public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType scheduler await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index b11d8b0490..69159b0ca9 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingRequestTest : IDisposable +public class SqsSchedulingRequestTest { private const int BufferSize = 3; private readonly SqsMessageProducer _messageProducer; @@ -221,9 +221,10 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index 4d52b89192..b60e70764f 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -14,20 +14,26 @@ public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly AwsSchedulerFactory _factory; - private readonly IAmazonScheduler _scheduler; + private AwsSchedulerFactory _factory; + private IAmazonScheduler _scheduler; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingRequestAsyncTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); @@ -38,24 +44,24 @@ public SqsSchedulingRequestAsyncTest() delaySeconds: TimeSpan.Zero, tags: new Dictionary { { "Environment", "Test" } } ); - - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, - routingKey: routingKey, bufferSize: BufferSize, queueAttributes: sqsAttributes, makeChannels: OnMissingChannel.Create)).GetAwaiter().GetResult(); + routingKey: routingKey, bufferSize: BufferSize, queueAttributes: sqsAttributes, makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + //in principle, for point-to-point, we don't need both sides to create the queue; whoever does not own the API can just validate _messageProducer = new SqsMessageProducer( - awsConnection, + _awsConnection, new SqsPublication{ QueueAttributes = sqsAttributes, MakeChannels = OnMissingChannel.Create }); - - _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + + _scheduler = new AWSClientFactory(_awsConnection).CreateSchedulerClient(); + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -109,5 +115,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index 5de446325b..06326c96a5 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -8,7 +8,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageTest : IDisposable +public class SnsSchedulingMessageTest { private readonly ContentType _contentType = new ContentType(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -94,10 +94,11 @@ public async Task When_Scheduling_A_Sns_Message() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index f434fbeb48..a30a515bed 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -12,47 +12,53 @@ public class SnsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SnsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SnsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _topicName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SnsSchedulingAsyncMessageTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - //we need the channel to create the queues and notifications + _channelFactory = new ChannelFactory(_awsConnection); _topicName = $"Producer-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + //we need the channel to create the queues and notifications var channelName = $"Producer-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); var routingKey = new RoutingKey(_topicName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) - )).GetAwaiter().GetResult(); + )); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SnsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SnsMessageProducer(_awsConnection, new SnsPublication { MakeChannels = OnMissingChannel.Create, TopicAttributes = new SnsAttributes(tags: [new Tag { Key = "Environment", Value = "Test" }]) }); // Enforce topic to be created - _messageProducer.SendAsync(new Message( + await _messageProducer.SendAsync(new Message( new MessageHeader(Guid.NewGuid().ToString(), routingKey, MessageType.MT_COMMAND, correlationId: Guid.NewGuid().ToString(), contentType: _contentType), new MessageBody("test content one") - )).GetAwaiter().GetResult(); + )); _consumer.Purge(); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true, MakeRole = OnMissingRole.Create diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 41a85f922c..a74696352b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -99,10 +99,11 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index ca238257b6..8a06f3a5df 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerAsyncTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerAsyncTest { private readonly ContentType _contentType = new( MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -99,10 +99,11 @@ public async Task When_Scheduling_A_Sns_Message_Async() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 1797b52bb9..662250ead2 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -7,7 +7,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingMessageTest : IDisposable +public class SqsSchedulingMessageTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -82,9 +82,10 @@ public async Task When_Scheduling_A_Sqs_Message() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs index 8681bfbcb5..36a06ed88b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Async.cs @@ -11,36 +11,42 @@ public class SqsSchedulingAsyncMessageTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingAsyncMessageTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))).GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SqsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SqsMessageProducer(_awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = true }; @@ -89,5 +95,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index 675d0904c5..84eff114aa 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -9,7 +9,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Messages.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingMessageViaFireSchedulerTest : IDisposable +public class SqsSchedulingMessageViaFireSchedulerTest { private readonly ContentType _contentType = new (MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -90,9 +90,10 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() Assert.Fail("The message wasn't fired"); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs index a70beccfa5..8e8c8b915d 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler_Async.cs @@ -13,39 +13,45 @@ public class SqsSchedulingAsyncMessageViaFireSchedulerTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly IAmAMessageSchedulerFactory _factory; + private IAmAMessageSchedulerFactory _factory; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingAsyncMessageViaFireSchedulerTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, routingKey: routingKey, bufferSize: BufferSize, makeChannels: OnMissingChannel.Create, - queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))).GetAwaiter().GetResult(); + queueAttributes: new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }))); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - _messageProducer = new SqsMessageProducer(awsConnection, + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + _messageProducer = new SqsMessageProducer(_awsConnection, new SqsPublication { MakeChannels = OnMissingChannel.Create, QueueAttributes = new SqsAttributes(tags: new Dictionary { { "Environment", "Test" } }) }); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, - MakeRole = OnMissingRole.Create, + MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; } @@ -98,5 +104,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 699d0563b3..4e1dd9cdb0 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingMessageViaFireSchedulerRequestTest : IDisposable +public class SnsSchedulingMessageViaFireSchedulerRequestTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -229,10 +229,11 @@ public async Task When_Cancel_A_Sns_Request(RequestSchedulerType schedulerType) await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index f7101fd943..d076973ec8 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -13,7 +13,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sns; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SnsSchedulingRequestAsyncTest : IDisposable +public class SnsSchedulingRequestAsyncTest { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; @@ -233,10 +233,11 @@ public async Task When_Cancel_A_Sns_Request_Async(RequestSchedulerType scheduler await Assert.That((ex) is ResourceNotFoundException).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); - _channelFactory.DeleteTopicAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); + await _channelFactory.DeleteTopicAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 063a2fd0c5..2d9a4a9d67 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -10,7 +10,7 @@ namespace Paramore.Brighter.AWSScheduler.V4.Tests.Scheduler.Requests.Sqs; [Property("Fragile", "CI")] // It isn't really fragile, it's time consumer (1-2 per test) -public class SqsSchedulingRequestTest : IDisposable +public class SqsSchedulingRequestTest { private const int BufferSize = 3; private readonly SqsMessageProducer _messageProducer; @@ -221,9 +221,10 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _channelFactory.DeleteQueueAsync().GetAwaiter().GetResult(); + await _channelFactory.DeleteQueueAsync(); _messageProducer.Dispose(); _consumer.Dispose(); _scheduler.Dispose(); diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs index c74dc8a86a..236ef5670e 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request_Async.cs @@ -14,20 +14,26 @@ public class SqsSchedulingRequestAsyncTest : IAsyncDisposable { private readonly ContentType _contentType = new(MediaTypeNames.Text.Plain); private const int BufferSize = 3; - private readonly SqsMessageProducer _messageProducer; - private readonly SqsMessageConsumer _consumer; + private SqsMessageProducer _messageProducer; + private SqsMessageConsumer _consumer; private readonly string _queueName; private readonly ChannelFactory _channelFactory; - private readonly AwsSchedulerFactory _factory; - private readonly IAmazonScheduler _scheduler; + private AwsSchedulerFactory _factory; + private IAmazonScheduler _scheduler; + private readonly AWSMessagingGatewayConnection _awsConnection; public SqsSchedulingRequestAsyncTest() { - var awsConnection = GatewayFactory.CreateFactory(); + _awsConnection = GatewayFactory.CreateFactory(); - _channelFactory = new ChannelFactory(awsConnection); - var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + _channelFactory = new ChannelFactory(_awsConnection); _queueName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var subscriptionName = $"Buffered-Scheduler-Async-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_queueName); @@ -38,25 +44,25 @@ public SqsSchedulingRequestAsyncTest() delaySeconds: TimeSpan.Zero, tags: new Dictionary { { "Environment", "Test" } } ); - - var channel = _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( + + var channel = await _channelFactory.CreateAsyncChannelAsync(new SqsSubscription( subscriptionName: new SubscriptionName(subscriptionName), channelName: new ChannelName(_queueName), channelType: ChannelType.PointToPoint, - routingKey: routingKey, bufferSize: BufferSize, queueAttributes: sqsAttributes, makeChannels: OnMissingChannel.Create)).GetAwaiter().GetResult(); + routingKey: routingKey, bufferSize: BufferSize, queueAttributes: sqsAttributes, makeChannels: OnMissingChannel.Create)); //we want to access via a consumer, to receive multiple messages - we don't want to expose on channel //just for the tests, so create a new consumer from the properties - _consumer = new SqsMessageConsumer(awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); - + _consumer = new SqsMessageConsumer(_awsConnection, channel.Name.ToValidSQSQueueName(), BufferSize); + //in principle, for point-to-point, we don't need both sides to create the queue; whoever does not own the API can just validate _messageProducer = new SqsMessageProducer( - awsConnection, + _awsConnection, new SqsPublication{QueueAttributes = sqsAttributes, MakeChannels = OnMissingChannel.Create} ); - _scheduler = new AWSClientFactory(awsConnection).CreateSchedulerClient(); - _factory = new AwsSchedulerFactory(awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") + _scheduler = new AWSClientFactory(_awsConnection).CreateSchedulerClient(); + _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { UseMessageTopicAsTarget = false, MakeRole = OnMissingRole.Create, SchedulerTopicOrQueue = routingKey }; @@ -110,5 +116,3 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); } } - - diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs index 1c3ea5b675..2cc103be64 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs @@ -8,23 +8,26 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AzureServiceBus; using Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrappers; +using Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider; using Paramore.Brighter.Observability; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { [Category("ASB")] - public class ASBConsumerTests : IDisposable + public class ASBConsumerTests { private readonly Message _message; - private readonly IAmAChannelSync _channel; - private readonly IAmAProducerRegistry _producerRegistry; + private IAmAChannelSync _channel; + private IAmAProducerRegistry _producerRegistry; private readonly string _correlationId; private readonly ContentType _contentType; private readonly string _topicName; private readonly string _channelName; - private readonly ServiceBusClient _serviceBusClient; + private ServiceBusClient _serviceBusClient; private readonly IAdministrationClientWrapper _administrationClient; private readonly AzureServiceBusSubscriptionConfiguration _subscriptionConfiguration; + private readonly AzureServiceBusSubscription _subscription; + private readonly IServiceBusClientProvider _clientProvider; public ASBConsumerTests() { @@ -33,12 +36,12 @@ public ASBConsumerTests() CommandValue = "Do the things.", CommandNumber = 26 }; - + _channelName = "test-channel"; _topicName = $"Consumer-Tests-{Guid.NewGuid()}"; var routingKey = new RoutingKey(_topicName); - - AzureServiceBusSubscription subscription = new( + + _subscription = new AzureServiceBusSubscription( subscriptionName: new SubscriptionName(_channelName), channelName: new ChannelName(_channelName), routingKey: routingKey @@ -88,20 +91,23 @@ public ASBConsumerTests() SqlFilter = "1=1" }; - var clientProvider = ASBCreds.ASBClientProvider; - _administrationClient = new AdministrationClientWrapper(clientProvider); - _administrationClient.CreateSubscriptionAsync(_topicName, _channelName, _subscriptionConfiguration) - .GetAwaiter() - .GetResult(); + _clientProvider = ASBCreds.ASBClientProvider; + _administrationClient = new AdministrationClientWrapper(_clientProvider); + } + + [Before(Test)] + public async Task Setup() + { + await _administrationClient.CreateSubscriptionAsync(_topicName, _channelName, _subscriptionConfiguration); - _serviceBusClient = clientProvider.GetServiceBusClient(); + _serviceBusClient = _clientProvider.GetServiceBusClient(); var channelFactory = - new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(clientProvider)); - _channel = channelFactory.CreateSyncChannel(subscription); + new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(_clientProvider)); + _channel = channelFactory.CreateSyncChannel(_subscription); _producerRegistry = new AzureServiceBusProducerRegistryFactory( - clientProvider, + _clientProvider, [ new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) } ] @@ -212,9 +218,10 @@ public async Task When_A_Subscription_is_created_the_properties_are_set_as_Expec //ToDo: Need to Add Test for Filter } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _administrationClient.DeleteTopicAsync(_topicName).GetAwaiter().GetResult(); + await _administrationClient.DeleteTopicAsync(_topicName); _channel?.Dispose(); _producerRegistry?.Dispose(); } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs index 12dfb7bbfe..fdc7dd634a 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs @@ -8,22 +8,26 @@ using Paramore.Brighter.JsonConverters; using Paramore.Brighter.MessagingGateway.AzureServiceBus; using Paramore.Brighter.MessagingGateway.AzureServiceBus.AzureServiceBusWrappers; +using Paramore.Brighter.MessagingGateway.AzureServiceBus.ClientProvider; namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { [Category("ASB")] [Property("Fragile", "CI")] - public class LargeAsbMessageProducerTests : IDisposable + public class LargeAsbMessageProducerTests { - private readonly IAmAChannelSync _topicChannel; - private readonly IAmAChannelSync _queueChannel; - private readonly IAmAProducerRegistry _producerRegistry; + private IAmAChannelSync _topicChannel; + private IAmAChannelSync _queueChannel; + private IAmAProducerRegistry _producerRegistry; private ASBTestCommand _command; private readonly string _correlationId; private readonly ContentType _contentType; private readonly string _topicName; private readonly string _queueName; private readonly IAdministrationClientWrapper _administrationClient; + private readonly IServiceBusClientProvider _clientProvider; + private readonly AzureServiceBusSubscription _subscription; + private readonly AzureServiceBusSubscription _queueSubscription; public LargeAsbMessageProducerTests() { @@ -38,7 +42,7 @@ public LargeAsbMessageProducerTests() _topicName = $"Producer-Send-Tests-{Guid.NewGuid()}"; var routingKey = new RoutingKey(_topicName); - AzureServiceBusSubscription subscription = new( + _subscription = new AzureServiceBusSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey @@ -48,7 +52,7 @@ public LargeAsbMessageProducerTests() _queueName = $"Producer-queue-Send-Tests-{Guid.NewGuid()}"; var queueRoutingKey = new RoutingKey(_queueName); - AzureServiceBusSubscription queueSubscription = new( + _queueSubscription = new AzureServiceBusSubscription( subscriptionName: new SubscriptionName(queueChannelName), channelName: new ChannelName(queueChannelName), routingKey: queueRoutingKey, @@ -60,21 +64,24 @@ public LargeAsbMessageProducerTests() _contentType = new ContentType(MediaTypeNames.Application.Json); - var clientProvider = ASBCreds.ASBClientProvider; - _administrationClient = new AdministrationClientWrapper(clientProvider); - _administrationClient.CreateQueueAsync(_queueName, TimeSpan.FromMinutes(5), 3000).GetAwaiter().GetResult(); - _administrationClient.CreateTopicAsync(_topicName, TimeSpan.FromMinutes(5), 3000).GetAwaiter().GetResult(); - _administrationClient.CreateSubscriptionAsync(_topicName, channelName, new AzureServiceBusSubscriptionConfiguration()) - .GetAwaiter() - .GetResult(); + _clientProvider = ASBCreds.ASBClientProvider; + _administrationClient = new AdministrationClientWrapper(_clientProvider); + } + + [Before(Test)] + public async Task Setup() + { + await _administrationClient.CreateQueueAsync(_queueName, TimeSpan.FromMinutes(5), 3000); + await _administrationClient.CreateTopicAsync(_topicName, TimeSpan.FromMinutes(5), 3000); + await _administrationClient.CreateSubscriptionAsync(_topicName, _subscription.ChannelName.Value, new AzureServiceBusSubscriptionConfiguration()); var channelFactory = - new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(clientProvider)); - _topicChannel = channelFactory.CreateSyncChannel(subscription); - _queueChannel = channelFactory.CreateSyncChannel(queueSubscription); + new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(_clientProvider)); + _topicChannel = channelFactory.CreateSyncChannel(_subscription); + _queueChannel = channelFactory.CreateSyncChannel(_queueSubscription); _producerRegistry = new AzureServiceBusProducerRegistryFactory( - clientProvider, + _clientProvider, [ new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) }, new AzureServiceBusPublication { Topic = new RoutingKey(_queueName), UseServiceBusQueue = true} @@ -133,10 +140,11 @@ public async Task When_posting_a_large_message_via_the_bulk_producer(bool testQu ); - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _administrationClient.DeleteTopicAsync(_topicName).GetAwaiter().GetResult(); - _administrationClient.DeleteQueueAsync(_queueName).GetAwaiter().GetResult(); + await _administrationClient.DeleteTopicAsync(_topicName); + await _administrationClient.DeleteQueueAsync(_queueName); } private DateTime RoundToSeconds(DateTime dateTime) diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs index d37308f7f0..c59cd82827 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_message_via_the_producer.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.AzureServiceBus.Tests.MessagingGateway { [Category("ASB")] - public class ASBProducerTests : IDisposable + public class ASBProducerTests { private readonly IAmAChannelSync _topicChannel; private readonly IAmAChannelSync _queueChannel; @@ -168,10 +168,11 @@ public async Task When_posting_a_message_via_the_bulk_producer(bool testQueues) new MessageBody(JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options)) ); - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _administrationClient.DeleteTopicAsync(_topicName).GetAwaiter().GetResult(); - _administrationClient.DeleteQueueAsync(_queueName).GetAwaiter().GetResult(); + await _administrationClient.DeleteTopicAsync(_topicName); + await _administrationClient.DeleteQueueAsync(_queueName); } private DateTime RoundToSeconds(DateTime dateTime) diff --git a/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs index 106cdffc05..7d8bb14c39 100644 --- a/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Inbox/InboxAsyncTest.cs @@ -17,7 +17,6 @@ public async Task Setup() } [After(HookType.Test)] - public async Task Cleanup() { await AfterEachTestAsync(); diff --git a/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs index e4a187d9cb..a4a91cde9b 100644 --- a/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Locking/DistributedLockingAsyncTest.cs @@ -12,7 +12,6 @@ public abstract class DistributedLockingAsyncTest } [After(HookType.Test)] - public async Task Cleanup() { await AfterEachTestAsync(); diff --git a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs index 87383311cb..28bb888f8f 100644 --- a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxAsyncTest.cs @@ -20,7 +20,6 @@ public async Task Setup() } [After(HookType.Test)] - public async Task Cleanup() { await AfterEachTestAsync(); @@ -36,11 +35,6 @@ protected virtual Task CreateStoreAsync() return Task.CompletedTask; } - public void Dispose() - { - AfterEachTestAsync().GetAwaiter().GetResult(); - } - protected virtual async Task AfterEachTestAsync() { await DeleteStoreAsync(); diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs index 936f43314a..f3b19a6fdd 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_Then_message_is_requeued_until_rejected_async.cs @@ -1,9 +1,9 @@ #region Licence /* The MIT License (MIT) -Copyright 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,7 +12,7 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER @@ -41,19 +41,25 @@ public class MessagePumpCommandProcessingDeferMessageActionTestsAsync private readonly InternalBus _bus = new(); private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); + private readonly MessageMapperRegistry _messageMapperRegistry; public MessagePumpCommandProcessingDeferMessageActionTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); _channel = new ChannelAsync(new(ChannelName), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), _messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount }; - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; + } + + [Before(Test)] + public async Task Setup() + { + var msg = await new TransformPipelineBuilderAsync(_messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }); _bus.Enqueue(msg); } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs index 4870f0ce8d..a7b956ba38 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_a_defer_message_with_delay_Then_message_is_requeued_with_delay.cs @@ -56,7 +56,7 @@ public async Task When_a_command_handler_throws_a_defer_message_with_delay_Then_ RequeueCount = 5, RequeueDelay = TimeSpan.FromMilliseconds(100) // Subscription default — should NOT be used when DeferMessageAction has a delay }; - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; + var msg = await new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }); bus.Enqueue(msg); //Act var task = Task.Factory.StartNew(() => messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs index da73ff563f..6f91c2bdb1 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_command_handler_throws_unhandled_exception_Then_message_is_acked_async.cs @@ -19,21 +19,28 @@ public class MessagePumpCommandProcessingExceptionTestsAsync private readonly int _requeueCount = 5; private readonly RoutingKey _routingKey = new("MyCommand"); private readonly FakeTimeProvider _timeProvider = new(); + private readonly InternalBus _bus; + private readonly MessageMapperRegistry _messageMapperRegistry; public MessagePumpCommandProcessingExceptionTestsAsync() { SpyExceptionCommandProcessor commandProcessor = new(); - InternalBus bus = new(); - _channel = new ChannelAsync(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + _bus = new InternalBus(); + _channel = new ChannelAsync(new("myChannel"), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + _messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyCommandMessageMapperAsync())); + _messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyCommand), _messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount }; - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }).Result; - bus.Enqueue(msg); + } + + [Before(Test)] + public async Task Setup() + { + var msg = await new TransformPipelineBuilderAsync(_messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyCommand(), new RequestContext(), new Publication { Topic = _routingKey }); + _bus.Enqueue(msg); } [Test] diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs index 5d738eed04..e50a760932 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_Is_asked_to_connect_a_channel_and_handler_async.cs @@ -25,22 +25,21 @@ public MessageDispatcherRoutingAsyncTests() messageMapperRegistry.RegisterAsync(); var subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName(ChannelName), routingKey: _routingKey, messagePumpType: MessagePumpType.Proactor); _dispatcher = new Dispatcher(_commandProcessor, new List { subscription }, null, messageMapperRegistry, requestContextFactory: new InMemoryRequestContextFactory()); - var @event = new MyEvent - { - Data = 4 - }; - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new() { Topic = _routingKey }).Result; - _bus.Enqueue(message); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent + { + Data = 4 + }; + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new() { Topic = _routingKey }); + _bus.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } -#pragma warning disable xUnit1031 [Test] public async Task When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler_async() { @@ -54,10 +53,10 @@ public async Task When_a_message_dispatcher_is_asked_to_connect_a_channel_and_ha } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs index 51ff28661f..36e3207272 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_has_a_new_connection_added_while_running_async.cs @@ -25,14 +25,14 @@ public DispatcherAddNewConnectionTestsAsync() Subscription subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); _newSubscription = new Subscription(new SubscriptionName("newTest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannelTwo"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKeyTwo); _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }).GetAwaiter().GetResult(); - _bus.Enqueue(message); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }); + _bus.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } @@ -52,10 +52,10 @@ public async Task When_A_Message_Dispatcher_Has_A_New_Connection_Added_While_Run } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs index 1ccec8b456..0fc8d861ed 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection.cs @@ -29,21 +29,20 @@ public MessageDispatcherResetConnectionAsync() RequestType = typeof(MyEvent) }; _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication).GetAwaiter().GetResult(); - _bus.Enqueue(message); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication); + _bus.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - Task.Delay(1000).Wait(); + await Task.Delay(1000); _dispatcher.Shut(_subscription); } -#pragma warning disable xUnit1031 [Test] public async Task When_A_Message_Dispatcher_Restarts_A_Connection() { @@ -59,11 +58,10 @@ public async Task When_A_Message_Dispatcher_Restarts_A_Connection() } [After(Test)] -#pragma warning restore xUnit1031 - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs index e10f5403a1..dd7e0a45f9 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped_async.cs @@ -33,20 +33,20 @@ public DispatcherRestartConnectionTestsAsync() Topic = _subscription.RoutingKey }; _dispatcher = new Dispatcher(commandProcessor, new List { _subscription, _newSubscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication).GetAwaiter().GetResult(); - _bus.Enqueue(message); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, _publication); + _bus.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - Task.Delay(250).Wait(); + await Task.Delay(250); _dispatcher.Shut(_subscription.Name); _dispatcher.Shut(_newSubscription.Name); - Task.Delay(1000).Wait(); + await Task.Delay(1000); await Assert.That(_dispatcher.Consumers).IsEmpty(); } @@ -66,10 +66,10 @@ public async Task When_A_Message_Dispatcher_Restarts_A_Connection_After_All_Conn } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs index bd628450ea..00775790c3 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_shuts_a_connection_async.cs @@ -17,23 +17,24 @@ public class MessageDispatcherShutConnectionTests private readonly Subscription _subscription; private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); + private readonly InternalBus _bus; public MessageDispatcherShutConnectionTests() { - InternalBus bus = new(); + _bus = new InternalBus(); IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(bus, _timeProvider), channelName: new ChannelName(ChannelName), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); + _subscription = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName(ChannelName), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); _dispatcher = new Dispatcher(commandProcessor, new List { _subscription }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _subscription.RoutingKey }).GetAwaiter().GetResult(); - for (var i = 0; i < 6; i++) - bus.Enqueue(message); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _subscription.RoutingKey }); + for (var i = 0; i < 6; i++) + _bus.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } @@ -50,10 +51,10 @@ public async Task When_A_Message_Dispatcher_Shuts_A_Connection() } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs index 67af230d41..7bec319008 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_different_types_of_performers.cs @@ -32,17 +32,17 @@ public MessageDispatcherMultipleConnectionTestsAsync() var myEventConnection = new Subscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), messagePumpType: MessagePumpType.Proactor, channelName: new ChannelName("fakeEventChannel"), routingKey: _eventRoutingKey); var myCommandConnection = new Subscription(new SubscriptionName("anothertest"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("fakeCommandChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _commandRoutingKey); _dispatcher = new Dispatcher(commandProcessor, new List { myEventConnection, myCommandConnection }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var eventMessage = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _eventRoutingKey }).GetAwaiter().GetResult(); - _bus.Enqueue(eventMessage); - var command = new MyCommand(); - var commandMessage = new MyCommandMessageMapperAsync().MapToMessageAsync(command, new Publication { Topic = _commandRoutingKey }).GetAwaiter().GetResult(); - _bus.Enqueue(commandMessage); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var eventMessage = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _eventRoutingKey }); + _bus.Enqueue(eventMessage); + var command = new MyCommand(); + var commandMessage = await new MyCommandMessageMapperAsync().MapToMessageAsync(command, new Publication { Topic = _commandRoutingKey }); + _bus.Enqueue(commandMessage); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } @@ -62,10 +62,10 @@ public async Task When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs index 6212111aa4..a704786a0d 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_message_dispatcher_starts_multiple_performers_async.cs @@ -15,26 +15,28 @@ public class MessageDispatcherMultiplePerformerTestsAsync private const string ChannelName = "myChannel"; private readonly Dispatcher _dispatcher; private readonly InternalBus _bus; + private readonly Subscription _connection; + private readonly IAmAChannelSync _channel; public MessageDispatcherMultiplePerformerTestsAsync() { var routingKey = new RoutingKey(Topic); _bus = new InternalBus(); var consumer = new InMemoryMessageConsumer(routingKey, _bus, TimeProvider.System, ackTimeout: TimeSpan.FromMilliseconds(1000)); - IAmAChannelSync channel = new Channel(new(ChannelName), new(Topic), consumer, 6); + _channel = new Channel(new(ChannelName), new(Topic), consumer, 6); IAmACommandProcessor commandProcessor = new SpyCommandProcessor(); var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync((_) => new MyEventMessageMapperAsync())); messageMapperRegistry.RegisterAsync(); - var connection = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: routingKey); - _dispatcher = new Dispatcher(commandProcessor, new List { connection }, messageMapperRegistryAsync: messageMapperRegistry); - var @event = new MyEvent(); - var message = new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = connection.RoutingKey }).GetAwaiter().GetResult(); - for (var i = 0; i < 6; i++) - channel.Enqueue(message); + _connection = new Subscription(new SubscriptionName("test"), noOfPerformers: 3, timeOut: TimeSpan.FromMilliseconds(100), channelFactory: new InMemoryChannelFactory(_bus, TimeProvider.System), channelName: new ChannelName("fakeChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: routingKey); + _dispatcher = new Dispatcher(commandProcessor, new List { _connection }, messageMapperRegistryAsync: messageMapperRegistry); } [Before(Test)] public async Task Setup() { + var @event = new MyEvent(); + var message = await new MyEventMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _connection.RoutingKey }); + for (var i = 0; i < 6; i++) + _channel.Enqueue(message); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs index 2a6a40be7d..cf8930c621 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throw_a_reject_message_exception_async.cs @@ -30,8 +30,13 @@ public MessageDispatchRejectMessageExceptionTestsAsync() var subscription = new InMemorySubscription(new SubscriptionName("test"), noOfPerformers: 1, timeOut: TimeSpan.FromMilliseconds(1000), channelFactory: new InMemoryChannelFactory(_bus, _timeProvider), channelName: new ChannelName("myChannel"), messagePumpType: MessagePumpType.Proactor, routingKey: _routingKey); subscription.DeadLetterRoutingKey = _deadLetterRoutingKey; _dispatcher = new Dispatcher(commandProcessor, new List { subscription }, null, messageMapperRegistryAsync, requestContextFactory: new InMemoryRequestContextFactory()); + } + + [Before(Test)] + public async Task Setup() + { var @event = new MyRejectedEvent(Id.Random()); - var message = new MyRejectedEventHandlerMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }).Result; + var message = await new MyRejectedEventHandlerMessageMapperAsync().MapToMessageAsync(@event, new Publication { Topic = _routingKey }); _bus.Enqueue(message); _dispatcher.Receive(); } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs index 5e9583ba94..f03708ee86 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_a_defer_message_Then_message_is_requeued_until_rejectedAsync.cs @@ -1,9 +1,9 @@ #region Licence /* The MIT License (MIT) -Copyright 2014 Ian Cooper +Copyright � 2014 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,7 +12,7 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER @@ -41,20 +41,26 @@ public class MessagePumpEventProcessingDeferMessageActionTestsAsync private readonly FakeTimeProvider _timeProvider = new(); private readonly InternalBus _bus; private readonly ChannelAsync _channel; + private readonly MessageMapperRegistry _messageMapperRegistry; public MessagePumpEventProcessingDeferMessageActionTestsAsync() { SpyRequeueCommandProcessor commandProcessor = new(); _bus = new InternalBus(); _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) + _messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), _messageMapperRegistry, new EmptyMessageTransformerFactoryAsync(), new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount }; - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }).Result; + } + + [Before(Test)] + public async Task Setup() + { + var msg = await new TransformPipelineBuilderAsync(_messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }); _channel.Enqueue(msg); } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs index da1223a94c..d667875d1b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_an_event_handler_throws_unhandled_exception_Then_message_is_acked_async.cs @@ -21,21 +21,28 @@ public class MessagePumpEventProcessingExceptionTestsAsync private readonly int _requeueCount = 5; private readonly RoutingKey _routingKey = new(Topic); private readonly FakeTimeProvider _timeProvider = new(); + private readonly InternalBus _bus; + private readonly MessageMapperRegistry _messageMapperRegistry; public MessagePumpEventProcessingExceptionTestsAsync() { SpyExceptionCommandProcessor commandProcessor = new(); - var bus = new InternalBus(); - _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); - var messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); - messageMapperRegistry.RegisterAsync(); - _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) + _bus = new InternalBus(); + _channel = new ChannelAsync(new(Channel), _routingKey, new InMemoryMessageConsumer(_routingKey, _bus, _timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000))); + _messageMapperRegistry = new MessageMapperRegistry(null, new SimpleMessageMapperFactoryAsync(_ => new MyEventMessageMapperAsync())); + _messageMapperRegistry.RegisterAsync(); + _messagePump = new ServiceActivator.Proactor(commandProcessor, (message) => typeof(MyEvent), _messageMapperRegistry, null, new InMemoryRequestContextFactory(), _channel) { Channel = _channel, TimeOut = TimeSpan.FromMilliseconds(5000), RequeueCount = _requeueCount }; - var msg = new TransformPipelineBuilderAsync(messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }).Result; - bus.Enqueue(msg); + } + + [Before(Test)] + public async Task Setup() + { + var msg = await new TransformPipelineBuilderAsync(_messageMapperRegistry, null, InstrumentationOptions.All).BuildWrapPipeline().WrapAsync(new MyEvent(), new RequestContext(), new Publication { Topic = _routingKey }); + _bus.Enqueue(msg); } [Test] diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs index 2dbc43e75e..5e8d44d260 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_proactor_shutdown_inside_async_context_should_not_deadlock.cs @@ -55,8 +55,7 @@ public async Task When_Proactor_Shuts_Down_Inside_BrighterAsyncContext_Should_No }); // Assert — the performer must complete within a reasonable timeout. // A deadlock would cause this to hang indefinitely. - bool finishedInTime = completed.Wait(TimeSpan.FromSeconds(30)); - await Assert.That(finishedInTime).IsTrue(); + await completed.WaitAsync(TimeSpan.FromSeconds(30)); await Assert.That(channel.DisposeAsyncCalled).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs index cd3b7dc4c6..9ee8fad1bd 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop_async.cs @@ -34,16 +34,14 @@ public PerformerCanStopTestsAsync() performer.Stop(_routingKey); } -#pragma warning disable xUnit1031 [Test] public async Task When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() { - _performerTask.Wait(); + await _performerTask; await Assert.That(_performerTask.IsCompleted).IsTrue(); await Assert.That(_performerTask.IsFaulted).IsFalse(); await Assert.That(_performerTask.IsCanceled).IsFalse(); await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } -#pragma warning restore xUnit1031 } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs index c6d49233e7..ca7c7ed0f2 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_has_a_new_connection_added_while_running.cs @@ -52,10 +52,10 @@ public async Task When_A_Message_Dispatcher_Has_A_New_Connection_Added_While_Run } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs index f6c1d03719..1583e1da94 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_is_asked_to_connect_a_channel_and_handler.cs @@ -35,13 +35,12 @@ public async Task Setup() _dispatcher.Receive(); } -#pragma warning disable xUnit1031 [Test] public async Task When_A_Message_Dispatcher_Is_Asked_To_Connect_A_Channel_And_Handler() { - Task.Delay(1000).Wait(); + await Task.Delay(1000); _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); + await _dispatcher.End(); await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); await Assert.That(_commandProcessor.Observe()).IsNotNull(); @@ -49,11 +48,10 @@ public async Task When_A_Message_Dispatcher_Is_Asked_To_Connect_A_Channel_And_Ha } [After(Test)] -#pragma warning restore xUnit1031 - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs index 82dc75afe6..c5aa027863 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection.cs @@ -39,11 +39,10 @@ public async Task Setup() { await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - Task.Delay(1000).Wait(); + await Task.Delay(1000); _dispatcher.Shut(_subscription); } -#pragma warning disable xUnit1031 [Test] public async Task When_A_Message_Dispatcher_Restarts_A_Connection() { @@ -51,19 +50,18 @@ public async Task When_A_Message_Dispatcher_Restarts_A_Connection() var @event = new MyEvent(); var message = new MyEventMessageMapper().MapToMessage(@event, _publication); _bus.Enqueue(message); - Task.Delay(1000).Wait(); + await Task.Delay(1000); _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); + await _dispatcher.End(); await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } [After(Test)] -#pragma warning restore xUnit1031 - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs index ceea483f96..30b7754621 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_restarts_a_connection_after_all_connections_have_stopped.cs @@ -43,10 +43,10 @@ public async Task Setup() { await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_AWAITING); _dispatcher.Receive(); - Task.Delay(250).Wait(); + await Task.Delay(250); _dispatcher.Shut(_subscription.Name); _dispatcher.Shut(_newSubscription.Name); - Task.Delay(1000).Wait(); + await Task.Delay(1000); await Assert.That(_dispatcher.Consumers).IsEmpty(); } @@ -66,10 +66,10 @@ public async Task When_A_Message_Dispatcher_Restarts_A_Connection_After_All_Conn } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs index 4cb0a8dfe7..730d115dbc 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_shuts_a_connection.cs @@ -50,10 +50,10 @@ public async Task When_A_Message_Dispatcher_Shuts_A_Connection() } [After(Test)] - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs index 0097f02476..96b89c2e17 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_different_types_of_performers.cs @@ -47,14 +47,13 @@ public async Task Setup() _dispatcher.Receive(); } -#pragma warning disable xUnit1031 [Test] public async Task When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers() { - Task.Delay(1000).Wait(); + await Task.Delay(1000); _numberOfConsumers = _dispatcher.Consumers.Count(); _timeProvider.Advance(TimeSpan.FromSeconds(2)); //This will trigger requeue of not acked/rejected messages - _dispatcher.End().Wait(); + await _dispatcher.End(); await Assert.That(_bus.Stream(_eventRoutingKey)).IsEmpty(); await Assert.That(_bus.Stream(_commandRoutingKey)).IsEmpty(); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); @@ -63,11 +62,10 @@ public async Task When_A_Message_Dispatcher_Starts_Different_Types_Of_Performers } [After(Test)] -#pragma warning restore xUnit1031 - public void Dispose() + public async Task Dispose() { if (_dispatcher?.State == DispatcherState.DS_RUNNING) - _dispatcher.End().Wait(); + await _dispatcher.End(); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs index 3621100ceb..39ab33d606 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_message_dispatcher_starts_multiple_performers.cs @@ -39,18 +39,16 @@ public async Task Setup() _dispatcher.Receive(); } -#pragma warning disable xUnit1031 [Test] public async Task WhenAMessageDispatcherStartsMultiplePerformers() { { await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); await Assert.That(_dispatcher.Consumers.Count()).IsEqualTo(3); - _dispatcher.End().Wait(); + await _dispatcher.End(); await Assert.That(_bus.Stream(new RoutingKey(Topic))).IsEmpty(); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } } -#pragma warning restore xUnit1031 } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs index 640004336c..e4be64296b 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_running_a_message_pump_on_a_thread_should_be_able_to_stop.cs @@ -35,16 +35,14 @@ public PerformerCanStopTests() performer.Stop(new RoutingKey(Topic)); } -#pragma warning disable xUnit1031 [Test] public async Task When_Running_A_Message_Pump_On_A_Thread_Should_Be_Able_To_Stop() { - _performerTask.Wait(); + await _performerTask; await Assert.That(_performerTask.IsCompleted).IsTrue(); await Assert.That(_performerTask.IsFaulted).IsFalse(); await Assert.That(_performerTask.IsCanceled).IsFalse(); await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); } -#pragma warning restore xUnit1031 } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs index bbaf422c01..387487f797 100644 --- a/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/Tasks/BrighterSynchronizationContextsTests.cs @@ -82,11 +82,10 @@ public async Task Run_AsyncTask_BlocksUntilCompletion() public async Task Run_AsyncTask_BlockingCode_Still_Ends() { bool resumed = false; - BrighterAsyncContext.Run(() => + BrighterAsyncContext.Run(async () => { - Task.Delay(50).GetAwaiter().GetResult(); + await Task.Delay(50); resumed = true; - return Task.CompletedTask; }); await Assert.That(resumed).IsTrue(); } @@ -111,7 +110,7 @@ public async Task Run_AsyncTaskWithResult_BlockingCode_Still_Ends() bool resumed = false; var result = BrighterAsyncContext.Run(async () => { - Task.Delay(50).GetAwaiter().GetResult(); + await Task.Delay(50); resumed = true; return 17; }); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 32ef4d6601..c564c40fb0 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,9 +11,9 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Proactor; public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); - private readonly GcpMessageProducer _messageProducer; - private readonly GcpPubSubSubscription _pubSubSubscription; - private readonly IAmAChannelAsync _channel; + private GcpMessageProducer _messageProducer; + private GcpPubSubSubscription _pubSubSubscription; + private IAmAChannelAsync _channel; private readonly string _topicName; private readonly GcpPubSubChannelFactory _channelFactory; private const int BufferSize = 3; @@ -22,13 +22,18 @@ public class PubSubBufferedConsumerTestsAsync : IDisposable public PubSubBufferedConsumerTestsAsync() { _channelFactory = GatewayFactory.CreateChannelFactory(); - var channelName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); _topicName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var channelName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - _channel = _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription = new GcpPubSubSubscription( + _channel = await _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription = new GcpPubSubSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, @@ -36,7 +41,7 @@ public PubSubBufferedConsumerTestsAsync() messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create, subscriptionMode: SubscriptionMode.Pull - )).GetAwaiter().GetResult(); + )); _messageProducer = GatewayFactory.CreateProducer(new GcpPublication { diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 9ae0513a5d..33e841e3db 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Pull.Reactor; [Category("GCP")] -public class PubSubBufferedConsumerTestsAsync : IDisposable +public class PubSubBufferedConsumerTestsAsync { private readonly ContentType _contentType = new("text/plain"); private readonly GcpMessageProducer _messageProducer; @@ -91,10 +91,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() } } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _channelFactory.DeleteSubscription(_pubSubSubscription); _channelFactory.DeleteTopic(_pubSubSubscription); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 24e9deefb4..6ca8454944 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -11,9 +11,9 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Proactor; public class PubSubBufferedConsumerTestsAsync : IDisposable { private readonly ContentType _contentType = new("text/plain"); - private readonly GcpMessageProducer _messageProducer; - private readonly GcpPubSubSubscription _pubSubSubscription; - private readonly IAmAChannelAsync _channel; + private GcpMessageProducer _messageProducer; + private GcpPubSubSubscription _pubSubSubscription; + private IAmAChannelAsync _channel; private readonly string _topicName; private readonly GcpPubSubChannelFactory _channelFactory; private const int BufferSize = 3; @@ -22,13 +22,18 @@ public class PubSubBufferedConsumerTestsAsync : IDisposable public PubSubBufferedConsumerTestsAsync() { _channelFactory = GatewayFactory.CreateChannelFactory(); - var channelName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); _topicName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); + } + + [Before(Test)] + public async Task Setup() + { + var channelName = $"Buffered-Consumer-Tests-{Guid.NewGuid().ToString()}".Truncate(45); //we need the channel to create the queues and notifications var routingKey = new RoutingKey(_topicName); - _channel = _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription = new GcpPubSubSubscription( + _channel = await _channelFactory.CreateAsyncChannelAsync(_pubSubSubscription = new GcpPubSubSubscription( subscriptionName: new SubscriptionName(channelName), channelName: new ChannelName(channelName), routingKey: routingKey, @@ -36,7 +41,7 @@ public PubSubBufferedConsumerTestsAsync() messagePumpType: MessagePumpType.Proactor, makeChannels: OnMissingChannel.Create, subscriptionMode: SubscriptionMode.Stream - )).GetAwaiter().GetResult(); + )); _messageProducer = GatewayFactory.CreateProducer(new GcpPublication { diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs index aece9818a8..94b5ff7154 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -8,7 +8,7 @@ namespace Paramore.Brighter.Gcp.Tests.MessagingGateway.Stream.Reactor; [Category("GCP")] -public class PubSubBufferedConsumerTestsAsync : IDisposable +public class PubSubBufferedConsumerTestsAsync { private readonly ContentType _contentType = new("text/plain"); private readonly GcpMessageProducer _messageProducer; @@ -91,10 +91,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() } } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _channelFactory.DeleteSubscription(_pubSubSubscription); _channelFactory.DeleteTopic(_pubSubSubscription); - _messageProducer.DisposeAsync().GetAwaiter().GetResult(); + await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs index 43cbd956a1..27ddc4f7c9 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_consumer_declares_topic_async.cs @@ -6,7 +6,7 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -public class KafkaConsumerDeclareTestsAsync : IAsyncDisposable, IDisposable +public class KafkaConsumerDeclareTestsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); @@ -100,7 +100,7 @@ public async Task When_a_consumer_declares_topics() { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); @@ -111,7 +111,8 @@ public async Task When_a_consumer_declares_topics() await Assert.That(messages[0].Body.Value).IsEqualTo(message.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); ((IAmAMessageConsumerSync)_consumer).Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs index 934b745c7f..8614051090 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_kafka_consumer_requeues_async_with_delay_should_use_producer.cs @@ -35,15 +35,16 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; /// so that requeued messages are actually redelivered. /// [Category("Kafka")] -public class KafkaConsumerRequeueAsyncTests : IAsyncDisposable, IDisposable +public class KafkaConsumerRequeueAsyncTests : IAsyncDisposable { private readonly string _topic = Guid.NewGuid().ToString(); private readonly string _channelName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly Message _message; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; + private Message _message; - public KafkaConsumerRequeueAsyncTests() + [Before(Test)] + public async Task Setup() { string groupId = Guid.NewGuid().ToString(); @@ -51,7 +52,7 @@ public KafkaConsumerRequeueAsyncTests() new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(_topic), MessageType.MT_COMMAND), new MessageBody("test content for async requeue")); - _producerRegistry = new KafkaProducerRegistryFactory( + _producerRegistry = await new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Requeue Async Test", @@ -67,7 +68,7 @@ public KafkaConsumerRequeueAsyncTests() RequestTimeoutMs = 2000, MakeChannels = OnMissingChannel.Create } - ]).CreateAsync().Result; + ]).CreateAsync(); _consumer = new KafkaMessageConsumerFactory( new KafkaMessagingGatewayConfiguration @@ -140,7 +141,8 @@ private async Task GetMessageAsync() return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); ((IAmAMessageConsumerSync)_consumer)?.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs index fdd6a90fed..ccb757d18c 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs @@ -7,18 +7,19 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -public class KafkaMessageConsumerSweepOffsetsAsync : IAsyncDisposable, IDisposable +public class KafkaMessageConsumerSweepOffsetsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly KafkaMessageConsumer _consumer; + private IAmAProducerRegistry _producerRegistry; + private KafkaMessageConsumer _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageConsumerSweepOffsetsAsync() + [Before(Test)] + public async Task Setup() { string groupId = Guid.NewGuid().ToString(); - _producerRegistry = new KafkaProducerRegistryFactory( + _producerRegistry = await new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", @@ -36,7 +37,7 @@ public KafkaMessageConsumerSweepOffsetsAsync() RequestTimeoutMs = 2000, MakeChannels = OnMissingChannel.Create } - ]).CreateAsync().Result; + ]).CreateAsync(); _consumer = (KafkaMessageConsumer) new KafkaMessageConsumerFactory( new KafkaMessagingGatewayConfiguration @@ -144,7 +145,8 @@ async Task ReadMessageAsync() } } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); _consumer.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs index 2a435b70a2..34645fec50 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_async.cs @@ -10,18 +10,19 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -public class KafkaMessageProducerSendTestsAsync : IAsyncDisposable, IDisposable +public class KafkaMessageProducerSendTestsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - public KafkaMessageProducerSendTestsAsync() + [Before(Test)] + public async Task Setup() { string groupId = Guid.NewGuid().ToString(); - _producerRegistry = new KafkaProducerRegistryFactory( + _producerRegistry = await new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", BootStrapServers = new[] { "localhost:9092" } @@ -38,7 +39,7 @@ public KafkaMessageProducerSendTestsAsync() RequestTimeoutMs = 2000, MakeChannels = OnMissingChannel.Create } - ]).CreateAsync().Result; + ]).CreateAsync(); _consumer = new KafkaMessageConsumerFactory( new KafkaMessagingGatewayConfiguration @@ -148,7 +149,8 @@ private async Task GetMessageAsync() return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); ((IAmAMessageConsumerSync)_consumer)?.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs index f4036178c8..c48923e92c 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_posting_a_message_with_header_bytes_async.cs @@ -12,21 +12,22 @@ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -public class KafkaMessageProducerHeaderBytesSendTestsAsync : IAsyncDisposable, IDisposable +public class KafkaMessageProducerHeaderBytesSendTestsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - private readonly IAsyncSerializer _serializer; - private readonly IAsyncDeserializer _deserializer; - private readonly SerializationContext _serializationContext; + private IAsyncSerializer _serializer; + private IAsyncDeserializer _deserializer; + private SerializationContext _serializationContext; - public KafkaMessageProducerHeaderBytesSendTestsAsync() + [Before(Test)] + public async Task Setup() { string groupId = Guid.NewGuid().ToString(); - _producerRegistry = new KafkaProducerRegistryFactory( + _producerRegistry = await new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", @@ -44,7 +45,7 @@ public KafkaMessageProducerHeaderBytesSendTestsAsync() RequestTimeoutMs = 2000, MakeChannels = OnMissingChannel.Create } - ]).CreateAsync().Result; + ]).CreateAsync(); _consumer = new KafkaMessageConsumerFactory( new KafkaMessagingGatewayConfiguration @@ -158,7 +159,8 @@ private async Task GetMessageAsync() return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); ((IAmAMessageConsumerSync)_consumer)?.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs index 6d756e026d..aa86a02784 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_recieving_a_message_without_partition_key_header_async.cs @@ -131,7 +131,8 @@ private async Task GetMessageAsync() return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producer?.Dispose(); ((IAmAMessageConsumerSync)_consumer)?.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index 3c54b2ae34..3c82d49814 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -31,20 +31,21 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Proactor; [Category("Kafka")] -public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync : IAsyncDisposable, IDisposable +public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly KafkaMessageConsumer _consumer; + private IAmAProducerRegistry _producerRegistry; + private KafkaMessageConsumer _consumer; private readonly string _partitionKey = Guid.NewGuid().ToString(); - private readonly FakeTimeProvider _fakeTimeProvider; + private FakeTimeProvider _fakeTimeProvider; - public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync() + [Before(Test)] + public async Task Setup() { var groupId = Uuid.New().ToString("N"); - - _producerRegistry = new KafkaProducerRegistryFactory( + + _producerRegistry = await new KafkaProducerRegistryFactory( new KafkaMessagingGatewayConfiguration { Name = "Kafka Producer Send Test", @@ -62,7 +63,7 @@ public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync() RequestTimeoutMs = 2000, MakeChannels = OnMissingChannel.Create } - ]).CreateAsync().Result; + ]).CreateAsync(); // Create a fake time provider to control time in the test _fakeTimeProvider = new FakeTimeProvider(); @@ -75,8 +76,8 @@ public WhenSweeperTimeoutReachedShouldCommitUncommittedOffsetsAsync() commitBatchSize: 20, //Large commit batch size to ensure sweeper is triggered sweepUncommittedOffsetsInterval: TimeSpan.FromSeconds(30), messagePumpType: MessagePumpType.Proactor, - numOfPartitions: 1, - replicationFactor: 1, + numOfPartitions: 1, + replicationFactor: 1, makeChannels: OnMissingChannel.Create) { TimeProvider = _fakeTimeProvider }; _consumer = (KafkaMessageConsumer) new KafkaMessageConsumerFactory( @@ -171,7 +172,8 @@ private async Task ReadMessageAsync() return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); _consumer.Dispose(); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs index be7d8cf01e..528f96f4a4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_message_is_acknowledged_update_offset.cs @@ -93,7 +93,7 @@ private async Task ConsumeMessages(string groupId, int batchLimit) { for (int i = 0; i < batchLimit; i++) { - consumedMessages.Add(ConsumeMessage(consumer)); + consumedMessages.Add(await ConsumeMessage(consumer)); } //yield to allow commits to flush @@ -102,7 +102,7 @@ private async Task ConsumeMessages(string groupId, int batchLimit) return consumedMessages.ToArray(); - Message ConsumeMessage(IAmAMessageConsumerSync consumer) + async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { Message[] messages = [new Message()]; int maxTries = 0; @@ -124,7 +124,7 @@ Message ConsumeMessage(IAmAMessageConsumerSync consumer) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs index 28f72a3b50..bdb9056603 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_a_set_of_messages_is_sent_preserve_order.cs @@ -64,22 +64,22 @@ public async Task When_a_message_is_sent_keep_order() consumer = CreateConsumer(); //Now read messages in order - var firstMessage = ConsumeMessages(consumer); + var firstMessage = await ConsumeMessages(consumer); var message = firstMessage.First(); await Assert.That(message.Id).IsEqualTo(msgId); consumer.Acknowledge(message); - var secondMessage = ConsumeMessages(consumer); + var secondMessage = await ConsumeMessages(consumer); message = secondMessage.First(); await Assert.That(message.Id).IsEqualTo(msgId2); consumer.Acknowledge(message); - var thirdMessages = ConsumeMessages(consumer); + var thirdMessages = await ConsumeMessages(consumer); message = thirdMessages.First(); await Assert.That(message.Id).IsEqualTo(msgId3); consumer.Acknowledge(message); - var fourthMessage = ConsumeMessages(consumer); + var fourthMessage = await ConsumeMessages(consumer); message = fourthMessage.First(); await Assert.That(message.Id).IsEqualTo(msgId4); consumer.Acknowledge(message); @@ -108,7 +108,7 @@ private string SendMessage(IAmAMessageProducerSync producer) return messageId; } - private IEnumerable ConsumeMessages(IAmAMessageConsumerSync consumer) + private async Task> ConsumeMessages(IAmAMessageConsumerSync consumer) { var messages = Array.Empty(); int maxTries = 0; @@ -126,7 +126,7 @@ private IEnumerable ConsumeMessages(IAmAMessageConsumerSync consumer) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs index f1e79007e8..2f2c97a409 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs @@ -82,7 +82,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac //consume a few messages to get consumer A established for (int j = 0; j < 5; j++) { - var msg = ReadMessage(consumerA); + var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { consumerA.Acknowledge(msg); @@ -95,13 +95,13 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac //by adding consumer B to the group Exception? caughtException = null; - var consumeTask = Task.Run(() => + var consumeTask = Task.Run(async () => { try { for (int j = 0; j < 20; j++) { - var msg = ReadMessage(consumerA); + var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { //each acknowledge fires a background commit (batch size = 1) @@ -166,7 +166,7 @@ private KafkaMessageConsumer CreateConsumer(int commitBatchSize, )); } - private Message ReadMessage(KafkaMessageConsumer consumer) + private async Task ReadMessage(KafkaMessageConsumer consumer) { Message[] messages = [new Message()]; int maxTries = 0; @@ -185,7 +185,7 @@ private Message ReadMessage(KafkaMessageConsumer consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(500).GetAwaiter().GetResult(); + await Task.Delay(500); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs index b45fec4536..d52c0aa7fd 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_consumer_declares_topic.cs @@ -78,14 +78,14 @@ public async Task When_a_consumer_declares_topics() //ensure the messages are sent ((KafkaMessageProducer)producer).Flush(); - Message receivedMessage = ConsumeMessage(); + Message receivedMessage = await ConsumeMessage(); await Assert.That(receivedMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(_partitionKey); await Assert.That(receivedMessage.Body.Value).IsEqualTo(message.Body.Value); } - private Message ConsumeMessage() + private async Task ConsumeMessage() { Message[] messages = new Message[0]; int maxTries = 0; @@ -105,7 +105,7 @@ private Message ConsumeMessage() { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs index fd210a95b2..a8381b4fc7 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs @@ -88,7 +88,7 @@ public async Task When_creating_dlq_producer_with_make_channels_create_should_cr Message? receivedMessage; using (var consumer = CreateConsumer(groupId, dlqRoutingKey, OnMissingChannel.Create)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} - DLQ topic should be created automatically"); @@ -112,7 +112,7 @@ public async Task When_creating_dlq_producer_with_make_channels_create_should_cr using (var dlqConsumer = CreateDLQConsumer(groupId)) { Console.WriteLine("Attempting to consume from DLQ - this proves topic was auto-created"); - var dlqMessage = ConsumeMessage(dlqConsumer); + var dlqMessage = await ConsumeMessage(dlqConsumer); await Assert.That(dlqMessage).IsNotNull(); await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -171,7 +171,7 @@ private IAmAMessageConsumerSync CreateDLQConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -189,7 +189,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs index 5a6e756eef..ad9714def4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_disposes_should_dispose_requeue_producer.cs @@ -92,7 +92,7 @@ public async Task When_consumer_requeues_then_disposes_should_dispose_producer() producer.Send(message); ((KafkaMessageProducer)producer).Flush(); - var received = GetMessage(); + var received = await GetMessage(); await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue to trigger lazy producer creation, then dispose @@ -109,7 +109,7 @@ public async Task When_consumer_disposes_without_requeue_should_not_throw() await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = []; int maxTries = 0; @@ -129,7 +129,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs index 56aa5fdf2e..9d6c6054a9 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_producer.cs @@ -94,7 +94,7 @@ public async Task When_requeuing_should_publish_message_via_producer() producer.Send(_message); ((KafkaMessageProducer)producer).Flush(); - var received = GetMessage(); + var received = await GetMessage(); await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); Console.WriteLine($"Received body length: {received.Body.Bytes.Length}, value: '{received.Body.Value}'"); Console.WriteLine($"Received topic: {received.Header.Topic}"); @@ -106,13 +106,13 @@ public async Task When_requeuing_should_publish_message_via_producer() await Assert.That(result).IsTrue(); // Assert - message should be available again on the topic (published via producer) - var requeued = GetMessage(); + var requeued = await GetMessage(); Console.WriteLine($"Requeued body length: {requeued.Body.Bytes.Length}, value: '{requeued.Body.Value}'"); Console.WriteLine($"Requeued topic: {requeued.Header.Topic}, type: {requeued.Header.MessageType}"); await Assert.That(requeued.Body.Value).IsEqualTo(_message.Body.Value); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = []; int maxTries = 0; @@ -132,7 +132,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs index c50727adc5..75696699ef 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs @@ -94,7 +94,7 @@ public async Task When_requeuing_with_delay_should_use_scheduler() producer.Send(_message); ((KafkaMessageProducer)producer).Flush(); - var received = GetMessage(); + var received = await GetMessage(); await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with non-zero delay (should use scheduler via producer) @@ -105,7 +105,7 @@ public async Task When_requeuing_with_delay_should_use_scheduler() await Assert.That(_scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = []; int maxTries = 0; @@ -125,7 +125,7 @@ private Message GetMessage() catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs index 4c79dd774a..9e446ca4a4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message.cs @@ -122,7 +122,7 @@ public async Task When_posting_a_message() await Assert.That(messagePublished).IsTrue(); - var receivedMessage = GetMessage(); + var receivedMessage = await GetMessage(); var receivedCommand = JsonSerializer.Deserialize(receivedMessage.Body.Value, JsonSerialisationOptions.Options); @@ -154,7 +154,7 @@ public async Task When_posting_a_message() await Assert.That(message.Header.Bag["Test Header"]).IsEqualTo("Test Value"); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = []; int maxTries = 0; @@ -175,7 +175,7 @@ private Message GetMessage() { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs index 6bd5938a40..c7b8179387 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_posting_a_message_with_header_bytes.cs @@ -111,7 +111,7 @@ public async Task When_posting_a_message_via_the_messaging_gateway() await Task.Delay(500); //Let the message propagate in the broker - var received = GetMessage(); + var received = await GetMessage(); await Assert.That(received.Body.Bytes.Length > 5).IsTrue(); @@ -129,7 +129,7 @@ public async Task When_posting_a_message_via_the_messaging_gateway() await Assert.That(receivedCommand.Value).IsEqualTo(myCommand.Value); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = Array.Empty(); int maxTries = 0; @@ -151,7 +151,7 @@ private Message GetMessage() { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs index 2ca415b4cc..aa154ff2b6 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_recieving_a_message_without_partition_key_header.cs @@ -93,14 +93,14 @@ public async Task When_recieving_a_message_without_partition_key_header() //let this propogate to the Broker await Task.Delay(3000); - var receivedMessage = GetMessage(); + var receivedMessage = await GetMessage(); //Where we lack a partition key header, assume non-Brighter header and set to message key await Assert.That(receivedMessage.Header.PartitionKey).IsEqualTo(command.Id); await Assert.That(receivedMessage.Body.Bytes).IsEqualTo(value); } - private Message GetMessage() + private async Task GetMessage() { Message[] messages = new Message[0]; int maxTries = 0; @@ -118,13 +118,13 @@ private Message GetMessage() } //wait before retry - allow consumer group join to complete - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs index 517ee0ea26..aa5d5372e3 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs @@ -88,7 +88,7 @@ public async Task When_rejecting_message_should_include_metadata() Message? receivedMessage; using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} with DeliveryError"); @@ -111,7 +111,7 @@ public async Task When_rejecting_message_should_include_metadata() using (var dlqConsumer = CreateDLQConsumer(groupId)) { Console.WriteLine("Attempting to consume from DLQ"); - var dlqMessage = ConsumeMessage(dlqConsumer); + var dlqMessage = await ConsumeMessage(dlqConsumer); await Assert.That(dlqMessage).IsNotNull(); await Assert.That(dlqMessage.Body.Value).IsEqualTo(receivedMessage.Body.Value); @@ -193,7 +193,7 @@ private IAmAMessageConsumerSync CreateDLQConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -211,7 +211,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 2faf6ccf7d..4e729d9755 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -87,7 +87,7 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( Message? receivedMessage; using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} with DeliveryError"); @@ -110,7 +110,7 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( using (var dlqConsumer = CreateDLQConsumer(groupId)) { Console.WriteLine("Attempting to consume from DLQ"); - var dlqMessage = ConsumeMessage(dlqConsumer); + var dlqMessage = await ConsumeMessage(dlqConsumer); await Assert.That(dlqMessage).IsNotNull(); await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -168,7 +168,7 @@ private IAmAMessageConsumerSync CreateDLQConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -186,7 +186,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 2b7f53bfdb..5a33137dfa 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -90,7 +90,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn //Act - consume and reject the first message, then consume the second using (var consumer = CreateConsumerWithNoChannels(groupId)) { - var receivedMessage1 = ConsumeMessage(consumer); + var receivedMessage1 = await ConsumeMessage(consumer); await Assert.That(receivedMessage1.Id).IsEqualTo(messageId1); Console.WriteLine($"About to reject message {messageId1} with no channels configured"); @@ -104,7 +104,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn await Assert.That(rejected).IsTrue(); //verify we can consume the next message (proving first was acknowledged) - var receivedMessage2 = ConsumeMessage(consumer); + var receivedMessage2 = await ConsumeMessage(consumer); await Assert.That(receivedMessage2.Id).IsEqualTo(messageId2); Console.WriteLine($"Successfully consumed message {messageId2} after rejection"); @@ -138,7 +138,7 @@ private IAmAMessageConsumerSync CreateConsumerWithNoChannels(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -156,7 +156,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index eb6b348cd7..b27a80897a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -87,7 +87,7 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe Message? receivedMessage; using (var consumer = CreateConsumerWithDlqOnly(groupId, dlqRoutingKey)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} with Unacceptable reason (no invalid channel configured)"); @@ -110,7 +110,7 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe using (var dlqConsumer = CreateDLQConsumer(groupId)) { Console.WriteLine("Attempting to consume from DLQ"); - var dlqMessage = ConsumeMessage(dlqConsumer); + var dlqMessage = await ConsumeMessage(dlqConsumer); await Assert.That(dlqMessage).IsNotNull(); await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -170,7 +170,7 @@ private IAmAMessageConsumerSync CreateDLQConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -188,7 +188,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index d900f5c8ff..3577574ee9 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -87,7 +87,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to Message? receivedMessage; using (var consumer = CreateConsumer(groupId, invalidMessageRoutingKey)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} with Unacceptable reason"); @@ -110,7 +110,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to using (var invalidMessageConsumer = CreateInvalidMessageConsumer(groupId)) { Console.WriteLine("Attempting to consume from invalid message channel"); - var invalidMessage = ConsumeMessage(invalidMessageConsumer); + var invalidMessage = await ConsumeMessage(invalidMessageConsumer); await Assert.That(invalidMessage).IsNotNull(); await Assert.That(invalidMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -169,7 +169,7 @@ private IAmAMessageConsumerSync CreateInvalidMessageConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -187,7 +187,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs index 62fb0ffc9b..0177ac7a1a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs @@ -87,7 +87,7 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq( Message? receivedMessage; using (var consumer = CreateConsumer(groupId, dlqRoutingKey)) { - receivedMessage = ConsumeMessage(consumer); + receivedMessage = await ConsumeMessage(consumer); await Assert.That(receivedMessage.Id).IsEqualTo(messageId); Console.WriteLine($"About to reject message {messageId} with unknown reason (None)"); @@ -110,7 +110,7 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq( using (var dlqConsumer = CreateDLQConsumer(groupId)) { Console.WriteLine("Attempting to consume from DLQ"); - var dlqMessage = ConsumeMessage(dlqConsumer); + var dlqMessage = await ConsumeMessage(dlqConsumer); await Assert.That(dlqMessage).IsNotNull(); await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -169,7 +169,7 @@ private IAmAMessageConsumerSync CreateDLQConsumer(string groupId) )); } - private Message ConsumeMessage(IAmAMessageConsumerSync consumer) + private async Task ConsumeMessage(IAmAMessageConsumerSync consumer) { int maxTries = 0; do @@ -187,7 +187,7 @@ private Message ConsumeMessage(IAmAMessageConsumerSync consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs index e03ee5d7a4..e020e6b95f 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs @@ -88,7 +88,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( var firstBatchIds = new List(); for (int j = 0; j < 5; j++) { - var msg = ReadMessage(consumerA); + var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { consumerA.Acknowledge(msg); @@ -105,7 +105,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( var secondBatchIds = new List(); for (int j = 0; j < 5; j++) { - var msg = ReadMessage(consumerA); + var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { consumerA.Acknowledge(msg); @@ -198,7 +198,7 @@ private KafkaMessageConsumer CreateConsumer(int commitBatchSize, )); } - private Message ReadMessage(KafkaMessageConsumer consumer) + private async Task ReadMessage(KafkaMessageConsumer consumer) { Message[] messages = [new Message()]; int maxTries = 0; @@ -217,7 +217,7 @@ private Message ReadMessage(KafkaMessageConsumer consumer) catch (ChannelFailureException cfx) { Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index 3d0b477ada..d6cf840f0b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -31,7 +31,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.Kafka.Tests.MessagingGateway.Reactor; [Category("Kafka")] -public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets : IAsyncDisposable, IDisposable +public class WhenSweeperTimeoutReachedShouldCommitUncommittedOffsets : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topic = Guid.NewGuid().ToString(); @@ -93,7 +93,7 @@ public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets { //Arrange //allow time for topic to propagate - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); var routingKey = new RoutingKey(_topic); var producerAsync = _producerRegistry.LookupSyncBy(routingKey); @@ -114,12 +114,12 @@ public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets ((KafkaMessageProducer)producerAsync).Flush(); //allow messages to propagate on the broker - Task.Delay(3000).GetAwaiter().GetResult(); + await Task.Delay(3000); var consumedMessages = new List(); for (int j = 0; j < 5; j++) { - consumedMessages.Add(ReadMessage()); + consumedMessages.Add(await ReadMessage()); } //Assert - messages consumed and acknowledged but not yet committed @@ -130,7 +130,7 @@ public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets _fakeTimeProvider.Advance(TimeSpan.FromSeconds(31)); //Allow the timer callback to execute - Task.Delay(2000).GetAwaiter().GetResult(); + await Task.Delay(2000); //Assert - Sweeper should have committed the offsets await Assert.That(_consumer.StoredOffsets()).IsEqualTo(0); @@ -138,7 +138,7 @@ public async Task When_sweeper_timeout_reached_should_commit_uncommitted_offsets _consumer.Close(); } - private Message ReadMessage() + private async Task ReadMessage() { Message[] messages = [new Message()]; int maxTries = 0; @@ -147,7 +147,7 @@ private Message ReadMessage() try { maxTries++; - Task.Delay(500).GetAwaiter().GetResult(); //Let topic propagate in the broker + await Task.Delay(500); //Let topic propagate in the broker messages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -157,20 +157,21 @@ private Message ReadMessage() } //wait before retry - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } catch (ChannelFailureException cfx) { //Lots of reasons to be here as Kafka propagates a topic, or the test cluster is still initializing Console.WriteLine($" Failed to read from topic:{_topic} because {cfx.Message} attempt: {maxTries}"); - Task.Delay(1000).GetAwaiter().GetResult(); + await Task.Delay(1000); } } while (maxTries <= 10); return messages[0]; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry?.Dispose(); _consumer.Dispose(); diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs index 696aa02f3d..79541604f7 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Base/MqttTestClassBase.cs @@ -28,7 +28,10 @@ public abstract class MqttTestClassBase : TestClassBase protected static readonly MqttFactory s_mqttFactory = new(); protected readonly Message _noopMessage = new(); - protected readonly MqttTestServer? MqttTestServer; + protected MqttTestServer? MqttTestServer; + + private readonly IPAddress _serverIPAddress; + private readonly int _serverPort; /// /// Initializes a new instance of the class with the specified client ID, topic prefix, and test output helper. @@ -56,15 +59,13 @@ protected MqttTestClassBase(string clientID, string topicPrefix) configure.Services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(TestOutputLogger<>))); }); - IPAddress serverIPAddress = IPAddress.Any; - int serverPort = MqttTestServer.GetRandomServerPort(); - - MqttTestServer = MqttTestServer.CreateTestMqttServer(s_mqttFactory, true, ApplicationLogging.CreateLogger(), serverIPAddress, serverPort, null, TestDisplayName); + _serverIPAddress = IPAddress.Any; + _serverPort = Helpers.Server.MqttTestServer.GetRandomServerPort(); var mqttProducerConfig = new MqttMessagingGatewayProducerConfiguration { Hostname = IPAddress.Loopback.ToString(), - Port = serverPort, + Port = _serverPort, TopicPrefix = uniqueTopicPrefix }; @@ -74,7 +75,7 @@ protected MqttTestClassBase(string clientID, string topicPrefix) MqttMessagingGatewayConsumerConfiguration mqttConsumerConfig = new() { Hostname = IPAddress.Loopback.ToString(), - Port = serverPort, + Port = _serverPort, TopicPrefix = uniqueTopicPrefix, ClientID = uniqueClientId }; @@ -82,6 +83,12 @@ protected MqttTestClassBase(string clientID, string topicPrefix) MessageConsumerAsync = new MqttMessageConsumer(mqttConsumerConfig); } + [Before(HookType.Test)] + public virtual async Task SetupMqttServer() + { + MqttTestServer = await Helpers.Server.MqttTestServer.CreateTestMqttServer(s_mqttFactory, true, ApplicationLogging.CreateLogger(), _serverIPAddress, _serverPort, null, TestDisplayName); + } + /// /// Gets the asynchronous message producer used for sending messages to the MQTT messaging gateway during tests. /// diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs index 2d8de0f2be..b3269b576a 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Helpers/Server/MqttTestServer.cs @@ -35,7 +35,7 @@ protected MqttTestServer(MqttFactory mqttFactory, int serverPort, ILogger logger public string HostName => MqttServerOptions.DefaultEndpointOptions.BoundInterNetworkAddress.ToString(); - public static MqttTestServer? CreateTestMqttServer(MqttFactory mqttFactory, bool startService = true, ILogger? logger = null, IPAddress? serverIPAddress = null, int? serverPort = null, MqttServerOptions? mqttServerOptions = null, [CallerMemberName] string? testMethodName = null) + public static async Task CreateTestMqttServer(MqttFactory mqttFactory, bool startService = true, ILogger? logger = null, IPAddress? serverIPAddress = null, int? serverPort = null, MqttServerOptions? mqttServerOptions = null, [CallerMemberName] string? testMethodName = null) { ArgumentNullException.ThrowIfNull(mqttFactory); @@ -74,7 +74,7 @@ protected MqttTestServer(MqttFactory mqttFactory, int serverPort, ILogger logger { if (startService) { - testMqttServer.MqttServer.StartAsync().GetAwaiter().GetResult(); + await testMqttServer.MqttServer.StartAsync(); } } catch (Exception ex) diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index ecf0d40b67..4a9fa19545 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -38,17 +38,20 @@ public class MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests : IDisposable private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqAsyncSource"; private const string DLQ_TOPIC_PREFIX = "BrighterTests/DlqAsyncTarget"; - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; //Arrange — source producer var producerConfig = new MqttMessagingGatewayProducerConfiguration @@ -85,6 +88,12 @@ public MqttMessageConsumerRejectDeliveryErrorDlqAsyncTests() _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_rejecting_message_async_with_delivery_error_should_send_to_dlq() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs index e7111168c2..4871c5fb0e 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -38,21 +38,19 @@ namespace Paramore.Brighter.MQTT.Tests.MessagingGateway.Reactor; [Category("MQTT")] public class MqttConsumerProducerConfigAndDisposeTests : IDisposable { - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _producer; private readonly MqttMessageConsumer _consumer; private readonly SpySchedulerSync _scheduler; + private readonly int _serverPort; public MqttConsumerProducerConfigAndDisposeTests() { int serverPort = MqttTestServer.GetRandomServerPort(); + _serverPort = serverPort; string topicPrefix = "BrighterIntegrationTests/SchedulerDisposeTests"; - _mqttTestServer = MqttTestServer.CreateTestMqttServer( - new MqttFactory(), true, null, - IPAddress.Any, serverPort, null, "MqttConsumerProducerConfigAndDisposeTests"); - var producerConfig = new MqttMessagingGatewayProducerConfiguration { Hostname = IPAddress.Loopback.ToString(), @@ -76,6 +74,14 @@ public MqttConsumerProducerConfigAndDisposeTests() _consumer = new MqttMessageConsumer(consumerConfig, _scheduler); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer( + new MqttFactory(), true, null, + IPAddress.Any, _serverPort, null, "MqttConsumerProducerConfigAndDisposeTests"); + } + [Test] public async Task When_requeuing_with_delay_should_use_scheduler() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 8440830f1b..de0a3cd76f 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -38,17 +38,20 @@ public class MqttMessageConsumerRejectDeliveryErrorDlqTests : IDisposable private const string SOURCE_TOPIC_PREFIX = "BrighterTests/DlqSource"; private const string DLQ_TOPIC_PREFIX = "BrighterTests/DlqTarget"; - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerRejectDeliveryErrorDlqTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; //Arrange — source producer var producerConfig = new MqttMessagingGatewayProducerConfiguration @@ -85,6 +88,12 @@ public MqttMessageConsumerRejectDeliveryErrorDlqTests() _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs index fda795b763..bdedbd6c77 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_return_true.cs @@ -37,16 +37,19 @@ public class MqttMessageConsumerRejectNoChannelsTests : IDisposable { private const string SOURCE_TOPIC_PREFIX = "BrighterTests/NoChannels"; - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerRejectNoChannelsTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; //Arrange — source producer var producerConfig = new MqttMessagingGatewayProducerConfiguration @@ -70,6 +73,12 @@ public MqttMessageConsumerRejectNoChannelsTests() _sourceConsumer = new MqttMessageConsumer(consumerConfig); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_rejecting_message_with_no_channels_configured_should_return_true() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index d13e616a33..0c2627b143 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -38,17 +38,20 @@ public class MqttMessageConsumerRejectUnacceptableFallbackToDlqTests : IDisposab private const string SOURCE_TOPIC_PREFIX = "BrighterTests/FallbackSource"; private const string DLQ_TOPIC_PREFIX = "BrighterTests/FallbackDlq"; - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _dlqConsumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerRejectUnacceptableFallbackToDlqTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; //Arrange — source producer var producerConfig = new MqttMessagingGatewayProducerConfiguration @@ -85,6 +88,12 @@ public MqttMessageConsumerRejectUnacceptableFallbackToDlqTests() _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index c3b1cab43a..eb87932b0d 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -39,18 +39,21 @@ public class MqttMessageConsumerRejectUnacceptableInvalidChannelTests : IDisposa private const string DLQ_TOPIC_PREFIX = "BrighterTests/InvalidDlq"; private const string INVALID_TOPIC_PREFIX = "BrighterTests/InvalidTarget"; - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageProducer _sourceProducer; private readonly MqttMessageConsumer _sourceConsumer; private readonly MqttMessageConsumer _invalidConsumer; private readonly MqttMessageConsumer _dlqConsumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerRejectUnacceptableInvalidChannelTests() { var mqttFactory = new MqttFactory(); int serverPort = MqttTestServer.GetRandomServerPort(); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; //Arrange — source producer var producerConfig = new MqttMessagingGatewayProducerConfiguration @@ -98,6 +101,12 @@ public MqttMessageConsumerRejectUnacceptableInvalidChannelTests() _dlqConsumer = new MqttMessageConsumer(dlqConsumerConfig); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { diff --git a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs index 78af8fe812..f45d52a628 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys.cs @@ -35,9 +35,11 @@ namespace Paramore.Brighter.MQTT.Tests; [Category("MQTT")] public class MqttMessageConsumerFactoryDlqTests : IDisposable { - private readonly MqttTestServer? _mqttTestServer; + private MqttTestServer? _mqttTestServer; private readonly MqttMessageConsumerFactory _factory; private IAmAMessageConsumerSync? _consumer; + private readonly MqttFactory _mqttFactory; + private readonly int _serverPort; public MqttMessageConsumerFactoryDlqTests() { @@ -46,7 +48,8 @@ public MqttMessageConsumerFactoryDlqTests() int serverPort = MqttTestServer.GetRandomServerPort(); var uniqueSuffix = Guid.NewGuid().ToString("N"); - _mqttTestServer = MqttTestServer.CreateTestMqttServer(mqttFactory, true, serverPort: serverPort); + _mqttFactory = mqttFactory; + _serverPort = serverPort; var configuration = new MqttMessagingGatewayConsumerConfiguration { @@ -59,6 +62,12 @@ public MqttMessageConsumerFactoryDlqTests() _factory = new MqttMessageConsumerFactory(configuration); } + [Before(HookType.Test)] + public async Task Setup() + { + _mqttTestServer = await MqttTestServer.CreateTestMqttServer(_mqttFactory, true, serverPort: _serverPort); + } + [Test] public async Task When_creating_mqtt_consumer_with_dlq_subscription_should_pass_routing_keys() { diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs index 5c993f1dba..28a2747f46 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_async.cs @@ -10,14 +10,15 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { [Category("MSSQL")] - public class PostMessageTestAsync : IAsyncDisposable, IDisposable + public class PostMessageTestAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topicName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; - public PostMessageTestAsync() + [Before(Test)] + public async Task Setup() { var testHelper = new MsSqlTestHelper(); testHelper.SetupQueueDb(); @@ -29,10 +30,10 @@ public PostMessageTestAsync() new ChannelName(_topicName), routingKey, messagePumpType: MessagePumpType.Proactor); - _producerRegistry = new MsSqlProducerRegistryFactory( + _producerRegistry = await new MsSqlProducerRegistryFactory( testHelper.QueueConfiguration, [new() { Topic = routingKey }] - ).CreateAsync().Result; + ).CreateAsync(); _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } @@ -113,7 +114,8 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume return messages; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry.Dispose(); ((IAmAMessageConsumerSync)_consumer).Dispose(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs index f385783d25..02a93049be 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs @@ -8,14 +8,15 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { [Category("MSSQL")] - public class OrderTestAsync : IAsyncDisposable, IDisposable + public class OrderTestAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topicName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; - public OrderTestAsync() + [Before(Test)] + public async Task Setup() { var testHelper = new MsSqlTestHelper(); testHelper.SetupQueueDb(); @@ -27,10 +28,10 @@ public OrderTestAsync() new ChannelName(_topicName), routingKey, messagePumpType: MessagePumpType.Proactor); - _producerRegistry = new MsSqlProducerRegistryFactory( + _producerRegistry = await new MsSqlProducerRegistryFactory( testHelper.QueueConfiguration, [new() { Topic = routingKey }] - ).CreateAsync().Result; + ).CreateAsync(); _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } @@ -100,7 +101,8 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume return messages; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry.Dispose(); ((IAmAMessageConsumerSync)_consumer).Dispose(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs index 9e5066d101..65aea444f2 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs @@ -8,14 +8,15 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway { [Category("MSSQL")] - public class PurgeTestAsync : IAsyncDisposable, IDisposable + public class PurgeTestAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly RoutingKey _routingKey; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; + private RoutingKey _routingKey; - public PurgeTestAsync() + [Before(Test)] + public async Task Setup() { var testHelper = new MsSqlTestHelper(); testHelper.SetupQueueDb(); @@ -26,12 +27,12 @@ public PurgeTestAsync() new SubscriptionName(_queueName), new ChannelName(_routingKey.Value), _routingKey, messagePumpType: MessagePumpType.Proactor); - - _producerRegistry = new MsSqlProducerRegistryFactory( + + _producerRegistry = await new MsSqlProducerRegistryFactory( testHelper.QueueConfiguration, [new() { Topic = _routingKey }] - ).CreateAsync().Result; - + ).CreateAsync(); + _consumer = new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration).CreateAsync(sub); } @@ -91,7 +92,8 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume return messages; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageConsumerSync)_consumer).Dispose(); _producerRegistry.Dispose(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs index 80a7382b9e..6782961821 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.MSSQL.Tests.MessagingGateway public class MsSqlMessageConsumerRequeueTestsAsync : IDisposable { private readonly Message _message; - private readonly IAmAProducerRegistry _producerRegistry; + private IAmAProducerRegistry _producerRegistry; private readonly IAmAChannelFactory _channelFactory; private readonly MsSqlSubscription _subscription; private readonly RoutingKey _topic; @@ -37,11 +37,18 @@ public MsSqlMessageConsumerRequeueTestsAsync() _subscription = new MsSqlSubscription(new SubscriptionName(channelName), new ChannelName(_topic), new RoutingKey(_topic)); - _producerRegistry = new MsSqlProducerRegistryFactory( + _channelFactory = new ChannelFactory(new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration)); + } + + [Before(Test)] + public async Task Setup() + { + var testHelper = new MsSqlTestHelper(); + testHelper.SetupQueueDb(); + _producerRegistry = await new MsSqlProducerRegistryFactory( testHelper.QueueConfiguration, [new Publication {Topic = new RoutingKey(_topic)}] - ).CreateAsync().Result; - _channelFactory = new ChannelFactory(new MsSqlMessageConsumerFactory(testHelper.QueueConfiguration)); + ).CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs index f451fe4aa2..9e50d0f114 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_a_message_is_sent_keep_order_async.cs @@ -8,14 +8,15 @@ namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; [Category("PostgresSql")] -public class OrderTestAsync : IAsyncDisposable, IDisposable +public class OrderTestAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); private readonly string _topicName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; - public OrderTestAsync() + [Before(Test)] + public async Task Setup() { var testHelper = new PostgresSqlTestHelper(); testHelper.SetupDatabase(); @@ -27,11 +28,11 @@ public OrderTestAsync() new ChannelName(_topicName), routingKey, messagePumpType: MessagePumpType.Proactor); - _producerRegistry = new PostgresProducerRegistryFactory( + _producerRegistry = await new PostgresProducerRegistryFactory( new PostgresMessagingGatewayConnection(testHelper.Configuration), [new PostgresPublication { Topic = routingKey }] - ).CreateAsync().GetAwaiter().GetResult(); - + ).CreateAsync(); + _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).CreateAsync(sub); } @@ -103,7 +104,8 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume return messages; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { _producerRegistry.Dispose(); ((IAmAMessageConsumerSync)_consumer).Dispose(); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs index a28ae1880a..962b7377d9 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_queue_is_purged_async.cs @@ -8,14 +8,15 @@ namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; [Category("PostgresSql")] -public class PurgeTestAsync : IAsyncDisposable, IDisposable +public class PurgeTestAsync : IAsyncDisposable { private readonly string _queueName = Guid.NewGuid().ToString(); - private readonly IAmAProducerRegistry _producerRegistry; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly RoutingKey _routingKey; + private IAmAProducerRegistry _producerRegistry; + private IAmAMessageConsumerAsync _consumer; + private RoutingKey _routingKey; - public PurgeTestAsync() + [Before(Test)] + public async Task Setup() { var testHelper = new PostgresSqlTestHelper(); testHelper.SetupDatabase(); @@ -26,12 +27,12 @@ public PurgeTestAsync() new SubscriptionName(_queueName), new ChannelName(_routingKey.Value), _routingKey, messagePumpType: MessagePumpType.Proactor); - - _producerRegistry = new PostgresProducerRegistryFactory( + + _producerRegistry = await new PostgresProducerRegistryFactory( new PostgresMessagingGatewayConnection(testHelper.Configuration), [new PostgresPublication { Topic = _routingKey } ] - ).CreateAsync().GetAwaiter().GetResult(); - + ).CreateAsync(); + _consumer = new PostgresConsumerFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)).CreateAsync(sub); } @@ -90,7 +91,8 @@ private async Task> ConsumeMessagesAsync(IAmAMessageConsume return messages; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageConsumerSync)_consumer).Dispose(); _producerRegistry.Dispose(); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs index 142831cc6f..ea36bac477 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/MessagingGateway/When_requeueing_a_message_aync.cs @@ -12,7 +12,7 @@ namespace Paramore.Brighter.PostgresSQL.Tests.MessagingGateway; public class PostgreSqlMessageConsumerRequeueTestsAsync : IDisposable { private readonly Message _message; - private readonly IAmAProducerRegistry _producerRegistry; + private IAmAProducerRegistry _producerRegistry; private readonly IAmAChannelFactory _channelFactory; private readonly PostgresSubscription _subscription; private readonly RoutingKey _topic; @@ -36,15 +36,21 @@ public PostgreSqlMessageConsumerRequeueTestsAsync() testHelper.SetupDatabase(); _subscription = new PostgresSubscription(new SubscriptionName(channelName), - new ChannelName(_topic), + new ChannelName(_topic), new RoutingKey(_topic), messagePumpType: MessagePumpType.Proactor); - - _producerRegistry = new PostgresProducerRegistryFactory( + _channelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)); + } + + [Before(Test)] + public async Task Setup() + { + var testHelper = new PostgresSqlTestHelper(); + testHelper.SetupDatabase(); + _producerRegistry = await new PostgresProducerRegistryFactory( new PostgresMessagingGatewayConnection(testHelper.Configuration), [new PostgresPublication {Topic = new RoutingKey(_topic)}] - ).CreateAsync().Result; - _channelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(testHelper.Configuration)); + ).CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs index c4f5c4faea..b983dac325 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs @@ -14,31 +14,36 @@ namespace ParamoreBrighter.Quartz.Tests; -public class QuartzSchedulerMessageTests : IDisposable +public class QuartzSchedulerMessageTests { - private readonly QuartzSchedulerFactory _scheduler; - private readonly IScheduler _quartzScheduler; - private readonly IAmACommandProcessor _processor; + private QuartzSchedulerFactory _scheduler; + private IScheduler _quartzScheduler; + private IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); private readonly RoutingKey _routingKey; private readonly TimeProvider _timeProvider; + private readonly ISchedulerFactory _schedulerFactory; + private readonly SubscriberRegistry _subscriberRegistry; + private readonly SimpleHandlerFactory _handlerFactory; + private readonly PolicyRegistry _policyRegistry; + private readonly OutboxProducerMediator _outboxBus; public QuartzSchedulerMessageTests() { _routingKey = new RoutingKey($"Test-{Guid.NewGuid():N}"); _timeProvider = TimeProvider.System; - var handlerFactory = new SimpleHandlerFactory( + _handlerFactory = new SimpleHandlerFactory( _ => new MyEventHandler(new Dictionary()), _ => new FireSchedulerMessageHandler(_processor!)); - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - subscriberRegistry.RegisterAsync(); + _subscriberRegistry = new SubscriberRegistry(); + _subscriberRegistry.Register(); + _subscriberRegistry.RegisterAsync(); - var policyRegistry = new PolicyRegistry + _policyRegistry = new PolicyRegistry { [CommandProcessor.RETRYPOLICY] = Policy.Handle().Retry(), [CommandProcessor.CIRCUITBREAKER] = @@ -59,9 +64,9 @@ public QuartzSchedulerMessageTests() var trace = new BrighterTracer(_timeProvider); _outbox = new InMemoryOutbox(_timeProvider) { Tracer = trace }; - var outboxBus = new OutboxProducerMediator( + _outboxBus = new OutboxProducerMediator( producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), + new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), @@ -70,23 +75,27 @@ public QuartzSchedulerMessageTests() _outbox ); - var schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) + _schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) .UseDefaultThreadPool(x => x.MaxConcurrency = 5) .UseJobFactory() .Build(); + } - _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - _quartzScheduler.Start().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + _quartzScheduler = await _schedulerFactory.GetScheduler(); + await _quartzScheduler.Start(); _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( - subscriberRegistry, - handlerFactory, + _subscriberRegistry, + _handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, + _policyRegistry, new ResiliencePipelineRegistry(), - outboxBus, + _outboxBus, _scheduler ); @@ -263,8 +272,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan() await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + await _quartzScheduler.Shutdown(waitForJobsToComplete: true); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs index 750eb517ee..9371126a0b 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message_async.cs @@ -14,23 +14,28 @@ namespace ParamoreBrighter.Quartz.Tests; -public class QuartzSchedulerMessageAsyncTests : IDisposable +public class QuartzSchedulerMessageAsyncTests { - private readonly QuartzSchedulerFactory _scheduler; - private readonly IScheduler _quartzScheduler; - private readonly IAmACommandProcessor _processor; + private QuartzSchedulerFactory _scheduler; + private IScheduler _quartzScheduler; + private IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); private readonly RoutingKey _routingKey; private readonly TimeProvider _timeProvider; + private readonly ISchedulerFactory _schedulerFactory; + private readonly SubscriberRegistry _subscriberRegistry; + private readonly SimpleHandlerFactoryAsync _handlerFactory; + private readonly PolicyRegistry _policyRegistry; + private readonly OutboxProducerMediator _outboxBus; public QuartzSchedulerMessageAsyncTests() { _routingKey = new RoutingKey($"Test-{Guid.NewGuid():N}"); _timeProvider = TimeProvider.System; - var handlerFactory = new SimpleHandlerFactoryAsync( + _handlerFactory = new SimpleHandlerFactoryAsync( type => { if (type == typeof(MyEventHandlerAsync)) @@ -41,11 +46,11 @@ public QuartzSchedulerMessageAsyncTests() return new FireSchedulerMessageHandler(_processor!); }); - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.RegisterAsync(); - subscriberRegistry.RegisterAsync(); + _subscriberRegistry = new SubscriberRegistry(); + _subscriberRegistry.RegisterAsync(); + _subscriberRegistry.RegisterAsync(); - var policyRegistry = new PolicyRegistry + _policyRegistry = new PolicyRegistry { [CommandProcessor.RETRYPOLICYASYNC] = Policy.Handle().RetryAsync(), [CommandProcessor.CIRCUITBREAKERASYNC] = @@ -66,9 +71,9 @@ public QuartzSchedulerMessageAsyncTests() var trace = new BrighterTracer(_timeProvider); _outbox = new InMemoryOutbox(_timeProvider) { Tracer = trace }; - var outboxBus = new OutboxProducerMediator( + _outboxBus = new OutboxProducerMediator( producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), + new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), @@ -77,23 +82,27 @@ public QuartzSchedulerMessageAsyncTests() _outbox ); - var schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) + _schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) .UseDefaultThreadPool(x => x.MaxConcurrency = 5) .UseJobFactory() .Build(); + } - _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - _quartzScheduler.Start().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + _quartzScheduler = await _schedulerFactory.GetScheduler(); + await _quartzScheduler.Start(); _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( - subscriberRegistry, - handlerFactory, + _subscriberRegistry, + _handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, + _policyRegistry, new ResiliencePipelineRegistry(), - outboxBus, + _outboxBus, _scheduler ); @@ -270,8 +279,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() await Assert.That(actual.Header.HandledCount).IsEqualTo(expected.Header.HandledCount); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + await _quartzScheduler.Shutdown(waitForJobsToComplete: true); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs index 80facf021f..ad7651c80b 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs @@ -13,17 +13,22 @@ namespace ParamoreBrighter.Quartz.Tests; -public class QuartzSchedulerRequestTests : IDisposable +public class QuartzSchedulerRequestTests { - private readonly QuartzSchedulerFactory _scheduler; - private readonly IScheduler _quartzScheduler; - private readonly IAmACommandProcessor _processor; + private QuartzSchedulerFactory _scheduler; + private IScheduler _quartzScheduler; + private IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); private readonly Dictionary _receivedMessages; private readonly RoutingKey _routingKey; private readonly TimeProvider _timeProvider; + private readonly ISchedulerFactory _schedulerFactory; + private readonly SubscriberRegistry _subscriberRegistry; + private readonly SimpleHandlerFactory _handlerFactory; + private readonly PolicyRegistry _policyRegistry; + private readonly OutboxProducerMediator _outboxBus; public QuartzSchedulerRequestTests() { @@ -31,15 +36,15 @@ public QuartzSchedulerRequestTests() _routingKey = new RoutingKey($"Test-{Guid.NewGuid():N}"); _timeProvider = TimeProvider.System; - var handlerFactory = new SimpleHandlerFactory( + _handlerFactory = new SimpleHandlerFactory( _ => new MyEventHandler(_receivedMessages), _ => new FireSchedulerRequestHandler(_processor!)); - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.Register(); - subscriberRegistry.RegisterAsync(); + _subscriberRegistry = new SubscriberRegistry(); + _subscriberRegistry.Register(); + _subscriberRegistry.RegisterAsync(); - var policyRegistry = new PolicyRegistry + _policyRegistry = new PolicyRegistry { [CommandProcessor.RETRYPOLICY] = Policy.Handle().Retry(), [CommandProcessor.CIRCUITBREAKER] = @@ -60,9 +65,9 @@ public QuartzSchedulerRequestTests() var trace = new BrighterTracer(_timeProvider); _outbox = new InMemoryOutbox(_timeProvider) { Tracer = trace }; - var outboxBus = new OutboxProducerMediator( + _outboxBus = new OutboxProducerMediator( producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), + new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), @@ -71,23 +76,27 @@ public QuartzSchedulerRequestTests() _outbox ); - var schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) + _schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) .UseDefaultThreadPool(x => x.MaxConcurrency = 5) .UseJobFactory() .Build(); + } - _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - _quartzScheduler.Start().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + _quartzScheduler = await _schedulerFactory.GetScheduler(); + await _quartzScheduler.Start(); _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( - subscriberRegistry, - handlerFactory, + _subscriberRegistry, + _handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, + _policyRegistry, new ResiliencePipelineRegistry(), - outboxBus, + _outboxBus, _scheduler ); @@ -421,8 +430,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler #endregion - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + await _quartzScheduler.Shutdown(waitForJobsToComplete: true); } } diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs index 5aab4960ae..db5e13e8db 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs @@ -14,17 +14,22 @@ namespace ParamoreBrighter.Quartz.Tests; -public class QuartzSchedulerRequestAsyncTests : IDisposable +public class QuartzSchedulerRequestAsyncTests { - private readonly QuartzSchedulerFactory _scheduler; - private readonly IScheduler _quartzScheduler; - private readonly IAmACommandProcessor _processor; + private QuartzSchedulerFactory _scheduler; + private IScheduler _quartzScheduler; + private IAmACommandProcessor _processor; private readonly InMemoryOutbox _outbox; private readonly InternalBus _internalBus = new(); private readonly Dictionary _receivedMessages; private readonly RoutingKey _routingKey; private readonly TimeProvider _timeProvider; + private readonly ISchedulerFactory _schedulerFactory; + private readonly SubscriberRegistry _subscriberRegistry; + private readonly SimpleHandlerFactoryAsync _handlerFactory; + private readonly PolicyRegistry _policyRegistry; + private readonly OutboxProducerMediator _outboxBus; public QuartzSchedulerRequestAsyncTests() { @@ -32,8 +37,7 @@ public QuartzSchedulerRequestAsyncTests() _routingKey = new RoutingKey($"Test-{Guid.NewGuid():N}"); _timeProvider = TimeProvider.System; - - var handlerFactory = new SimpleHandlerFactoryAsync( + _handlerFactory = new SimpleHandlerFactoryAsync( type => { if (type == typeof(MyEventHandlerAsync)) @@ -44,11 +48,11 @@ public QuartzSchedulerRequestAsyncTests() return new FireSchedulerRequestHandler(_processor!); }); - var subscriberRegistry = new SubscriberRegistry(); - subscriberRegistry.RegisterAsync(); - subscriberRegistry.RegisterAsync(); + _subscriberRegistry = new SubscriberRegistry(); + _subscriberRegistry.RegisterAsync(); + _subscriberRegistry.RegisterAsync(); - var policyRegistry = new PolicyRegistry + _policyRegistry = new PolicyRegistry { [CommandProcessor.RETRYPOLICYASYNC] = Policy.Handle().RetryAsync(), [CommandProcessor.CIRCUITBREAKERASYNC] = @@ -69,9 +73,9 @@ public QuartzSchedulerRequestAsyncTests() var trace = new BrighterTracer(_timeProvider); _outbox = new InMemoryOutbox(_timeProvider) { Tracer = trace }; - var outboxBus = new OutboxProducerMediator( + _outboxBus = new OutboxProducerMediator( producerRegistry, - new ResiliencePipelineRegistry().AddBrighterDefault(), + new ResiliencePipelineRegistry().AddBrighterDefault(), messageMapperRegistry, new EmptyMessageTransformerFactory(), new EmptyMessageTransformerFactoryAsync(), @@ -80,23 +84,27 @@ public QuartzSchedulerRequestAsyncTests() _outbox ); - var schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) + _schedulerFactory = SchedulerBuilder.Create(new NameValueCollection()) .UseDefaultThreadPool(x => x.MaxConcurrency = 5) .UseJobFactory() .Build(); + } - _quartzScheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); - _quartzScheduler.Start().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + _quartzScheduler = await _schedulerFactory.GetScheduler(); + await _quartzScheduler.Start(); _scheduler = new QuartzSchedulerFactory(_quartzScheduler); _processor = new CommandProcessor( - subscriberRegistry, - handlerFactory, + _subscriberRegistry, + _handlerFactory, new InMemoryRequestContextFactory(), - policyRegistry, + _policyRegistry, new ResiliencePipelineRegistry(), - outboxBus, + _outboxBus, _scheduler ); @@ -429,8 +437,9 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async(RequestSch #endregion - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _quartzScheduler.Shutdown(waitForJobsToComplete: true).GetAwaiter().GetResult(); + await _quartzScheduler.Shutdown(waitForJobsToComplete: true); } } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index f35c8b9d36..fce47311c3 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -5,10 +5,10 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RMQBufferedConsumerTestsAsync : IDisposable, IAsyncDisposable +public class RMQBufferedConsumerTestsAsync : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _messageProducer; - private readonly IAmAMessageConsumerAsync _messageConsumer; + private IAmAMessageProducerAsync _messageProducer; + private IAmAMessageConsumerAsync _messageConsumer; private readonly ChannelName _channelName = new(Guid.NewGuid().ToString()); private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); private const int BatchSize = 3; @@ -23,9 +23,19 @@ public RMQBufferedConsumerTestsAsync() _messageProducer = new RmqMessageProducer(rmqConnection); _messageConsumer = new RmqMessageConsumer(connection:rmqConnection, queueName:_channelName, routingKey:_routingKey, isDurable:false, highAvailability:false, batchSize:BatchSize); + } + + [Before(Test)] + public async Task Setup() + { + var rmqConnection = new RmqMessagingGatewayConnection + { + AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672/%2f")), + Exchange = new Exchange("paramore.brighter.exchange") + }; //create the queue, so that we can receive messages posted to it - new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync().GetAwaiter().GetResult(); + await new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync(); } [Test] @@ -66,9 +76,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() await Assert.That(messages.Length).IsEqualTo(1); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { - _messageConsumer.PurgeAsync().GetAwaiter().GetResult(); + await _messageConsumer.PurgeAsync(); ((IAmAMessageProducerSync)_messageProducer).Dispose(); ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs index d48bd649d8..bc4b47f735 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_already_closed_exception_when_connecting_async.cs @@ -7,7 +7,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class AsyncRmqMessageConsumerConnectionClosedTests : IDisposable, IAsyncDisposable +public class AsyncRmqMessageConsumerConnectionClosedTests : IAsyncDisposable { private readonly IAmAMessageProducerAsync _sender; private readonly IAmAMessageConsumerAsync _receiver; @@ -55,7 +55,8 @@ public async Task When_a_message_consumer_throws_an_already_closed_exception_whe await Assert.That(exceptionHappened).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_sender).Dispose(); ((IAmAMessageConsumerSync)_receiver).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs index 13932d46d2..62be745cce 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_not_supported_exception_when_connecting_async.cs @@ -31,18 +31,19 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class AsyncRmqMessageConsumerChannelFailureTests : IAsyncDisposable, IDisposable +public class AsyncRmqMessageConsumerChannelFailureTests : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _sender; - private readonly IAmAMessageConsumerAsync _badReceiver; + private IAmAMessageProducerAsync _sender; + private IAmAMessageConsumerAsync _badReceiver; + private Message _sentMessage; public AsyncRmqMessageConsumerChannelFailureTests() { - var messageHeader = new MessageHeader(Guid.NewGuid().ToString(), + var messageHeader = new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND); messageHeader.UpdateHandledCount(); - Message sentMessage = new(messageHeader, new MessageBody("test content")); + _sentMessage = new Message(messageHeader, new MessageBody("test content")); var rmqConnection = new RmqMessagingGatewayConnection { @@ -52,10 +53,14 @@ public AsyncRmqMessageConsumerChannelFailureTests() _sender = new RmqMessageProducer(rmqConnection); var queueName = new ChannelName(Guid.NewGuid().ToString()); - - _badReceiver = new NotSupportedRmqMessageConsumer(rmqConnection,queueName, sentMessage.Header.Topic, false, 1, false); - _sender.SendAsync(sentMessage).GetAwaiter().GetResult(); + _badReceiver = new NotSupportedRmqMessageConsumer(rmqConnection,queueName, _sentMessage.Header.Topic, false, 1, false); + } + + [Before(Test)] + public async Task Setup() + { + await _sender.SendAsync(_sentMessage); } [Test] @@ -78,7 +83,8 @@ public async Task When_a_message_consumer_throws_an_not_supported_exception_when await Assert.That(exceptionHappened).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_sender).Dispose(); ((IAmAMessageConsumerSync)_badReceiver).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs index 26ab2abe08..561f6d7dcd 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_a_message_consumer_throws_an_operation_interrupted_exception_when_connecting_async.cs @@ -31,19 +31,20 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class AsyncRmqMessageConsumerOperationInterruptedTestsAsync : IAsyncDisposable, IDisposable +public class AsyncRmqMessageConsumerOperationInterruptedTestsAsync : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _sender; - private readonly IAmAMessageConsumerAsync _receiver; - private readonly IAmAMessageConsumerAsync _badReceiver; + private IAmAMessageProducerAsync _sender; + private IAmAMessageConsumerAsync _receiver; + private IAmAMessageConsumerAsync _badReceiver; + private Message _sentMessage; public AsyncRmqMessageConsumerOperationInterruptedTestsAsync() { - var messageHeader = new MessageHeader(Guid.NewGuid().ToString(), + var messageHeader = new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND); messageHeader.UpdateHandledCount(); - Message sentMessage = new(messageHeader, new MessageBody("test content")); + _sentMessage = new Message(messageHeader, new MessageBody("test content")); var rmqConnection = new RmqMessagingGatewayConnection { @@ -52,10 +53,14 @@ public AsyncRmqMessageConsumerOperationInterruptedTestsAsync() }; _sender = new RmqMessageProducer(rmqConnection); - _receiver = new RmqMessageConsumer(rmqConnection, new ChannelName(Guid.NewGuid().ToString()), sentMessage.Header.Topic, false, false); - _badReceiver = new OperationInterruptedRmqMessageConsumer(rmqConnection, new ChannelName(Guid.NewGuid().ToString()), sentMessage.Header.Topic, false, 1, false); + _receiver = new RmqMessageConsumer(rmqConnection, new ChannelName(Guid.NewGuid().ToString()), _sentMessage.Header.Topic, false, false); + _badReceiver = new OperationInterruptedRmqMessageConsumer(rmqConnection, new ChannelName(Guid.NewGuid().ToString()), _sentMessage.Header.Topic, false, 1, false); + } - _sender.SendAsync(sentMessage).GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + await _sender.SendAsync(_sentMessage); } [Test] @@ -75,7 +80,8 @@ public async Task When_a_message_consumer_throws_an_operation_interrupted_excep await Assert.That(exceptionHappened).IsTrue(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_sender).Dispose(); ((IAmAMessageConsumerSync)_receiver).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs index cef5fa860c..002d0637e3 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_binding_a_channel_to_multiple_topics_async.cs @@ -6,40 +6,47 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class AsyncRmqMessageConsumerMultipleTopicTests : IAsyncDisposable, IDisposable +public class AsyncRmqMessageConsumerMultipleTopicTests : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _messageProducer; - private readonly IAmAMessageConsumerAsync _messageConsumer; - private readonly Message _messageTopic1, _messageTopic2; + private IAmAMessageProducerAsync _messageProducer; + private IAmAMessageConsumerAsync _messageConsumer; + private Message _messageTopic1, _messageTopic2; + private RmqMessagingGatewayConnection _rmqConnection; + private RoutingKeys _topics; + private ChannelName _queueName; public AsyncRmqMessageConsumerMultipleTopicTests() { var routingKeyOne = new RoutingKey(Guid.NewGuid().ToString()); var routingKeyTwo = new RoutingKey(Guid.NewGuid().ToString()); - + _messageTopic1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKeyOne, MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), routingKeyOne, MessageType.MT_COMMAND), new MessageBody("test content for topic test 1")); _messageTopic2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKeyTwo, MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), routingKeyTwo, MessageType.MT_COMMAND), new MessageBody("test content for topic test 2")); - var rmqConnection = new RmqMessagingGatewayConnection + _rmqConnection = new RmqMessagingGatewayConnection { AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672/%2f")), Exchange = new Exchange("paramore.brighter.exchange") }; - var topics = new RoutingKeys([ + _topics = new RoutingKeys([ routingKeyOne, routingKeyTwo ]); - var queueName = new ChannelName(Guid.NewGuid().ToString()); + _queueName = new ChannelName(Guid.NewGuid().ToString()); - _messageProducer = new RmqMessageProducer(rmqConnection); - _messageConsumer = new RmqMessageConsumer(rmqConnection, queueName , topics, false, false); + _messageProducer = new RmqMessageProducer(_rmqConnection); + _messageConsumer = new RmqMessageConsumer(_rmqConnection, _queueName , _topics, false, false); + } - new QueueFactory(rmqConnection, queueName, topics).CreateAsync().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + await new QueueFactory(_rmqConnection, _queueName, _topics).CreateAsync(); } [Test] @@ -63,7 +70,8 @@ public async Task When_reading_a_message_from_a_channel_with_multiple_topics() await Assert.That(topic2Result.Body.Value).IsEquivalentTo(_messageTopic2.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync) _messageProducer).Dispose(); ((IAmAMessageConsumerSync)_messageConsumer).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs index 1b455a40cb..72fa25a4da 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_assert_async.cs @@ -4,7 +4,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -public class RmqAssumeExistingInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class RmqAssumeExistingInfrastructureTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -59,7 +59,8 @@ public async Task When_infrastructure_exists_can_assume_producer() await Assert.That(exceptionThrown).IsFalse(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); ((IAmAMessageConsumerSync)_messageConsumer).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs index 3bcdd735f9..0d93eb5f89 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_infrastructure_exists_can_validate_async.cs @@ -4,7 +4,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; -public class RmqValidateExistingInfrastructureTestsAsync : IDisposable, IAsyncDisposable +public class RmqValidateExistingInfrastructureTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -59,7 +59,8 @@ public async Task When_infrastructure_exists_can_validate_producer() await Assert.That(exceptionThrown).IsFalse(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); ((IAmAMessageConsumerSync)_messageConsumer).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs index 5b6927e85d..608a11006b 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_multiple_threads_try_to_post_a_message_at_the_same_time_async.cs @@ -6,7 +6,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerSupportsMultipleThreadsTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerSupportsMultipleThreadsTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly Message _message; @@ -48,7 +48,8 @@ await Parallel.ForEachAsync(Enumerable.Range(0, 10), options, async (_, ct) => await Assert.That(exceptionHappened).IsFalse(); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs index c4b9a9bb0e..3d7f316ebc 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_to_persist_via_the_messaging_gateway_async.cs @@ -6,7 +6,7 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerSendPersistentMessageTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerSendPersistentMessageTestsAsync : IAsyncDisposable { private IAmAMessageProducerAsync _messageProducer; private IAmAMessageConsumerAsync _messageConsumer; @@ -50,7 +50,8 @@ public async Task When_posting_a_message_to_persist_via_the_messaging_gateway() await Assert.That(result.Persist).IsEqualTo(true); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 1227814145..9363e16a55 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -33,7 +33,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerSendMessageTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerSendMessageTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -125,7 +125,8 @@ public async Task When_posting_a_message_via_the_messaging_gateway() await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs index ef65b63f34..5ebc115001 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_quorum_async.cs @@ -33,7 +33,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerSendMessageQuorumTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerSendMessageQuorumTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -132,7 +132,8 @@ public async Task When_posting_a_message_via_the_messaging_gateway_with_quorum_q await Assert.That(result.Header.Baggage).IsEqualTo(_message.Header.Baggage); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs index 553b4041a7..4d4940ca31 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_queue_length_causes_a_message_to_be_rejected_async.cs @@ -30,7 +30,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerQueueLengthTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerQueueLengthTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -96,7 +96,8 @@ public async Task When_rejecting_a_message_due_to_queue_length() } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs index 33ed7e885e..e45ec7968d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_reading_a_delayed_message_via_the_messaging_gateway_async.cs @@ -31,7 +31,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerDelayedMessageTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerDelayedMessageTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -114,7 +114,8 @@ public async Task When_requeing_a_failed_message_with_delay() await _messageConsumer.AcknowledgeAsync(message2); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageConsumerSync)_messageConsumer).Dispose(); ((IAmAMessageProducerSync)_messageProducer).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs index ecf44f114b..e78695f6e0 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rejecting_a_message_to_a_dead_letter_queue_async.cs @@ -31,7 +31,7 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerDLQTestsAsync : IDisposable, IAsyncDisposable +public class RmqMessageProducerDLQTestsAsync : IAsyncDisposable { private readonly IAmAMessageProducerAsync _messageProducer; private readonly IAmAMessageConsumerAsync _messageConsumer; @@ -103,7 +103,8 @@ public async Task When_rejecting_a_message_to_a_dead_letter_queue() await Assert.That(message.Body.Value).IsEqualTo(dlqMessage.Body.Value); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs index 80831235e5..1630174da9 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_ttl_causes_a_message_to_expire.cs @@ -30,23 +30,23 @@ THE SOFTWARE. */ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Proactor; [Category("RMQ")] -public class RmqMessageProducerTTLTests : IAsyncDisposable, IDisposable +public class RmqMessageProducerTTLTests : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _messageProducer; - private readonly IAmAMessageConsumerAsync _messageConsumer; - private readonly Message _messageOne; - private readonly Message _messageTwo; + private IAmAMessageProducerAsync _messageProducer; + private IAmAMessageConsumerAsync _messageConsumer; + private Message _messageOne; + private Message _messageTwo; public RmqMessageProducerTTLTests () { _messageOne = new Message( - new MessageHeader(Guid.NewGuid().ToString(), - new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), + new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND), new MessageBody("test content")); - + _messageTwo = new Message( - new MessageHeader(Guid.NewGuid().ToString(), - new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), + new RoutingKey(Guid.NewGuid().ToString()), MessageType.MT_COMMAND), new MessageBody("test content")); var rmqConnection = new RmqMessagingGatewayConnection @@ -54,22 +54,25 @@ public RmqMessageProducerTTLTests () AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672/%2f")), Exchange = new Exchange("paramore.brighter.exchange"), }; - + _messageProducer = new RmqMessageProducer(rmqConnection); _messageConsumer = new RmqMessageConsumer( - connection: rmqConnection, - queueName: new ChannelName(Guid.NewGuid().ToString()), - routingKey: _messageOne.Header.Topic, - isDurable: false, + connection: rmqConnection, + queueName: new ChannelName(Guid.NewGuid().ToString()), + routingKey: _messageOne.Header.Topic, + isDurable: false, highAvailability: false, ttl: TimeSpan.FromMilliseconds(10000), makeChannels:OnMissingChannel.Create ); + } + [Before(Test)] + public async Task Setup() + { //create the infrastructure - _messageConsumer.ReceiveAsync(TimeSpan.Zero).GetAwaiter().GetResult(); - + await _messageConsumer.ReceiveAsync(TimeSpan.Zero); } [Test] @@ -91,7 +94,8 @@ public async Task When_rejecting_a_message_to_a_dead_letter_queue() await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [After(Test)] + public async Task Cleanup() { ((IAmAMessageProducerSync)_messageProducer).Dispose(); ((IAmAMessageConsumerSync)_messageConsumer).Dispose(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index de554d1117..ad9e0e6b08 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -7,8 +7,8 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] public class RMQBufferedConsumerTests : IDisposable { - private readonly IAmAMessageProducerSync _messageProducer; - private readonly IAmAMessageConsumerSync _messageConsumer; + private IAmAMessageProducerSync _messageProducer; + private IAmAMessageConsumerSync _messageConsumer; private readonly ChannelName _channelName = new(Guid.NewGuid().ToString()); private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); private const int BatchSize = 3; @@ -23,9 +23,19 @@ public RMQBufferedConsumerTests() _messageProducer = new RmqMessageProducer(rmqConnection); _messageConsumer = new RmqMessageConsumer(connection:rmqConnection, queueName:_channelName, routingKey:_routingKey, isDurable:false, highAvailability:false, batchSize:BatchSize); - + } + + [Before(Test)] + public async Task Setup() + { + var rmqConnection = new RmqMessagingGatewayConnection + { + AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672/%2f")), + Exchange = new Exchange("paramore.brighter.exchange") + }; + //create the queue, so that we can receive messages posted to it - new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync().GetAwaiter().GetResult(); + await new QueueFactory(rmqConnection, _channelName, new RoutingKeys(_routingKey)).CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs index 69d7f50d7a..c9014016bf 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_binding_a_channel_to_multiple_topics.cs @@ -8,38 +8,45 @@ namespace Paramore.Brighter.RMQ.Async.Tests.MessagingGateway.Reactor; [Category("RMQ")] public class RmqMessageConsumerMultipleTopicTests : IDisposable { - private readonly IAmAMessageProducerSync _messageProducer; - private readonly IAmAMessageConsumerSync _messageConsumer; - private readonly Message _messageTopic1, _messageTopic2; + private IAmAMessageProducerSync _messageProducer; + private IAmAMessageConsumerSync _messageConsumer; + private Message _messageTopic1, _messageTopic2; + private RmqMessagingGatewayConnection _rmqConnection; + private RoutingKeys _topics; + private ChannelName _queueName; public RmqMessageConsumerMultipleTopicTests() { var routingKeyOne = new RoutingKey(Guid.NewGuid().ToString()); var routingKeyTwo = new RoutingKey(Guid.NewGuid().ToString()); - + _messageTopic1 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKeyOne, MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), routingKeyOne, MessageType.MT_COMMAND), new MessageBody("test content for topic test 1")); _messageTopic2 = new Message( - new MessageHeader(Guid.NewGuid().ToString(), routingKeyTwo, MessageType.MT_COMMAND), + new MessageHeader(Guid.NewGuid().ToString(), routingKeyTwo, MessageType.MT_COMMAND), new MessageBody("test content for topic test 2")); - var rmqConnection = new RmqMessagingGatewayConnection + _rmqConnection = new RmqMessagingGatewayConnection { AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672/%2f")), Exchange = new Exchange("paramore.brighter.exchange") }; - var topics = new RoutingKeys([ - routingKeyOne, + _topics = new RoutingKeys([ + routingKeyOne, routingKeyTwo ]); - var queueName = new ChannelName(Guid.NewGuid().ToString()); + _queueName = new ChannelName(Guid.NewGuid().ToString()); - _messageProducer = new RmqMessageProducer(rmqConnection); - _messageConsumer = new RmqMessageConsumer(rmqConnection, queueName , topics, false, false); + _messageProducer = new RmqMessageProducer(_rmqConnection); + _messageConsumer = new RmqMessageConsumer(_rmqConnection, _queueName , _topics, false, false); + } - new QueueFactory(rmqConnection, queueName, topics).CreateAsync().GetAwaiter().GetResult(); + [Before(Test)] + public async Task Setup() + { + await new QueueFactory(_rmqConnection, _queueName, _topics).CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs index 50ad21de39..a34a36c130 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway_quorum.cs @@ -107,7 +107,7 @@ public async Task When_posting_a_message_via_the_messaging_gateway_with_quorum_q _messageProducer.Send(_message); // Give quorum queue a moment to become consistent across replicas - Task.Delay(TimeSpan.FromMilliseconds(500)).Wait(); + await Task.Delay(TimeSpan.FromMilliseconds(500)); var result = _messageConsumer.Receive(TimeSpan.FromMilliseconds(10000)).First(); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 8ef972ba08..83954149fe 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -116,7 +116,6 @@ public RMQMessageConsumerRetryDLQTests() } [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] - [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method")] public async Task When_retry_limits_force_a_message_onto_the_dlq() { //NOTE: This test is **slow** because it needs to ensure infrastructure and then wait whilst we requeue a message a number of times, diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 47875e4510..7463df9628 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -115,7 +115,6 @@ public RMQMessageConsumerRetryDLQTests() } [Test, Skip("Breaks due to fault in Task Scheduler running after context has closed")] - [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method")] public async Task When_retry_limits_force_a_message_onto_the_dlq() { //NOTE: This test is **slow** because it needs to ensure infrastructure and then wait whilst we requeue a message a number of times, diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/TestHelpers.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/TestHelpers.cs index 8c31fbddc8..b49015a320 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/TestHelpers.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/TestHelpers.cs @@ -24,6 +24,7 @@ THE SOFTWARE. */ using System; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Paramore.Brighter.MessagingGateway.RMQ.Sync; using RabbitMQ.Client; @@ -69,7 +70,7 @@ public void Create(TimeSpan timeToDelayForCreation) } //We need to delay to actually create these queues before we send to them - Task.Delay(timeToDelayForCreation).Wait(); + Thread.Sleep(timeToDelayForCreation); } } } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs index 35e35986bc..4a25192f86 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs @@ -4,7 +4,7 @@ namespace Paramore.Brighter.Redis.Tests.MessagingGateway { - public class RedisFixture : IAsyncDisposable, IDisposable + public class RedisFixture : IAsyncDisposable { public readonly RoutingKey Topic; public readonly RedisMessageProducer MessageProducer; @@ -34,7 +34,8 @@ public static RedisMessagingGatewayConfiguration RedisMessagingGatewayConfigurat return configuration; } - public void Dispose() + [After(Test)] + public async Task Cleanup() { MessageConsumer.Purge(); MessageConsumer.Dispose(); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs index 917a74c62e..f552721faa 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessageDispatch/When_building_a_dispatcher.cs @@ -82,7 +82,7 @@ public async Task When_Building_A_Dispatcher() await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_RUNNING); - _dispatcher.End().GetAwaiter().GetResult(); + await _dispatcher.End(); await Assert.That(_dispatcher.State).IsEqualTo(DispatcherState.DS_STOPPED); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs index 192666cfec..50a805f19c 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_a_cloud_events_async.cs @@ -7,16 +7,17 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; public class BufferedConsumerCloudEventsTestsAsync : IAsyncDisposable { private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); - private readonly IAmAMessageConsumerAsync _consumer; - private readonly IAmAMessageProducerAsync _producer; + private IAmAMessageConsumerAsync _consumer; + private IAmAMessageProducerAsync _producer; private const int BatchSize = 3; - public BufferedConsumerCloudEventsTestsAsync() + [Before(Test)] + public async Task Setup() { - var connection = GatewayFactory.CreateConnection(); + var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = "bt_mc_cloudevents_async" }; - var consumer = GatewayFactory.CreateSimpleConsumer(connection, publication).GetAwaiter().GetResult(); - var producer = GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(); + var consumer = await GatewayFactory.CreateSimpleConsumer(connection, publication); + var producer = await GatewayFactory.CreateProducer(connection, publication); _consumer = new RocketMessageConsumer(consumer, BatchSize, TimeSpan.FromSeconds(30)); _producer = new RocketMqMessageProducer(connection, producer, publication); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs index 7ff9154ee8..4b810de7e9 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_a_message_consumer_reads_multiple_messages_async.cs @@ -6,17 +6,18 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; [Category("RocketMQ")] public class BufferedConsumerTestsAsync : IAsyncDisposable { - private readonly IAmAMessageProducerAsync _messageProducer; - private readonly IAmAMessageConsumerAsync _messageConsumer; + private IAmAMessageProducerAsync _messageProducer; + private IAmAMessageConsumerAsync _messageConsumer; private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); private const int BatchSize = 3; - public BufferedConsumerTestsAsync() + [Before(Test)] + public async Task Setup() { - var connection = GatewayFactory.CreateConnection(); + var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = "bt_mc_rmm_async" }; - var consumer = GatewayFactory.CreateSimpleConsumer(connection, publication).GetAwaiter().GetResult(); - var producer = GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(); + var consumer = await GatewayFactory.CreateSimpleConsumer(connection, publication); + var producer = await GatewayFactory.CreateProducer(connection, publication); _messageConsumer = new RocketMessageConsumer(consumer, BatchSize, TimeSpan.FromSeconds(30)); _messageProducer = new RocketMqMessageProducer(connection, producer, publication); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index d0ca6a5630..c8898bf57b 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -10,14 +10,15 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; [Category("RocketMQ")] public class MessageProducerSendAsyncTests : IAsyncDisposable { - private readonly Message _message; - private readonly IAmAChannelAsync _channel; - private readonly IAmAMessageProducerAsync _messageProducer; - private readonly MyCommand _myCommand; - private readonly Id _correlationId; - private readonly RoutingKey _replyTo; + private Message _message; + private IAmAChannelAsync _channel; + private IAmAMessageProducerAsync _messageProducer; + private MyCommand _myCommand; + private Id _correlationId; + private RoutingKey _replyTo; - public MessageProducerSendAsyncTests() + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; _correlationId = Id.Random(); @@ -44,8 +45,8 @@ public MessageProducerSendAsyncTests() var channelFactory = new RocketMqChannelFactory(new RocketMessageConsumerFactory(connection)); _channel = channelFactory.CreateAsyncChannel(mqSubscription); _messageProducer = new RocketMqMessageProducer( - connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + connection, + await GatewayFactory.CreateProducer(connection, publication), publication); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 80be1c6843..4c54a67999 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -37,12 +37,13 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; [Category("RocketMQ")] public class RocketMqDeliveryErrorDlqAsyncTests : IAsyncDisposable { - private readonly RocketMqMessageProducer _producer; - private readonly IAmAMessageConsumerAsync _consumer; - private readonly IAmAMessageConsumerAsync _dlqConsumer; - private readonly Message _message; + private RocketMqMessageProducer _producer; + private IAmAMessageConsumerAsync _consumer; + private IAmAMessageConsumerAsync _dlqConsumer; + private Message _message; - public RocketMqDeliveryErrorDlqAsyncTests() + [Before(Test)] + public async Task Setup() { var sourceTopic = new RoutingKey("rmq_dlq_source"); var dlqTopic = new RoutingKey("rmq_dlq_target"); @@ -53,7 +54,7 @@ public RocketMqDeliveryErrorDlqAsyncTests() var publication = new RocketMqPublication { Topic = sourceTopic }; _producer = new RocketMqMessageProducer( connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + await GatewayFactory.CreateProducer(connection, publication), publication); // Source topic consumer with DLQ routing key (async/Proactor) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs index 94518e3681..d9f74cd60c 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs @@ -10,13 +10,14 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; [Category("RocketMQ")] public class MessageProducerRequeueTestsAsync { - private readonly IAmAMessageProducerAsync _sender; + private IAmAMessageProducerAsync _sender; private Message? _requeuedMessage; private Message? _receivedMessage; - private readonly IAmAChannelAsync _channel; - private readonly Message _message; + private IAmAChannelAsync _channel; + private Message _message; - public MessageProducerRequeueTestsAsync() + [Before(Test)] + public async Task Setup() { const string replyTo = "http:\\queueUrl"; MyCommand myCommand = new() { Value = "Test" }; @@ -44,8 +45,8 @@ public MessageProducerRequeueTestsAsync() RocketMqChannelFactory channelFactory = new(new RocketMessageConsumerFactory(connection)); var publication = new RocketMqPublication { Topic = routingKey }; - _sender = new RocketMqMessageProducer(connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + _sender = new RocketMqMessageProducer(connection, + await GatewayFactory.CreateProducer(connection, publication), publication); _channel = channelFactory.CreateAsyncChannel(subscription); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 94de6e637b..86764791ba 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -11,20 +11,21 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Proactor; [Property("Fragile", "CI")] public class MessageProducerDlqTestsAsync { - private readonly RocketMqMessageProducer _sender; - private readonly IAmAChannelAsync _channel; - private readonly Message _message; + private RocketMqMessageProducer _sender; + private IAmAChannelAsync _channel; + private Message _message; - public MessageProducerDlqTestsAsync() + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new() { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); const string replyTo = "http:\\queueUrl"; - var contentType = new ContentType(MediaTypeNames.Text.Plain); + var contentType = new ContentType(MediaTypeNames.Text.Plain); var queueName = Guid.NewGuid().ToString(); var routingKey = new RoutingKey("rmq_dead_letter_async"); var channelName = new ChannelName(queueName); - + var subscription = new RocketMqSubscription( subscriptionName: new SubscriptionName(queueName), channelName: channelName, @@ -43,8 +44,8 @@ public MessageProducerDlqTestsAsync() var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = routingKey }; - _sender = new RocketMqMessageProducer(connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + _sender = new RocketMqMessageProducer(connection, + await GatewayFactory.CreateProducer(connection, publication), publication); RocketMqChannelFactory channelFactory = new(new RocketMessageConsumerFactory(connection)); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs index cf05c8e902..20b4c330d3 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_a_cloud_events.cs @@ -7,16 +7,17 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; public class BufferedConsumerCloudEventsTests : IDisposable { private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); - private readonly IAmAMessageConsumerSync _consumer; - private readonly IAmAMessageProducerSync _producer; + private IAmAMessageConsumerSync _consumer; + private IAmAMessageProducerSync _producer; private const int BatchSize = 3; - public BufferedConsumerCloudEventsTests() + [Before(Test)] + public async Task Setup() { - var connection = GatewayFactory.CreateConnection(); + var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = "bt_mc_cloudevents" }; - var consumer = GatewayFactory.CreateSimpleConsumer(connection, publication).GetAwaiter().GetResult(); - var producer = GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(); + var consumer = await GatewayFactory.CreateSimpleConsumer(connection, publication); + var producer = await GatewayFactory.CreateProducer(connection, publication); _consumer = new RocketMessageConsumer(consumer, BatchSize, TimeSpan.FromSeconds(30)); _producer = new RocketMqMessageProducer(connection, producer, publication); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs index e7db6542d8..c98e055f79 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -6,17 +6,18 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class BufferedConsumerTests : IDisposable { - private readonly IAmAMessageProducerSync _messageProducer; - private readonly IAmAMessageConsumerSync _messageConsumer; + private IAmAMessageProducerSync _messageProducer; + private IAmAMessageConsumerSync _messageConsumer; private readonly RoutingKey _routingKey = new(Guid.NewGuid().ToString()); private const int BatchSize = 3; - public BufferedConsumerTests() + [Before(Test)] + public async Task Setup() { - var connection = GatewayFactory.CreateConnection(); + var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = "bt_mc_rmm" }; - var consumer = GatewayFactory.CreateSimpleConsumer(connection, publication).GetAwaiter().GetResult(); - var producer = GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(); + var consumer = await GatewayFactory.CreateSimpleConsumer(connection, publication); + var producer = await GatewayFactory.CreateProducer(connection, publication); _messageConsumer = new RocketMessageConsumer(consumer, BatchSize, TimeSpan.FromSeconds(30)); _messageProducer = new RocketMqMessageProducer(connection, producer, publication); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index dc0feccc5f..37b216cdd1 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -10,14 +10,15 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class MessageProducerSendTests : IDisposable { - private readonly Message _message; - private readonly IAmAChannelSync _channel; - private readonly IAmAMessageProducerSync _messageProducer; - private readonly MyCommand _myCommand; - private readonly Id _correlationId; - private readonly RoutingKey _replyTo; + private Message _message; + private IAmAChannelSync _channel; + private IAmAMessageProducerSync _messageProducer; + private MyCommand _myCommand; + private Id _correlationId; + private RoutingKey _replyTo; - public MessageProducerSendTests() + [Before(Test)] + public async Task Setup() { _myCommand = new MyCommand { Value = "Test" }; _correlationId = Id.Random(); @@ -44,8 +45,8 @@ public MessageProducerSendTests() var channelFactory = new RocketMqChannelFactory(new RocketMessageConsumerFactory(connection)); _channel = channelFactory.CreateSyncChannel(mqSubscription); _messageProducer = new RocketMqMessageProducer( - connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + connection, + await GatewayFactory.CreateProducer(connection, publication), publication); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 260a89bb7a..3b22fa03db 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -36,12 +36,13 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class RocketMqDeliveryErrorDlqTests : IDisposable { - private readonly RocketMqMessageProducer _producer; - private readonly IAmAMessageConsumerSync _consumer; - private readonly IAmAMessageConsumerSync _dlqConsumer; - private readonly Message _message; + private RocketMqMessageProducer _producer; + private IAmAMessageConsumerSync _consumer; + private IAmAMessageConsumerSync _dlqConsumer; + private Message _message; - public RocketMqDeliveryErrorDlqTests() + [Before(Test)] + public async Task Setup() { var sourceTopic = new RoutingKey("rmq_dlq_source"); var dlqTopic = new RoutingKey("rmq_dlq_target"); @@ -52,7 +53,7 @@ public RocketMqDeliveryErrorDlqTests() var publication = new RocketMqPublication { Topic = sourceTopic }; _producer = new RocketMqMessageProducer( connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + await GatewayFactory.CreateProducer(connection, publication), publication); // Source topic consumer with DLQ routing key diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs index 6e0fd073b1..112f05204f 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs @@ -36,11 +36,12 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class RocketMqNoChannelsConfiguredTests : IDisposable { - private readonly RocketMqMessageProducer _producer; - private readonly IAmAMessageConsumerSync _consumer; - private readonly Message _message; + private RocketMqMessageProducer _producer; + private IAmAMessageConsumerSync _consumer; + private Message _message; - public RocketMqNoChannelsConfiguredTests() + [Before(Test)] + public async Task Setup() { var sourceTopic = new RoutingKey("rmq_dlq_source"); @@ -50,7 +51,7 @@ public RocketMqNoChannelsConfiguredTests() var publication = new RocketMqPublication { Topic = sourceTopic }; _producer = new RocketMqMessageProducer( connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + await GatewayFactory.CreateProducer(connection, publication), publication); // Source topic consumer with NO DLQ or invalid routing keys diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 2333036521..e75a889ad2 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -36,12 +36,13 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class RocketMqUnacceptableFallbackToDlqTests : IDisposable { - private readonly RocketMqMessageProducer _producer; - private readonly IAmAMessageConsumerSync _consumer; - private readonly IAmAMessageConsumerSync _dlqConsumer; - private readonly Message _message; + private RocketMqMessageProducer _producer; + private IAmAMessageConsumerSync _consumer; + private IAmAMessageConsumerSync _dlqConsumer; + private Message _message; - public RocketMqUnacceptableFallbackToDlqTests() + [Before(Test)] + public async Task Setup() { var sourceTopic = new RoutingKey("rmq_dlq_source"); var dlqTopic = new RoutingKey("rmq_dlq_target"); @@ -52,7 +53,7 @@ public RocketMqUnacceptableFallbackToDlqTests() var publication = new RocketMqPublication { Topic = sourceTopic }; _producer = new RocketMqMessageProducer( connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + await GatewayFactory.CreateProducer(connection, publication), publication); // Source topic consumer with DLQ only (no invalid message routing key) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 945cb5fafd..1cdf0702e3 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -36,13 +36,14 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class RocketMqUnacceptableInvalidChannelTests : IDisposable { - private readonly RocketMqMessageProducer _producer; - private readonly IAmAMessageConsumerSync _consumer; - private readonly IAmAMessageConsumerSync _invalidConsumer; - private readonly IAmAMessageConsumerSync _dlqConsumer; - private readonly Message _message; - - public RocketMqUnacceptableInvalidChannelTests() + private RocketMqMessageProducer _producer; + private IAmAMessageConsumerSync _consumer; + private IAmAMessageConsumerSync _invalidConsumer; + private IAmAMessageConsumerSync _dlqConsumer; + private Message _message; + + [Before(Test)] + public async Task Setup() { var sourceTopic = new RoutingKey("rmq_dlq_source"); var dlqTopic = new RoutingKey("rmq_dlq_target"); @@ -54,7 +55,7 @@ public RocketMqUnacceptableInvalidChannelTests() var publication = new RocketMqPublication { Topic = sourceTopic }; _producer = new RocketMqMessageProducer( connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + await GatewayFactory.CreateProducer(connection, publication), publication); // Source topic consumer with both DLQ and invalid message routing keys diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs index 2d42ddd54f..d7c232daa0 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_a_message.cs @@ -10,13 +10,14 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Category("RocketMQ")] public class MessageProducerRequeueTests { - private readonly IAmAMessageProducerSync _sender; + private IAmAMessageProducerSync _sender; private Message? _requeuedMessage; private Message? _receivedMessage; - private readonly IAmAChannelSync _channel; - private readonly Message _message; + private IAmAChannelSync _channel; + private Message _message; - public MessageProducerRequeueTests() + [Before(Test)] + public async Task Setup() { const string replyTo = "http:\\queueUrl"; MyCommand myCommand = new() { Value = "Test" }; @@ -44,8 +45,8 @@ public MessageProducerRequeueTests() RocketMqChannelFactory channelFactory = new(new RocketMessageConsumerFactory(connection)); var publication = new RocketMqPublication { Topic = routingKey }; - _sender = new RocketMqMessageProducer(connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + _sender = new RocketMqMessageProducer(connection, + await GatewayFactory.CreateProducer(connection, publication), publication); _channel = channelFactory.CreateSyncChannel(subscription); } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs index 2ffb1d3fff..69d69150c7 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -11,20 +11,21 @@ namespace Paramore.Brighter.RocketMQ.Tests.MessagingGateway.Reactor; [Property("Fragile", "CI")] public class MessageProducerDlqTests { - private readonly RocketMqMessageProducer _sender; - private readonly IAmAChannelSync _channel; - private readonly Message _message; + private RocketMqMessageProducer _sender; + private IAmAChannelSync _channel; + private Message _message; - public MessageProducerDlqTests() + [Before(Test)] + public async Task Setup() { MyCommand myCommand = new() { Value = "Test" }; string correlationId = Guid.NewGuid().ToString(); const string replyTo = "http:\\queueUrl"; - var contentType = new ContentType(MediaTypeNames.Text.Plain); + var contentType = new ContentType(MediaTypeNames.Text.Plain); var queueName = Guid.NewGuid().ToString(); var routingKey = new RoutingKey("rmq_dead_letter"); var channelName = new ChannelName(queueName); - + var subscription = new RocketMqSubscription( subscriptionName: new SubscriptionName(queueName), channelName: channelName, @@ -42,8 +43,8 @@ public MessageProducerDlqTests() var connection = GatewayFactory.CreateConnection(); var publication = new RocketMqPublication { Topic = routingKey }; - _sender = new RocketMqMessageProducer(connection, - GatewayFactory.CreateProducer(connection, publication).GetAwaiter().GetResult(), + _sender = new RocketMqMessageProducer(connection, + await GatewayFactory.CreateProducer(connection, publication), publication); RocketMqChannelFactory channelFactory = new(new RocketMessageConsumerFactory(connection)); diff --git a/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs b/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs index 8ab3b9f5fd..f0d78dc15b 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_scheduled_methods_record_scheduler_types.cs @@ -181,23 +181,28 @@ private sealed class TestCommand() : Command(Id.Random()); public class SpyCommandProcessorScheduledAsyncTests { private readonly SpyCommandProcessor _spy; - private readonly string _sendAsyncAtId; - private readonly string _publishAsyncDelayId; - private readonly string _postAsyncAtId; + private string _sendAsyncAtId; + private string _publishAsyncDelayId; + private string _postAsyncAtId; public SpyCommandProcessorScheduledAsyncTests() { //Arrange _spy = new SpyCommandProcessor(); + } + + [Before(Test)] + public async Task Setup() + { var command = new TestCommand(); var @event = new TestEvent(); var at = DateTimeOffset.UtcNow.AddMinutes(5); var delay = TimeSpan.FromMinutes(10); //Act - _sendAsyncAtId = _spy.SendAsync(at, command).GetAwaiter().GetResult(); - _publishAsyncDelayId = _spy.PublishAsync(delay, @event).GetAwaiter().GetResult(); - _postAsyncAtId = _spy.PostAsync(at, command).GetAwaiter().GetResult(); + _sendAsyncAtId = await _spy.SendAsync(at, command); + _publishAsyncDelayId = await _spy.PublishAsync(delay, @event); + _postAsyncAtId = await _spy.PostAsync(at, command); } [Test] diff --git a/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs b/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs index f19311046b..ab29f5a62f 100644 --- a/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs +++ b/tests/Paramore.Brighter.Testing.Tests/When_transaction_provider_overloads_record_correctly.cs @@ -105,8 +105,8 @@ private sealed class TestCommand() : Command(Id.Random()); public class SpyCommandProcessorTransactionProviderAsyncTests { private readonly SpyCommandProcessor _spy; - private readonly Id _singleId; - private readonly Id[] _batchIds; + private Id _singleId; + private Id[] _batchIds; private readonly TestCommand _singleCommand; private readonly TestCommand _batchCommand1; private readonly TestCommand _batchCommand2; @@ -118,14 +118,17 @@ public SpyCommandProcessorTransactionProviderAsyncTests() _singleCommand = new TestCommand(); _batchCommand1 = new TestCommand(); _batchCommand2 = new TestCommand(); + } + + [Before(Test)] + public async Task Setup() + { var transactionProvider = new StubTransactionProvider(); //Act - _singleId = _spy.DepositPostAsync(_singleCommand, transactionProvider) - .GetAwaiter().GetResult(); - _batchIds = _spy.DepositPostAsync( - new[] { _batchCommand1, _batchCommand2 }, transactionProvider) - .GetAwaiter().GetResult(); + _singleId = await _spy.DepositPostAsync(_singleCommand, transactionProvider); + _batchIds = await _spy.DepositPostAsync( + new[] { _batchCommand1, _batchCommand2 }, transactionProvider); } [Test] diff --git a/tests/Paramore.Brighter.TickerQ.Tests/TestDoubles/Fixtures/BaseTickerQFixture.cs b/tests/Paramore.Brighter.TickerQ.Tests/TestDoubles/Fixtures/BaseTickerQFixture.cs index b928ee5150..2a886e3bea 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/TestDoubles/Fixtures/BaseTickerQFixture.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/TestDoubles/Fixtures/BaseTickerQFixture.cs @@ -98,8 +98,13 @@ protected BaseTickerQFixture() Processor = ServiceProvider.GetRequiredService(); SchedulerFactory = ServiceProvider.GetRequiredService(); TickerQModuleInitializer.EnsureOneTimeSetupTickerQ(); + } + + [Before(HookType.Test)] + public async Task StartScheduler() + { var scheduler = ServiceProvider.GetRequiredService(); - scheduler.StartAsync().GetAwaiter().GetResult(); + await scheduler.StartAsync(); } protected abstract IAmAHandlerFactory GetHandlerFactory(); protected abstract IAmASubscriberRegistry GetSubscriberServiceRegistry(); From c76d53c4b6dbfc1ef8072e268f33403ff4facb80 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 20:46:35 +0100 Subject: [PATCH 12/14] Switch many calls to async overloads --- .../AWSTaskQueue/GreetingsSender/Program.cs | 4 +- .../SqsMessageConsumer.cs | 4 +- .../SqsMessageConsumer.cs | 4 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_arn_async.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 16 ++++---- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_arn.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- .../When_raw_message_delivery_disabled.cs | 2 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ...creating_a_topic_with_custom_tags_async.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_arn_async.cs | 4 +- ...e_exists_can_verify_by_convention_async.cs | 2 +- ...ng_a_message_resources_are_tagged_async.cs | 2 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 14 +++---- .../When_customising_aws_client_config.cs | 2 +- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_arn.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- .../When_raw_message_delivery_disabled.cs | 2 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_url_async.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 16 ++++---- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_url.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...infrastructure_exists_can_verify_by_url.cs | 4 +- ...tructure_exists_can_verify_by_url_async.cs | 4 +- ...ng_a_message_resources_are_tagged_async.cs | 2 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 14 +++---- .../When_customising_aws_client_config.cs | 2 +- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infrastructure_exists_can_verify.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- ...s_configured_should_acknowledge_and_log.cs | 2 +- ..._invalid_channel_should_fallback_to_dlq.cs | 2 +- ...e_reason_should_send_to_invalid_channel.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_arn_async.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 16 ++++---- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_arn.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- .../When_raw_message_delivery_disabled.cs | 2 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_arn_async.cs | 4 +- ...e_exists_can_verify_by_convention_async.cs | 2 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 14 +++---- .../When_customising_aws_client_config.cs | 2 +- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_arn.cs | 4 +- ...ructure_exists_can_verify_by_convention.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- .../When_raw_message_delivery_disabled.cs | 2 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_url_async.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 16 ++++---- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ..._infastructure_exists_can_verify_by_url.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ..._infastructure_exists_can_verify_by_url.cs | 4 +- ..._infrastructure_exists_can_verify_async.cs | 2 +- ...tructure_exists_can_verify_by_url_async.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...When_queues_missing_assume_throws_async.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 14 +++---- .../When_customising_aws_client_config.cs | 2 +- .../When_infastructure_exists_can_assume.cs | 6 +-- .../When_infastructure_exists_can_verify.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 4 +- ...ting_a_message_should_delete_from_queue.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- ...s_configured_should_acknowledge_and_log.cs | 2 +- ..._invalid_channel_should_fallback_to_dlq.cs | 2 +- ...e_reason_should_send_to_invalid_channel.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- .../Sns/When_Scheduling_A_Sns_Message.cs | 8 ++-- .../When_Scheduling_A_Sns_Message_Async.cs | 2 +- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 8 ++-- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 4 +- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 8 ++-- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 8 ++-- .../Sns/When_Scheduling_A_Sns_Request.cs | 12 +++--- .../When_Scheduling_A_Sns_Request_Async.cs | 4 +- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 4 +- .../Sns/When_Scheduling_A_Sns_Message.cs | 8 ++-- .../When_Scheduling_A_Sns_Message_Async.cs | 2 +- ...eduling_A_Sns_Message_Via_FireScheduler.cs | 8 ++-- ...g_A_Sns_Message_Via_FireScheduler_Async.cs | 4 +- .../Sqs/When_Scheduling_A_Sqs_Message.cs | 8 ++-- ...eduling_A_Sqs_Message_Via_FireScheduler.cs | 8 ++-- .../Sns/When_Scheduling_A_Sns_Request.cs | 12 +++--- .../When_Scheduling_A_Sns_Request_Async.cs | 4 +- .../Sqs/When_Scheduling_A_Sqs_Request.cs | 4 +- .../When_unwrapping_a_large_message.cs | 4 +- .../When_uploading_luggage_to_blob.cs | 8 ++-- .../When_wrapping_a_large_message.cs | 2 +- .../AzureServiceBusConsumerTestsAsync.cs | 16 ++++---- ...zureServiceBusMessageProducerTestsAsync.cs | 8 ++-- .../Reactor/AzureServiceBusConsumerTests.cs | 40 +++++++++---------- .../AzureServiceBusMessageProducerTests.cs | 26 ++++++------ ...en_consuming_a_message_via_the_consumer.cs | 12 +++--- ...osting_a_large_message_via_the_producer.cs | 12 +++--- .../Outbox/OutboxTest.cs | 8 ++-- ..._Archiving_Old_Messages_From_The_Outbox.cs | 36 ++++++++--------- .../When_unwrapping_a_large_message.cs | 8 ++-- .../When_validating_a_luggage_store_exists.cs | 2 +- .../When_wrapping_a_large_message.cs | 2 +- .../When_a_message_is_under_the_threshold.cs | 2 +- .../When_a_message_unwraps_a_large_payload.cs | 10 ++--- .../When_a_message_wraps_a_large_payload.cs | 4 +- ...hen_luggage_should_be_kept_in_the_store.cs | 6 +-- .../When_unwrapping_a_large_message.cs | 8 ++-- .../InMemory/When_wrapping_a_large_message.cs | 2 +- .../CloudEventJsonMessageMapperTests.cs | 10 ++--- ...ng_The_PostBox_On_The_Command_Processor.cs | 2 +- ...ng_The_PostBox_On_The_Command_Processor.cs | 4 +- ...positing_A_Message_In_The_Message_Store.cs | 4 +- ...ing_A_Message_In_The_Message_StoreAsync.cs | 2 +- ..._Message_In_The_Message_StoreAsync_Bulk.cs | 6 +-- ...essage_StoreAsync_Bulk_With_Transaction.cs | 2 +- ...The_Message_StoreAsync_With_Transaction.cs | 2 +- ...ing_A_Message_In_The_Message_Store_Bulk.cs | 8 ++-- ...The_Message_Store_Bulk_With_Transaction.cs | 2 +- ...e_In_The_Message_Store_With_Transaction.cs | 2 +- ...Default_Inbox_Into_The_Publish_Pipeline.cs | 2 +- ...ting_A_Message_To_The_Command_Processor.cs | 2 +- ...d_Processor_With_A_Transaction_Provider.cs | 10 ++--- ...essor_With_A_Transaction_Provider_Async.cs | 10 ++--- ...ultiple_Message_Types_To_A_Single_Topic.cs | 4 +- ...e_Message_Types_To_A_Single_Topic_Async.cs | 4 +- .../When_Posting_Via_A_Control_Bus_Sender.cs | 2 +- .../Post/When_Posting_With_A_Custom_Policy.cs | 2 +- .../When_Posting_With_A_Default_Policy.cs | 2 +- ...Posting_With_An_In_Memory_Message_Store.cs | 4 +- ...Default_Inbox_Into_The_Publish_Pipeline.cs | 2 +- ...ling_A_Message_To_The_Command_Processor.cs | 4 +- ..._Message_To_The_Command_Processor_Async.cs | 4 +- ...en_a_message_compresses_a_large_payload.cs | 6 +-- .../When_a_message_is_not_compressed.cs | 6 +-- .../When_a_message_is_under_the_threshold.cs | 2 +- ...ompressing_a_large_payload_in_a_message.cs | 6 +-- .../JsonMapper/JsonMessageMapperTests.cs | 6 +-- ...hen_A_Request_Logger_Is_In_The_Pipeline.cs | 2 +- ...nstructing_A_Combined_Producer_Registry.cs | 2 +- ...ructing_a_channel_with_combined_factory.cs | 4 +- .../Archive/When_archiving_from_the_outbox.cs | 2 +- ...Depositing_A_Request_A_Span_Is_Exported.cs | 2 +- ...ting_A_Request_A_Span_Is_Exported_Async.cs | 2 +- ...called_standalone_should_run_at_startup.cs | 2 +- ..._should_log_publication_detail_at_debug.cs | 2 +- ...bes_should_return_mapper_and_transforms.cs | 2 +- ...om_di_should_validate_through_full_path.cs | 2 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...essage_consumer_reads_multiple_messages.cs | 12 +++--- ...ing_a_message_via_the_messaging_gateway.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...essage_consumer_reads_multiple_messages.cs | 12 +++--- ...ing_a_message_via_the_messaging_gateway.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- .../Firestore/FirestoreOutboxProvider.cs | 2 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- .../When_scheduling_a_message.cs | 12 +++--- .../When_scheduling_a_message_async.cs | 8 ++-- .../When_scheduling_a_request.cs | 20 +++++----- .../When_scheduling_a_request_async.cs | 12 +++--- .../When_a_dequeued_item_is_acknowledged.cs | 6 +-- .../When_a_dequeued_item_is_rejected.cs | 4 +- ..._creating_an_inmemory_producer_registry.cs | 2 +- ..._should_dispose_lazily_created_producer.cs | 8 ++-- ...hould_requeue_via_scheduler_after_delay.cs | 12 +++--- ...figuration_exception_on_delayed_requeue.cs | 4 +- .../When_reading_messages_via_a_consumer.cs | 4 +- ..._a_message_it_should_be_available_again.cs | 8 ++-- ..._with_delay_should_delegate_to_producer.cs | 6 +-- ...ero_delay_should_use_direct_bus_enqueue.cs | 6 +-- .../Inbox/When_storing_items_in_inbox.cs | 20 +++++----- .../When_Retrieving_Messages_based_on_Age.cs | 16 ++++---- .../Outbox/When_controlling_cache_size.cs | 4 +- .../Outbox/When_expiring_message_in_outbox.cs | 2 +- .../Outbox/When_storing_message_in_outbox.cs | 28 ++++++------- .../When_adding_messages_to_the_producer.cs | 2 +- .../Scheduler/When_scheduling_a_message.cs | 12 +++--- .../When_scheduling_a_message_async.cs | 12 +++--- .../Scheduler/When_scheduling_a_request.cs | 20 +++++----- .../When_scheduling_a_request_async.cs | 6 +-- .../Sweeper/When_sweeping_the_outbox.cs | 2 +- ...iting_next_acknowledge_sweep_them_async.cs | 2 +- ...delivery_error_should_send_to_dlq_async.cs | 6 ++- ...igured_should_acknowledge_and_log_async.cs | 6 ++- ...id_channel_should_fallback_to_dlq_async.cs | 6 ++- ...on_should_send_to_invalid_channel_async.cs | 6 ++- ...unknown_reason_should_send_to_dlq_async.cs | 6 ++- ...should_commit_uncommitted_offsets_async.cs | 2 +- ...g_offsets_during_revoke_should_not_race.cs | 10 ++--- ...ake_channels_create_should_create_topic.cs | 2 +- ...equeues_with_delay_should_use_scheduler.cs | 6 +-- ...ts_awaiting_next_acknowledge_sweep_them.cs | 4 +- ...jecting_message_should_include_metadata.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- ...s_configured_should_acknowledge_and_log.cs | 4 +- ..._invalid_channel_should_fallback_to_dlq.cs | 2 +- ...e_reason_should_send_to_invalid_channel.cs | 2 +- ..._with_unknown_reason_should_send_to_dlq.cs | 2 +- ...evoked_partitions_offsets_are_committed.cs | 16 ++++---- ...should_commit_uncommitted_offsets_async.cs | 6 +-- ..._has_scheduler_should_pass_to_consumers.cs | 2 +- ..._should_configure_and_dispose_correctly.cs | 4 +- ...tes_channel_should_use_consumer_factory.cs | 2 +- ..._has_scheduler_should_pass_to_consumers.cs | 2 +- ..._should_configure_and_dispose_correctly.cs | 6 +-- ...requeues_with_delay_should_use_producer.cs | 2 +- ...with_zero_delay_should_use_direct_queue.cs | 16 ++++---- ..._with_delivery_error_should_send_to_dlq.cs | 4 +- ...delivery_error_should_send_to_dlq_async.cs | 6 +-- ..._channels_configured_should_log_warning.cs | 6 +-- ..._invalid_channel_should_fallback_to_dlq.cs | 4 +- ...e_reason_should_send_to_invalid_channel.cs | 6 +-- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...tyFrameworkTransactionProviderAsyncTest.cs | 4 +- ...bEntityFrameworkTransactionProviderTest.cs | 10 ++--- .../When_unwrapping_a_large_message.cs | 8 ++-- .../When_wrapping_a_large_message.cs | 2 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- .../When_scheduling_a_message.cs | 12 +++--- .../When_scheduling_a_request.cs | 20 +++++----- .../When_scheduling_a_request_async.cs | 16 ++++---- ...When_publishing_and_receiving_with_mtls.cs | 2 +- .../When_using_mtls_with_quorum_queues.cs | 4 +- ..._should_use_message_topic_and_scheduler.cs | 2 +- ...iple_messages_via_the_messaging_gateway.cs | 2 +- ...ing_a_message_via_the_messaging_gateway.cs | 2 +- ...try_limits_force_a_message_onto_the_DLQ.cs | 6 +-- .../When_configuring_mutual_tls_connection.cs | 2 +- ..._has_scheduler_should_pass_to_consumers.cs | 2 +- ...When_publishing_and_receiving_with_mtls.cs | 4 +- ...publishing_with_trace_context_over_mtls.cs | 20 +++++----- .../When_using_mtls_with_quorum_queues.cs | 4 +- ...ing_a_message_via_the_messaging_gateway.cs | 2 +- ...try_limits_force_a_message_onto_the_DLQ.cs | 2 +- .../When_configuring_mutual_tls_connection.cs | 2 +- ...ing_a_message_via_the_messaging_gateway.cs | 8 ++-- ...iple_messages_via_the_messaging_gateway.cs | 14 +++---- ..._with_delivery_error_should_send_to_dlq.cs | 12 +++--- ..._configured_should_remove_from_inflight.cs | 10 ++--- ..._invalid_channel_should_fallback_to_dlq.cs | 12 +++--- ...e_reason_should_send_to_invalid_channel.cs | 16 ++++---- .../Reactor/When_requeing_a_failed_message.cs | 18 ++++----- .../MessagingGateway/RedisFixture.cs | 6 +-- ..._has_scheduler_should_pass_to_consumers.cs | 2 +- ..._should_configure_and_dispose_correctly.cs | 8 ++-- ...requeues_with_delay_should_use_producer.cs | 2 +- ..._with_zero_delay_should_use_direct_list.cs | 4 +- ...message_via_the_messaging_gateway_async.cs | 2 +- ...delivery_error_should_send_to_dlq_async.cs | 2 +- .../When_requeueing_a_message_async.cs | 2 +- ...en_requeueing_redrives_to_the_dlq_async.cs | 2 +- ..._with_delivery_error_should_send_to_dlq.cs | 2 +- ...s_configured_should_ack_and_log_warning.cs | 4 +- ..._invalid_channel_should_fallback_to_dlq.cs | 2 +- ...e_reason_should_send_to_invalid_channel.cs | 2 +- .../When_requeueing_redrives_to_the_dlq.cs | 2 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 4 +- ...action_It_Should_Be_Stored_After_Commit.cs | 4 +- .../When_scheduling_a_message.cs | 12 +++--- .../When_scheduling_a_request.cs | 20 +++++----- .../When_scheduling_a_request_async.cs | 16 ++++---- .../JustSaying/JustSayingMessageMapperTest.cs | 16 ++++---- .../MassTransitMessageMapperTest.cs | 14 +++---- 343 files changed, 919 insertions(+), 899 deletions(-) diff --git a/samples/TaskQueue/AWSTaskQueue/GreetingsSender/Program.cs b/samples/TaskQueue/AWSTaskQueue/GreetingsSender/Program.cs index 1e41161000..2de4adae1c 100644 --- a/samples/TaskQueue/AWSTaskQueue/GreetingsSender/Program.cs +++ b/samples/TaskQueue/AWSTaskQueue/GreetingsSender/Program.cs @@ -63,7 +63,7 @@ static async Task Main(string[] args) } }); - var producerRegistry = new SnsProducerRegistryFactory( + var producerRegistry = await new SnsProducerRegistryFactory( awsConnection, [ new SnsPublication @@ -79,7 +79,7 @@ static async Task Main(string[] args) } } ] - ).Create(); + ).CreateAsync(); serviceCollection .AddBrighter() diff --git a/src/Paramore.Brighter.MessagingGateway.AWSSQS.V4/SqsMessageConsumer.cs b/src/Paramore.Brighter.MessagingGateway.AWSSQS.V4/SqsMessageConsumer.cs index 5fa6a6b3db..10c079fafb 100644 --- a/src/Paramore.Brighter.MessagingGateway.AWSSQS.V4/SqsMessageConsumer.cs +++ b/src/Paramore.Brighter.MessagingGateway.AWSSQS.V4/SqsMessageConsumer.cs @@ -435,12 +435,12 @@ public async ValueTask DisposeAsync() if (_deadLetterProducer?.IsValueCreated == true && _deadLetterProducer.Value is IAsyncDisposable deadLetterAsync) await deadLetterAsync.DisposeAsync(); else if (_deadLetterProducer?.IsValueCreated == true) - _deadLetterProducer.Value?.Dispose(); + await _deadLetterProducer.Value!.DisposeAsync(); if (_invalidMessageProducer?.IsValueCreated == true && _invalidMessageProducer.Value is IAsyncDisposable invalidAsync) await invalidAsync.DisposeAsync(); else if (_invalidMessageProducer?.IsValueCreated == true) - _invalidMessageProducer.Value?.Dispose(); + await _invalidMessageProducer.Value!.DisposeAsync(); GC.SuppressFinalize(this); } diff --git a/src/Paramore.Brighter.MessagingGateway.AWSSQS/SqsMessageConsumer.cs b/src/Paramore.Brighter.MessagingGateway.AWSSQS/SqsMessageConsumer.cs index 04dd0e7d83..1100b8a2f3 100644 --- a/src/Paramore.Brighter.MessagingGateway.AWSSQS/SqsMessageConsumer.cs +++ b/src/Paramore.Brighter.MessagingGateway.AWSSQS/SqsMessageConsumer.cs @@ -442,12 +442,12 @@ public async ValueTask DisposeAsync() if (_deadLetterProducer?.IsValueCreated == true && _deadLetterProducer.Value is IAsyncDisposable deadLetterAsync) await deadLetterAsync.DisposeAsync(); else if (_deadLetterProducer?.IsValueCreated == true) - _deadLetterProducer.Value?.Dispose(); + await _deadLetterProducer.Value!.DisposeAsync(); if (_invalidMessageProducer?.IsValueCreated == true && _invalidMessageProducer.Value is IAsyncDisposable invalidAsync) await invalidAsync.DisposeAsync(); else if (_invalidMessageProducer?.IsValueCreated == true) - _invalidMessageProducer.Value?.Dispose(); + await _invalidMessageProducer.Value!.DisposeAsync(); GC.SuppressFinalize(this); } diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index afbbbc47b2..5b864dd047 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -92,7 +92,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index b483bb77db..ef47cbedac 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -51,7 +51,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); @@ -103,7 +103,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index ef3e37a651..5d1309051e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -114,7 +114,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index fa20a80345..b4ba083269 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -45,7 +45,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index e1939ef045..91b9fa1d8d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -70,7 +70,7 @@ public async Task Setup() await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); - _channel = _channelFactory.CreateAsyncChannel(subscription); + _channel = await _channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index a0b745ff34..5e6298e9ce 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -109,11 +109,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); - _messageProducer.Send(messageFive); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); + await _messageProducer.SendAsync(messageFive); int iteration = 0; @@ -125,7 +125,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -136,7 +136,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -154,7 +154,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 4757a8fa52..8149e2353c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -84,16 +84,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index f12d02aa96..f39f84699e 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -81,7 +81,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -102,7 +102,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 97900c99a7..656b817dfd 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -83,7 +83,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -104,7 +104,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 7dd418623b..41613fb01f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -81,7 +81,7 @@ public AwsValidateInfrastructureByConventionTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -102,7 +102,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index 8c8c44986a..9434d2b816 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -74,7 +74,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() [Test] public async Task When_infrastructure_exists_can_verify_async() { - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -93,7 +93,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); (_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 694e45addc..4621d888b5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -80,7 +80,7 @@ public async Task When_posting_a_message_via_the_producer() { //arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -118,7 +118,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index 68b7b92f44..0b49989406 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -71,7 +71,7 @@ public async Task When_raw_message_delivery_disabled() var messageToSent = new Message(messageHeader, new MessageBody("test content one")); //act - _messageProducer.Send(messageToSent); + await _messageProducer.SendAsync(messageToSent); var messageReceived = _channel.Receive(TimeSpan.FromMilliseconds(10000)); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 13d0c6a042..2b3e118919 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -67,7 +67,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 86a0faf61e..8bc073cb1c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -80,7 +80,7 @@ public async Task Setup() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 88887633c3..891255d14a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -143,7 +143,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs index 31c8a09364..e268ccbea5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_creating_a_topic_with_custom_tags_async.cs @@ -85,7 +85,7 @@ public async Task Cleanup() { await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index d6aa195c4a..f386746e5c 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -90,7 +90,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index b6a6ff38d2..b8e9184603 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -53,7 +53,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(credentials, region); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); @@ -104,7 +104,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index ff61039fe8..4bb4132692 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -90,7 +90,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index 04aab6b3dd..3b1d6930df 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -100,7 +100,7 @@ public async Task Cleanup() { await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 48e7b308f1..2ecf8ae200 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -102,7 +102,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 221b9dbbfb..bffb58e362 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -45,7 +45,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index d775b287f6..59f7f2fa74 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -64,7 +64,7 @@ public async Task Setup() await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); - _channel = _channelFactory.CreateAsyncChannel(subscription); + _channel = await _channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index e73c32a7a0..9b76128c28 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -84,10 +84,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); int iteration = 0; @@ -99,7 +99,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -110,7 +110,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -130,7 +130,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index 11eb8c7fb3..3db77c3aa7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -66,7 +66,7 @@ public CustomisingAwsClientConfigTests() public async Task When_customising_aws_client_config() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index 539b949deb..e5cba91353 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -68,16 +68,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index ca51dd8641..7b6ae188b3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -74,7 +74,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -95,7 +95,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 7935d12d4b..ecdf5f6a38 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -56,7 +56,7 @@ public async Task Setup() //This doesn't look that different from our create tests - this is because we create using the channel factory in //our AWS transport, not the consumer (as it's a more likely to use infrastructure declared elsewhere) _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); @@ -105,7 +105,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index d6e9409d11..6e1077fbf1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -72,7 +72,7 @@ public AwsValidateInfrastructureByConventionTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -93,7 +93,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index ae80b301f6..e9b9b515cc 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -66,7 +66,7 @@ public async Task When_posting_a_message_via_the_producer() { //arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -100,7 +100,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index d0a5fadf18..72e3fbfd92 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -65,7 +65,7 @@ public async Task When_raw_message_delivery_disabled() var messageToSent = new Message(messageHeader, new MessageBody("test content one")); //act - _messageProducer.Send(messageToSent); + await _messageProducer.SendAsync(messageToSent); var messageReceived = _channel.Receive(TimeSpan.FromMilliseconds(10000)); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 242732cd19..f3e95c63b0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -61,7 +61,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index a18ff95684..31dd674faf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -70,7 +70,7 @@ public async Task Setup() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 43eb3f9f7b..69a260bd3d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -142,7 +142,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index e511966211..179b0df72f 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -88,7 +88,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 78a8b5e20b..7f16051660 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -53,7 +53,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); @@ -101,7 +101,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 415c40f472..37cc0378cf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -114,7 +114,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 2d18255b3d..eaebd6dce6 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -108,11 +108,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); - _messageProducer.Send(messageFive); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); + await _messageProducer.SendAsync(messageFive); int iteration = 0; @@ -124,7 +124,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -135,7 +135,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -153,7 +153,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 4e14fb9405..db36ec7cd8 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -72,16 +72,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index 78e68ad529..f05120586d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -77,7 +77,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -98,7 +98,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index 136099f9c9..bc0b8a4ad9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -85,7 +85,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -106,7 +106,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index e8c3c791a3..8511cefc41 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -75,7 +75,7 @@ public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -113,7 +113,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index bc75b20b26..7ae11f7033 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -62,7 +62,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index 87e351b83c..20415e9a32 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -110,7 +110,7 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTests() public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 046f9831d3..2fbb42c5d3 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -73,7 +73,7 @@ public SqsMessageProducerDlqTests() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index de6d4217c0..1062b057e4 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -128,7 +128,7 @@ public async Task GetDLQCountAsync(string queueName) [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] public async Task When_throwing_defer_action_respect_redrive_async() { - _sender.Send(_message); + await _sender.SendAsync(_message); var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(5000); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index b5e99f5075..e19f00cc1d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -85,7 +85,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs index 138ee47091..eb2fbd1be9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url.cs @@ -80,7 +80,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -101,7 +101,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index acb2ecff4c..fd3d4fc2f2 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -52,7 +52,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); @@ -106,7 +106,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs index 8b8c1ef5db..7c23d953c9 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_resources_are_tagged_async.cs @@ -79,7 +79,7 @@ public async Task When_posting_a_message_resources_are_tagged_async() public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index f3c115ec56..36d73f7441 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -100,7 +100,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index cdd3e85f62..0fa3d8865d 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -40,7 +40,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(queueName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 52b305606e..7f39b18820 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -82,10 +82,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); int iteration = 0; @@ -97,7 +97,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -108,7 +108,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -128,7 +128,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index 9008f108c9..daa7bd4827 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -63,7 +63,7 @@ public CustomisingAwsClientConfigTests() public async Task When_customising_aws_client_config() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index e6435b0eca..e9b45cb2c0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -71,16 +71,16 @@ public AWSAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs index 47ed679131..3bb9c7549a 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infrastructure_exists_can_verify.cs @@ -76,7 +76,7 @@ public AWSValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -97,7 +97,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 06dc92d9bf..d9e1dd3082 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -67,7 +67,7 @@ public async Task When_posting_a_message_via_the_producer() { //arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -101,7 +101,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index da64523fb2..83fc6a6b49 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -64,7 +64,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 3e56ad1c12..d14f5e1cb0 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -99,7 +99,7 @@ public SqsMessageConsumerDeliveryErrorDlqTests() public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index f7c1d24c21..c2d0d34de1 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -82,7 +82,7 @@ public SqsMessageConsumerNoChannelsRejectTests() public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act - reject with a DeliveryError reason but no DLQ configured diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index edd6ae44cf..281d751de7 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -100,7 +100,7 @@ public SqsMessageConsumerUnacceptableFallbackToDlqTests() public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index a1d30db6ca..af45471cdd 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -117,7 +117,7 @@ public SqsMessageConsumerUnacceptableInvalidChannelTests() public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index 0ac12a50b3..0c0e89ab11 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -71,7 +71,7 @@ public SqsMessageProducerDlqTests() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 772541aec3..af02e2dadf 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -142,7 +142,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index a3a166f391..807217a178 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -92,7 +92,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index 8bc2167a62..ad2825aa76 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -51,7 +51,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.ToValidSNSTopicName(true)); var routingKeyArn = new RoutingKey(topicArn); @@ -103,7 +103,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 439dbabe72..0d220e6bfb 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -114,7 +114,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs index 6a6217f906..6672bbf9af 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_queues_missing_assume_throws_async.cs @@ -45,7 +45,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 617f221591..0175c20533 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -70,7 +70,7 @@ public async Task Setup() await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); - _channel = _channelFactory.CreateAsyncChannel(subscription); + _channel = await _channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index ff94af698c..c6787ba083 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -109,11 +109,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); - _messageProducer.Send(messageFive); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); + await _messageProducer.SendAsync(messageFive); int iteration = 0; @@ -125,7 +125,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -136,7 +136,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -154,7 +154,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs index 9b6d187e07..c54ac9802b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -84,16 +84,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs index 01fc4dbd68..2b28904fe4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -81,7 +81,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -102,7 +102,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs index 4d9e2ebbd1..1a133b264f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -83,7 +83,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -104,7 +104,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs index c1d0936722..935786e141 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -81,7 +81,7 @@ public AwsValidateInfrastructureByConventionTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -102,7 +102,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs index 08f25e068d..d24841ccf5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_infrastructure_exists_can_verify_by_convention.cs @@ -74,7 +74,7 @@ public AwsValidateInfrastructureByConventionTestsAsync() [Test] public async Task When_infrastructure_exists_can_verify_async() { - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -93,7 +93,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); (_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 621881191f..669f2a5ae2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -80,7 +80,7 @@ public async Task When_posting_a_message_via_the_producer() { //arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -118,7 +118,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs index 74e2a77070..1f8e0fb4e2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_raw_message_delivery_disabled.cs @@ -71,7 +71,7 @@ public async Task When_raw_message_delivery_disabled() var messageToSent = new Message(messageHeader, new MessageBody("test content one")); //act - _messageProducer.Send(messageToSent); + await _messageProducer.SendAsync(messageToSent); var messageReceived = _channel.Receive(TimeSpan.FromMilliseconds(10000)); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 8b620b9508..e3f056cc03 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -67,7 +67,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index 7cfb1fd6b9..f015351b87 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -80,7 +80,7 @@ public async Task Setup() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index fe417cb150..7c98e29285 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -143,7 +143,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 2578b435f1..fb0579a5d2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -90,7 +90,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs index d6e56f0d92..8ce295488d 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_arn_async.cs @@ -53,7 +53,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(credentials, region); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); @@ -104,7 +104,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs index f96238ef08..7b64e9c47b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_infrastructure_exists_can_verify_by_convention_async.cs @@ -90,7 +90,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 417f9981ea..f179c6445a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -105,7 +105,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs index 7148fcf370..7af74aaa6c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -45,7 +45,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 376c3b8ec1..9a5d12e76b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -64,7 +64,7 @@ public async Task Setup() await _sender.ConfirmTopicExistsAsync(topicName); _channelFactory = new ChannelFactory(_awsConnection); - _channel = _channelFactory.CreateAsyncChannel(subscription); + _channel = await _channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index d2ee52aa55..f39b33e971 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -89,10 +89,10 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); int iteration = 0; @@ -104,7 +104,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -115,7 +115,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -135,7 +135,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs index 6b72ee1392..92649e8cd1 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_customising_aws_client_config.cs @@ -66,7 +66,7 @@ public CustomisingAwsClientConfigTests() public async Task When_customising_aws_client_config() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs index df45c419d7..3064584ceb 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -68,16 +68,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs index 0883d12e2b..73764c28b0 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -74,7 +74,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -95,7 +95,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs index dd6cb43cdb..5c6653bedd 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_arn.cs @@ -56,7 +56,7 @@ public async Task Setup() //This doesn't look that different from our create tests - this is because we create using the channel factory in //our AWS transport, not the consumer (as it's a more likely to use infrastructure declared elsewhere) _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var topicArn = await FindTopicArn(awsConnection, routingKey.Value); var routingKeyArn = new RoutingKey(topicArn); @@ -105,7 +105,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs index 078453b4a9..a5bec4c961 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_infastructure_exists_can_verify_by_convention.cs @@ -72,7 +72,7 @@ public AwsValidateInfrastructureByConventionTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -93,7 +93,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index be0217269d..29045b3c4c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -69,7 +69,7 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) //arrange _message.Header.Subject = "test subject"; _message.Header.PartitionKey = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -103,7 +103,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs index 43732a1095..7c07a796f4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_raw_message_delivery_disabled.cs @@ -65,7 +65,7 @@ public async Task When_raw_message_delivery_disabled() var messageToSent = new Message(messageHeader, new MessageBody("test content one")); //act - _messageProducer.Send(messageToSent); + await _messageProducer.SendAsync(messageToSent); var messageReceived = _channel.Receive(TimeSpan.FromMilliseconds(10000)); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index a37484be01..8337e9cde6 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -61,7 +61,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index eee9dbf740..283aa14d52 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -70,7 +70,7 @@ public async Task Setup() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index 4a83e15547..8aa6910a59 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sns/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -142,7 +142,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs index 622ba5a715..02b692bbba 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -88,7 +88,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index 7f0babff43..d9c5402a1f 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -53,7 +53,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var queueUrl = await FindQueueUrl(awsConnection, routingKey.ToValidSQSQueueName(true)); @@ -101,7 +101,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 04a4ab34dd..67c5127f91 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -114,7 +114,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs index c16bcb8162..132010be46 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -108,11 +108,11 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); - _messageProducer.Send(messageFive); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); + await _messageProducer.SendAsync(messageFive); int iteration = 0; @@ -124,7 +124,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -135,7 +135,7 @@ public async Task When_a_message_consumer_reads_multiple_messages() foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -153,7 +153,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs index f36f3f04ea..1f1d2c0dc2 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_assume.cs @@ -72,16 +72,16 @@ public AwsAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs index 2588ac189d..850f32735e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify.cs @@ -77,7 +77,7 @@ public AwsValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -98,7 +98,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs index 21d249e147..4432bd9901 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_infastructure_exists_can_verify_by_url.cs @@ -85,7 +85,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -106,7 +106,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 2d2e07b60e..9914759500 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -75,7 +75,7 @@ public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -113,7 +113,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 93cab625bc..6cbfa68dae 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -62,7 +62,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs index a4310ed77b..d7fa3cbf69 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq.cs @@ -110,7 +110,7 @@ public SqsMessageConsumerFifoDeliveryErrorDlqTests() public async Task When_rejecting_fifo_message_with_delivery_error_should_send_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs index c5cab34113..559cc1f047 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -73,7 +73,7 @@ public SqsMessageProducerDlqTests() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 535e4c4b9e..3429c92e1e 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -128,7 +128,7 @@ public async Task GetDLQCountAsync(string queueName) [Test, Skip("This test is skipped because running tests of the DLQ is unreliable in the CI environment")] public async Task When_throwing_defer_action_respect_redrive_async() { - _sender.Send(_message); + await _sender.SendAsync(_message); var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); await Task.Delay(5000); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs index 72cfb7709e..1d51de4a03 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infastructure_exists_can_verify_by_url.cs @@ -80,7 +80,7 @@ public async Task Setup() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -101,7 +101,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs index 0f04517de7..0745c111a7 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_async.cs @@ -85,7 +85,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs index c326c87659..da590bee0a 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_infrastructure_exists_can_verify_by_url_async.cs @@ -52,7 +52,7 @@ public async Task Setup() var awsConnection = GatewayFactory.CreateFactory(); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); var queueUrl = await FindQueueUrl(awsConnection, routingKey.Value); @@ -106,7 +106,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); ((IAmAMessageConsumerSync)_consumer).Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index 14d850ea1b..1f40682fc3 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -104,7 +104,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs index ce6a00165f..874c303fc6 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Proactor/When_queues_missing_assume_throws_async.cs @@ -40,7 +40,7 @@ public async Task Setup() await producer.ConfirmTopicExistsAsync(queueName); _channelFactory = new ChannelFactory(awsConnection); - var channel = _channelFactory.CreateAsyncChannel(subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(subscription); //We need to create the topic at least, to check the queues _consumer = new SqsMessageConsumerFactory(awsConnection).CreateAsync(subscription); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs index ea8c7899bc..f433a51347 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -87,10 +87,10 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); int iteration = 0; @@ -102,7 +102,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue var outstandingMessageCount = MessageCount - messagesReceivedCount; //retrieve messages - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(10000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(10000)); await Assert.That(messages.Length <= outstandingMessageCount).IsTrue(); @@ -113,7 +113,7 @@ public async Task When_a_message_consumer_reads_multiple_messages(bool fairQueue foreach (var message in moreMessages) { messagesReceived.Add(message); - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } messagesReceivedCount = messagesReceived.Count; @@ -133,7 +133,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs index 82e68164d5..f0a847d018 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_customising_aws_client_config.cs @@ -63,7 +63,7 @@ public CustomisingAwsClientConfigTests() public async Task When_customising_aws_client_config() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs index 64a553bf8b..41c3f1851b 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_assume.cs @@ -71,16 +71,16 @@ public AWSAssumeInfrastructureTests() public async Task When_infastructure_exists_can_assume() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); - var messages = _consumer.Receive(TimeSpan.FromMilliseconds(5000)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //Assert var message = messages.First(); await Assert.That(message.Id).IsEqualTo(_myCommand.Id); //clear the queue - _consumer.Acknowledge(message); + await _consumer.AcknowledgeAsync(message); } [After(Test)] diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs index 828613f74f..431f9f2c6c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_infastructure_exists_can_verify.cs @@ -76,7 +76,7 @@ public AWSValidateInfrastructureTests() public async Task When_infrastructure_exists_can_verify() { //arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -97,7 +97,7 @@ public async Task Cleanup() await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); _consumer.Dispose(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 36959c6a3b..4fc1f35545 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -70,7 +70,7 @@ public async Task When_posting_a_message_via_the_producer(bool fairQueue) //arrange _message.Header.Subject = "test subject"; _message.Header.PartitionKey = fairQueue ? new PartitionKey(Uuid.NewAsString()) : PartitionKey.Empty; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(1000); @@ -104,7 +104,7 @@ public async Task Cleanup() //Clean up resources that we have created await _channelFactory.DeleteTopicAsync(); await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); + await _messageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs index 97c906f105..b2dab565cc 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_a_message_should_delete_from_queue.cs @@ -64,7 +64,7 @@ public SqsMessageConsumerRejectTests() public async Task When_rejecting_a_message_should_delete_from_queue() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index ccbcfd5e4d..7cefeb4cef 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -99,7 +99,7 @@ public SqsMessageConsumerDeliveryErrorDlqTests() public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index ff0e0bd2fe..0ddf537842 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -82,7 +82,7 @@ public SqsMessageConsumerNoChannelsRejectTests() public async Task When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act - reject with a DeliveryError reason but no DLQ configured diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index ef5b398cce..237e2eda86 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -100,7 +100,7 @@ public SqsMessageConsumerUnacceptableFallbackToDlqTests() public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index f6dd4d43f1..9417dd5eb5 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -117,7 +117,7 @@ public SqsMessageConsumerUnacceptableInvalidChannelTests() public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); var message = _channel.Receive(TimeSpan.FromMilliseconds(5000)); //Act diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs index aced168332..32ec50beb4 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -71,7 +71,7 @@ public SqsMessageProducerDlqTests() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); _channel.Requeue(receivedMessage); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs index c1226e780e..4e02bf7e3c 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Standard/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -142,7 +142,7 @@ private async Task GetDLQCount(string queueName) public async Task When_throwing_defer_action_respect_redrive() { //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //start a message pump, let it process messages var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index f4da2e8f18..93120a2ed0 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -76,7 +76,7 @@ public async Task When_Scheduling_A_Sns_Message() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(); + var messages = await _consumer.ReceiveAsync(); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -84,7 +84,7 @@ public async Task When_Scheduling_A_Sns_Message() await Assert.That(messages[0].Header.MessageType).IsEqualTo(message.Header.MessageType); await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -99,8 +99,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index 3e77c7d14a..06574ddef4 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -56,7 +56,7 @@ await _messageProducer.SendAsync(new Message( new MessageBody("test content one") )); - _consumer.Purge(); + await _consumer.PurgeAsync(); _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index 13eca849d9..b56e7e4afa 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -77,7 +77,7 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -89,7 +89,7 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() await Assert.That((object?)m).IsNotNull(); await Assert.That(m.Message).IsEquivalentTo(message); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -104,8 +104,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index 7da853a912..d8ede0e36d 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -104,8 +104,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 724f7d37ea..4f44f4a11f 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -65,14 +65,14 @@ public async Task When_Scheduling_A_Sqs_Message() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -86,8 +86,8 @@ public async Task When_Scheduling_A_Sqs_Message() public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index e9112b6245..697c197c4c 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -68,7 +68,7 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -80,7 +80,7 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() await Assert.That((object?)m).IsNotNull(); await Assert.That(m.Message).IsEquivalentTo(message); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -94,8 +94,8 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 20d22d49e2..97f48f540e 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -84,7 +84,7 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -97,7 +97,7 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -124,7 +124,7 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); @@ -138,7 +138,7 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -234,8 +234,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index 1e747f7862..77486e9194 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -238,8 +238,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 69159b0ca9..81221dff8b 100644 --- a/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -225,8 +225,8 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs index 06326c96a5..e760bf744f 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message.cs @@ -76,7 +76,7 @@ public async Task When_Scheduling_A_Sns_Message() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(); + var messages = await _consumer.ReceiveAsync(); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -84,7 +84,7 @@ public async Task When_Scheduling_A_Sns_Message() await Assert.That(messages[0].Header.MessageType).IsEqualTo(message.Header.MessageType); await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -99,8 +99,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs index a30a515bed..c8100076d9 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Async.cs @@ -56,7 +56,7 @@ await _messageProducer.SendAsync(new Message( new MessageBody("test content one") )); - _consumer.Purge(); + await _consumer.PurgeAsync(); _factory = new AwsSchedulerFactory(_awsConnection, $"brighter-scheduler-{Guid.NewGuid():N}") { diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs index a74696352b..912558fe7c 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler.cs @@ -77,7 +77,7 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -89,7 +89,7 @@ public async Task When_Scheduling_A_Sns_Message_With_Delay_Via_FireScheduler() await Assert.That((object?)m).IsNotNull(); await Assert.That(m.Message).IsEquivalentTo(message); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -104,8 +104,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs index 8a06f3a5df..a7f708cb94 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sns/When_Scheduling_A_Sns_Message_Via_FireScheduler_Async.cs @@ -104,8 +104,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs index 662250ead2..02a9dfbe13 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message.cs @@ -65,14 +65,14 @@ public async Task When_Scheduling_A_Sqs_Message() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) { await Assert.That((string?)messages[0].Body.Value).IsEqualTo((string?)message.Body.Value); await Assert.That(messages[0].Header).IsEquivalentTo(message.Header); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -86,8 +86,8 @@ public async Task When_Scheduling_A_Sqs_Message() public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs index 84eff114aa..396b7e2573 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Messages/Sqs/When_Scheduling_A_Sqs_Message_Via_FireScheduler.cs @@ -68,7 +68,7 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -80,7 +80,7 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() await Assert.That((object?)m).IsNotNull(); await Assert.That(m.Message).IsEquivalentTo(message); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -94,8 +94,8 @@ public async Task When_Scheduling_A_Sqs_Message_Via_FireScheduler() public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs index 4e1dd9cdb0..143f1ceb04 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request.cs @@ -84,7 +84,7 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); if (messages[0].Header.MessageType != MessageType.MT_NONE) @@ -97,7 +97,7 @@ public async Task When_Scheduling_A_Sns_Request_With_Delay(RequestSchedulerType await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -124,7 +124,7 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch var stopAt = DateTimeOffset.UtcNow.AddMinutes(2); while (stopAt > DateTimeOffset.UtcNow) { - var messages = _consumer.Receive(TimeSpan.FromMinutes(1)); + var messages = await _consumer.ReceiveAsync(TimeSpan.FromMinutes(1)); await Assert.That(messages).HasSingleItem(); @@ -138,7 +138,7 @@ public async Task When_Scheduling_A_Sns_Request_With_SpecificDateTime(RequestSch await Assert.That(m.SchedulerType).IsEqualTo(schedulerType); await Assert.That((string?)m.RequestType).IsEqualTo(typeof(MyCommand).FullName); await Assert.That((bool)m.Async).IsFalse(); - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return; } @@ -234,8 +234,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs index d076973ec8..3c544452e4 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sns/When_Scheduling_A_Sns_Request_Async.cs @@ -238,8 +238,8 @@ public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); await _channelFactory.DeleteTopicAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs index 2d9a4a9d67..e42712ac17 100644 --- a/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs +++ b/tests/Paramore.Brighter.AWSScheduler.V4.Tests/Scheduler/Requests/Sqs/When_Scheduling_A_Sqs_Request.cs @@ -225,8 +225,8 @@ public async Task When_Cancel_A_Sqs_Request_Async(RequestSchedulerType scheduler public async Task Cleanup() { await _channelFactory.DeleteQueueAsync(); - _messageProducer.Dispose(); - _consumer.Dispose(); + await _messageProducer.DisposeAsync(); + await _consumer.DisposeAsync(); _scheduler.Dispose(); } } diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs index 6601a6b1f9..8bc20a720c 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -54,8 +54,8 @@ public async Task When_unwrapping_a_large_message_async() var stream = new MemoryStream(); var writer = new StreamWriter(stream); - writer.Write(commandAsJson); - writer.Flush(); + await writer.WriteAsync(commandAsJson); + await writer.FlushAsync(); stream.Position = 0; var id = _luggageStore.Store(stream); diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs index 05ef14c074..34b9973145 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_uploading_luggage_to_blob.cs @@ -29,15 +29,15 @@ public async Task When_uploading_luggage_to_blob() Credential = new AzureCliCredential() }); - luggageStore.EnsureStoreExists(); + await luggageStore.EnsureStoreExistsAsync(); //act //Upload the test stream to Azure const string testContent = "Well, always know that you shine Brighter"; var stream = new MemoryStream(); var streamWriter = new StreamWriter(stream); - streamWriter.Write(testContent); - streamWriter.Flush(); + await streamWriter.WriteAsync(testContent); + await streamWriter.FlushAsync(); stream.Position = 0; var claim = luggageStore.Store(stream); @@ -48,7 +48,7 @@ public async Task When_uploading_luggage_to_blob() //check for the contents indicated by the claim id on S3 var result = luggageStore.Retrieve(claim); - var resultAsString = new StreamReader(result).ReadToEnd(); + var resultAsString = await new StreamReader(result).ReadToEndAsync(); await Assert.That(resultAsString).IsEqualTo(testContent); luggageStore.Delete(claim); diff --git a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs index 01325cae38..c168e29db2 100644 --- a/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Azure.Tests/Transformers/When_wrapping_a_large_message.cs @@ -49,7 +49,7 @@ public LargeMessagePayloadWrapTests() [Test] public async Task When_wrapping_a_large_message() { - _luggageStore.EnsureStoreExists(); + await _luggageStore.EnsureStoreExistsAsync(); //act _transformPipeline = _pipelineBuilder.BuildWrapPipeline(); diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs index d68aa1506b..0614b39297 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusConsumerTestsAsync.cs @@ -280,7 +280,7 @@ public async Task When_requeue_is_called_and_the_delay_is_more_than_zero_the_sen var message = new Message(messageHeader, new MessageBody("body")); message.Header.Bag.Add("LockToken", messageLockTokenOne); - _azureServiceBusConsumer.Requeue(message, TimeSpan.FromMilliseconds(100)); + await _azureServiceBusConsumer.RequeueAsync(message, TimeSpan.FromMilliseconds(100)); await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } @@ -339,8 +339,8 @@ public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if _messageReceiver.MessageQueue = brokeredMessageList; - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); //Subscription is only created once await Assert.That(_nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))).IsEqualTo(1); @@ -367,8 +367,8 @@ public async Task When_MessagingEntityAlreadyExistsException_does_not_check_if_s _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); @@ -394,7 +394,7 @@ public async Task When_a_message_contains_a_null_body_message_is_still_processed _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo(string.Empty); } @@ -403,9 +403,9 @@ public async Task When_a_message_contains_a_null_body_message_is_still_processed public async Task When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() { _nameSpaceManagerWrapper.Topics.Add("topic", new ()); - _messageReceiver.Close(); + await _messageReceiver.CloseAsync(); - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_QUIT); diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs index ddfd58553f..d8ddc932af 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Proactor/AzureServiceBusMessageProducerTestsAsync.cs @@ -270,10 +270,10 @@ public async Task When_there_is_an_error_getting_a_topic_client_the_connection_f var producer = useQueues ? _queueProducer : _producer; - producer.SendWithDelay(new Message( - new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), - new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) - ); + await producer.SendWithDelayAsync(new Message( + new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), + new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) + ); await Assert.That(_topicClient.SentMessages).HasSingleItem(); } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs index f8061dfcf2..e8e28e098e 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusConsumerTests.cs @@ -60,7 +60,7 @@ public async Task When_a_subscription_exists_and_messages_are_in_the_queue_the_m _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); @@ -86,7 +86,7 @@ public async Task When_a_subscription_does_not_exist_and_messages_are_in_the_que _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await _nameSpaceManagerWrapper.SubscriptionExistsAsync("topic", "subscription"); //A.CallTo(() => _nameSpaceManagerWrapper.f => f.CreateSubscription("topic", "subscription", _subConfig)).MustHaveHappened(); @@ -109,7 +109,7 @@ public async Task When_a_message_is_a_command_type_then_the_message_type_is_set_ _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); @@ -132,7 +132,7 @@ public async Task When_a_message_is_a_command_type_and_it_is_specified_in_funny_ _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); @@ -155,7 +155,7 @@ public async Task When_the_specified_message_type_is_unknown_then_it_should_defa _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } @@ -176,7 +176,7 @@ public async Task When_the_message_type_is_not_specified_it_should_default_to_MT _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); @@ -200,7 +200,7 @@ public async Task When_the_user_properties_on_the_azure_sb_message_is_null_it_sh _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); await Assert.That(result[0].Header.Topic).IsEqualTo("topic"); @@ -216,7 +216,7 @@ public async Task When_there_are_no_messages_then_it_returns_an_empty_array() _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result).IsEmpty(); } @@ -237,7 +237,7 @@ public async Task When_trying_to_create_a_subscription_which_was_already_created _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); } @@ -247,8 +247,8 @@ public async Task When_dispose_is_called_the_close_method_is_called() { _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", new ()); - _azureServiceBusConsumer.Receive(TimeSpan.Zero); - _azureServiceBusConsumer.Dispose(); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.Zero); + await _azureServiceBusConsumer.DisposeAsync(); await Assert.That(_messageReceiver.IsClosedOrClosing).IsTrue(); } @@ -264,7 +264,7 @@ public async Task When_requeue_is_called_and_the_delay_is_zero_the_send_method_i var message = new Message(messageHeader, new MessageBody("body")); message.Header.Bag.Add("LockToken", messageLockTokenOne); - _azureServiceBusConsumer.Requeue(message, TimeSpan.Zero); + await _azureServiceBusConsumer.RequeueAsync(message, TimeSpan.Zero); await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } @@ -281,7 +281,7 @@ public async Task When_requeue_is_called_and_the_delay_is_more_than_zero_the_sen var message = new Message(messageHeader, new MessageBody("body")); message.Header.Bag.Add("LockToken", messageLockTokenOne); - _azureServiceBusConsumer.Requeue(message, TimeSpan.FromMilliseconds(100)); + await _azureServiceBusConsumer.RequeueAsync(message, TimeSpan.FromMilliseconds(100)); await Assert.That(_fakeMessageProducer.SentMessages).HasSingleItem(); } @@ -340,8 +340,8 @@ public async Task Once_the_subscription_is_created_or_exits_it_does_not_check_if _messageReceiver.MessageQueue = brokeredMessageList; - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); //Subscription is only created once await Assert.That(_nameSpaceManagerWrapper.Topics["topic"].Count(s => s.Equals("subscription"))).IsEqualTo(1); @@ -368,8 +368,8 @@ public async Task When_MessagingEntityAlreadyExistsException_does_not_check_if_s _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); - _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); + await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo("somebody"); @@ -395,7 +395,7 @@ public async Task When_a_message_contains_a_null_body_message_is_still_processed _messageReceiver.MessageQueue = brokeredMessageList; - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Body.Value).IsEqualTo(string.Empty); } @@ -404,9 +404,9 @@ public async Task When_a_message_contains_a_null_body_message_is_still_processed public async Task When_receiving_messages_and_the_receiver_is_closing_a_MT_QUIT_message_is_sent() { _nameSpaceManagerWrapper.Topics.Add("topic", new ()); - _messageReceiver.Close(); + await _messageReceiver.CloseAsync(); - Message[] result = _azureServiceBusConsumer.Receive(TimeSpan.FromMilliseconds(400)); + Message[] result = await _azureServiceBusConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(400)); await Assert.That(result[0].Header.MessageType).IsEqualTo(MessageType.MT_QUIT); diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs index 3af1753d55..07f2973ce3 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/Reactor/AzureServiceBusMessageProducerTests.cs @@ -45,7 +45,7 @@ public async Task When_the_topic_exists_and_sending_a_message_with_no_delay_it_s _nameSpaceManagerWrapper.ResetState(); _nameSpaceManagerWrapper.Topics.Add("topic", []); - _producer.Send(new Message( + await _producer.SendAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_EVENT), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) ); @@ -70,7 +70,7 @@ public async Task When_sending_a_command_message_type_message_with_no_delay_it_s var producer = useQueues ? _queueProducer : _producer; - producer.Send(new Message( + await producer.SendAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_COMMAND), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) ); @@ -93,7 +93,7 @@ public async Task When_the_topic_does_not_exist_it_should_be_created_and_the_mes var producer = useQueues ? _queueProducer : _producer; - producer.Send(new Message( + await producer.SendAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json)))); @@ -118,7 +118,7 @@ public async Task When_a_message_is_send_and_an_exception_occurs_close_is_still_ { var producer = useQueues ? _queueProducer : _producer; - producer.Send(new Message( + await producer.SendAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), new MessageBody("Message", new ContentType(MediaTypeNames.Application.Json)))); } @@ -143,7 +143,7 @@ public async Task When_the_topic_exists_and_sending_a_message_with_a_delay_it_sh var producer = useQueues ? _queueProducer : _producer; - producer.SendWithDelay( + await producer.SendWithDelayAsync( new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_EVENT), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); @@ -169,7 +169,7 @@ public async Task When_sending_a_command_message_type_message_with_delay_it_shou var producer = useQueues ? _queueProducer : _producer; - producer.SendWithDelay(new Message( + await producer.SendWithDelayAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_COMMAND), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); @@ -192,7 +192,7 @@ public async Task When_the_topic_does_not_exist_and_sending_a_message_with_a_del var producer = useQueues ? _queueProducer : _producer; - producer.SendWithDelay(new Message( + await producer.SendWithDelayAsync(new Message( new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); @@ -224,10 +224,10 @@ public async Task Once_the_topic_is_created_it_then_does_not_check_if_it_exists_ var routingKey = new RoutingKey("topic"); - producer.SendWithDelay(new Message( + await producer.SendWithDelayAsync(new Message( new MessageHeader(Id.Random(), routingKey, MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); - producer.SendWithDelay(new Message( + await producer.SendWithDelayAsync(new Message( new MessageHeader(Id.Random(), routingKey, MessageType.MT_NONE), new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))), TimeSpan.FromSeconds(1)); @@ -272,10 +272,10 @@ public async Task When_there_is_an_error_getting_a_topic_client_the_connection_f var producer = useQueues ? _queueProducer : _producer; - producer.SendWithDelay(new Message( - new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), - new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) - ); + await producer.SendWithDelayAsync(new Message( + new MessageHeader(Id.Random(), new RoutingKey("topic"), MessageType.MT_NONE), + new MessageBody(messageBody, new ContentType(MediaTypeNames.Application.Json))) + ); await Assert.That(_topicClient.SentMessages).HasSingleItem(); } diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs index 2cc103be64..217f72d398 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_consuming_a_message_via_the_consumer.cs @@ -106,13 +106,13 @@ public async Task Setup() new AzureServiceBusChannelFactory(new AzureServiceBusConsumerFactory(_clientProvider)); _channel = channelFactory.CreateSyncChannel(_subscription); - _producerRegistry = new AzureServiceBusProducerRegistryFactory( - _clientProvider, - [ - new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) } - ] + _producerRegistry = await new AzureServiceBusProducerRegistryFactory( + _clientProvider, + [ + new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) } + ] ) - .Create(); + .CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs index fdc7dd634a..033115245a 100644 --- a/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs +++ b/tests/Paramore.Brighter.AzureServiceBus.Tests/MessagingGateway/When_posting_a_large_message_via_the_producer.cs @@ -80,14 +80,14 @@ public async Task Setup() _topicChannel = channelFactory.CreateSyncChannel(_subscription); _queueChannel = channelFactory.CreateSyncChannel(_queueSubscription); - _producerRegistry = new AzureServiceBusProducerRegistryFactory( - _clientProvider, - [ - new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) }, + _producerRegistry = await new AzureServiceBusProducerRegistryFactory( + _clientProvider, + [ + new AzureServiceBusPublication { Topic = new RoutingKey(_topicName) }, new AzureServiceBusPublication { Topic = new RoutingKey(_queueName), UseServiceBusQueue = true} - ] + ] ) - .Create(); + .CreateAsync(); } [Test] diff --git a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs index 0631914e88..feb5034a0b 100644 --- a/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs +++ b/tests/Paramore.Brighter.Base.Test/Outbox/OutboxTest.cs @@ -349,7 +349,7 @@ public virtual async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_ { // Arrange var transaction = CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var message = CreateRandomMessage(); var context = new RequestContext(); @@ -357,7 +357,7 @@ public virtual async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_ // Act Outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = Outbox.Get(message.Id, context); @@ -402,14 +402,14 @@ public virtual async Task When_Adding_A_Message_Within_Transaction_And_Rollback_ { // Arrange var transaction = CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = CreateRandomMessage(); // Act Outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = Outbox.Get(message.Id, context); // Assert diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs index 81cba2f016..121ccae4ae 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_Archiving_Old_Messages_From_The_Outbox.cs @@ -31,18 +31,18 @@ public async Task When_Archiving_All_Messages_From_The_Outbox() //arrange var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageOne, context); - _outbox.MarkDispatched(messageOne.Id, context); + await _outbox.AddAsync(messageOne, context); + await _outbox.MarkDispatchedAsync(messageOne.Id, context); var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageTwo, context); - _outbox.MarkDispatched(messageTwo.Id, context); + await _outbox.AddAsync(messageTwo, context); + await _outbox.MarkDispatchedAsync(messageTwo.Id, context); var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageThree, context); - _outbox.MarkDispatched(messageThree.Id, context); + await _outbox.AddAsync(messageThree, context); + await _outbox.MarkDispatchedAsync(messageThree.Id, context); //act await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromMinutes(15)); - _archiver.Archive(TimeSpan.FromMilliseconds(500), context); + await _archiver.ArchiveAsync(TimeSpan.FromMilliseconds(500), context); //assert await Assert.That(_outbox.EntryCount).IsEqualTo(0); await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); @@ -56,17 +56,17 @@ public async Task When_Archiving_Some_Messages_From_The_Outbox() //arrange var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageOne, context); - _outbox.MarkDispatched(messageOne.Id, context); + await _outbox.AddAsync(messageOne, context); + await _outbox.MarkDispatchedAsync(messageOne.Id, context); var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageTwo, context); - _outbox.MarkDispatched(messageTwo.Id, context); + await _outbox.AddAsync(messageTwo, context); + await _outbox.MarkDispatchedAsync(messageTwo.Id, context); var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageThree, context); + await _outbox.AddAsync(messageThree, context); //act await Assert.That(_outbox.EntryCount).IsEqualTo(3); _timeProvider.Advance(TimeSpan.FromSeconds(30)); - _archiver.Archive(TimeSpan.FromSeconds(30), context); + await _archiver.ArchiveAsync(TimeSpan.FromSeconds(30), context); //assert await Assert.That(_outbox.EntryCount).IsEqualTo(1); await Assert.That(_archiveProvider.ArchivedMessages).Contains(new KeyValuePair(messageOne.Id, messageOne)); @@ -79,14 +79,14 @@ public async Task When_Archiving_No_Messages_From_The_Outbox() { var context = new RequestContext(); var messageOne = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageOne, context); + await _outbox.AddAsync(messageOne, context); var messageTwo = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageTwo, context); + await _outbox.AddAsync(messageTwo, context); var messageThree = new Message(new MessageHeader(Guid.NewGuid().ToString(), _routingKey, MessageType.MT_COMMAND), new MessageBody("test content")); - _outbox.Add(messageThree, context); + await _outbox.AddAsync(messageThree, context); //act await Assert.That(_outbox.EntryCount).IsEqualTo(3); - _archiver.Archive(TimeSpan.FromMilliseconds(20000), context); + await _archiver.ArchiveAsync(TimeSpan.FromMilliseconds(20000), context); //assert await Assert.That(_outbox.EntryCount).IsEqualTo(3); await Assert.That(_archiveProvider.ArchivedMessages).DoesNotContain(new KeyValuePair(messageOne.Id, messageOne)); @@ -98,7 +98,7 @@ public async Task When_Archiving_No_Messages_From_The_Outbox() public async Task When_Archiving_An_Empty_The_Outbox() { var context = new RequestContext(); - _archiver.Archive(TimeSpan.FromMilliseconds(20000), context); + await _archiver.ArchiveAsync(TimeSpan.FromMilliseconds(20000), context); //assert await Assert.That(_outbox.EntryCount).IsEqualTo(0); } diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs index 9b847eb937..ba1993abf6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_unwrapping_a_large_message.cs @@ -37,10 +37,10 @@ public async Task When_unwrapping_a_large_message() var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); - writer.Write(commandAsJson); - writer.Flush(); + await writer.WriteAsync(commandAsJson); + await writer.FlushAsync(); stream.Position = 0; - var id = _luggageStore.Store(stream); + var id = await _luggageStore.StoreAsync(stream); //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; //set the headers, so that we have a claim check listed @@ -53,7 +53,7 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage await Assert.That(transformedMessage.Value).IsEqualTo(contents); - await Assert.That(_luggageStore.HasClaim(id)).IsFalse(); + await Assert.That(await _luggageStore.HasClaimAsync(id)).IsFalse(); } [After(Test)] diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs index dbfcc4f0ac..5cc66562b0 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_validating_a_luggage_store_exists.cs @@ -12,7 +12,7 @@ public async Task When_checking_store_that_exists() var pathName = $"brightertestbucket-{Guid.NewGuid()}"; //arrange var luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); - luggageStore.EnsureStoreExists(); + await luggageStore.EnsureStoreExistsAsync(); //act luggageStore = new FileSystemStorageProvider(new FileSystemOptions($"./{pathName}")); await Assert.That(luggageStore).IsNotNull(); diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs index a137fdb087..8676603d39 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/FileSystem/When_wrapping_a_large_message.cs @@ -43,7 +43,7 @@ public async Task When_wrapping_a_large_message() await Assert.That(message.Header.DataRef).IsNotNull(); _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - await Assert.That(_luggageStore.HasClaim(_id)).IsTrue(); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } [After(Test)] diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs index 8b5156c6ed..ec22c891f6 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_is_under_the_threshold.cs @@ -24,7 +24,7 @@ public ClaimCheckSmallPayloadTests() [Test] public async Task When_a_message_is_under_the_threshold() { - var luggageCheckedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); + var luggageCheckedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = luggageCheckedMessage.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); await Assert.That(hasLuggage).IsFalse(); diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs index 8ca1667642..9c571eb04a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_unwraps_a_large_payload.cs @@ -25,19 +25,19 @@ public async Task When_a_message_unwraps_a_large_payload() //arrange var stream = new MemoryStream(); var writer = new StreamWriter(stream); - writer.Write(_contents); - writer.Flush(); + await writer.WriteAsync(_contents); + await writer.FlushAsync(); stream.Position = 0; - var id = _store.Store(stream); + var id = await _store.StoreAsync(stream); var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody($"Claim Check {id}")); message.Header.DataRef = id; //act - var unwrappedMessage = _transformerAsync.Unwrap(message); + var unwrappedMessage = await _transformerAsync.UnwrapAsync(message); //assert await Assert.That(unwrappedMessage.Body.Value).IsEqualTo(_contents); //clean up await Assert.That(message.Header.DataRef).IsNull(); await Assert.That(message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _)).IsFalse(); - await Assert.That(_store.HasClaim(id)).IsFalse(); + await Assert.That(await _store.HasClaimAsync(id)).IsFalse(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs index 6c07bee288..058092f714 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_a_message_wraps_a_large_payload.cs @@ -26,12 +26,12 @@ public ClaimCheckLargePayloadTests() public async Task When_a_message_wraps_a_large_payload() { //act - var luggageCheckedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); + var luggageCheckedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //assert bool hasLuggage = !string.IsNullOrEmpty(luggageCheckedMessage.Header.DataRef); await Assert.That(hasLuggage).IsTrue(); var claimCheck = luggageCheckedMessage.Header.DataRef; - var luggage = new StreamReader(_store.Retrieve(claimCheck)).ReadToEnd(); + var luggage = await new StreamReader(await _store.RetrieveAsync(claimCheck)).ReadToEndAsync(); await Assert.That(luggage).IsEqualTo(_body); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs index 3446699f20..6245764a23 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_luggage_should_be_kept_in_the_store.cs @@ -27,15 +27,15 @@ public async Task When_luggage_should_be_kept_in_the_store() writer.WriteAsync(_contents); writer.FlushAsync(); stream.Position = 0; - var id = _store.Store(stream); + var id = await _store.StoreAsync(stream); var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow), new MessageBody($"Claim Check {id}")); message.Header.DataRef = id; message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK] = id; //act - _ = _transformer.Unwrap(message); + _ = await _transformer.UnwrapAsync(message); //assert bool hasLuggage = message.Header.Bag.TryGetValue(ClaimCheckTransformer.CLAIM_CHECK, out object _); await Assert.That(hasLuggage).IsTrue(); - await Assert.That(_store.HasClaim(id)).IsTrue(); + await Assert.That(await _store.HasClaimAsync(id)).IsTrue(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs index 9806f1d41f..5c010547d2 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_unwrapping_a_large_message.cs @@ -34,10 +34,10 @@ public async Task When_unwrapping_a_large_message() var commandAsJson = JsonSerializer.Serialize(myCommand, new JsonSerializerOptions(JsonSerializerDefaults.General)); var stream = new MemoryStream(); var writer = new StreamWriter(stream); - writer.Write(commandAsJson); - writer.Flush(); + await writer.WriteAsync(commandAsJson); + await writer.FlushAsync(); stream.Position = 0; - var id = _inMemoryStorageProvider.Store(stream); + var id = await _inMemoryStorageProvider.StoreAsync(stream); //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; //set the headers, so that we have a claim check listed @@ -49,6 +49,6 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage await Assert.That(transformedMessage.Value).IsEqualTo(contents); - await Assert.That(_inMemoryStorageProvider.HasClaim(id)).IsFalse(); + await Assert.That(await _inMemoryStorageProvider.HasClaimAsync(id)).IsFalse(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs index 949f013ab9..925e89eb2b 100644 --- a/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Claims/InMemory/When_wrapping_a_large_message.cs @@ -35,6 +35,6 @@ public async Task When_wrapping_a_large_message() var id = message.Header.DataRef; await Assert.That(string.IsNullOrEmpty(id)).IsFalse(); await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {id}"); - await Assert.That(_inMemoryStorageProvider.HasClaim(id)).IsTrue(); + await Assert.That(await _inMemoryStorageProvider.HasClaimAsync(id)).IsTrue(); } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs b/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs index fd69633829..e0de6e5aae 100644 --- a/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/CloudEvents/CloudEventJsonMessageMapperTests.cs @@ -22,7 +22,7 @@ public async Task When_mapping_command_to_message() { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - var message = mapper.MapToMessage(command, publication); + var message = await mapper.MapToMessageAsync(command, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -74,7 +74,7 @@ public async Task When_mapping_event_to_message() { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - var message = mapper.MapToMessage(@event, publication); + var message = await mapper.MapToMessageAsync(@event, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); @@ -161,7 +161,7 @@ public async Task When_mapping_command_to_message_with_additional_properties() Topic = new RoutingKey(Guid.NewGuid().ToString()), CloudEventsAdditionalProperties = extraProperty }; - var message = mapper.MapToMessage(command, publication); + var message = await mapper.MapToMessageAsync(command, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -195,7 +195,7 @@ public async Task When_mapping_command_to_message_with_duplicated_additional_pro Topic = new RoutingKey(Guid.NewGuid().ToString()), CloudEventsAdditionalProperties = extraProperty }; - var message = mapper.MapToMessage(command, publication); + var message = await mapper.MapToMessageAsync(command, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType("application/cloudevents+json")); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -217,7 +217,7 @@ public async Task When_mapping_message_to_command() Value = Guid.NewGuid().ToString() }; var mapper = new CloudEventJsonMessageMapper(); - var request = mapper.MapToRequest(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(new CloudEventJsonMessageMapper.CloudEventMessage { Data = command })))); + var request = await mapper.MapToRequestAsync(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(new CloudEventJsonMessageMapper.CloudEventMessage { Data = command })))); await Assert.That(request).IsNotNull(); await Assert.That(request.Value).IsEqualTo(command.Value); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs index c24c6f96ec..67e3e10c0d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Clearing_The_PostBox_On_The_Command_Processor.cs @@ -65,7 +65,7 @@ public async Task When_Clearing_The_PostBox_On_The_Command_Processor() { //arrange var context = new RequestContext(); - _outbox.Add(_message, context); + await _outbox.AddAsync(_message, context); _commandProcessor.ClearOutbox(new[] { _message.Id }); //_should_send_a_message_via_the_messaging_gateway var topic = new RoutingKey(_routingKey); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs index fe76fa883c..14f618a830 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Clear/When_Implicit_Clearing_The_PostBox_On_The_Command_Processor.cs @@ -50,8 +50,8 @@ public CommandProcessorPostBoxImplicitClearTests() public async Task When_Implicit_Clearing_The_PostBox_On_The_Command_Processor() { var context = new RequestContext(); - _outbox.Add(_message, context); - _outbox.Add(_message2, context); + await _outbox.AddAsync(_message, context); + await _outbox.AddAsync(_message2, context); await _mediator.ClearOutstandingFromOutboxAsync(1, TimeSpan.Zero, true, context); var topic = new RoutingKey(Topic); for (var i = 1; i <= 10; i++) diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs index 316303ceb3..df0de47a4b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store.cs @@ -49,13 +49,13 @@ public async Task When_depositing_a_message_in_the_outbox() //message should not be posted await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsFalse(); //message should correspond to the command - var depositedPost = _fakeOutbox.Get(postedMessageId, context); + var depositedPost = await _fakeOutbox.GetAsync(postedMessageId, context); await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); //message should be marked as outstanding if not sent - var outstandingMessages = _fakeOutbox.OutstandingMessages(TimeSpan.Zero, context); + var outstandingMessages = await _fakeOutbox.OutstandingMessagesAsync(TimeSpan.Zero, context); var outstandingMessage = outstandingMessages.Single(); await Assert.That(outstandingMessage.Id).IsEqualTo(_message.Id); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs index 6ba295e8c4..673ad82511 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync.cs @@ -50,7 +50,7 @@ public async Task When_depositing_a_message_in_the_outbox_async() //message should not be posted await Assert.That(_internalBus.Stream(_routingKey).Any()).IsFalse(); //message should be in the store - var depositedPost = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message.Id); + var depositedPost = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).SingleOrDefault(msg => msg.Id == _message.Id); await Assert.That(depositedPost).IsNotNull(); //message should correspond to the command await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs index 9141debfde..79316e63ec 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk.cs @@ -74,11 +74,11 @@ public async Task When_depositing_messages_in_the_outbox_async() await Assert.That(_internalBus.Stream(new RoutingKey(_commandTopic)).Any()).IsFalse(); await Assert.That(_internalBus.Stream(new RoutingKey(_eventTopic)).Any()).IsFalse(); //message should be in the store - var depositedPost = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message.Id); + var depositedPost = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).SingleOrDefault(msg => msg.Id == _message.Id); //message should be in the store - var depositedPost2 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message2.Id); + var depositedPost2 = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).SingleOrDefault(msg => msg.Id == _message2.Id); //message should be in the store - var depositedPost3 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _message3.Id); + var depositedPost3 = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).SingleOrDefault(msg => msg.Id == _message3.Id); await Assert.That(depositedPost).IsNotNull(); //message should correspond to the command await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs index 15776b1115..fc32beb384 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_Bulk_With_Transaction.cs @@ -71,7 +71,7 @@ public async Task When_depositing_messages_in_the_outbox_with_a_transaction_asyn await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommandTwo.Id); await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myEvent.Id); //messages should be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); List messages = requests.Select(r => transaction.Get(r.Id)).ToList(); await Assert.That(messages).DoesNotContain(m => m is null); //messages should not be posted diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs index 5022d97251..fbadcbc638 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_StoreAsync_With_Transaction.cs @@ -51,7 +51,7 @@ public async Task When_depositing_a_message_in_the_outbox_with_a_transaction_asy //message should not be in the outbox await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == postedMessageId); //message should be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); var message = transaction.Get(postedMessageId); await Assert.That(message).IsNotNull(); //message should not be posted diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs index e07a8850a0..19c1cddb7e 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk.cs @@ -74,17 +74,17 @@ public async Task When_depositing_messages_in_the_outbox() await Assert.That(_bus.Stream(_commandTopic).Any()).IsFalse(); await Assert.That(_bus.Stream(_eventTopic).Any()).IsFalse(); //message should correspond to the command - var depositedPost = _outbox.Get(_message.Id, context); + var depositedPost = await _outbox.GetAsync(_message.Id, context); await Assert.That(depositedPost.Id).IsEqualTo(_message.Id); await Assert.That(depositedPost.Body.Value).IsEqualTo(_message.Body.Value); await Assert.That(depositedPost.Header.Topic).IsEqualTo(_message.Header.Topic); await Assert.That(depositedPost.Header.MessageType).IsEqualTo(_message.Header.MessageType); - var depositedPost2 = _outbox.Get(_messageTwo.Id, context); + var depositedPost2 = await _outbox.GetAsync(_messageTwo.Id, context); await Assert.That(depositedPost2.Id).IsEqualTo(_messageTwo.Id); await Assert.That(depositedPost2.Body.Value).IsEqualTo(_messageTwo.Body.Value); await Assert.That(depositedPost2.Header.Topic).IsEqualTo(_messageTwo.Header.Topic); await Assert.That(depositedPost2.Header.MessageType).IsEqualTo(_messageTwo.Header.MessageType); - var depositedPost3 = _outbox.OutstandingMessages(TimeSpan.Zero, context).SingleOrDefault(msg => msg.Id == _messageThree.Id); + var depositedPost3 = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).SingleOrDefault(msg => msg.Id == _messageThree.Id); //message should correspond to the command await Assert.That(depositedPost3).IsNotNull(); await Assert.That(depositedPost3.Id).IsEqualTo(_messageThree.Id); @@ -92,7 +92,7 @@ public async Task When_depositing_messages_in_the_outbox() await Assert.That(depositedPost3.Header.Topic).IsEqualTo(_messageThree.Header.Topic); await Assert.That(depositedPost3.Header.MessageType).IsEqualTo(_messageThree.Header.MessageType); //message should be marked as outstanding if not sent - var outstandingMessages = _outbox.OutstandingMessages(TimeSpan.Zero, context); + var outstandingMessages = await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); await Assert.That(outstandingMessages.Count()).IsEqualTo(3); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs index 59d03c72e3..329281e082 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_Bulk_With_Transaction.cs @@ -71,7 +71,7 @@ public async Task When_depositing_messages_in_the_outbox_with_a_transaction() await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myCommandTwo.Id); await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == _myEvent.Id); //messages should be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); List messages = requests.Select(r => transaction.Get(r.Id)).ToList(); await Assert.That(messages).DoesNotContain(m => m is null); //messages should not be posted diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs index f7a684d87c..0faf078b29 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Deposit/When_Depositing_A_Message_In_The_Message_Store_With_Transaction.cs @@ -50,7 +50,7 @@ public async Task When_depositing_a_message_in_the_outbox_with_a_transaction() //message should not be in the outbox await Assert.That(_spyOutbox.Messages).DoesNotContain(m => m.Message.Id == postedMessageId); //message should be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); var message = transaction.Get(postedMessageId); await Assert.That(message).IsNotNull(); //message should not be posted diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs index 0229a2abd8..4078a874f6 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Pipeline/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs @@ -43,7 +43,7 @@ public async Task WhenInsertingADefaultInboxIntoThePublishPipeline() var @event = new MyEvent(); _commandProcessor.Publish(@event); //assert we are in, and auto-context added us under our name - var boxed = _inbox.Exists(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); + var boxed = await _inbox.ExistsAsync(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); await Assert.That(boxed).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs index 5063e59b9f..bfca7bcecb 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor.cs @@ -61,7 +61,7 @@ public async Task When_Posting_A_Message_To_The_Command_Processor() }; _commandProcessor.Post(_myCommand, requestContext); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var message = _outbox.Get(_myCommand.Id, requestContext); + var message = await _outbox.GetAsync(_myCommand.Id, requestContext); await Assert.That(message).IsNotNull(); await Assert.That(message).IsEqualTo(_expectedMessage); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs index 981aea5f23..bf1d0b67b6 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider.cs @@ -1,9 +1,9 @@ #region Licence /* The MIT License (MIT) -Copyright 2015 Ian Cooper +Copyright � 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,7 +12,7 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER @@ -71,12 +71,12 @@ public async Task When_Posting_A_Message_To_The_Command_Processor_With_A_Transac var requestContext = new RequestContext(); _commandProcessor.Post(_myCommand, requestContext); //message should not be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); await Assert.That(transaction.Get(_myCommand.Id)).IsNull(); //message should have been posted await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); //message should be in the outbox - var message = _spyOutbox.Get(_myCommand.Id, requestContext); + var message = await _spyOutbox.GetAsync(_myCommand.Id, requestContext); await Assert.That(message).IsNotNull(); await Assert.That(message).IsEqualTo(_message); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs index 561305999d..3929111576 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_A_Message_To_The_Command_Processor_With_A_Transaction_Provider_Async.cs @@ -1,9 +1,9 @@ #region Licence /* The MIT License (MIT) -Copyright 2015 Ian Cooper +Copyright � 2015 Ian Cooper Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal +of this software and associated documentation files (the �Software�), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is @@ -12,7 +12,7 @@ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER @@ -71,12 +71,12 @@ public async Task When_Posting_A_Message_To_The_Command_Processor_With_A_Transac { await _commandProcessor.PostAsync(_myCommand); //message should not be in the current transaction - var transaction = _transactionProvider.GetTransaction(); + var transaction = await _transactionProvider.GetTransactionAsync(); await Assert.That(transaction.Get(_myCommand.Id)).IsNull(); //message should have been posted await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); //message should be in the outbox - var message = _spyOutbox.Get(_myCommand.Id, new RequestContext()); + var message = await _spyOutbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(message).IsNotNull(); await Assert.That(message).IsEqualTo(_message); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs index 0313c5e5a7..009878a5c1 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic.cs @@ -71,9 +71,9 @@ public async Task When_Posting_Dynamic_Messages_To_The_Command_Processor() _commandProcessor.Post(_myCommand); _commandProcessor.Post(_myOtherCommand); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var message = _outbox.Get(_myCommand.Id, new RequestContext()); + var message = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(message).IsNotNull(); - var otherMessage = _outbox.Get(_myOtherCommand.Id, new RequestContext()); + var otherMessage = await _outbox.GetAsync(_myOtherCommand.Id, new RequestContext()); await Assert.That(otherMessage).IsNotNull(); await Assert.That(message).IsEqualTo(_message); await Assert.That(otherMessage).IsEqualTo(_messageTwo); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs index 246c3fd680..eeb01b7cae 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Multiple_Message_Types_To_A_Single_Topic_Async.cs @@ -72,9 +72,9 @@ public async Task When_Posting_Dynamic_Messages_To_The_Command_Processor() await _commandProcessor.PostAsync(_myCommand); await _commandProcessor.PostAsync(_myOtherCommand); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var message = _outbox.Get(_myCommand.Id, new RequestContext()); + var message = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(message).IsNotNull(); - var otherMessage = _outbox.Get(_myOtherCommand.Id, new RequestContext()); + var otherMessage = await _outbox.GetAsync(_myOtherCommand.Id, new RequestContext()); await Assert.That(otherMessage).IsNotNull(); await Assert.That(message).IsEqualTo(_message); await Assert.That(otherMessage).IsEqualTo(_messageTwo); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs index 4c54ee4139..3071e758ce 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_Via_A_Control_Bus_Sender.cs @@ -47,7 +47,7 @@ public async Task When_Posting_Via_A_Control_Bus_Sender() _controlBusSender.Post(_myCommand); _timeProvider.Advance(TimeSpan.FromSeconds(30)); //_should_store_the_message_in_the_sent_command_message_repository - var message = _outbox.DispatchedMessages(TimeSpan.FromSeconds(10), new RequestContext(), 1).SingleOrDefault(); + var message = (await _outbox.DispatchedMessagesAsync(TimeSpan.FromSeconds(10), new RequestContext(), 1)).SingleOrDefault(); await Assert.That(message).IsNotNull(); //_should_convert_the_command_into_a_message await Assert.That(message).IsEqualTo(_message); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs index 937889e568..60e761b7e6 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Custom_Policy.cs @@ -50,7 +50,7 @@ public async Task When_Posting_With_A_Custom_Policy() var requestContext = new RequestContext(); _commandProcessor.Post(_myCommand, requestContext); await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); - var message = _outbox.Get(_myCommand.Id, requestContext); + var message = await _outbox.GetAsync(_myCommand.Id, requestContext); await Assert.That(message).IsNotNull(); await Assert.That(message).IsEqualTo(_message); await Assert.That(requestContext.ResiliencePipeline).IsEqualTo(_resiliencePipeline); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs index a4d231d474..52ad1490d1 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_A_Default_Policy.cs @@ -44,7 +44,7 @@ public async Task When_Posting_With_A_Default_Policy() { _commandProcessor.Post(_myCommand); await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey)).Any()).IsTrue(); - var message = _outbox.Get(_myCommand.Id, new RequestContext()); + var message = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(message).IsNotNull(); await Assert.That(message).IsEqualTo(_message); } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs index 032cb5e824..e803d99882 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Post/When_Posting_With_An_In_Memory_Message_Store.cs @@ -44,9 +44,9 @@ public async Task When_Posting_With_An_In_Memory_Outbox() { var context = new RequestContext(); _commandProcessor.Post(_myCommand, context); - await Assert.That(_outbox.Get(_myCommand.Id, context)).IsNotNull(); + await Assert.That(await _outbox.GetAsync(_myCommand.Id, context)).IsNotNull(); await Assert.That(_internalBus.Stream(new RoutingKey(_routingKey))).IsNotEmpty(); - await Assert.That(_outbox.Get(_myCommand.Id, context)).IsEqualTo(_message); + await Assert.That(await _outbox.GetAsync(_myCommand.Id, context)).IsEqualTo(_message); } } } \ No newline at end of file diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs index 4feb51df11..af50d36f1d 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Publish/When_Inserting_A_Default_Inbox_Into_The_Publish_Pipeline.cs @@ -43,7 +43,7 @@ public async Task WhenInsertingADefaultInboxIntoThePublishPipeline() var @event = new MyEvent(); _commandProcessor.Publish(@event); //assert we are in, and auto-context added us under our name - var boxed = _inbox.Exists(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); + var boxed = await _inbox.ExistsAsync(@event.Id, typeof(MyGlobalInboxEventHandler).FullName, null, 100); await Assert.That(boxed).IsTrue(); } } diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs index 9dc30ad278..c98a771d1b 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor.cs @@ -113,7 +113,7 @@ public async Task When_Scheduling_Post_With_At_A_Message_To_The_Command_Processo await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var actual = _outbox.Get(_myCommand.Id, new RequestContext()); + var actual = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(actual).IsNotNull(); var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); @@ -137,7 +137,7 @@ public async Task When_Scheduling_Post_With_Delay_A_Message_To_The_Command_Proce await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var actual = _outbox.Get(_myCommand.Id, new RequestContext()); + var actual = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(actual).IsNotNull(); var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); diff --git a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs index 802f096987..6256eed643 100644 --- a/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/CommandProcessors/Scheduler/When_Scheduling_A_Message_To_The_Command_Processor_Async.cs @@ -108,7 +108,7 @@ public async Task When_Scheduling_Post_With_At_A_Message_To_The_Command_Processo await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var actual = _outbox.Get(_myCommand.Id, new RequestContext()); + var actual = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(actual).IsNotNull(); var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); @@ -132,7 +132,7 @@ public async Task When_Scheduling_Post_With_Delay_A_Message_To_The_Command_Proce await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsFalse(); _timeProvider.Advance(TimeSpan.FromSeconds(10)); await Assert.That(_internalBus.Stream(new RoutingKey(Topic)).Any()).IsTrue(); - var actual = _outbox.Get(_myCommand.Id, new RequestContext()); + var actual = await _outbox.GetAsync(_myCommand.Id, new RequestContext()); await Assert.That(actual).IsNotNull(); var expected = new Message(new MessageHeader(_myCommand.Id, new RoutingKey(Topic), MessageType.MT_COMMAND), new MessageBody(JsonSerializer.Serialize(_myCommand, JsonSerialisationOptions.Options))); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs index d5e584db74..3ee05a7e63 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_compresses_a_large_payload.cs @@ -24,7 +24,7 @@ public CompressLargePayloadTests() public async Task When_a_message_gzip_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.GZip, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); @@ -39,7 +39,7 @@ public async Task When_a_message_gzip_compresses_a_large_payload() public async Task When_a_message_zlib_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Zlib, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); @@ -55,7 +55,7 @@ public async Task When_a_message_zlib_compresses_a_large_payload() public async Task When_a_message_brotli_compresses_a_large_payload() { _transformer.InitializeWrapFromAttributeParams(CompressionMethod.Brotli, CompressionLevel.Optimal, 5); - var compressedMessage = _transformer.Wrap(_message, new Publication { Topic = new RoutingKey(_topic) }); + var compressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = new RoutingKey(_topic) }); //look for gzip in the bytes await Assert.That(compressedMessage.Body.Bytes).IsNotNull(); await Assert.That(compressedMessage.Body.Bytes.Length >= 2).IsTrue(); diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs index 1e10cdb582..e34a6d5fe9 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_not_compressed.cs @@ -16,7 +16,7 @@ public async Task When_a_message_is_not_gzip_compressed() var body = new MessageBody(smallContent, contentType); var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } @@ -32,7 +32,7 @@ public async Task When_a_message_is_not_zlib_compressed() var body = new MessageBody(smallContent, contentType); var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } @@ -48,7 +48,7 @@ public async Task When_a_message_is_not_brotli_compressed() var body = new MessageBody(smallContent, contentType); var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: contentType), body); //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(smallContent); } diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs index c6f95a4721..22dc021151 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_a_message_is_under_the_threshold.cs @@ -22,7 +22,7 @@ public SmallPayloadNotCompressedTests() [Test] public async Task When_a_message_is_under_the_threshold() { - var uncompressedMessage = _transformer.Wrap(_message, new Publication { Topic = _topic }); + var uncompressedMessage = await _transformer.WrapAsync(_message, new Publication { Topic = _topic }); //look for gzip in the bytes await Assert.That(uncompressedMessage.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); await Assert.That(uncompressedMessage.Body.Value).IsEqualTo(_message.Body.Value); diff --git a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs index f805bff439..d6454da204 100644 --- a/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/Compression/When_decompressing_a_large_payload_in_a_message.cs @@ -27,7 +27,7 @@ public async Task When_decompressing_a_large_gzip_payload_in_a_message() var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(largeContent); await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); @@ -51,7 +51,7 @@ public async Task When_decompressing_a_large_zlib_payload_in_a_message() var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(largeContent); await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); @@ -75,7 +75,7 @@ public async Task When_decompressing_a_large_brotli_payload_in_a_message() var message = new Message(new MessageHeader(Guid.NewGuid().ToString(), new RoutingKey("test_topic"), MessageType.MT_EVENT, timeStamp: DateTime.UtcNow, contentType: new ContentType(mimeType)), body); message.Header.Bag[CompressPayloadTransformer.ORIGINAL_CONTENTTYPE_HEADER] = MediaTypeNames.Application.Json; //act - var msg = transformer.Unwrap(message); + var msg = await transformer.UnwrapAsync(message); //assert await Assert.That(msg.Body.Value).IsEqualTo(largeContent); await Assert.That(msg.Body.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json) { CharSet = CharacterEncoding.UTF8.FromCharacterEncoding() }); diff --git a/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs b/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs index d0de128913..4b241ffe5b 100644 --- a/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs +++ b/tests/Paramore.Brighter.Core.Tests/JsonMapper/JsonMessageMapperTests.cs @@ -21,7 +21,7 @@ public async Task When_mapping_command_to_message() { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - var message = mapper.MapToMessage(command, publication); + var message = await mapper.MapToMessageAsync(command, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); @@ -69,7 +69,7 @@ public async Task When_mapping_event_to_message() { Topic = new RoutingKey(Guid.NewGuid().ToString()) }; - var message = mapper.MapToMessage(@event, publication); + var message = await mapper.MapToMessageAsync(@event, publication); await Assert.That(message).IsNotNull(); await Assert.That(message.Header.ContentType).IsEqualTo(new ContentType(MediaTypeNames.Application.Json)); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); @@ -143,7 +143,7 @@ public async Task When_mapping_message_to_command() Value = Guid.NewGuid().ToString() }; var mapper = new JsonMessageMapper(); - var request = mapper.MapToRequest(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(command)))); + var request = await mapper.MapToRequestAsync(new Message(new MessageHeader(), new MessageBody(JsonSerializer.Serialize(command)))); await Assert.That(request).IsNotNull(); await Assert.That(request.Value).IsEqualTo(command.Value); } diff --git a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs index a58e9817b9..521297c673 100644 --- a/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs +++ b/tests/Paramore.Brighter.Core.Tests/Logging/When_A_Request_Logger_Is_In_The_Pipeline.cs @@ -35,4 +35,4 @@ public async Task When_A_Request_Logger_Is_In_The_Pipeline() await Assert.That(logEvents.First(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call")).Properties["1"].ToString()).IsEqualTo($"\"{typeof(MyCommand)}\""); } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs index 6770d7531b..aee705c5bf 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_Constructing_A_Combined_Producer_Registry.cs @@ -25,7 +25,7 @@ public async Task When_constructing_a_combined_producer_registry() var firstProducerFactory = new InMemoryMessageProducerFactory(bus, firstProducers, InstrumentationOptions.All); var secondProducerFactory = new InMemoryMessageProducerFactory(bus, secondProducers, InstrumentationOptions.All); var combinedRegistryFactory = new CombinedProducerRegistryFactory(firstProducerFactory, secondProducerFactory); - var producerRegistry = combinedRegistryFactory.Create(); + var producerRegistry = await combinedRegistryFactory.CreateAsync(); // Producer registry should contain producers for both topics var producers = producerRegistry.Producers.ToList(); await Assert.That(producers.Count).IsEqualTo(2); diff --git a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs index 4207a122c2..1bd43fa427 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessagingGateway/When_constructing_a_channel_with_combined_factory.cs @@ -30,10 +30,10 @@ public async Task When_constructing_a_async_channel_with_combined_factory() var sub2 = new MockSubscription(typeof(MockChannel2Factory), dataType: typeof(string), messagePumpType: MessagePumpType.Proactor); var factory2 = new MockChannel2Factory(sub2); var channelFactory = new CombinedChannelFactory([factory1, factory2]); - var channel = channelFactory.CreateAsyncChannel(sub1); + var channel = await channelFactory.CreateAsyncChannelAsync(sub1); await Assert.That(channel).IsNotNull(); await Assert.That(channel).IsEqualTo(factory1.ChannelAsync); - channel = channelFactory.CreateAsyncChannel(sub2); + channel = await channelFactory.CreateAsyncChannelAsync(sub2); await Assert.That(channel).IsNotNull(); await Assert.That(channel).IsEqualTo(factory2.ChannelAsync); } diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs index 7df8905481..7b84854141 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/Archive/When_archiving_from_the_outbox.cs @@ -77,7 +77,7 @@ public async Task When_archiving_from_the_outbox(InstrumentationOptions instrume var dispatchedSince = TimeSpan.FromSeconds(100); var archiveProvider = new InMemoryArchiveProvider(); var archiver = new OutboxArchiver(_outbox, archiveProvider, tracer: _tracer, instrumentationOptions: instrumentationOptions); - archiver.Archive(dispatchedSince, context); + await archiver.ArchiveAsync(dispatchedSince, context); //should be no messages in the outbox await Assert.That(_outbox.EntryCount).IsEqualTo(0); parentActivity?.Stop(); diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs index 3074c1df65..2835ebe552 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported.cs @@ -85,7 +85,7 @@ public async Task When_Depositing_A_Request_A_Span_Is_Exported() await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapper))).IsTrue(); await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "sync")).IsTrue(); //depositing a message should be an event - var message = _outbox.OutstandingMessages(TimeSpan.Zero, context).Single(); + var message = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).Single(); var depositEvent = events.Single(e => e.Name == BoxDbOperation.Add.ToSpanName()); await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)).IsTrue(); await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "sync")).IsTrue(); diff --git a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs index 78ef9d23a9..13b21dad6a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Observability/CommandProcessor/Deposit/When_Depositing_A_Request_A_Span_Is_Exported_Async.cs @@ -86,7 +86,7 @@ public async Task When_Depositing_A_Request_A_Span_Is_Exported() await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperName && (string)a.Value == nameof(MyEventMessageMapperAsync))).IsTrue(); await Assert.That(mapperEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.MapperType && (string)a.Value == "async")).IsTrue(); //depositing a message should be an event - var message = _outbox.OutstandingMessages(TimeSpan.Zero, context).Single(); + var message = (await _outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).Single(); var depositEvent = events.Single(e => e.Name == BoxDbOperation.Add.ToSpanName()); await Assert.That(depositEvent.Tags.Any(a => a is { Value: not null, Key: BrighterSemanticConventions.OutboxSharedTransaction } && (bool)a.Value == false)).IsTrue(); await Assert.That(depositEvent.Tags.Any(a => a.Key == BrighterSemanticConventions.OutboxType && (string)a.Value == "async")).IsTrue(); diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs index 0314bffc77..c778de3a8d 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_describe_pipelines_called_standalone_should_run_at_startup.cs @@ -100,4 +100,4 @@ public void Log(LogLevel logLevel, EventId eventId, TState state, Except public IDisposable? BeginScope(TState state) where TState : notnull => null; } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs index cb556b8424..2d598d1f7a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_diagnostic_writer_describes_should_log_publication_detail_at_debug.cs @@ -60,4 +60,4 @@ public async Task When_diagnostic_writer_describes_should_log_publication_detail // Transform step from the mapper's [MyDescribableWrapWith(0)] await Assert.That(debugMessages).Contains(m => m.Contains("MyDescribableWrapWith")); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs index fd3852c138..7d7d56d43e 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_transform_builder_describes_should_return_mapper_and_transforms.cs @@ -103,4 +103,4 @@ public async Task When_describing_vanilla_mapper_should_have_empty_transforms() await Assert.That(description.WrapTransforms).IsEmpty(); await Assert.That(description.UnwrapTransforms).IsEmpty(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs index 411c398966..99e680d040 100644 --- a/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs +++ b/tests/Paramore.Brighter.Core.Tests/Validation/When_validator_resolved_from_di_should_validate_through_full_path.cs @@ -46,4 +46,4 @@ public async Task When_validator_resolved_from_di_should_validate_without_config // Assert — validation completes without ConfigurationException; result is valid await Assert.That(result.IsValid).IsTrue(); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index ceab9ea574..c7b3549dd6 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index b7e3e7dd4c..b013d23211 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index f1e4c34761..634252596f 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 518b943659..9bd62470a4 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 33e841e3db..f62a2720c7 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -75,10 +75,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); for(var i = 0; i < MessageCount; i++) { @@ -94,8 +94,8 @@ public async Task When_a_message_consumer_reads_multiple_messages() [After(Test)] public async Task Cleanup() { - _channelFactory.DeleteSubscription(_pubSubSubscription); - _channelFactory.DeleteTopic(_pubSubSubscription); + await _channelFactory.DeleteSubscriptionAsync(_pubSubSubscription); + await _channelFactory.DeleteTopicAsync(_pubSubSubscription); await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index be2fd34f78..5080d06478 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -65,7 +65,7 @@ public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); Thread.Sleep(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs index 6a7e511336..e9b330a48b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Pull/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -71,7 +71,7 @@ public MessageProducerDlqTestsAsync() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); for (var i = 0; i <= MaxDeliveryAttempts; i++) { var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs index 94b5ff7154..3c4627cbc5 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_a_message_consumer_reads_multiple_messages.cs @@ -75,10 +75,10 @@ public async Task When_a_message_consumer_reads_multiple_messages() ); //send MESSAGE_COUNT messages - _messageProducer.Send(messageOne); - _messageProducer.Send(messageTwo); - _messageProducer.Send(messageThree); - _messageProducer.Send(messageFour); + await _messageProducer.SendAsync(messageOne); + await _messageProducer.SendAsync(messageTwo); + await _messageProducer.SendAsync(messageThree); + await _messageProducer.SendAsync(messageFour); for(var i = 0; i < MessageCount; i++) { @@ -94,8 +94,8 @@ public async Task When_a_message_consumer_reads_multiple_messages() [After(Test)] public async Task Cleanup() { - _channelFactory.DeleteSubscription(_pubSubSubscription); - _channelFactory.DeleteTopic(_pubSubSubscription); + await _channelFactory.DeleteSubscriptionAsync(_pubSubSubscription); + await _channelFactory.DeleteTopicAsync(_pubSubSubscription); await _messageProducer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 84b9e63250..24fb766c40 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -65,7 +65,7 @@ public async Task When_posting_a_message_via_the_producer() { // arrange _message.Header.Subject = "test subject"; - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); Thread.Sleep(1000); diff --git a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs index a7a917ff47..75b82ffb3c 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/MessagingGateway/Stream/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -71,7 +71,7 @@ public MessageProducerDlqTestsAsync() [Test] public async Task When_requeueing_redrives_to_the_queue() { - _sender.Send(_message); + await _sender.SendAsync(_message); for (var i = 0; i <= MaxDeliveryAttempts; i++) { var receivedMessage = _channel.Receive(TimeSpan.FromMilliseconds(5000)); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/FirestoreOutboxProvider.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/FirestoreOutboxProvider.cs index d55a5b3db0..593a4c4cba 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/FirestoreOutboxProvider.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/FirestoreOutboxProvider.cs @@ -59,7 +59,7 @@ public void DeleteStore(IEnumerable messages) public async Task DeleteStoreAsync(IEnumerable messages) { var config = Configuration.CreateOutbox(); - var firestore = new FirestoreConnectionProvider(config).GetFirestoreClient(); + var firestore = await new FirestoreConnectionProvider(config).GetFirestoreClientAsync(); foreach (var message in messages) { diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 4c5a4ee359..6d07ada22c 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 84135c6b9c..7c4c226c31 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/Firestore/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 5343234ba7..256078d07b 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -55,7 +55,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -64,7 +64,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 83d9044c35..bdfb69a7b2 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerBinary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -55,7 +55,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -64,7 +64,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 38239fba30..6c60334c0e 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -55,7 +55,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -64,7 +64,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 2a50f3f82d..e438770976 100644 --- a/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Gcp.Tests/Outbox/SpannerText/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -55,7 +55,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -64,7 +64,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs index 4d6822dd06..9a7da01d60 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message.cs @@ -116,7 +116,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -141,7 +141,7 @@ public async Task When_scheduler_a_message_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -168,7 +168,7 @@ await Assert.That(scheduler Thread.Sleep(TimeSpan.FromSeconds(6)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -194,7 +194,7 @@ public async Task When_reschedule_a_message_with_a_timespan() Thread.Sleep(TimeSpan.FromSeconds(4)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } [Test] @@ -216,7 +216,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -252,7 +252,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan() Thread.Sleep(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs index 30a800a73b..3da014211b 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_message_async.cs @@ -122,7 +122,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() await Task.Delay(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -147,7 +147,7 @@ public async Task When_scheduler_a_message_with_a_timespan_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -173,7 +173,7 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() await Task.Delay(TimeSpan.FromSeconds(4)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -199,7 +199,7 @@ public async Task When_reschedule_a_message_with_a_timespan_async() await Task.Delay(TimeSpan.FromSeconds(4)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } [Test] diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs index a86a985ccc..286c6d4804 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request.cs @@ -116,7 +116,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -148,7 +148,7 @@ public async Task When_scheduler_send_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -181,7 +181,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -213,7 +213,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -245,7 +245,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } [Test] @@ -263,7 +263,7 @@ public async Task When_scheduler_post_request_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -292,7 +292,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset(RequestScheduler await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -329,7 +329,7 @@ public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerT await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -371,7 +371,7 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -406,7 +406,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs index 139f32bed9..65234d2878 100644 --- a/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Hangfire.Tests/When_scheduling_a_request_async.cs @@ -124,7 +124,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -156,7 +156,7 @@ public async Task When_scheduler_send_request_with_a_timespan_asc() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -189,7 +189,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -221,7 +221,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -300,7 +300,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSch await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -337,7 +337,7 @@ public async Task When_reschedule_send_request_with_a_timespan_async(RequestSche await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs index 4a60823985..115122436b 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_acknowledged.cs @@ -24,7 +24,7 @@ public async Task When_a_dequeud_item_lock_expires() var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); //act - var receivedMessage = consumer.Receive().Single(); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); timeProvider.Advance(TimeSpan.FromSeconds(2)); @@ -51,8 +51,8 @@ public async Task When_a_dequeued_item_is_acknowledged() var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); //act - var receivedMessage = consumer.Receive().Single(); - consumer.Acknowledge(receivedMessage); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); + await consumer.AcknowledgeAsync(receivedMessage); timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs index 25f48c8cbc..1f0adef545 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_a_dequeued_item_is_rejected.cs @@ -24,8 +24,8 @@ public async Task When_a_dequeued_item_is_rejected() var consumer = new InMemoryMessageConsumer(routingKey, bus, timeProvider, ackTimeout: TimeSpan.FromMilliseconds(1000)); //act - var receivedMessage = consumer.Receive().Single(); - consumer.Reject(receivedMessage); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); + await consumer.RejectAsync(receivedMessage); timeProvider.Advance(TimeSpan.FromSeconds(2)); //-- the message should be returned to the bus if there is no Acknowledge or Reject diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs index 81e8fb36ef..b10d0e3ca7 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_creating_an_inmemory_producer_registry.cs @@ -14,7 +14,7 @@ public async Task When_creating_an_inmemory_producer_registry() var inMemoryProducerRegistryFactory = new InMemoryProducerRegistryFactory(bus, [publication], InstrumentationOptions.All); //act - var producerRegistry = inMemoryProducerRegistryFactory.Create(); + var producerRegistry = await inMemoryProducerRegistryFactory.CreateAsync(); //assert await Assert.That(producerRegistry).IsNotNull(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs index 50d001c90f..1dbf6de28a 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_disposing_consumer_should_dispose_lazily_created_producer.cs @@ -63,8 +63,8 @@ public async Task Should_dispose_producer_when_it_was_created_during_requeue() // Put message on bus, receive it, then requeue with delay (creates producer) bus.Enqueue(message); - consumer.Receive(); - consumer.Requeue(message, TimeSpan.FromSeconds(30)); + await consumer.ReceiveAsync(); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(30)); // Act & Assert - should not throw await Assert.That(() => consumer.Dispose()).ThrowsNothing(); @@ -99,8 +99,8 @@ public async Task Should_dispose_async_producer_when_it_was_created_during_reque // Put message on bus, receive it, then requeue with delay (creates producer) bus.Enqueue(message); - consumer.Receive(); - consumer.Requeue(message, TimeSpan.FromSeconds(30)); + await consumer.ReceiveAsync(); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(30)); // Act & Assert - should not throw await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs index b2c7415955..8eba126b63 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_handler_defers_message_should_requeue_via_scheduler_after_delay.cs @@ -76,7 +76,7 @@ public InMemoryConsumerRequeueWithDelayTests() public async Task Should_not_have_message_immediately_available_after_requeue_with_delay() { // Act - handler defers the message (simulated by calling Requeue with delay) - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Assert - message should NOT be immediately available on bus (scheduler holds it) var messagesOnBus = _bus.Stream(_routingKey); @@ -87,7 +87,7 @@ public async Task Should_not_have_message_immediately_available_after_requeue_wi public async Task Should_have_message_available_after_delay_expires() { // Act - handler defers the message - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Advance time past the delay _timeProvider.Advance(_delay + TimeSpan.FromSeconds(1)); @@ -101,13 +101,13 @@ public async Task Should_have_message_available_after_delay_expires() public async Task Should_be_able_to_receive_message_again_after_delay() { // Act - handler defers the message - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Advance time past the delay _timeProvider.Advance(_delay + TimeSpan.FromSeconds(1)); // Receive the message again - var receivedMessages = _consumer.Receive(); + var receivedMessages = await _consumer.ReceiveAsync(); // Assert - should receive the same message await Assert.That(receivedMessages).HasSingleItem(); @@ -118,13 +118,13 @@ public async Task Should_be_able_to_receive_message_again_after_delay() public async Task Should_preserve_message_content_through_delayed_requeue() { // Act - handler defers the message - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Advance time past the delay _timeProvider.Advance(_delay + TimeSpan.FromSeconds(1)); // Receive the message again - var receivedMessages = _consumer.Receive(); + var receivedMessages = await _consumer.ReceiveAsync(); // Assert - message content should be preserved through the scheduler flow await Assert.That(receivedMessages).HasSingleItem(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs index 3056b6e11f..ccaba8fe66 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_no_scheduler_configured_should_throw_configuration_exception_on_delayed_requeue.cs @@ -76,7 +76,7 @@ public async Task Should_throw_configuration_exception_on_delayed_requeue() public async Task Should_succeed_when_requeue_has_no_delay() { // Act - requeue without delay should still work (no scheduler needed) - var result = _consumer.Requeue(_message); + var result = await _consumer.RequeueAsync(_message); // Assert await Assert.That(result).IsTrue(); @@ -86,7 +86,7 @@ public async Task Should_succeed_when_requeue_has_no_delay() public async Task Should_succeed_when_requeue_has_zero_delay() { // Act - requeue with zero delay should still work (no scheduler needed) - var result = _consumer.Requeue(_message, TimeSpan.Zero); + var result = await _consumer.RequeueAsync(_message, TimeSpan.Zero); // Assert await Assert.That(result).IsTrue(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs index 55e61deb0c..841910901b 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_reading_messages_via_a_consumer.cs @@ -28,8 +28,8 @@ public async Task When_reading_messages_via_a_consumer() var consumer = new InMemoryMessageConsumer(routingKey, bus, new FakeTimeProvider(), ackTimeout: TimeSpan.FromMilliseconds(1000)); //act - var receivedMessage = consumer.Receive().Single(); - consumer.Acknowledge(receivedMessage); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); + await consumer.AcknowledgeAsync(receivedMessage); //assert await Assert.That(receivedMessage).IsEqualTo(expectedMessage); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs index d3cd813a76..1001047207 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeueing_a_message_it_should_be_available_again.cs @@ -98,8 +98,8 @@ public async Task When_requeueing_a_message_it_should_be_available_again() ackTimeout: TimeSpan.FromMilliseconds(1000), scheduler: _scheduler); //act - var receivedMessage = consumer.Receive().Single(); - consumer.Requeue(receivedMessage, TimeSpan.Zero); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); + await consumer.RequeueAsync(receivedMessage, TimeSpan.Zero); //assert await Assert.That(_internalBus.Stream(_routingKey)).HasSingleItem(); @@ -121,10 +121,10 @@ public async Task When_requeueing_a_message_with_a_delay_it_should_not_be_availa ackTimeout: TimeSpan.FromMilliseconds(1000), scheduler: _scheduler); //act - var receivedMessage = consumer.Receive().Single(); + var receivedMessage = (await consumer.ReceiveAsync()).Single(); await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); - consumer.Requeue(receivedMessage, TimeSpan.FromMilliseconds(1000)); + await consumer.RequeueAsync(receivedMessage, TimeSpan.FromMilliseconds(1000)); //assert await Assert.That(_internalBus.Stream(_routingKey)).IsEmpty(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs index 61e985bf95..53d85c0abd 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_delay_should_delegate_to_producer.cs @@ -67,7 +67,7 @@ public InMemoryConsumerRequeueWithDelayProducerTests() public async Task Should_use_scheduler_when_requeuing_with_delay() { // Act - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Assert await Assert.That(_scheduler.ScheduleCalled).IsTrue(); @@ -77,7 +77,7 @@ public async Task Should_use_scheduler_when_requeuing_with_delay() public async Task Should_not_have_message_immediately_available_on_bus() { // Act - _consumer.Requeue(_message, _delay); + await _consumer.RequeueAsync(_message, _delay); // Assert - message should not be immediately available (scheduler holds it) var messagesOnBus = _bus.Stream(_routingKey); @@ -88,7 +88,7 @@ public async Task Should_not_have_message_immediately_available_on_bus() public async Task Should_remove_message_from_locked_messages() { // Act - var result = _consumer.Requeue(_message, _delay); + var result = await _consumer.RequeueAsync(_message, _delay); // Assert await Assert.That(result).IsTrue(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs index 2620b665b5..31e6e0cdc0 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Consumer/When_requeuing_with_zero_delay_should_use_direct_bus_enqueue.cs @@ -65,7 +65,7 @@ public InMemoryConsumerRequeueWithZeroDelayTests() public async Task Should_enqueue_message_directly_when_delay_is_zero() { // Act - _consumer.Requeue(_message, TimeSpan.Zero); + await _consumer.RequeueAsync(_message, TimeSpan.Zero); // Assert - message should be immediately on the bus var messagesOnBus = _bus.Stream(_routingKey); @@ -77,7 +77,7 @@ public async Task Should_enqueue_message_directly_when_delay_is_zero() public async Task Should_enqueue_message_directly_when_delay_is_null() { // Act - _consumer.Requeue(_message, null); + await _consumer.RequeueAsync(_message, null); // Assert - message should be immediately on the bus var messagesOnBus = _bus.Stream(_routingKey); @@ -89,7 +89,7 @@ public async Task Should_enqueue_message_directly_when_delay_is_null() public async Task Should_not_invoke_scheduler_when_delay_is_zero() { // Act - _consumer.Requeue(_message, TimeSpan.Zero); + await _consumer.RequeueAsync(_message, TimeSpan.Zero); // Assert await Assert.That(_scheduler.ScheduleCalled).IsFalse(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs index e3599c2ca4..74e4cb7779 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Inbox/When_storing_items_in_inbox.cs @@ -43,7 +43,7 @@ public async Task When_storing_a_seen_message_in_the_inbox() var command = new SimpleCommand(); //Act - inbox.Add(command, contextKey, null); + await inbox.AddAsync(command, contextKey, null); var storedCommand = inbox.Get(command.Id, contextKey, null); @@ -63,9 +63,9 @@ public async Task When_testing_for_a_message_in_the_inbox() var command = new SimpleCommand(); //Act - inbox.Add(command, contextKey, null); + await inbox.AddAsync(command, contextKey, null); - var exists = inbox.Exists(command.Id, contextKey, null); + var exists = await inbox.ExistsAsync(command.Id, contextKey, null); //Assert await Assert.That(exists).IsTrue(); @@ -81,7 +81,7 @@ public async Task When_testing_for_a_missing_command() var command = new SimpleCommand(); //Act - var exists = inbox.Exists(command.Id, contextKey, null); + var exists = await inbox.ExistsAsync(command.Id, contextKey, null); //Assert await Assert.That(exists).IsFalse(); @@ -98,7 +98,7 @@ public async Task When_storing_multiple_entries_retrieve_the_right_one() var commands = new SimpleCommand[] {new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand()}; foreach (var command in commands) { - inbox.Add(command, contextKey, null); + await inbox.AddAsync(command, contextKey, null); } //Act @@ -124,12 +124,12 @@ public async Task When_storing_multiple_entries_exists_should_find() var commands = new SimpleCommand[] {new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand()}; foreach (var command in commands) { - inbox.Add(command, contextKey, null); + await inbox.AddAsync(command, contextKey, null); } //Act - var firstCommandExists = inbox.Exists(commands[0].Id, contextKey, null); - var lastCommandExists = inbox.Exists(commands[4].Id, contextKey, null); + var firstCommandExists = await inbox.ExistsAsync(commands[0].Id, contextKey, null); + var lastCommandExists = await inbox.ExistsAsync(commands[4].Id, contextKey, null); //Assert await Assert.That(firstCommandExists).IsTrue(); @@ -147,11 +147,11 @@ public async Task When_storing_many_but_not_requested_exists_should_not_find() var commands = new SimpleCommand[] {new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand(), new SimpleCommand()}; foreach (var command in commands) { - inbox.Add(command, contextKey, null); + await inbox.AddAsync(command, contextKey, null); } //Act - var firstCommandExists = inbox.Exists(Guid.NewGuid().ToString(), contextKey, null); + var firstCommandExists = await inbox.ExistsAsync(Guid.NewGuid().ToString(), contextKey, null); //Assert await Assert.That(firstCommandExists).IsFalse(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs index e53f1b3d26..d5d9de7ee8 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_Retrieving_Messages_based_on_Age.cs @@ -19,23 +19,23 @@ public async Task When_outstanding_in_outbox_they_are_retrieved_correctly() var outbox = new InMemoryOutbox(timeProvider) { Tracer = new BrighterTracer(timeProvider) }; var context = new RequestContext(); - outbox.Add(new MessageTestDataBuilder(), context); - outbox.Add(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); timeProvider.Advance(TimeSpan.FromSeconds(5)); - outbox.Add(new MessageTestDataBuilder(), context); - outbox.Add(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); - var messagesToDispatch = outbox.OutstandingMessages(TimeSpan.FromMilliseconds(2000), context); - var allMessages = outbox.OutstandingMessages(TimeSpan.Zero, context).ToArray(); + var messagesToDispatch = await outbox.OutstandingMessagesAsync(TimeSpan.FromMilliseconds(2000), context); + var allMessages = (await outbox.OutstandingMessagesAsync(TimeSpan.Zero, context)).ToArray(); foreach (var message in allMessages) { - outbox.MarkDispatched(message.Id, context); + await outbox.MarkDispatchedAsync(message.Id, context); } - var messagesAfterDispatch = outbox.OutstandingMessages(TimeSpan.Zero, context); + var messagesAfterDispatch = await outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); await Assert.That(messagesToDispatch.Count()).IsEqualTo(2); await Assert.That(allMessages.Length).IsEqualTo(4); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs index ce3903f9c6..492a9fc899 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_controlling_cache_size.cs @@ -25,12 +25,12 @@ public async Task When_max_size_is_exceeded_shrink() var context = new RequestContext(); for(int i =1; i <= limit; i++) - outbox.Add(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); //Act await Assert.That(outbox.EntryCount).IsEqualTo(5); - outbox.Add(new MessageTestDataBuilder(), context); + await outbox.AddAsync(new MessageTestDataBuilder(), context); //Poll for compaction to complete - can be slow in CI environments int retries = 0; diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs index 226075f37d..35684ab1ab 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_expiring_message_in_outbox.cs @@ -28,7 +28,7 @@ public async Task When_expiring_a_cache_entry_no_longer_there() //Act - outbox.Add(messageToAdd, new RequestContext()); + await outbox.AddAsync(messageToAdd, new RequestContext()); timeProvider.Advance(TimeSpan.FromMilliseconds(500)); //give the entry to time to expire diff --git a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs index b8c93efab3..ab2d225560 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Outbox/When_storing_message_in_outbox.cs @@ -25,9 +25,9 @@ public async Task When_reading_from_outbox() //Act var context = new RequestContext(); - outbox.Add(messageToAdd, context); + await outbox.AddAsync(messageToAdd, context); - var retrievedMessage = outbox.Get(messageId, context); + var retrievedMessage = await outbox.GetAsync(messageId, context); //Assert await Assert.That(retrievedMessage).IsNotNull(); @@ -52,13 +52,13 @@ public async Task When_marking_dispatched_in_outbox() //Act var context = new RequestContext(); - outbox.Add(messageToAdd, context); + await outbox.AddAsync(messageToAdd, context); var dispatchedAt = _timeProvider.GetUtcNow(); - outbox.MarkDispatched(messageId, context, dispatchedAt); + await outbox.MarkDispatchedAsync(messageId, context, dispatchedAt); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - var dispatchedMessages = outbox.DispatchedMessages(TimeSpan.FromSeconds(5), context); + var dispatchedMessages = await outbox.DispatchedMessagesAsync(TimeSpan.FromSeconds(5), context); //Assert IEnumerable collection = dispatchedMessages as Message[] ?? dispatchedMessages.ToArray(); @@ -81,11 +81,11 @@ public async Task When_looking_for_undispatched_messages_in_outbox() //Act var context = new RequestContext(); - outbox.Add(messageToAdd, context); + await outbox.AddAsync(messageToAdd, context); _timeProvider.Advance(TimeSpan.FromMilliseconds(500)); - var outstandingMessages = outbox.OutstandingMessages(TimeSpan.Zero, context); + var outstandingMessages = await outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); //Assert IEnumerable collection = outstandingMessages as Message[] ?? outstandingMessages.ToArray(); @@ -105,11 +105,11 @@ public async Task When_there_are_multiple_items_retrieve_by_id() for(int i =0; i <= 4; i++) { RequestContext requestContext = context; - outbox.Add(new MessageTestDataBuilder().WithId(messageIds[i]), requestContext); + await outbox.AddAsync(new MessageTestDataBuilder().WithId(messageIds[i]), requestContext); } //Act - var message = outbox.Get(messageIds[2], context); + var message = await outbox.GetAsync(messageIds[2], context); //Assert await Assert.That(message.Id).IsEqualTo(messageIds[2]); @@ -126,18 +126,18 @@ public async Task When_there_are_multiple_items_and_some_are_dispatched() for(int i =0; i <= 4; i++) { RequestContext requestContext = context; - outbox.Add(new MessageTestDataBuilder().WithId(messageIds[i]), requestContext); + await outbox.AddAsync(new MessageTestDataBuilder().WithId(messageIds[i]), requestContext); } //Act var now = _timeProvider.GetUtcNow(); - outbox.MarkDispatched(messageIds[0], context, now); - outbox.MarkDispatched(messageIds[4], context, now); + await outbox.MarkDispatchedAsync(messageIds[0], context, now); + await outbox.MarkDispatchedAsync(messageIds[4], context, now); _timeProvider.Advance(TimeSpan.FromSeconds(10)); - var sentMessages = outbox.DispatchedMessages(TimeSpan.FromSeconds(5), context); - var outstandingMessages = outbox.OutstandingMessages(TimeSpan.Zero, context); + var sentMessages = await outbox.DispatchedMessagesAsync(TimeSpan.FromSeconds(5), context); + var outstandingMessages = await outbox.OutstandingMessagesAsync(TimeSpan.Zero, context); //Assert var messages = sentMessages as Message[] ?? sentMessages.ToArray(); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs index 516279e396..8d460998ec 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Producer/When_adding_messages_to_the_producer.cs @@ -17,7 +17,7 @@ public async Task When_adding_messages_to_the_producer() var producer = new InMemoryMessageProducer(bus, instrumentationOptions:InstrumentationOptions.All); // act - producer.Send(message); + await producer.SendAsync(message); // assert var messages = bus.Stream(new RoutingKey(topic)); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs index 3b80b972a6..2b3640c230 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message.cs @@ -109,7 +109,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(message.Id, new RequestContext()); + var actual = await _outbox.GetAsync(message.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(message.Body); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -145,7 +145,7 @@ public async Task When_scheduler_a_message_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(message.Body); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -185,7 +185,7 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(message.Body); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -225,7 +225,7 @@ public async Task When_reschedule_a_message_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsNotEqualTo(expected.Body); await Assert.That(actual.Id).IsNotEqualTo(expected.Id); @@ -253,7 +253,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset() var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEqualTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -281,7 +281,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan() _timeProvider.Advance(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs index b299d4bbe7..5abd530e5b 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_message_async.cs @@ -118,7 +118,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(message.Id, new RequestContext()); + var actual = await _outbox.GetAsync(message.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(message.Body); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -155,7 +155,7 @@ public async Task When_scheduler_a_message_with_a_timespan_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(message.Body); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -195,7 +195,7 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body.Value).IsEquivalentTo(message.Body.Value); await Assert.That(actual.Id).IsEqualTo(message.Id); @@ -234,7 +234,7 @@ public async Task When_reschedule_a_message_with_a_timespan_async() _timeProvider.Advance(TimeSpan.FromHours(2)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } [Test] @@ -256,7 +256,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset_async() _timeProvider.Advance(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -292,7 +292,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan_async() _timeProvider.Advance(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs index 9b8cdd1c43..13cebeb359 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request.cs @@ -105,7 +105,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -137,7 +137,7 @@ public async Task When_scheduler_send_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -170,7 +170,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -202,7 +202,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -232,7 +232,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset() _timeProvider.Advance(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -252,7 +252,7 @@ public async Task When_scheduler_post_request_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -281,7 +281,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset(RequestScheduler await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -318,7 +318,7 @@ public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerT await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -360,7 +360,7 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -395,7 +395,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs index e3d395c0ec..2869ebb583 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Scheduler/When_scheduling_a_request_async.cs @@ -210,7 +210,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -240,7 +240,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() _timeProvider.Advance(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -260,7 +260,7 @@ public async Task When_scheduler_post_request_with_a_timespan_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion diff --git a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs index 491f2086f1..24037de3a3 100644 --- a/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs +++ b/tests/Paramore.Brighter.InMemory.Tests/Sweeper/When_sweeping_the_outbox.cs @@ -233,7 +233,7 @@ public async Task When_too_new_to_sweep_leaves_them() //Assert await Assert.That(internalBus.Stream(routingKey)).HasSingleItem(); - await Assert.That(outbox.OutstandingMessages(TimeSpan.Zero, new RequestContext()).Count()).IsEqualTo(3); + await Assert.That((await outbox.OutstandingMessagesAsync(TimeSpan.Zero, new RequestContext())).Count()).IsEqualTo(3); } [Test] diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs index ccb757d18c..35229a26aa 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_offsets_awaiting_next_acknowledge_sweep_them_async.cs @@ -149,7 +149,7 @@ async Task ReadMessageAsync() public async Task Cleanup() { _producerRegistry?.Dispose(); - _consumer.Dispose(); + await _consumer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 2109c1d523..25a4382572 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -198,7 +198,11 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume public async ValueTask DisposeAsync() { - _producer?.Dispose(); + if(_producer != null) + { + await _producer.DisposeAsync(); + } + await Task.CompletedTask; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs index 138185cadc..0732a8533a 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log_async.cs @@ -168,7 +168,11 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume public async ValueTask DisposeAsync() { - _producer?.Dispose(); + if(_producer != null) + { + await _producer.DisposeAsync(); + } + await Task.CompletedTask; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs index 8b3a3309fc..e991de03f6 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq_async.cs @@ -200,7 +200,11 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume public async ValueTask DisposeAsync() { - _producer?.Dispose(); + if(_producer != null) + { + await _producer.DisposeAsync(); + } + await Task.CompletedTask; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs index 05b696195b..a5464453b8 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel_async.cs @@ -199,7 +199,11 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume public async ValueTask DisposeAsync() { - _producer?.Dispose(); + if(_producer != null) + { + await _producer.DisposeAsync(); + } + await Task.CompletedTask; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs index 4e2f385d6f..5df2320497 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq_async.cs @@ -199,7 +199,11 @@ private async Task ConsumeMessageAsync(IAmAMessageConsumerAsync consume public async ValueTask DisposeAsync() { - _producer?.Dispose(); + if(_producer != null) + { + await _producer.DisposeAsync(); + } + await Task.CompletedTask; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index 3c82d49814..3b0e433605 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Proactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -176,7 +176,7 @@ private async Task ReadMessageAsync() public async Task Cleanup() { _producerRegistry?.Dispose(); - _consumer.Dispose(); + await _consumer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs index 2f2c97a409..a4b9219357 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_committing_offsets_during_revoke_should_not_race.cs @@ -85,7 +85,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { - consumerA.Acknowledge(msg); + await consumerA.AcknowledgeAsync(msg); } } @@ -105,7 +105,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac if (msg.Header.MessageType != MessageType.MT_NONE) { //each acknowledge fires a background commit (batch size = 1) - consumerA.Acknowledge(msg); + await consumerA.AcknowledgeAsync(msg); } } } @@ -125,7 +125,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac //consumer B polls to join the group and trigger rebalance try { - _ = consumerB.Receive(TimeSpan.FromMilliseconds(5000)); + _ = await consumerB.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); } catch (ChannelFailureException) { @@ -138,7 +138,7 @@ public async Task When_committing_offsets_during_revoke_should_not_race_with_bac await Assert.That(caughtException).IsNull(); //consumer A should still be functional after the rebalance - _ = consumerA.Receive(TimeSpan.FromMilliseconds(2000)); + _ = await consumerA.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); Console.WriteLine("Test completed - no race condition errors"); } @@ -175,7 +175,7 @@ private async Task ReadMessage(KafkaMessageConsumer consumer) try { maxTries++; - messages = consumer.Receive(TimeSpan.FromMilliseconds(1000)); + messages = await consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) { diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs index a8381b4fc7..699f9c6fd2 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_creating_dlq_producer_with_make_channels_create_should_create_topic.cs @@ -80,7 +80,7 @@ public async Task When_creating_dlq_producer_with_make_channels_create_should_cr new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for make channels") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - create consumer with OnMissingChannel.Create and reject a message diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs index 75696699ef..01be50ec8b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_kafka_consumer_requeues_with_delay_should_use_scheduler.cs @@ -98,7 +98,7 @@ public async Task When_requeuing_with_delay_should_use_scheduler() await Assert.That(received.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); // Act - requeue with non-zero delay (should use scheduler via producer) - _consumer.Requeue(received, TimeSpan.FromSeconds(5)); + await _consumer.RequeueAsync(received, TimeSpan.FromSeconds(5)); // Assert - scheduler should have been called (proves producer has scheduler configured) await Assert.That(_scheduler.ScheduleCalled).IsTrue(); @@ -114,11 +114,11 @@ private async Task GetMessage() try { maxTries++; - messages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); + messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); break; } } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs index 1b94ecf824..b8490d798b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_offsets_awaiting_next_acknowledge_sweep_them.cs @@ -118,11 +118,11 @@ async Task ReadMessageAsync() try { maxTries++; - messages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); + messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return messages[0]; } diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs index aa5d5372e3..cb63f96729 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_should_include_metadata.cs @@ -80,7 +80,7 @@ public async Task When_rejecting_message_should_include_metadata() new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for metadata verification") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - consume and reject the message with a description diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 4e729d9755..e57922bbd4 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -80,7 +80,7 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for DLQ") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - consume and reject the message diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs index 5a33137dfa..4a3c83ea38 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_acknowledge_and_log.cs @@ -77,14 +77,14 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ackn new MessageHeader(messageId1, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test message 1 - should be rejected") ); - _producer.Send(sentMessage1); + await _producer.SendAsync(sentMessage1); var messageId2 = Guid.NewGuid().ToString(); var sentMessage2 = new Message( new MessageHeader(messageId2, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test message 2 - should be received after rejection") ); - _producer.Send(sentMessage2); + await _producer.SendAsync(sentMessage2); _producer.Flush(); //Act - consume and reject the first message, then consume the second diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index b27a80897a..6162f6df3b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -80,7 +80,7 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for invalid message fallback") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - consume and reject the message with Unacceptable reason diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 3577574ee9..39f0a8c6c8 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -80,7 +80,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for invalid message channel") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - consume and reject the message diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs index 0177ac7a1a..a23b323bc2 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unknown_reason_should_send_to_dlq.cs @@ -80,7 +80,7 @@ public async Task When_rejecting_message_with_unknown_reason_should_send_to_dlq( new MessageHeader(messageId, routingKey, MessageType.MT_COMMAND) { PartitionKey = _partitionKey }, new MessageBody($"test content for unknown reason") ); - _producer.Send(sentMessage); + await _producer.SendAsync(sentMessage); _producer.Flush(); //Act - consume and reject the message with unknown reason (None) diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs index e020e6b95f..0c4d0e563b 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_revoked_partitions_offsets_are_committed.cs @@ -91,7 +91,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { - consumerA.Acknowledge(msg); + await consumerA.AcknowledgeAsync(msg); firstBatchIds.Add(msg.Id); } } @@ -108,7 +108,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( var msg = await ReadMessage(consumerA); if (msg.Header.MessageType != MessageType.MT_NONE) { - consumerA.Acknowledge(msg); + await consumerA.AcknowledgeAsync(msg); secondBatchIds.Add(msg.Id); } } @@ -124,17 +124,17 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( using var consumerB = CreateConsumer(commitBatchSize: 100, partitionAssignmentStrategy: partitionAssignmentStrategy); //consumer B polls to join the group - _ = consumerB.Receive(TimeSpan.FromMilliseconds(5000)); + _ = await consumerB.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //consumer A polls to process the revoke callback - _ = consumerA.Receive(TimeSpan.FromMilliseconds(5000)); + _ = await consumerA.ReceiveAsync(TimeSpan.FromMilliseconds(5000)); //allow rebalance to settle await Task.Delay(5000); //poll both once more to ensure rebalance completes - _ = consumerA.Receive(TimeSpan.FromMilliseconds(2000)); - _ = consumerB.Receive(TimeSpan.FromMilliseconds(2000)); + _ = await consumerA.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); + _ = await consumerB.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); //close both consumers to release group membership consumerA.Close(); @@ -150,7 +150,7 @@ public async Task When_a_partition_is_revoked_offsets_are_committed( //try to read messages — any we get that A already consumed are replays for (int j = 0; j < 5; j++) { - var messages = consumerC.Receive(TimeSpan.FromMilliseconds(2000)); + var messages = await consumerC.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); foreach (var msg in messages) { if (msg.Header.MessageType != MessageType.MT_NONE) @@ -207,7 +207,7 @@ private async Task ReadMessage(KafkaMessageConsumer consumer) try { maxTries++; - messages = consumer.Receive(TimeSpan.FromMilliseconds(1000)); + messages = await consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) { diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs index d6cf840f0b..be6e8aae95 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/Reactor/When_sweeper_timeout_reached_should_commit_uncommitted_offsets_async.cs @@ -148,11 +148,11 @@ private async Task ReadMessage() { maxTries++; await Task.Delay(500); //Let topic propagate in the broker - messages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); + messages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); if (messages[0].Header.MessageType != MessageType.MT_NONE) { - _consumer.Acknowledge(messages[0]); + await _consumer.AcknowledgeAsync(messages[0]); return messages[0]; } @@ -174,7 +174,7 @@ private async Task ReadMessage() public async Task Cleanup() { _producerRegistry?.Dispose(); - _consumer.Dispose(); + await _consumer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs index 1c478deb8f..87b534a724 100644 --- a/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.Kafka.Tests/MessagingGateway/When_kafka_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -58,7 +58,7 @@ public async Task Should_create_async_channel_when_scheduler_set() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Act - var channel = channelFactory.CreateAsyncChannel(_subscription); + var channel = await channelFactory.CreateAsyncChannelAsync(_subscription); // Assert await Assert.That(channel).IsNotNull(); diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 4871c5fb0e..cf88964911 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/Reactor/When_mqtt_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -94,7 +94,7 @@ public async Task When_requeuing_with_delay_should_use_scheduler() var received = ReceiveMessage(); // Act - requeue with delay (triggers lazy producer creation with scheduler) - _consumer.Requeue(received, TimeSpan.FromSeconds(5)); + await _consumer.RequeueAsync(received, TimeSpan.FromSeconds(5)); // Assert - scheduler should have been called (proves producer has scheduler configured) await Assert.That(_scheduler.ScheduleCalled).IsTrue(); @@ -111,7 +111,7 @@ public async Task When_consumer_disposes_after_requeue_should_dispose_producer() ((IAmAMessageProducerSync)_producer).Send(message); var received = ReceiveMessage(); - _consumer.Requeue(received, TimeSpan.FromSeconds(5)); + await _consumer.RequeueAsync(received, TimeSpan.FromSeconds(5)); // Act + Assert - disposing should not throw (producer cleanup succeeds) await Assert.That(() => _consumer.Dispose()).ThrowsNothing(); diff --git a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs index ad20b4cc83..69f760800c 100644 --- a/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs +++ b/tests/Paramore.Brighter.MQTT.Tests/MessagingGateway/When_mqtt_channel_factory_creates_channel_should_use_consumer_factory.cs @@ -45,7 +45,7 @@ public async Task Should_create_sync_channel() public async Task Should_create_async_channel() { // Act - var channel = _channelFactory.CreateAsyncChannel(_subscription); + var channel = await _channelFactory.CreateAsyncChannelAsync(_subscription); // Assert await Assert.That(channel).IsNotNull(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs index 0af4f7e28b..8370a82932 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -57,7 +57,7 @@ public async Task Should_create_async_channel_when_scheduler_set() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Act - var channel = channelFactory.CreateAsyncChannel(_subscription); + var channel = await channelFactory.CreateAsyncChannelAsync(_subscription); // Assert await Assert.That(channel).IsNotNull(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs index a762a9bc24..e65c5b7774 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -61,7 +61,7 @@ public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() new MessageBody("test scheduler wiring")); // Act - requeue with non-zero delay to exercise the scheduler path - consumer.Requeue(message, TimeSpan.FromSeconds(5)); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(5)); // Assert - scheduler was called, proving it was wired through to the producer await Assert.That(scheduler.ScheduleCalled).IsTrue(); @@ -69,7 +69,7 @@ public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() await Assert.That(scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); // Cleanup - consumer.Dispose(); + await consumer.DisposeAsync(); } [Test] @@ -87,7 +87,7 @@ public async Task When_disposing_after_requeue_should_not_throw() new MessageHeader(Guid.NewGuid().ToString(), topic, MessageType.MT_COMMAND), new MessageBody("test dispose after requeue")); - consumer.Requeue(message, TimeSpan.FromSeconds(5)); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(5)); // Act & Assert - dispose after producer was created should not throw await Assert.That(() => consumer.Dispose()).ThrowsNothing(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs index 52f9799bce..130b010123 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_delay_should_use_producer.cs @@ -63,7 +63,7 @@ public When_mssql_consumer_requeues_with_delay_should_use_producer() public async Task When_requeuing_with_delay_should_use_producer() { // Act - requeue with non-zero delay - var result = _consumer.Requeue(_message, TimeSpan.FromSeconds(5)); + var result = await _consumer.RequeueAsync(_message, TimeSpan.FromSeconds(5)); // Assert - should return true await Assert.That(result).IsTrue(); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs index 56bb0f5234..0f98b78ce6 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue.cs @@ -66,19 +66,19 @@ public When_mssql_consumer_requeues_with_zero_delay_should_use_direct_queue() public async Task When_requeuing_with_zero_delay_should_send_directly_to_queue() { // Arrange - send and receive a message so it's in the queue - _producer.Send(_message); - var received = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); + await _producer.SendAsync(_message); + var received = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); await Assert.That(received).IsNotEmpty(); await Assert.That(received[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); // Act - requeue with zero delay (should use direct queue send) - var result = _consumer.Requeue(received[0], TimeSpan.Zero); + var result = await _consumer.RequeueAsync(received[0], TimeSpan.Zero); // Assert - returns true await Assert.That(result).IsTrue(); // Assert - message is immediately available in queue (direct send, not scheduled) - var requeued = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); + var requeued = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); await Assert.That(requeued).IsNotEmpty(); await Assert.That(requeued[0].Body.Value).IsEqualTo(_message.Body.Value); } @@ -87,19 +87,19 @@ public async Task When_requeuing_with_zero_delay_should_send_directly_to_queue() public async Task When_requeuing_with_null_delay_should_send_directly_to_queue() { // Arrange - send and receive a message - _producer.Send(_message); - var received = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); + await _producer.SendAsync(_message); + var received = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); await Assert.That(received).IsNotEmpty(); await Assert.That(received[0].Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); // Act - requeue with null delay (should default to zero and use direct queue) - var result = _consumer.Requeue(received[0]); + var result = await _consumer.RequeueAsync(received[0]); // Assert - returns true await Assert.That(result).IsTrue(); // Assert - message is immediately available - var requeued = _consumer.Receive(TimeSpan.FromMilliseconds(2000)); + var requeued = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); await Assert.That(requeued).IsNotEmpty(); await Assert.That(requeued[0].Body.Value).IsEqualTo(_message.Body.Value); } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index d108d0f431..8d815a8add 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -67,12 +67,12 @@ public MsSqlMessageConsumerDeliveryErrorDlqTests() public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { // Arrange - send a message and consume it from the source topic - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); var originalTopic = receivedMessage.Header.Topic.Value; // Act - reject with DeliveryError - var result = _consumer.Reject(receivedMessage, + var result = await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 1445f037b8..025e6313a3 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -112,10 +112,10 @@ private static async Task ConsumeMessageAsync(IAmAMessageConsumerAsync public async ValueTask DisposeAsync() { await _consumer.PurgeAsync(); - _consumer.Dispose(); + await _consumer.DisposeAsync(); await _dlqConsumer.PurgeAsync(); - _dlqConsumer.Dispose(); - _producer.Dispose(); + await _dlqConsumer.DisposeAsync(); + await _producer.DisposeAsync(); GC.SuppressFinalize(this); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs index 80fe3ed3af..82d35d8d43 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_no_channels_configured_should_log_warning.cs @@ -62,11 +62,11 @@ public async Task When_rejecting_message_with_no_channels_configured_should_retu var message = new Message( new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_COMMAND), new MessageBody("test content")); - _producer.Send(message); + await _producer.SendAsync(message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with DeliveryError but no channels configured - var result = _consumer.Reject(receivedMessage, + var result = await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); // Assert - reject returns true (message is silently dropped) @@ -76,7 +76,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_retu var nextMessage = new Message( new MessageHeader(Guid.NewGuid().ToString(), _topic, MessageType.MT_COMMAND), new MessageBody("second message")); - _producer.Send(nextMessage); + await _producer.SendAsync(nextMessage); var received = ConsumeMessage(_consumer); await Assert.That(received.Id).IsEqualTo(nextMessage.Id); } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 2f60980f2b..eadb73271c 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -68,11 +68,11 @@ public MsSqlMessageConsumerUnacceptableFallbackToDlqTests() public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { // Arrange - send a message and consume it from the source topic - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with Unacceptable reason (no invalid channel configured) - var result = _consumer.Reject(receivedMessage, + var result = await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true diff --git a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index a426a86843..9c483e4fb3 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/MessagingGateway/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -71,11 +71,11 @@ public MsSqlMessageConsumerUnacceptableInvalidChannelTests() public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { // Arrange - send a message and consume it from the source topic - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with Unacceptable reason - var result = _consumer.Reject(receivedMessage, + var result = await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); // Assert - reject returns true @@ -88,7 +88,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); // Assert - DLQ should be empty - var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)).First(); + var dlqMessage = (await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).First(); await Assert.That(dlqMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 57e2f610db..8e28ae95dd 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index ceec487f07..af8c9e1b1e 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 19de71da03..565fe3c133 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 84369771f3..b608c373f9 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs index 6426f5a825..f94c751bc9 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderAsyncTest.cs @@ -150,7 +150,7 @@ public async Task When_Committing_Async_With_Cancelled_Token_Should_Propagate() var context = A.Fake(); var mockTransaction = A.Fake(); var cts = new CancellationTokenSource(); - cts.Cancel(); + await cts.CancelAsync(); A.CallTo(() => context.Database.CurrentTransaction).Returns(mockTransaction); A.CallTo(() => mockTransaction.CommitAsync(cts.Token)) @@ -170,7 +170,7 @@ public async Task When_Rolling_Back_Async_With_Cancelled_Token_Should_Propagate( var context = A.Fake(); var mockTransaction = A.Fake(); var cts = new CancellationTokenSource(); - cts.Cancel(); + await cts.CancelAsync(); A.CallTo(() => context.Database.CurrentTransaction).Returns(mockTransaction); A.CallTo(() => mockTransaction.RollbackAsync(cts.Token)) diff --git a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs index 5ff9af2d62..d809cff640 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/EntityFramework/MongoDbEntityFrameworkTransactionProviderTest.cs @@ -128,7 +128,7 @@ public async Task When_Rolling_Back_Active_Transaction_Should_Call_Rollback() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act - provider.Rollback(); + await provider.RollbackAsync(); // Assert A.CallTo(() => mockTransaction.Rollback()).MustHaveHappenedOnceExactly(); @@ -144,7 +144,7 @@ public async Task When_Rolling_Back_Null_Transaction_Does_Not_Throw() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act & Assert - Should not throw - provider.Rollback(); + await provider.RollbackAsync(); } [Test] @@ -215,7 +215,7 @@ public async Task When_Rolling_Back_And_Then_Checking_HasOpenTransaction() // Act await Assert.That(provider.HasOpenTransaction).IsTrue(); - provider.Rollback(); + await provider.RollbackAsync(); var hasTransactionAfterRollback = provider.HasOpenTransaction; // Assert @@ -277,7 +277,7 @@ public async Task When_Rollback_Called_Multiple_Times_Should_Not_Throw() var provider = new MongoDbEntityFrameworkTransactionProvider(context); // Act & Assert - provider.Rollback(); // First rollback - provider.Rollback(); // Second rollback with null transaction - should not throw + await provider.RollbackAsync(); // First rollback + await provider.RollbackAsync(); // Second rollback with null transaction - should not throw } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs index ee2e7ea9ad..8b2bf18dfd 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_unwrapping_a_large_message.cs @@ -48,10 +48,10 @@ public async Task When_unwrapping_a_large_message() var stream = new MemoryStream(); var writer = new StreamWriter(stream); - writer.Write(commandAsJson); - writer.Flush(); + await writer.WriteAsync(commandAsJson); + await writer.FlushAsync(); stream.Position = 0; - var id = _luggageStore.Store(stream); + var id = await _luggageStore.StoreAsync(stream); //pretend we ran through the claim check myCommand.Value = $"Claim Check {id}"; @@ -74,6 +74,6 @@ public async Task When_unwrapping_a_large_message() //assert //contents should be from storage await Assert.That(transformedMessage.Value).IsEqualTo(contents); - await Assert.That(_luggageStore.HasClaim(id)).IsFalse(); + await Assert.That(await _luggageStore.HasClaimAsync(id)).IsFalse(); } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs index 2e24958658..58f44c29d4 100644 --- a/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs +++ b/tests/Paramore.Brighter.MongoDb.Tests/Transformers/When_wrapping_a_large_message.cs @@ -55,7 +55,7 @@ public async Task When_wrapping_a_large_message() _id = (string)message.Header.Bag[ClaimCheckTransformer.CLAIM_CHECK]; await Assert.That(message.Body.Value).IsEqualTo($"Claim Check {_id}"); - await Assert.That(_luggageStore.HasClaim(_id)).IsTrue(); + await Assert.That(await _luggageStore.HasClaimAsync(_id)).IsTrue(); } public void Dispose() diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 7b33912a00..a16610d073 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index fb27e95698..f3384e5f28 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index aead18ac1d..645aab1cb2 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index aa5cf97fea..9eeed72671 100644 --- a/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.MySQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 204351c224..fddc340bf4 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index cd7f1daffb..c0fba610a8 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 6e3c05020d..699ef665c6 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 87a4ae3668..26f4edc25b 100644 --- a/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.PostgresSQL.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs index b983dac325..5f43e8877a 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_message.cs @@ -121,7 +121,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -146,7 +146,7 @@ public async Task When_scheduler_a_message_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -172,7 +172,7 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(4)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -198,7 +198,7 @@ public async Task When_reschedule_a_message_with_a_timespan() Thread.Sleep(TimeSpan.FromSeconds(4)); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } [Test] @@ -220,7 +220,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -256,7 +256,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan() Thread.Sleep(TimeSpan.FromSeconds(2)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs index ad7651c80b..718521af4f 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request.cs @@ -122,7 +122,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -154,7 +154,7 @@ public async Task When_scheduler_send_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -187,7 +187,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -219,7 +219,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -249,7 +249,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -269,7 +269,7 @@ public async Task When_scheduler_post_request_with_a_timespan() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -298,7 +298,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset(RequestScheduler await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -335,7 +335,7 @@ public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerT await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -377,7 +377,7 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -412,7 +412,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler await Assert.That(_receivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs index db5e13e8db..3c9fae4ecf 100644 --- a/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.Quartz.Tests/When_scheduling_a_request_async.cs @@ -130,7 +130,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -162,7 +162,7 @@ public async Task When_scheduler_send_request_with_a_timespan_asc() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -195,7 +195,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -227,7 +227,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -257,7 +257,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() await Task.Delay(TimeSpan.FromSeconds(2)); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); } @@ -277,7 +277,7 @@ public async Task When_scheduler_post_request_with_a_timespan_async() await Assert.That(_internalBus.Stream(_routingKey)).IsNotEmpty(); - await Assert.That(_outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -306,7 +306,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSch await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -343,7 +343,7 @@ public async Task When_reschedule_send_request_with_a_timespan_async(RequestSche await Assert.That(_receivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _outbox.Get(req.Id, new RequestContext()); + var actual = await _outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs index 67c25afb2d..df368fa2e6 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs @@ -99,7 +99,7 @@ public async Task When_connecting_with_mtls_can_publish_and_receive_message_asyn // Act - Create consumer first to ensure queue exists and is bound var consumer = new RmqMessageConsumer(connection, queueName, routingKey, false); - consumer.Purge(); // Ensure queue is created and bound before publishing + await consumer.PurgeAsync(); // Ensure queue is created and bound before publishing // Act - Publish var producer = new RmqMessageProducer(connection); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs index 388f5e6197..106fb432c7 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs @@ -99,7 +99,7 @@ public async Task When_publishing_with_mtls_and_quorum_trace_context_is_preserve // Act - Create consumer first to ensure queue exists using var consumer = new RmqMessageConsumer(connection, queueName.Value, routingKey.Value, false); - consumer.Purge(); + await consumer.PurgeAsync(); // Publish message with trace context using var producer = new RmqMessageProducer(connection) @@ -161,7 +161,7 @@ public async Task When_publishing_with_mtls_quorum_and_baggage_context_survives_ { // Act using var consumer = new RmqMessageConsumer(connection, queueName.Value, routingKey.Value, false); - consumer.Purge(); + await consumer.PurgeAsync(); using var producer = new RmqMessageProducer(connection) { diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs index 39ee1f7d48..9406ab45f0 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Proactor/When_rmq_async_consumer_creates_producer_should_use_message_topic_and_scheduler.cs @@ -113,7 +113,7 @@ public async Task When_requeuing_with_zero_delay_should_not_create_producer() public async ValueTask DisposeAsync() { - _consumer.Dispose(); + await _consumer.DisposeAsync(); await _messageProducer.DisposeAsync(); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs index 1512c86873..dbfb40f030 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_multiple_messages_via_the_messaging_gateway.cs @@ -76,7 +76,7 @@ public async Task When_confirming_multiple_messages_via_the_messaging_gateway() // Send all messages for (int i = 0; i < _messages.Count; i++) { - _messageProducer.Send(_messages[i]); + await _messageProducer.SendAsync(_messages[i]); } // Wait for confirmations diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index 1cff97f350..61f1e6a2ab 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -74,7 +74,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () [Test] public async Task When_confirming_posting_a_message_via_the_messaging_gateway() { - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(500); diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 83954149fe..1794d6801a 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -126,7 +126,7 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() await Task.Delay(20000); //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //Let the message be handled and deferred until it reaches the DLQ await Task.Delay(20000); @@ -141,12 +141,12 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() await Task.Delay(5000); //inspect the dlq - var dlqMessage = _deadLetterConsumer.Receive(new TimeSpan(10000)).First(); + var dlqMessage = (await _deadLetterConsumer.ReceiveAsync(new TimeSpan(10000))).First(); //assert this is our message await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); - _deadLetterConsumer.Acknowledge(dlqMessage); + await _deadLetterConsumer.AcknowledgeAsync(dlqMessage); } diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs index 79329784c1..4dae9c7d4d 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs @@ -150,7 +150,7 @@ public async Task When_certificate_file_is_invalid_throws_invalid_operation() { // Arrange - create a temp file with invalid certificate data var invalidCertPath = Path.Combine(Path.GetTempPath(), $"invalid-cert-{Guid.NewGuid()}.pfx"); - File.WriteAllText(invalidCertPath, "not a valid certificate"); + await File.WriteAllTextAsync(invalidCertPath, "not a valid certificate"); try { diff --git a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs index 075d427154..1a0257d751 100644 --- a/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.RMQ.Async.Tests/MessagingGateway/When_rmq_async_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -58,7 +58,7 @@ public async Task Should_create_async_channel_when_scheduler_set() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Act - var channel = channelFactory.CreateAsyncChannel(_subscription); + var channel = await channelFactory.CreateAsyncChannelAsync(_subscription); // Assert await Assert.That(channel).IsNotNull(); diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs index 54e565c80a..4c673be72c 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_and_receiving_with_mtls.cs @@ -63,7 +63,7 @@ public async Task When_connecting_with_client_certificate_can_publish_message_sy // Assert - Should NOT throw TLS handshake exception // Actual TLS handshake occurs when Send() is called - producer.Send(message); + await producer.SendAsync(message); // If we reach here, TLS handshake succeeded await Assert.That(true).IsTrue(); @@ -103,7 +103,7 @@ public async Task When_connecting_with_mtls_can_publish_and_receive_message_sync new MessageHeader(Id.Random(), routingKey, MessageType.MT_EVENT), new MessageBody("Round-trip test over mTLS (sync)") ); - producer.Send(sentMessage); + await producer.SendAsync(sentMessage); // Act - Consume var receivedMessages = consumer.Receive(TimeSpan.FromSeconds(5)); diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs index f4ecda9521..e8a06d3744 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_publishing_with_trace_context_over_mtls.cs @@ -115,7 +115,7 @@ public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved try { // Act - messageProducer.Send(message); + await messageProducer.SendAsync(message); _parentActivity?.Stop(); _tracerProvider.ForceFlush(); @@ -128,7 +128,7 @@ public async Task When_publishing_with_traceparent_over_mtls_header_is_preserved } finally { - messageProducer.Dispose(); + await messageProducer.DisposeAsync(); } } @@ -174,7 +174,7 @@ public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_ try { // Act - messageProducer.Send(message); + await messageProducer.SendAsync(message); _parentActivity?.Stop(); _tracerProvider.ForceFlush(); @@ -196,7 +196,7 @@ public async Task When_publishing_with_tracestate_and_baggage_over_mtls_headers_ } finally { - messageProducer.Dispose(); + await messageProducer.DisposeAsync(); } } @@ -242,7 +242,7 @@ public async Task When_publishing_with_mtls_brighter_tracer_write_producer_event try { // Act - messageProducer.Send(message); + await messageProducer.SendAsync(message); _parentActivity?.Stop(); _tracerProvider.ForceFlush(); @@ -262,7 +262,7 @@ await Assert.That( } finally { - messageProducer.Dispose(); + await messageProducer.DisposeAsync(); } } @@ -309,7 +309,7 @@ public async Task When_publishing_cloudevents_trace_context_survives_mtls_serial try { // Act - Publish (serialization occurs here) - messageProducer.Send(message); + await messageProducer.SendAsync(message); _parentActivity?.Stop(); _tracerProvider.ForceFlush(); @@ -332,7 +332,7 @@ await Assert.That( } finally { - messageProducer.Dispose(); + await messageProducer.DisposeAsync(); } } @@ -378,7 +378,7 @@ public async Task When_publishing_with_certificate_from_file_path_trace_context_ try { // Act - messageProducer.Send(message); + await messageProducer.SendAsync(message); _parentActivity?.Stop(); _tracerProvider.ForceFlush(); @@ -398,7 +398,7 @@ public async Task When_publishing_with_certificate_from_file_path_trace_context_ } finally { - messageProducer.Dispose(); + await messageProducer.DisposeAsync(); } } } diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs index 06fb790cac..2f1ded1373 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Acceptance/When_using_mtls_with_quorum_queues.cs @@ -101,7 +101,7 @@ public async Task When_publishing_with_mtls_and_quorum_trace_context_is_preserve new MessageBody("Testing trace context over mTLS + Quorum") ); - producer.Send(message); + await producer.SendAsync(message); // Stop activity and flush to exporter activity?.Stop(); @@ -162,7 +162,7 @@ public async Task When_publishing_with_mtls_quorum_and_baggage_context_survives( new MessageBody("Testing baggage over mTLS + Quorum") ); - producer.Send(message); + await producer.SendAsync(message); var receivedMessages = consumer.Receive(TimeSpan.FromSeconds(5)); // Assert - Baggage must survive (Rule #12) diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs index 25a6d1b7e2..6ac9195c49 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_confirming_posting_a_message_via_the_messaging_gateway.cs @@ -72,7 +72,7 @@ public RmqMessageProducerConfirmationsSendMessageTests () [Test] public async Task When_confirming_posting_a_message_via_the_messaging_gateway() { - _messageProducer.Send(_message); + await _messageProducer.SendAsync(_message); await Task.Delay(500); diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs index 7463df9628..d1f3ec2db0 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/Reactor/When_retry_limits_force_a_message_onto_the_DLQ.cs @@ -125,7 +125,7 @@ public async Task When_retry_limits_force_a_message_onto_the_dlq() await Task.Delay(20000); //put something on an SNS topic, which will be delivered to our SQS queue - _sender.Send(_message); + await _sender.SendAsync(_message); //Let the message be handled and deferred until it reaches the DLQ await Task.Delay(20000); diff --git a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs index 485a33df74..ac440c45eb 100644 --- a/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs +++ b/tests/Paramore.Brighter.RMQ.Sync.Tests/MessagingGateway/When_configuring_mutual_tls_connection.cs @@ -150,7 +150,7 @@ public async Task When_certificate_file_is_invalid_throws_invalid_operation() { // Arrange - create a temp file with invalid certificate data var invalidCertPath = Path.Combine(Path.GetTempPath(), $"invalid-cert-{Guid.NewGuid()}.pfx"); - File.WriteAllText(invalidCertPath, "not a valid certificate"); + await File.WriteAllTextAsync(invalidCertPath, "not a valid certificate"); try { diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs index 9c4f12f0ab..2229ca8511 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_a_message_via_the_messaging_gateway.cs @@ -70,11 +70,11 @@ public RedisMessageProducerSendTests(RedisFixture redisFixture) public async Task When_posting_a_message_via_the_messaging_gateway() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard - _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); + await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); - _redisFixture.MessageProducer.Send(_message); - var sentMessage = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); - _redisFixture.MessageConsumer.Acknowledge(sentMessage); + await _redisFixture.MessageProducer.SendAsync(_message); + var sentMessage = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); + await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessage); // Assert message body await Assert.That(sentMessage.Body.Value).IsEqualTo(_message.Body.Value); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs index 03c0725b78..6a370d7783 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_posting_multiple_messages_via_the_messaging_gateway.cs @@ -31,20 +31,20 @@ public RedisMessageProducerMultipleSendTests(RedisFixture redisFixture) public async Task When_posting_a_message_via_the_messaging_gateway() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard - _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); + await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //Send a sequence of messages, we want to check that ordering is preserved - _redisFixture.MessageProducer.Send(_messageOne); - _redisFixture.MessageProducer.Send(_messageTwo); + await _redisFixture.MessageProducer.SendAsync(_messageOne); + await _redisFixture.MessageProducer.SendAsync(_messageTwo); //Now receive, and confirm order off is order on - var sentMessageOne = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + var sentMessageOne = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); var messageBodyOne = sentMessageOne.Body.Value; - _redisFixture.MessageConsumer.Acknowledge(sentMessageOne); + await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageOne); - var sentMessageTwo = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + var sentMessageTwo = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); var messageBodyTwo = sentMessageTwo.Body.Value; - _redisFixture.MessageConsumer.Acknowledge(sentMessageTwo); + await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageTwo); //_should_send_a_message_via_restms_with_the_matching_body await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 508bd52a81..25d86ba9b1 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -63,18 +63,18 @@ public RedisMessageConsumerDeliveryErrorDlqTests() public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq() { //Arrange - subscribe then send - _consumer.Receive(TimeSpan.FromMilliseconds(1000)); - _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)); - _messageProducer.Send(_message); - var receivedMessage = _consumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _messageProducer.SendAsync(_message); + var receivedMessage = (await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); //Act var originalTopic = receivedMessage.Header.Topic.Value; - _consumer.Reject(receivedMessage, + await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); //Assert - message should appear on DLQ - var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); + var dlqMessage = (await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(3000))).Single(); await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs index ed33cad15b..70748c284a 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_remove_from_inflight.cs @@ -58,12 +58,12 @@ public RedisMessageConsumerNoChannelsRejectTests() public async Task When_rejecting_message_with_no_channels_configured_should_remove_from_inflight() { //Arrange - subscribe then send - _consumer.Receive(TimeSpan.FromMilliseconds(1000)); - _messageProducer.Send(_message); - var receivedMessage = _consumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _messageProducer.SendAsync(_message); + var receivedMessage = (await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); //Act - reject with DeliveryError, but no channels configured - var result = _consumer.Reject(receivedMessage, + var result = await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.DeliveryError, "Test delivery error")); //Assert - reject returns true and consumer can receive again without "unacked message" error @@ -71,7 +71,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_remo // This would throw ChannelFailureException("Unacked message still in flight...") // if reject didn't remove from inflight - var nextMessages = _consumer.Receive(TimeSpan.FromMilliseconds(1000)); + var nextMessages = await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); await Assert.That(nextMessages).IsEmpty(); } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index 4c9daf0905..11bd868cb9 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -64,17 +64,17 @@ public RedisMessageConsumerUnacceptableFallbackToDlqTests() public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq() { //Arrange - subscribe then send - _consumer.Receive(TimeSpan.FromMilliseconds(1000)); - _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)); - _messageProducer.Send(_message); - var receivedMessage = _consumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _messageProducer.SendAsync(_message); + var receivedMessage = (await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); //Act - reject with Unacceptable, but no invalid channel configured - _consumer.Reject(receivedMessage, + await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); //Assert - message should fall back to DLQ - var dlqMessage = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); + var dlqMessage = (await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(3000))).Single(); await Assert.That(dlqMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await Assert.That(dlqMessage.Body.Value).IsEqualTo(_message.Body.Value); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 632a34c6d5..1eb2c0b86f 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -68,25 +68,25 @@ public RedisMessageConsumerUnacceptableInvalidChannelTests() public async Task When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel() { //Arrange - subscribe then send - _consumer.Receive(TimeSpan.FromMilliseconds(1000)); - _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)); - _invalidConsumer.Receive(TimeSpan.FromMilliseconds(1000)); - _messageProducer.Send(_message); - var receivedMessage = _consumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _invalidConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); + await _messageProducer.SendAsync(_message); + var receivedMessage = (await _consumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); //Act - _consumer.Reject(receivedMessage, + await _consumer.RejectAsync(receivedMessage, new MessageRejectionReason(RejectionReason.Unacceptable, "Bad message format")); //Assert - message should appear on invalid channel, not on DLQ - var invalidMessage = _invalidConsumer.Receive(TimeSpan.FromMilliseconds(3000)).Single(); + var invalidMessage = (await _invalidConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(3000))).Single(); await Assert.That(invalidMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await Assert.That(invalidMessage.Body.Value).IsEqualTo(_message.Body.Value); await Assert.That(invalidMessage.Header.Bag["rejectionReason"].ToString()).IsEqualTo(RejectionReason.Unacceptable.ToString()); // DLQ should be empty - var dlqMessages = _dlqConsumer.Receive(TimeSpan.FromMilliseconds(1000)); + var dlqMessages = await _dlqConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); await Assert.That(dlqMessages).IsEmpty(); } diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs index 73fa835d71..c48aadccae 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/Reactor/When_requeing_a_failed_message.cs @@ -31,26 +31,26 @@ public RedisRequeueMessageTests(RedisFixture redisFixture) public async Task When_requeing_a_failed_message() { //Need to receive to subscribe to feed, before we send a message. This returns an empty message we discard - _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)); + await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000)); //Send a sequence of messages, we want to check that ordering is preserved - _redisFixture.MessageProducer.Send(_messageOne); - _redisFixture.MessageProducer.Send(_messageTwo); + await _redisFixture.MessageProducer.SendAsync(_messageOne); + await _redisFixture.MessageProducer.SendAsync(_messageTwo); //Now receive, the first message - var sentMessageOne = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + var sentMessageOne = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); //now requeue the first message - _redisFixture.MessageConsumer.Requeue(_messageOne); + await _redisFixture.MessageConsumer.RequeueAsync(_messageOne); //try receiving again; messageTwo should come first - var sentMessageTwo = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + var sentMessageTwo = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); var messageBodyTwo = sentMessageTwo.Body.Value; - _redisFixture.MessageConsumer.Acknowledge(sentMessageTwo); + await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageTwo); - sentMessageOne = _redisFixture.MessageConsumer.Receive(TimeSpan.FromMilliseconds(1000)).Single(); + sentMessageOne = (await _redisFixture.MessageConsumer.ReceiveAsync(TimeSpan.FromMilliseconds(1000))).Single(); var messageBodyOne = sentMessageOne.Body.Value; - _redisFixture.MessageConsumer.Acknowledge(sentMessageOne); + await _redisFixture.MessageConsumer.AcknowledgeAsync(sentMessageOne); await Assert.That(messageBodyOne).IsEqualTo(_messageOne.Body.Value); await Assert.That(messageBodyTwo).IsEqualTo(_messageTwo.Body.Value); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs index 4a25192f86..686551e3ef 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/RedisFixture.cs @@ -37,9 +37,9 @@ public static RedisMessagingGatewayConfiguration RedisMessagingGatewayConfigurat [After(Test)] public async Task Cleanup() { - MessageConsumer.Purge(); - MessageConsumer.Dispose(); - MessageProducer.Dispose(); + await MessageConsumer.PurgeAsync(); + await MessageConsumer.DisposeAsync(); + await MessageProducer.DisposeAsync(); } public async ValueTask DisposeAsync() diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs index e3d72d9130..49f9ee41c6 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_channel_factory_has_scheduler_should_pass_to_consumers.cs @@ -56,7 +56,7 @@ public async Task Should_create_async_channel_when_scheduler_set() ((IAmAChannelFactoryWithScheduler)channelFactory).Scheduler = scheduler; // Act - var channel = channelFactory.CreateAsyncChannel(_subscription); + var channel = await channelFactory.CreateAsyncChannelAsync(_subscription); // Assert await Assert.That(channel).IsNotNull(); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs index 3cd58f99d5..a1d80032eb 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_creates_producer_should_configure_and_dispose_correctly.cs @@ -53,7 +53,7 @@ public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() new MessageBody("test scheduler wiring")); // Act - requeue with non-zero delay to exercise the scheduler path - consumer.Requeue(message, TimeSpan.FromSeconds(5)); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(5)); // Assert - scheduler was called, proving it was wired through to the producer await Assert.That(scheduler.ScheduleCalled).IsTrue(); @@ -61,7 +61,7 @@ public async Task When_requeuing_with_delay_should_wire_scheduler_to_producer() await Assert.That(scheduler.ScheduledDelay).IsEqualTo(TimeSpan.FromSeconds(5)); // Cleanup - consumer.Dispose(); + await consumer.DisposeAsync(); } [Test] @@ -80,7 +80,7 @@ public async Task When_disposing_after_requeue_should_not_throw() new MessageHeader(Guid.NewGuid().ToString(), topic, MessageType.MT_COMMAND), new MessageBody("test dispose after requeue")); - consumer.Requeue(message, TimeSpan.FromSeconds(5)); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(5)); // Act & Assert - dispose after producer was created should not throw await Assert.That(() => consumer.Dispose()).ThrowsNothing(); @@ -118,7 +118,7 @@ public async Task When_disposing_async_after_requeue_should_not_throw() new MessageHeader(Guid.NewGuid().ToString(), topic, MessageType.MT_COMMAND), new MessageBody("test async dispose after requeue")); - consumer.Requeue(message, TimeSpan.FromSeconds(5)); + await consumer.RequeueAsync(message, TimeSpan.FromSeconds(5)); // Act & Assert - async dispose after producer was created should not throw await Assert.That(async () => await consumer.DisposeAsync()).ThrowsNothing(); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs index 84656faada..86d524083d 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_delay_should_use_producer.cs @@ -59,7 +59,7 @@ public When_redis_consumer_requeues_with_delay_should_use_producer() public async Task When_requeuing_with_delay_should_use_producer() { // Act - requeue with non-zero delay - var result = _consumer.Requeue(_message, TimeSpan.FromSeconds(5)); + var result = await _consumer.RequeueAsync(_message, TimeSpan.FromSeconds(5)); // Assert - should return true await Assert.That(result).IsTrue(); diff --git a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs index 7c12da919a..ff48d9b7c5 100644 --- a/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs +++ b/tests/Paramore.Brighter.Redis.Tests/MessagingGateway/When_redis_consumer_requeues_with_zero_delay_should_use_direct_list.cs @@ -60,7 +60,7 @@ public async Task When_requeuing_with_zero_delay_should_not_use_scheduler() { // Act - requeue with zero delay; the direct Redis list path will be attempted // which may fail without Redis, but the scheduler must NOT be called - _consumer.Requeue(_message, TimeSpan.Zero); + await _consumer.RequeueAsync(_message, TimeSpan.Zero); // Assert - scheduler should NOT have been called await Assert.That(_scheduler.ScheduleCalled).IsFalse(); @@ -70,7 +70,7 @@ public async Task When_requeuing_with_zero_delay_should_not_use_scheduler() public async Task When_requeuing_with_null_delay_should_not_use_scheduler() { // Act - requeue with null delay (defaults to zero) - _consumer.Requeue(_message); + await _consumer.RequeueAsync(_message); // Assert - scheduler should NOT have been called await Assert.That(_scheduler.ScheduleCalled).IsFalse(); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs index c8898bf57b..02a29ce8cf 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_posting_a_message_via_the_messaging_gateway_async.cs @@ -43,7 +43,7 @@ public async Task Setup() var connection = GatewayFactory.CreateConnection(); var channelFactory = new RocketMqChannelFactory(new RocketMessageConsumerFactory(connection)); - _channel = channelFactory.CreateAsyncChannel(mqSubscription); + _channel = await channelFactory.CreateAsyncChannelAsync(mqSubscription); _messageProducer = new RocketMqMessageProducer( connection, await GatewayFactory.CreateProducer(connection, publication), diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs index 4c54a67999..528db8d6d4 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_rejecting_message_with_delivery_error_should_send_to_dlq_async.cs @@ -139,6 +139,6 @@ public async ValueTask DisposeAsync() await _consumer.DisposeAsync(); await _dlqConsumer.PurgeAsync(); await _dlqConsumer.DisposeAsync(); - _producer.Dispose(); + await _producer.DisposeAsync(); } } diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs index d9f74cd60c..19c9f7d482 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_a_message_async.cs @@ -48,7 +48,7 @@ public async Task Setup() _sender = new RocketMqMessageProducer(connection, await GatewayFactory.CreateProducer(connection, publication), publication); - _channel = channelFactory.CreateAsyncChannel(subscription); + _channel = await channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs index 86764791ba..57d0b51ce4 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Proactor/When_requeueing_redrives_to_the_dlq_async.cs @@ -49,7 +49,7 @@ await GatewayFactory.CreateProducer(connection, publication), publication); RocketMqChannelFactory channelFactory = new(new RocketMessageConsumerFactory(connection)); - _channel = channelFactory.CreateAsyncChannel(subscription); + _channel = await channelFactory.CreateAsyncChannelAsync(subscription); } [Test] diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs index 3b22fa03db..b69e996e3c 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_delivery_error_should_send_to_dlq.cs @@ -91,7 +91,7 @@ public async Task When_rejecting_message_with_delivery_error_should_send_to_dlq( // Arrange - send a message and consume it from the source topic _consumer.Purge(); _dlqConsumer.Purge(); - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); var originalTopic = receivedMessage.Header.Topic.Value; diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs index 112f05204f..038c2a043d 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_no_channels_configured_should_ack_and_log_warning.cs @@ -77,7 +77,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ack_ { // Arrange - send a message and consume it from the source topic _consumer.Purge(); - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with DeliveryError (no channels configured) @@ -94,7 +94,7 @@ public async Task When_rejecting_message_with_no_channels_configured_should_ack_ new MessageBody(JsonSerializer.Serialize( (object)new MyCommand { Value = "Follow-up" }, JsonSerialisationOptions.Options))); - _producer.Send(followUpMessage); + await _producer.SendAsync(followUpMessage); var nextMessage = ConsumeMessage(_consumer); await Assert.That(nextMessage.Header.MessageType).IsNotEqualTo(MessageType.MT_NONE); await Assert.That(nextMessage.Body.Value).IsEqualTo(followUpMessage.Body.Value); diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs index e75a889ad2..c1ef513af6 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_and_no_invalid_channel_should_fallback_to_dlq.cs @@ -91,7 +91,7 @@ public async Task When_rejecting_message_with_unacceptable_and_no_invalid_channe // Arrange - send a message and consume it from the source topic _consumer.Purge(); _dlqConsumer.Purge(); - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with Unacceptable reason (no invalid channel configured, should fall back to DLQ) diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs index 1cdf0702e3..c6377524bc 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_rejecting_message_with_unacceptable_reason_should_send_to_invalid_channel.cs @@ -105,7 +105,7 @@ public async Task When_rejecting_message_with_unacceptable_reason_should_send_to _consumer.Purge(); _invalidConsumer.Purge(); _dlqConsumer.Purge(); - _producer.Send(_message); + await _producer.SendAsync(_message); var receivedMessage = ConsumeMessage(_consumer); // Act - reject with Unacceptable reason diff --git a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs index 69d69150c7..b2b403b69f 100644 --- a/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs +++ b/tests/Paramore.Brighter.RocketMQ.Tests/Paramore.Brighter.RocketMQ.Tests/MessagingGateway/Reactor/When_requeueing_redrives_to_the_dlq.cs @@ -55,7 +55,7 @@ await GatewayFactory.CreateProducer(connection, publication), public async Task When_requeueing_redrives_to_the_queue() { _channel.Purge(); - _sender.Send(_message); + await _sender.SendAsync(_message); Message receivedMessage; for (var i = 0; i < 32; i++) { diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 63db83b961..00259321ea 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 1a047a998c..a64108347b 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Binary/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index a78c3e9c5a..353bd61d23 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Rollback(); + await transaction.RollbackAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 3f87a7ae34..e97e8851f7 100644 --- a/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.Sqlite.Tests/Outbox/Text/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -54,7 +54,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A var outbox = _outboxProvider.CreateOutbox(); var transaction = _outboxProvider.CreateTransactionProvider(); - _ = transaction.GetTransaction(); + _ = await transaction.GetTransactionAsync(); var context = new RequestContext(); var message = _messageFactory.Create(); @@ -63,7 +63,7 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A // Act outbox.Add(message, context, transactionProvider: transaction); - transaction.Commit(); + await transaction.CommitAsync(); var storedMessage = outbox.Get(message.Id, context); diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs index 729e344b86..5642194db0 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_message.cs @@ -30,7 +30,7 @@ public async Task When_scheduler_a_message_with_a_datetimeoffset_sync() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } @@ -49,7 +49,7 @@ public async Task When_scheduler_a_message_with_a_timespan_sync() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } @@ -73,7 +73,7 @@ public async Task When_reschedule_a_message_with_a_datetimeoffset_sync() Thread.Sleep(TimeSpan.FromSeconds(5)); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); } [Test] @@ -95,7 +95,7 @@ public async Task When_reschedule_a_message_with_a_timespan_sync() await Task.Delay(TimeSpan.FromSeconds(5)); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - await Assert.That(_fixture.Outbox.Get(message.Id, new RequestContext())).IsEquivalentTo(message); + await Assert.That(await _fixture.Outbox.GetAsync(message.Id, new RequestContext())).IsEquivalentTo(message); } [Test] public async Task When_cancel_scheduler_message_with_a_datetimeoffset() @@ -112,7 +112,7 @@ public async Task When_cancel_scheduler_message_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(3)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(message.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(message.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -144,7 +144,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan() Thread.Sleep(TimeSpan.FromSeconds(3)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(message.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(message.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs index 8ee043f269..3d61294bd4 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request.cs @@ -31,7 +31,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -63,7 +63,7 @@ public async Task When_scheduler_send_request_with_a_timespan() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -96,7 +96,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -128,7 +128,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -158,7 +158,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset() Thread.Sleep(TimeSpan.FromSeconds(2)); - await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _fixture.Outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } @@ -178,7 +178,7 @@ public async Task When_scheduler_post_request_with_a_timespan() await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _fixture.Outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -207,7 +207,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset(RequestScheduler await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -244,7 +244,7 @@ public async Task When_reschedule_send_request_with_a_timespan(RequestSchedulerT await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -286,7 +286,7 @@ public async Task When_cancel_scheduler_request_with_a_datetimeoffset(RequestSch await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -321,7 +321,7 @@ public async Task When_cancel_scheduler_request_with_a_timespan(RequestScheduler await Assert.That(_fixture.ReceivedMessages).DoesNotContainKey(nameof(MyEventHandler)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs index 98939aa757..9d98f8ab63 100644 --- a/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs +++ b/tests/Paramore.Brighter.TickerQ.Tests/When_scheduling_a_request_async.cs @@ -33,7 +33,7 @@ public async Task When_scheduler_send_request_with_a_datetimeoffset_async() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -65,7 +65,7 @@ public async Task When_scheduler_send_request_with_a_timespan_asc() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -98,7 +98,7 @@ public async Task When_scheduler_publish_request_with_a_datetimeoffset_async() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -130,7 +130,7 @@ public async Task When_scheduler_publish_request_with_a_timespan() await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -160,7 +160,7 @@ public async Task When_scheduler_post_request_with_a_datetimeoffset_async() await Task.Delay(TimeSpan.FromSeconds(2)); - await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _fixture.Outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); } @@ -180,7 +180,7 @@ public async Task When_scheduler_post_request_with_a_timespan_async() await Assert.That(_fixture.InternalBus.Stream(_fixture.RoutingKey)).IsNotEmpty(); - await Assert.That(_fixture.Outbox.Get(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); + await Assert.That(await _fixture.Outbox.GetAsync(req.Id, new RequestContext())).IsNotEqualTo(Message.Empty); } #endregion @@ -209,7 +209,7 @@ public async Task When_reschedule_request_with_a_datetimeoffset_async(RequestSch await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); @@ -246,7 +246,7 @@ public async Task When_reschedule_send_request_with_a_timespan_async(RequestSche await Assert.That(_fixture.ReceivedMessages).ContainsKey(nameof(MyEventHandlerAsync)); var expected = Message.Empty; - var actual = _fixture.Outbox.Get(req.Id, new RequestContext()); + var actual = await _fixture.Outbox.GetAsync(req.Id, new RequestContext()); await Assert.That(actual.Body).IsEquivalentTo(expected.Body); await Assert.That(actual.Id).IsEqualTo(expected.Id); diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs index ae4bc7ec79..0e066b3a65 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/JustSaying/JustSayingMessageMapperTest.cs @@ -24,7 +24,7 @@ public async Task MapToMessage_when_mapping_a_justsaying_command_property_should Name = $"Name{Guid.NewGuid().ToString()}", }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); await Assert.That(obj).IsNotNull(); @@ -54,7 +54,7 @@ public async Task MapToMessage_when_mapping_a_justsaying_event_property_should_n SourceIp = IPAddress.Loopback }; - var message = mapper.MapToMessage(@event, new Publication()); + var message = await mapper.MapToMessageAsync(@event, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); await Assert.That(obj).IsNotNull(); @@ -84,7 +84,7 @@ public async Task MapToMessage_when_mapping_a_command_property_should_not_be_ove Name = $"Name{Guid.NewGuid().ToString()}", }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); await Assert.That(obj).IsNotNull(); @@ -124,7 +124,7 @@ public async Task MapToMessage_when_mapping_a_justsaying_command_property_should } }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); @@ -167,7 +167,7 @@ public async Task MapToMessage_when_mapping_a_request_command_property_should_se } }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); @@ -210,7 +210,7 @@ public async Task MapToMessage_when_mapping_a_command_with_partial_justsaying_pr } }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); @@ -262,7 +262,7 @@ public async Task MapToMessage_when_mapping_a_command_with_non_justsaying_proper } }; - var message = mapper.MapToMessage(command, new Publication()); + var message = await mapper.MapToMessageAsync(command, new Publication()); await Assert.That(message.Header.Subject).IsEqualTo(subject); var obj = JsonSerializer.Deserialize(message.Body.Bytes, JsonSerialisationOptions.Options); @@ -305,7 +305,7 @@ public async Task MapToMessage_when_mapping_a_request_command_property_should_se var subject = $"Subject{Guid.NewGuid().ToString()}"; var source = new Uri($"Raising{Guid.NewGuid().ToString()}", UriKind.Relative); - var message = mapper.MapToMessage(command, new Publication + var message = await mapper.MapToMessageAsync(command, new Publication { Subject = subject, Source = source diff --git a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs index 236d255378..a721081005 100644 --- a/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs +++ b/tests/Paramore.Brighter.Transforms.Adaptors.Tests/MassTransit/MassTransitMessageMapperTest.cs @@ -21,7 +21,7 @@ public async Task MapToMessage_CommandType_SetsMT_COMMAND() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestCommand(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_COMMAND); } @@ -32,7 +32,7 @@ public async Task MapToMessage_EventType_SetsMT_EVENT() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestEvent(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_EVENT); } @@ -43,7 +43,7 @@ public async Task MapToMessage_OtherType_SetsMT_DOCUMENT() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_DOCUMENT); } @@ -57,7 +57,7 @@ public async Task MapToMessage_ContextHasCorrelationId_UsesIt() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); await Assert.That(message.Header.CorrelationId).IsEqualTo(correlationId); } @@ -68,7 +68,7 @@ public async Task MapToMessage_NoCorrelationIdInContext_GeneratesNew() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); await Assert.That(message.Header.CorrelationId.Value).IsNotEqualTo(Guid.Empty.ToString()); } @@ -98,7 +98,7 @@ public async Task MapToRequest_DeserializesEnvelopeCorrectly() ); var mapper = new MassTransitMessageMapper(); - var result = mapper.MapToRequest(message); + var result = await mapper.MapToRequestAsync(message); await Assert.That(result.Id).IsEqualTo(expectedId); } @@ -112,7 +112,7 @@ public async Task MapToMessage_EnvelopeContainsConversationIdFromContext() var mapper = new MassTransitMessageMapper { Context = _context }; var request = new TestOtherRequest(); - var message = mapper.MapToMessage(request, _publication); + var message = await mapper.MapToMessageAsync(request, _publication); var envelope = JsonSerializer.Deserialize>(message.Body.Bytes, JsonSerialisationOptions.Options); From 458df1100d258d204d79bda7e34d88572a6947ae Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 20:57:52 +0100 Subject: [PATCH 13/14] Convert new tests from rebase --- ..._async_only_outbox_should_call_async_archive.cs | 14 ++++++-------- ...th_sync_and_async_outbox_should_prefer_async.cs | 14 ++++++-------- ...with_no_outbox_configured_should_log_warning.cs | 9 ++++----- ...th_sync_only_outbox_should_call_sync_archive.cs | 14 ++++++-------- 4 files changed, 22 insertions(+), 29 deletions(-) diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_async_only_outbox_should_call_async_archive.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_async_only_outbox_should_call_async_archive.cs index cde93ba74c..3ee015621a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_async_only_outbox_should_call_async_archive.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_async_only_outbox_should_call_async_archive.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.Core.Tests.Archiving.TestDoubles; using Paramore.Brighter.Observability; using Paramore.Brighter.Outbox.Hosting; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; public class TimedOutboxArchiverAsyncOnlyTests { - [Fact] + [Test] public async Task When_archiving_with_async_only_outbox_should_call_async_archive() { //Arrange @@ -48,12 +47,11 @@ public async Task When_archiving_with_async_only_outbox_should_call_async_archiv await timedArchiver.StopAsync(cts.Token); //Assert - Assert.True(archiver.HasAsyncOutbox(), "Should have an async outbox"); - Assert.False(archiver.HasOutbox(), "Should not have a sync outbox"); - Assert.Equal(0, innerOutbox.EntryCount); - Assert.Contains( - new KeyValuePair(message.Id, message), + await Assert.That(archiver.HasAsyncOutbox()).IsTrue().Because("Should have an async outbox"); + await Assert.That(archiver.HasOutbox()).IsFalse().Because("Should not have a sync outbox"); + await Assert.That(innerOutbox.EntryCount).IsZero(); + await Assert.That( archiveProvider.ArchivedMessages - ); + ).Contains(new KeyValuePair(message.Id, message)); } } diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_both_sync_and_async_outbox_should_prefer_async.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_both_sync_and_async_outbox_should_prefer_async.cs index e5a8b2b475..e8730e5c6c 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_both_sync_and_async_outbox_should_prefer_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_both_sync_and_async_outbox_should_prefer_async.cs @@ -6,13 +6,12 @@ using Microsoft.Extensions.Time.Testing; using Paramore.Brighter.Observability; using Paramore.Brighter.Outbox.Hosting; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; public class TimedOutboxArchiverPrefersAsyncTests { - [Fact] + [Test] public async Task When_archiving_with_both_sync_and_async_outbox_should_prefer_async() { //Arrange — InMemoryOutbox implements both IAmAnOutboxSync and IAmAnOutboxAsync @@ -46,12 +45,11 @@ public async Task When_archiving_with_both_sync_and_async_outbox_should_prefer_a await timedArchiver.StopAsync(cts.Token); //Assert - Assert.True(archiver.HasAsyncOutbox(), "Should have an async outbox"); - Assert.True(archiver.HasOutbox(), "Should have a sync outbox"); - Assert.Equal(0, outbox.EntryCount); - Assert.Contains( - new KeyValuePair(message.Id, message), + await Assert.That(archiver.HasAsyncOutbox()).IsTrue().Because("Should have an async outbox"); + await Assert.That(archiver.HasOutbox()).IsTrue().Because("Should have a sync outbox"); + await Assert.That(outbox.EntryCount).IsZero(); + await Assert.That( archiveProvider.ArchivedMessages - ); + ).Contains(new KeyValuePair(message.Id, message)); } } diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_no_outbox_configured_should_log_warning.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_no_outbox_configured_should_log_warning.cs index 7afb1eac0f..da95b43592 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_no_outbox_configured_should_log_warning.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_no_outbox_configured_should_log_warning.cs @@ -4,13 +4,12 @@ using System.Transactions; using Paramore.Brighter.Core.Tests.Archiving.TestDoubles; using Paramore.Brighter.Outbox.Hosting; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; public class TimedOutboxArchiverNoOutboxTests { - [Fact] + [Test] public async Task When_archiving_with_no_outbox_configured_should_not_throw() { //Arrange — NullOutbox implements only IAmAnOutbox (neither sync nor async) @@ -32,8 +31,8 @@ public async Task When_archiving_with_no_outbox_configured_should_not_throw() await timedArchiver.StopAsync(cts.Token); //Assert - Assert.False(archiver.HasAsyncOutbox(), "Should not have an async outbox"); - Assert.False(archiver.HasOutbox(), "Should not have a sync outbox"); - Assert.Empty(archiveProvider.ArchivedMessages); + await Assert.That(archiver.HasAsyncOutbox()).IsFalse().Because("Should not have an async outbox"); + await Assert.That(archiver.HasOutbox()).IsFalse().Because("Should not have a sync outbox"); + await Assert.That(archiveProvider.ArchivedMessages).IsEmpty(); } } diff --git a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_sync_only_outbox_should_call_sync_archive.cs b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_sync_only_outbox_should_call_sync_archive.cs index c1ee06ceb4..86d6c6d002 100644 --- a/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_sync_only_outbox_should_call_sync_archive.cs +++ b/tests/Paramore.Brighter.Core.Tests/Archiving/When_archiving_with_sync_only_outbox_should_call_sync_archive.cs @@ -7,13 +7,12 @@ using Paramore.Brighter.Core.Tests.Archiving.TestDoubles; using Paramore.Brighter.Observability; using Paramore.Brighter.Outbox.Hosting; -using Xunit; namespace Paramore.Brighter.Core.Tests.Archiving; public class TimedOutboxArchiverSyncFallbackTests { - [Fact] + [Test] public async Task When_archiving_with_sync_only_outbox_should_call_sync_archive() { //Arrange @@ -48,12 +47,11 @@ public async Task When_archiving_with_sync_only_outbox_should_call_sync_archive( await timedArchiver.StopAsync(cts.Token); //Assert - Assert.True(archiver.HasOutbox(), "Should have a sync outbox"); - Assert.False(archiver.HasAsyncOutbox(), "Should not have an async outbox"); - Assert.Equal(0, innerOutbox.EntryCount); - Assert.Contains( - new KeyValuePair(message.Id, message), + await Assert.That(archiver.HasOutbox()).IsTrue().Because("Should have a sync outbox"); + await Assert.That(archiver.HasAsyncOutbox()).IsFalse().Because("Should not have an async outbox"); + await Assert.That(innerOutbox.EntryCount).IsZero(); + await Assert.That( archiveProvider.ArchivedMessages - ); + ).Contains(new KeyValuePair(message.Id, message)); } } From 0cd25228684e721005a8e7d2ac7d03b01344ace4 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Wed, 15 Apr 2026 22:26:30 +0100 Subject: [PATCH 14/14] test: remove blocking waits from tests --- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ...n_throwing_defer_action_respect_redrive.cs | 2 +- ...ck_action_should_nack_the_message_async.cs | 4 +- ...ack_action_should_not_acknowledge_async.cs | 6 +-- ...dont_ack_action_should_nack_the_message.cs | 4 +- ...andler_throw_a_reject_message_exception.cs | 4 +- .../TestDoubles/MyRejectedEventHandler.cs | 16 ++++--- .../TestDoubles/SpyCommandProcessor.cs | 3 +- .../MyFailsDueToTimeoutHandler.cs | 26 +++-------- .../Test Doubles/MyPassesTimeoutHandler.cs | 10 ++++- .../Outbox/DynamoDBOutboxProvider.cs | 42 ++++-------------- .../Async/IAmAnOutboxProviderAsync.cs | 2 +- .../Generated/Sync/IAmAnOutboxProviderSync.cs | 2 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 16 ++++--- ...It_Should_Be_Stored_With_All_Properties.cs | 16 ++++--- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 16 ++++--- ...action_It_Should_Be_Stored_After_Commit.cs | 16 ++++--- ...ages_They_Should_Be_Removed_From_Outbox.cs | 16 ++++--- ...essage_It_Should_Be_Removed_From_Outbox.cs | 16 ++++--- ...Id_It_Should_Return_The_Correct_Message.cs | 16 ++++--- ..._Message_It_Should_Return_Empty_Message.cs | 16 ++++--- ...uld_Include_Dispatched_And_Undispatched.cs | 18 +++++--- ...atched_Messages_It_Should_Filter_By_Age.cs | 16 ++++--- ...t_Should_Return_Only_Requested_Messages.cs | 16 ++++--- ...anding_Messages_It_Should_Filter_By_Age.cs | 16 ++++--- .../Outbox/DynamoDBOutboxProvider.cs | 43 ++++--------------- .../Async/IAmAnOutboxProviderAsync.cs | 2 +- .../Generated/Sync/IAmAnOutboxProviderSync.cs | 2 +- ...A_Duplicate_Message_It_Should_Not_Throw.cs | 16 ++++--- ...It_Should_Be_Stored_With_All_Properties.cs | 16 ++++--- ...on_And_Rollback_It_Should_Not_Be_Stored.cs | 16 ++++--- ...action_It_Should_Be_Stored_After_Commit.cs | 16 ++++--- ...ages_They_Should_Be_Removed_From_Outbox.cs | 16 ++++--- ...essage_It_Should_Be_Removed_From_Outbox.cs | 16 ++++--- ...Id_It_Should_Return_The_Correct_Message.cs | 16 ++++--- ..._Message_It_Should_Return_Empty_Message.cs | 16 ++++--- ...uld_Include_Dispatched_And_Undispatched.cs | 18 +++++--- ...atched_Messages_It_Should_Filter_By_Age.cs | 16 ++++--- ...t_Should_Return_Only_Requested_Messages.cs | 16 ++++--- ...anding_Messages_It_Should_Filter_By_Age.cs | 16 ++++--- .../Configuration.cs | 8 +--- 41 files changed, 329 insertions(+), 237 deletions(-) diff --git a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 1062b057e4..cf935901d5 100644 --- a/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -136,7 +136,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() var quitMessage = MessageFactory.CreateQuitMessage(_subscription.RoutingKey); _channel.Enqueue(quitMessage); - Task.WaitAll(task); + await task; await Task.Delay(5000); diff --git a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs index 3429c92e1e..6bbf08e675 100644 --- a/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs +++ b/tests/Paramore.Brighter.AWS.V4.Tests/MessagingGateway/Sqs/Fifo/Reactor/When_throwing_defer_action_respect_redrive.cs @@ -136,7 +136,7 @@ public async Task When_throwing_defer_action_respect_redrive_async() var quitMessage = MessageFactory.CreateQuitMessage(_subscription.RoutingKey); _channel.Enqueue(quitMessage); - Task.WaitAll(task); + await task; await Task.Delay(5000); diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs index a8deba99f5..c66ae7eadc 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_nack_the_message_async.cs @@ -46,7 +46,7 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message_A // Act: run pump in background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); // Wait for handler to process the message (DontAckAction thrown) - var handled = _commandProcessor.WaitForHandle(5000); + var handled = await _commandProcessor.WaitForHandleAsync(5000); await Assert.That(handled).IsTrue(); // Send quit to stop the pump after DontAckAction processing _channel.Enqueue(MessageFactory.CreateQuitMessage(_routingKey)); @@ -59,4 +59,4 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message_A await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs index fcd1df59f0..5f43a6fd11 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Proactor/When_a_handler_throws_dont_ack_action_should_not_acknowledge_async.cs @@ -46,7 +46,7 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge_As // Act: run the pump in the background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); // Wait for the handler to be invoked (first delivery) - await Assert.That(_commandProcessor.WaitForHandle()).IsTrue(); + await Assert.That(await _commandProcessor.WaitForHandleAsync()).IsTrue(); await Assert.That(_commandProcessor.SendCount).IsEqualTo(1); // Advance time past the ack timeout to trigger requeue of unacknowledged messages. // The message was received via InMemoryMessageConsumer.Receive which locks it in _lockedMessages. @@ -56,7 +56,7 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge_As // it was removed from _lockedMessages and no requeue occurs. _timeProvider.Advance(TimeSpan.FromSeconds(2)); // Wait for the handler to be invoked again (re-delivery of unacknowledged message) - await Assert.That(_commandProcessor.WaitForHandle()).IsTrue(); + await Assert.That(await _commandProcessor.WaitForHandleAsync()).IsTrue(); // Assert: handler was called at least twice (original delivery + re-delivery) // This proves the message was NOT acknowledged by the DontAckAction handler await Assert.That(_commandProcessor.SendCount >= 2).IsTrue(); @@ -66,4 +66,4 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Not_Acknowledge_As await Task.WhenAll(task); } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs index a16251e1be..a3cd1f5c05 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_a_handler_throws_dont_ack_action_should_nack_the_message.cs @@ -47,7 +47,7 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message() // Act: run pump in background var task = Task.Factory.StartNew(() => _messagePump.Run(), TaskCreationOptions.LongRunning); // Wait for handler to process the message (DontAckAction thrown) - var handled = _commandProcessor.WaitForHandle(5000); + var handled = await _commandProcessor.WaitForHandleAsync(5000); await Assert.That(handled).IsTrue(); // Send quit to stop the pump after DontAckAction processing _channel.Enqueue(MessageFactory.CreateQuitMessage(_routingKey)); @@ -60,4 +60,4 @@ public async Task When_A_Handler_Throws_DontAck_Action_Should_Nack_The_Message() await Assert.That(_bus.Stream(_routingKey)).IsNotEmpty(); } } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs index 8cbcaaae11..805fe3d300 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/Reactor/When_an_event_handler_throw_a_reject_message_exception.cs @@ -41,7 +41,7 @@ public MessageDispatchRejectMessageExceptionTests() public async Task When_an_event_handler_throw_a_reject_message_exception() { // Wait for the handler to be invoked before stopping - await Assert.That(MyRejectedEventHandler.WaitForHandle()).IsTrue(); + await Assert.That(await MyRejectedEventHandler.WaitForHandleAsync()).IsTrue(); await _dispatcher.End(); await Assert.That(_bus.Stream(_routingKey)).IsEmpty(); await Assert.That(_bus.Stream(_deadLetterRoutingKey)).IsNotEmpty(); @@ -49,4 +49,4 @@ public async Task When_an_event_handler_throw_a_reject_message_exception() var rejectionReason = $"Message rejected reason: {RejectionReason.DeliveryError} Description: {MyRejectedEventHandlerAsync.TestOfRejectionFlow}"; await Assert.That(message.Header.Bag[Message.RejectionReasonHeaderName]).IsEqualTo(rejectionReason); } -} \ No newline at end of file +} diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/MyRejectedEventHandler.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/MyRejectedEventHandler.cs index 84abf59375..3c18f3eeb6 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/MyRejectedEventHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/MyRejectedEventHandler.cs @@ -1,18 +1,24 @@ -using System.Threading; +using System; +using System.Threading.Tasks; using Paramore.Brighter.Actions; namespace Paramore.Brighter.Core.Tests.MessageDispatch.TestDoubles; public class MyRejectedEventHandler : RequestHandler { - private static readonly ManualResetEventSlim s_handled = new(false); + private static TaskCompletionSource s_handled = NewCompletionSource(); - public static void Reset() => s_handled.Reset(); - public static bool WaitForHandle(int timeoutMs = 5000) => s_handled.Wait(timeoutMs); + public static void Reset() => s_handled = NewCompletionSource(); + + public static Task WaitForHandleAsync(int timeoutMs = 5000) => + s_handled.Task.WaitAsync(TimeSpan.FromMilliseconds(timeoutMs)); + + private static TaskCompletionSource NewCompletionSource() => + new(TaskCreationOptions.RunContinuationsAsynchronously); public override MyRejectedEvent Handle(MyRejectedEvent myRejectedEvent) { - s_handled.Set(); + s_handled.TrySetResult(true); throw new RejectMessageAction("Test of rejection flow"); } } diff --git a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/SpyCommandProcessor.cs b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/SpyCommandProcessor.cs index dd8ee34037..d1d4b69784 100644 --- a/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/SpyCommandProcessor.cs +++ b/tests/Paramore.Brighter.Core.Tests/MessageDispatch/TestDoubles/SpyCommandProcessor.cs @@ -103,7 +103,8 @@ public SpyDontAckCommandProcessor() PublishCount = 0; } - public bool WaitForHandle(int timeoutMs = 5000) => _handled.Wait(timeoutMs); + public async Task WaitForHandleAsync(int timeoutMs = 5000) => + await _handled.WaitAsync(TimeSpan.FromMilliseconds(timeoutMs)); public override void Send(T command, RequestContext? requestContext = null) { diff --git a/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyFailsDueToTimeoutHandler.cs b/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyFailsDueToTimeoutHandler.cs index a2301f0f85..d22d0e7359 100644 --- a/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyFailsDueToTimeoutHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyFailsDueToTimeoutHandler.cs @@ -23,9 +23,7 @@ THE SOFTWARE. */ #endregion using System; -using System.Linq; using System.Threading; -using System.Threading.Tasks; using Paramore.Brighter.Core.Tests.CommandProcessors.TestDoubles; using Paramore.Brighter.Policies.Attributes; using Paramore.Brighter.Policies.Handlers; @@ -44,28 +42,16 @@ public override MyCommand Handle(MyCommand myCommand) //already died return base.Handle(myCommand); } - try - { - var delay = Task.Delay(1000, ct).ContinueWith( - x => - { - // done something I should not do, because I should of been cancel - myCommand.WasCancelled = false; - }, - ct); - Task.WaitAll(new[] { delay }); - } - catch (AggregateException e) + if (ct.WaitHandle.WaitOne(1000)) { - foreach (var tce in e.InnerExceptions.OfType()) - { - myCommand.WasCancelled = true; - myCommand.TaskCompleted = false; - return base.Handle(myCommand); - } + myCommand.WasCancelled = true; + myCommand.TaskCompleted = false; + return base.Handle(myCommand); } + // done something I should not do, because I should of been cancel + myCommand.WasCancelled = false; myCommand.TaskCompleted = true; return base.Handle(myCommand); } diff --git a/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyPassesTimeoutHandler.cs b/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyPassesTimeoutHandler.cs index aeeb8eb7a2..27eac3b07a 100644 --- a/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyPassesTimeoutHandler.cs +++ b/tests/Paramore.Brighter.Core.Tests/Timeout/Test Doubles/MyPassesTimeoutHandler.cs @@ -36,7 +36,15 @@ internal sealed class MyPassesTimeoutHandler : RequestHandler public override MyCommand Handle(MyCommand myCommand) { var ct = (CancellationToken)Context.Bag[TimeoutPolicyHandler.CONTEXT_BAG_TIMEOUT_CANCELLATION_TOKEN]; - Task.Delay(100, ct).ContinueWith((antecedent) => { myCommand.TaskCompleted = true; }, ct).Wait(ct); + if (!ct.WaitHandle.WaitOne(100)) + { + myCommand.TaskCompleted = true; + } + else + { + ct.ThrowIfCancellationRequested(); + } + return base.Handle(myCommand); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/DynamoDBOutboxProvider.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/DynamoDBOutboxProvider.cs index db53446759..a151f27f33 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/DynamoDBOutboxProvider.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/DynamoDBOutboxProvider.cs @@ -1,26 +1,24 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb; using Paramore.Brighter.DynamoDB.Tests.Outbox.Async; -using Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; using Paramore.Brighter.Outbox.DynamoDB; namespace Paramore.Brighter.DynamoDB.Tests.Outbox; -public class DynamoDBOutboxProvider : IAmAnOutboxProviderSync, IAmAnOutboxProviderAsync +public class DynamoDBOutboxProvider : IAmAnOutboxProviderAsync { private string _tableName = ""; - public IAmAnOutboxSync CreateOutbox() + public async Task CreateStoreAsync() { - _tableName = DynamoDbOutboxTable - .EnsureTableIsCreatedAsync(Const.DynamoDbClient) - .GetAwaiter() - .GetResult(); + _tableName = await DynamoDbOutboxTable.EnsureTableIsCreatedAsync(Const.DynamoDbClient); + } + public IAmAnOutboxSync CreateOutbox() + { return new DynamoDbOutbox( Const.DynamoDbClient, new DynamoDbConfiguration { TableName = _tableName } @@ -29,34 +27,17 @@ public IAmAnOutboxSync CreateOutbox() public IAmAnOutboxAsync CreateOutboxAsync() { - _tableName = DynamoDbOutboxTable - .EnsureTableIsCreatedAsync(Const.DynamoDbClient) - .GetAwaiter() - .GetResult(); - return new DynamoDbOutbox( Const.DynamoDbClient, new DynamoDbConfiguration { TableName = _tableName } ); } - public void CreateStore() { } - - public Task CreateStoreAsync() - { - return Task.CompletedTask; - } - public IAmABoxTransactionProvider CreateTransactionProvider() { return new DynamoDbUnitOfWork(Const.DynamoDbClient); } - public void DeleteStore(IEnumerable messages) - { - DeleteStoreAsync(messages).GetAwaiter().GetResult(); - } - public async Task DeleteStoreAsync(IEnumerable messages) { var client = Const.DynamoDbClient; @@ -81,18 +62,13 @@ await client.DeleteItemAsync( } } - public IEnumerable GetAllMessages() - { - return GetAllMessagesAsync().GetAwaiter().GetResult(); - } - public async Task> GetAllMessagesAsync() { var receivedMessages = new List(); var outbox = new DynamoDbOutbox( Const.DynamoDbClient, - new DynamoDbConfiguration { TableName = _tableName! } + new DynamoDbConfiguration { TableName = _tableName } ); var client = Const.DynamoDbClient; @@ -105,7 +81,7 @@ public async Task> GetAllMessagesAsync() TableName = _tableName, AttributesToGet = { nameof(MessageItem.MessageId) }, ExclusiveStartKey = lastKey, - Select = Select.SPECIFIC_ATTRIBUTES, + Select = Amazon.DynamoDBv2.Select.SPECIFIC_ATTRIBUTES, } ); diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs index 1d655df266..9387ee4809 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs index 76541b0f7a..fb742a1c1a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index d09b4a541b..49f256fdff 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable +public class WhenAddingADuplicateMessageItShouldNotThrow { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingADuplicateMessageItShouldNotThrow() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -65,8 +64,15 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() await Assert.That(true).IsTrue(); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 72020eecbc..a9ee66736a 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable +public class WhenAddingAMessageItShouldBeStoredWithAllProperties { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageItShouldBeStoredWithAllProperties() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -97,8 +96,15 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties( await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index c7b3549dd6..befb600478 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : IDisposable +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -71,8 +70,15 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index b013d23211..da464e75a0 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : IDisposable +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -102,8 +101,15 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 636e5be85b..930cdf08a5 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDisposable +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -78,8 +77,15 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 2d6ad9b717..c62df1bdb2 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable +public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -78,8 +77,15 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index eef41e08a6..1d7e16e9a6 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDisposable +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -104,8 +103,15 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 6d94750a2a..12442aef44 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisposable +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -62,8 +61,15 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index 66a11e22ad..8f0103a614 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched : IDisposable +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -66,7 +65,7 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An outbox.MarkDispatched(dispatched.Id, context, DateTime.UtcNow.AddSeconds(-30)); // Act - var messages = _outboxProvider.GetAllMessages().ToArray(); + var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert await Assert.That(messages.Length >= 3).IsTrue(); @@ -75,8 +74,15 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 8b63ae2406..e63b113c81 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable +public class WhenRetrievingDispatchedMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingDispatchedMessagesItShouldFilterByAge() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -86,8 +85,15 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index 0be35f6e0a..65d0c0a7c5 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : IDisposable +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -77,8 +76,15 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index 8f2d833baf..3d09f4f711 100644 --- a/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.Tests.Outbox.Sync; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable +public class WhenRetrievingOutstandingMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingOutstandingMessagesItShouldFilterByAge() { _outboxProvider = new Paramore.Brighter.DynamoDB.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -86,8 +85,15 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/DynamoDBOutboxProvider.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/DynamoDBOutboxProvider.cs index e77b4dba93..93c30cd4fd 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/DynamoDBOutboxProvider.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/DynamoDBOutboxProvider.cs @@ -1,26 +1,24 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.Model; using Paramore.Brighter.DynamoDb.V4; using Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Async; -using Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; using Paramore.Brighter.Outbox.DynamoDB.V4; namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox; -public class DynamoDBOutboxProvider : IAmAnOutboxProviderSync, IAmAnOutboxProviderAsync +public class DynamoDBOutboxProvider : IAmAnOutboxProviderAsync { private string _tableName = ""; - public IAmAnOutboxSync CreateOutbox() + public async Task CreateStoreAsync() { - _tableName = DynamoDbOutboxTable - .EnsureTableIsCreatedAsync(Const.DynamoDbClient) - .GetAwaiter() - .GetResult(); + _tableName = await DynamoDbOutboxTable.EnsureTableIsCreatedAsync(Const.DynamoDbClient); + } + public IAmAnOutboxSync CreateOutbox() + { return new DynamoDbOutbox( Const.DynamoDbClient, new DynamoDbConfiguration { TableName = _tableName } @@ -29,34 +27,17 @@ public IAmAnOutboxSync CreateOutbox() public IAmAnOutboxAsync CreateOutboxAsync() { - _tableName = DynamoDbOutboxTable - .EnsureTableIsCreatedAsync(Const.DynamoDbClient) - .GetAwaiter() - .GetResult(); - return new DynamoDbOutbox( Const.DynamoDbClient, new DynamoDbConfiguration { TableName = _tableName } ); } - public void CreateStore() { } - - public Task CreateStoreAsync() - { - return Task.CompletedTask; - } - public IAmABoxTransactionProvider CreateTransactionProvider() { return new DynamoDbUnitOfWork(Const.DynamoDbClient); } - public void DeleteStore(IEnumerable messages) - { - DeleteStoreAsync(messages).GetAwaiter().GetResult(); - } - public async Task DeleteStoreAsync(IEnumerable messages) { var client = Const.DynamoDbClient; @@ -76,23 +57,17 @@ await client.DeleteItemAsync( } catch { - // Ignoring any error during delete, it's not important at this point } } } - public IEnumerable GetAllMessages() - { - return GetAllMessagesAsync().GetAwaiter().GetResult(); - } - public async Task> GetAllMessagesAsync() { var receivedMessages = new List(); var outbox = new DynamoDbOutbox( Const.DynamoDbClient, - new DynamoDbConfiguration { TableName = _tableName! } + new DynamoDbConfiguration { TableName = _tableName } ); var client = Const.DynamoDbClient; @@ -105,7 +80,7 @@ public async Task> GetAllMessagesAsync() TableName = _tableName, AttributesToGet = [nameof(MessageItem.MessageId)], ExclusiveStartKey = lastKey, - Select = Select.SPECIFIC_ATTRIBUTES, + Select = Amazon.DynamoDBv2.Select.SPECIFIC_ATTRIBUTES, } ); diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs index 2dcdf83407..582542c5f8 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Async/IAmAnOutboxProviderAsync.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs index 2cb6438310..7bad0a558e 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/IAmAnOutboxProviderSync.cs @@ -1,4 +1,4 @@ -#region Licence +#region Licence /* The MIT License (MIT) Copyright © 2014 Ian Cooper diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs index 8dfc1420de..27693d4f5c 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Duplicate_Message_It_Should_Not_Throw.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenAddingADuplicateMessageItShouldNotThrow : IDisposable +public class WhenAddingADuplicateMessageItShouldNotThrow { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingADuplicateMessageItShouldNotThrow() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -65,8 +64,15 @@ public async Task When_Adding_A_Duplicate_Message_It_Should_Not_Throw() await Assert.That(true).IsTrue(); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs index 5fcef4ce7d..4fc134faeb 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenAddingAMessageItShouldBeStoredWithAllProperties : IDisposable +public class WhenAddingAMessageItShouldBeStoredWithAllProperties { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageItShouldBeStoredWithAllProperties() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -97,8 +96,15 @@ public async Task When_Adding_A_Message_It_Should_Be_Stored_With_All_Properties( await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs index 634252596f..a2f5e08b84 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_And_Rollback_It_Should_Not_Be_Stored.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored : IDisposable +public class WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageWithinTransactionAndRollbackItShouldNotBeStored() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -71,8 +70,15 @@ public async Task When_Adding_A_Message_Within_Transaction_And_Rollback_It_Shoul await Assert.That(storedMessage.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs index 9bd62470a4..fdbf337a54 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_After_Commit.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit : IDisposable +public class WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenAddingAMessageWithinTransactionItShouldBeStoredAfterCommit() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -102,8 +101,15 @@ public async Task When_Adding_A_Message_Within_Transaction_It_Should_Be_Stored_A await Assert.That(storedMessage.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs index 365b5a43f9..16ba0393ed 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Outbox.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox : IDisposable +public class WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenDeletingMultipleMessagesTheyShouldBeRemovedFromOutbox() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -78,8 +77,15 @@ public async Task When_Deleting_Multiple_Messages_They_Should_Be_Removed_From_Ou await Assert.That(messages.Select(x => x.Id)).DoesNotContain(thirdMessage.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs index 9d789d10a4..0c389cf114 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox : IDisposable +public class WhenDeletingOneMessageItShouldBeRemovedFromOutbox { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenDeletingOneMessageItShouldBeRemovedFromOutbox() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -78,8 +77,15 @@ public async Task When_Deleting_One_Message_It_Should_Be_Removed_From_Outbox() await Assert.That(messages.Select(x => x.Id)).Contains(thirdMessage.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs index a81e939590..5e209afba8 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_Message.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage : IDisposable +public class WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingAMessageByIdItShouldReturnTheCorrectMessage() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -104,8 +103,15 @@ public async Task When_Retrieving_A_Message_By_Id_It_Should_Return_The_Correct_M await Assert.That(dispatched.Header.TraceState).IsEqualTo(message.Header.TraceState); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs index 26c8148463..400309cfee 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_Message.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage : IDisposable +public class WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingANonExistentMessageItShouldReturnEmptyMessage() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -62,8 +61,15 @@ public async Task When_Retrieving_A_Non_Existent_Message_It_Should_Return_Empty_ await Assert.That(message.Header.MessageType).IsEqualTo(MessageType.MT_NONE); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs index e2cfce4575..361e5a935c 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_All_Messages_They_Should_Include_Dispatched_And_Undispatched.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched : IDisposable +public class WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingAllMessagesTheyShouldIncludeDispatchedAndUndispatched() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -66,7 +65,7 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An outbox.MarkDispatched(dispatched.Id, context, DateTime.UtcNow.AddSeconds(-30)); // Act - var messages = _outboxProvider.GetAllMessages().ToArray(); + var messages = (await _outboxProvider.GetAllMessagesAsync()).ToArray(); // Assert await Assert.That(messages.Length >= 3).IsTrue(); @@ -75,8 +74,15 @@ public async Task When_Retrieving_All_Messages_They_Should_Include_Dispatched_An await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs index 3de905966b..e44dcbd353 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingDispatchedMessagesItShouldFilterByAge : IDisposable +public class WhenRetrievingDispatchedMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingDispatchedMessagesItShouldFilterByAge() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -86,8 +85,15 @@ public async Task When_Retrieving_Dispatched_Messages_It_Should_Filter_By_Age() await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs index deef5b551e..97970992f5 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requested_Messages.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages : IDisposable +public class WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingMessagesByIdsItShouldReturnOnlyRequestedMessages() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -77,8 +76,15 @@ public async Task When_Retrieving_Messages_By_Ids_It_Should_Return_Only_Requeste await Assert.That(messages.Select(x => x.Id)).Contains(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs index b464820406..12042d35c0 100644 --- a/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs +++ b/tests/Paramore.Brighter.DynamoDB.V4.Tests/Outbox/Generated/Sync/When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age.cs @@ -33,16 +33,15 @@ THE SOFTWARE. */ namespace Paramore.Brighter.DynamoDB.V4.Tests.Outbox.Sync; -public class WhenRetrievingOutstandingMessagesItShouldFilterByAge : IDisposable +public class WhenRetrievingOutstandingMessagesItShouldFilterByAge { - private readonly IAmAnOutboxProviderSync _outboxProvider; + private readonly Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider _outboxProvider; private readonly IAmAMessageFactory _messageFactory; private List _createdMessages = []; public WhenRetrievingOutstandingMessagesItShouldFilterByAge() { _outboxProvider = new Paramore.Brighter.DynamoDB.V4.Tests.Outbox.DynamoDBOutboxProvider(); - _outboxProvider.CreateStore(); _messageFactory = new DefaultMessageFactory(); } @@ -86,8 +85,15 @@ public async Task When_Retrieving_Outstanding_Messages_It_Should_Filter_By_Age() await Assert.That(messagesOver4Hours.Select(x => x.Id)).DoesNotContain(undispatched.Id); } - public void Dispose() + [Before(HookType.Test)] + public async Task Setup() { - _outboxProvider.DeleteStore(_createdMessages); + await _outboxProvider.CreateStoreAsync(); + } + + [After(HookType.Test)] + public async Task Cleanup() + { + await _outboxProvider.DeleteStoreAsync(_createdMessages); } } diff --git a/tests/Paramore.Brighter.MSSQL.Tests/Configuration.cs b/tests/Paramore.Brighter.MSSQL.Tests/Configuration.cs index b21bd10811..29361ed7fa 100644 --- a/tests/Paramore.Brighter.MSSQL.Tests/Configuration.cs +++ b/tests/Paramore.Brighter.MSSQL.Tests/Configuration.cs @@ -10,6 +10,7 @@ public static class Configuration public const string TablePrefix = "Table"; private static bool s_databaseCreated; + private static readonly object s_databaseLock = new(); private static readonly SemaphoreSlim s_semaphoreSlim = new(1, 1); public static void EnsureDatabaseExists(string connectionString) @@ -19,8 +20,7 @@ public static void EnsureDatabaseExists(string connectionString) return; } - s_semaphoreSlim.Wait(); - try + lock (s_databaseLock) { if (s_databaseCreated) { @@ -43,11 +43,7 @@ IF DB_ID('{databaseName}') IS NULL END; """; command.ExecuteNonQuery(); - } - finally - { s_databaseCreated = true; - s_semaphoreSlim.Release(); } }