public static void Should_use_custom_generic_communication_listener_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            Mock <ICommunicationListener> mockListener = null;

            ICommunicationListener ArrangeListenerFactory(
                ServiceContext context,
                string endpointName,
                IServiceProvider provider)
            {
                mockListener = new Mock <ICommunicationListener>();
                mockListener
                .As <ICommunicationListener>()
                .Setup(instance => instance.OpenAsync(It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(string.Empty));

                return(mockListener.Object);
            }

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseGenericListenerCommunicationListenerTheoryExtension().Setup(ArrangeListenerFactory));
            theoryItem.Try();

            // Assert
            mockListener.Verify();
        }
        public static void Should_inject_remoting_handler_dependencies_When_remoting_handler_type_is_set(
            Theories.Case @case)
        {
            // Arrange
            var arrangeDependency = new TestDependency();

            var arrangeCollection = new ServiceCollection();

            arrangeCollection.AddSingleton <ITestDependency>(arrangeDependency);

            object expectedDependency = arrangeDependency;
            object actualDependency   = null;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseDependenciesTheoryExtension().Setup(() => arrangeCollection));
            theoryItem.SetupExtension(new UseRemotingListenerHandlerTheoryExtension().Setup <TestRemotingHandlerWithParameters>());
            theoryItem.SetupExtension(
                new PickRemotingListenerHandlerTheoryExtension().Setup(
                    s =>
            {
                var impl         = (TestRemotingHandlerWithParameters)s;
                actualDependency = impl.Dependency;
            }));
            theoryItem.Try();

            // Assert
            Assert.Same(expectedDependency, actualDependency);
        }
        public static void Should_use_custom_remoting_communication_listener_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            Mock <FabricTransportServiceRemotingListener> mockListener = null;

            FabricTransportServiceRemotingListener ArrangeListenerFactory(
                ServiceContext context,
                ServiceHostRemotingCommunicationListenerComponentsFactory build)
            {
                var options = build(context);

                mockListener = new Mock <FabricTransportServiceRemotingListener>(
                    context,
                    options.MessageHandler,
                    options.ListenerSettings,
                    options.MessageSerializationProvider);

                mockListener
                .As <ICommunicationListener>()
                .Setup(instance => instance.OpenAsync(It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(string.Empty));

                return(mockListener.Object);
            }

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseRemotingListenerCommunicationListenerTheoryExtension().Setup(ArrangeListenerFactory));
            theoryItem.Try();

            // Assert
            mockListener.Verify();
        }
        public static void Should_use_custom_aspnetcore_communication_listener_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            Mock <AspNetCoreCommunicationListener> mockListener = null;

            AspNetCoreCommunicationListener ArrangeListenerFactory(
                ServiceContext context,
                string s,
                Func <string, AspNetCoreCommunicationListener, IWebHost> arg3)
            {
                var action = new Mock <Func <string, AspNetCoreCommunicationListener, IWebHost> >();

                mockListener = new Mock <AspNetCoreCommunicationListener>(context, action.Object);
                mockListener.Setup(instance => instance.OpenAsync(It.IsAny <CancellationToken>()))
                .Callback(() => arg3(string.Empty, mockListener.Object))
                .Returns(Task.FromResult(string.Empty));

                return(mockListener.Object);
            }

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseAspNetCoreListenerCommunicationListenerTheoryExtension().Setup(ArrangeListenerFactory));
            theoryItem.Try();

            // Assert
            mockListener.Verify();
        }
        public static void Should_use_custom_remoting_settings_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            var arrangeSettings = new FabricTransportRemotingListenerSettings();

            object expectedSettings = arrangeSettings;
            object actualSettings   = null;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseRemotingListenerSettingsTheoryExtension().Setup(() => arrangeSettings));
            theoryItem.SetupExtension(new PickRemotingListenerSettingsTheoryExtension().Setup(s => actualSettings = s));
            theoryItem.Try();

            // Assert
            Assert.Same(expectedSettings, actualSettings);
        }
        public static void Should_use_custom_remoting_implementation_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            var arrangeImplementation = new TestRemotingImplementation();

            object expectedImplementation = arrangeImplementation;
            object actualImplementation   = null;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseRemotingListenerImplementationTheoryExtension().Setup(provider => arrangeImplementation));
            theoryItem.SetupExtension(new PickRemotingListenerImplementationTheoryExtension().Setup(s => actualImplementation = s));
            theoryItem.Try();

            // Assert
            Assert.Same(expectedImplementation, actualImplementation);
        }
        public static void Should_use_endpoint_name_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            const string ArrangeEndpoint = "Endpoint";

            object expectedEndpoint = ArrangeEndpoint;
            object actualEndpoint   = null;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseListenerEndpointTheoryExtension().Setup(ArrangeEndpoint));
            theoryItem.SetupExtension(new PickListenerEndpointTheoryExtension().Setup(s => actualEndpoint = s));
            theoryItem.Try();

            // Assert
            Assert.Same(expectedEndpoint, actualEndpoint);
        }
        public static void Should_use_custom_remoting_handler_For_communication_listener(
            Theories.Case @case)
        {
            // Arrange
            var mockHandler = new Mock <IServiceRemotingMessageHandler>();

            var arrangeHandler = mockHandler.Object;

            object expectedHandler = arrangeHandler;
            object actualHandler   = null;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseRemotingListenerHandlerTheoryExtension().Setup(provider => arrangeHandler));
            theoryItem.SetupExtension(new PickRemotingListenerHandlerTheoryExtension().Setup(s => actualHandler = s));
            theoryItem.Try();

            // Assert
            Assert.Same(expectedHandler, actualHandler);
        }
        public static void Should_invoke_delegate_On_default_service_lifecycle_event(
            Theories.Case @case)
        {
            // Arrange
            var mockDelegate = new Mock <Action>();

            mockDelegate
            .Setup(instance => instance())
            .Verifiable();

            var arrangeDelegate = mockDelegate.Object;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseDelegateTheoryExtension().Setup(arrangeDelegate));
            theoryItem.Try();

            // Assert
            mockDelegate.Verify();
        }
        public static void Should_use_custom_web_host_builder_For_web_server(
            Theories.Case @case)
        {
            // Arrange
            var mockWebHost = new Mock <IWebHost>();

            var mockWebHostBuilder = new Mock <IWebHostBuilder>();

            mockWebHostBuilder
            .Setup(instance => instance.Build())
            .Returns(mockWebHost.Object)
            .Verifiable();

            var arrangeWebHostBuilder = mockWebHostBuilder.Object;

            var theoryItem = @case.Promise.Resolve();

            // Act
            theoryItem.SetupExtension(new UseAspNetCoreListenerWebHostBuilderTheoryExtension().Setup(() => arrangeWebHostBuilder));
            theoryItem.Try();

            // Assert
            mockWebHostBuilder.Verify();
        }