public void CreateSendPortTwoWay()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            // initialize BindingInfoBuilderVisitor.ApplicationName
            visitor.VisitApplicationBinding(new TestApplication());
            var binding = visitor.CreateSendPort(new TestApplication.TwoWaySendPort());

            Assert.That(binding.ApplicationName, Is.EqualTo("TestApplication"));
            Assert.That(binding.Description, Is.EqualTo("Some Useless Two-Way Test Send Port"));
            Assert.That(binding.Filter, Is.Null);
            Assert.That(binding.IsDynamic, Is.False);
            Assert.That(binding.IsStatic, Is.True);
            Assert.That(binding.IsTwoWay, Is.True);
            Assert.That(binding.Name, Is.EqualTo("TwoWaySendPort"));
            Assert.That(binding.PrimaryTransport.FromTime, Is.EqualTo((DateTime)ServiceWindow.None.StartTime));
            Assert.That(binding.PrimaryTransport.Primary, Is.True);
            Assert.That(binding.PrimaryTransport.RetryCount, Is.EqualTo(RetryPolicy.Default.Count));
            Assert.That(binding.PrimaryTransport.RetryInterval, Is.EqualTo(RetryPolicy.Default.Interval.TotalMinutes));
            Assert.That(binding.PrimaryTransport.SendHandler.Name, Is.EqualTo("Send Host Name"));
            Assert.That(binding.PrimaryTransport.SendHandler.TransportType.Name, Is.EqualTo("Test Dummy"));
            Assert.That(binding.PrimaryTransport.ServiceWindowEnabled, Is.False);
            Assert.That(binding.PrimaryTransport.ToTime, Is.EqualTo((DateTime)ServiceWindow.None.StopTime));
            Assert.That(binding.ReceivePipeline.Name, Is.EqualTo(typeof(PassThruReceive).FullName));
            Assert.That(binding.ReceivePipeline.FullyQualifiedName, Is.EqualTo(typeof(PassThruReceive).AssemblyQualifiedName));
            Assert.That(binding.ReceivePipeline.TrackingOption, Is.EqualTo(PipelineTrackingTypes.None));
            Assert.That(binding.ReceivePipeline.Type, Is.EqualTo(PipelineRef.ReceivePipelineRef().Type));
            Assert.That(binding.ReceivePipelineData, Is.Not.Null.And.Not.Empty);
            Assert.That(binding.SecondaryTransport, Is.Null);
            Assert.That(binding.SendPipelineData, Is.Empty);
            Assert.That(binding.TransmitPipeline.Name, Is.EqualTo(typeof(PassThruTransmit).FullName));
            Assert.That(binding.TransmitPipeline.FullyQualifiedName, Is.EqualTo(typeof(PassThruTransmit).AssemblyQualifiedName));
            Assert.That(binding.TransmitPipeline.TrackingOption, Is.EqualTo(PipelineTrackingTypes.None));
            Assert.That(binding.TransmitPipeline.Type, Is.EqualTo(PipelineRef.TransmitPipelineRef().Type));
        }
        public void CreateReceiveLocationOneWay()
        {
            var dsl = new TestApplication.OneWayReceiveLocation();

            var visitor = BindingInfoBuilderVisitor.Create();
            var binding = visitor.CreateReceiveLocation(dsl);

            Assert.That(binding.Name, Is.EqualTo("OneWayReceiveLocation"));
            Assert.That(binding.Address, Is.EqualTo(@"c:\files\drops\*.xml"));
            Assert.That(binding.Description, Is.EqualTo("Some Useless One-Way Test Receive Location"));
            Assert.That(binding.Enable, Is.False);
            Assert.That(binding.EndDate, Is.EqualTo(dsl.Transport.Schedule.StopDate));
            Assert.That(binding.EndDateEnabled, Is.True);
            Assert.That(binding.FromTime, Is.EqualTo((DateTime)dsl.Transport.Schedule.ServiceWindow.StartTime));
            Assert.That(binding.ReceiveHandler.Name, Is.EqualTo("Receive Host Name"));
            Assert.That(binding.ReceivePipeline.Name, Is.EqualTo(typeof(PassThruReceive).FullName));
            Assert.That(binding.ReceivePipeline.FullyQualifiedName, Is.EqualTo(typeof(PassThruReceive).AssemblyQualifiedName));
            Assert.That(binding.ReceivePipeline.TrackingOption, Is.EqualTo(PipelineTrackingTypes.None));
            Assert.That(binding.ReceiveHandler.TransportType.Name, Is.EqualTo("Test Dummy"));
            Assert.That(binding.ReceivePipeline.Type, Is.EqualTo(PipelineRef.ReceivePipelineRef().Type));
            Assert.That(binding.ReceivePipelineData, Is.Not.Null.And.Not.Empty);
            Assert.That(binding.SendPipeline, Is.Null);
            Assert.That(binding.SendPipelineData, Is.Null);
            Assert.That(binding.ServiceWindowEnabled, Is.True);
            Assert.That(binding.StartDate, Is.EqualTo(dsl.Transport.Schedule.StartDate));
            Assert.That(binding.StartDateEnabled, Is.True);
            Assert.That(binding.ToTime, Is.EqualTo((DateTime)dsl.Transport.Schedule.ServiceWindow.StopTime));
        }
        public void CreateModuleRef()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            // initialize BindingInfo
            visitor.VisitApplicationBinding(new TestApplication());

            var binding = visitor.CreateOrFindModuleRef(new ProcessOrchestrationBinding());

            Assert.That(binding.FullName, Is.EqualTo(typeof(Process).Assembly.FullName));
        }
        public void VisitedSendPortNameMustBeUnique()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            visitor.VisitApplicationBinding(new TestApplication());
            visitor.VisitSendPort(new TestApplication.OneWaySendPort());

            Assert.That(
                () => visitor.VisitSendPort(new TestApplication.OneWaySendPort()),
                Throws.InvalidOperationException.With.Message.EqualTo("Duplicate send port name: 'OneWaySendPort'."));
        }
        public void VisitedReceiveLocationNameMustBeUnique()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            visitor.VisitApplicationBinding(new TestApplication());
            visitor.VisitReceivePort(new TestApplication.OneWayReceivePort());
            visitor.VisitReceiveLocation(new TestApplication.OneWayReceiveLocation());

            Assert.That(
                () => visitor.VisitReceiveLocation(new TestApplication.OneWayReceiveLocation()),
                Throws.InvalidOperationException.With.Message.EqualTo("Duplicate receive location name: 'OneWayReceiveLocation'."));
        }
        public void VisitApplicationBindingSettlesTargetEnvironmentOverrides()
        {
            var applicationBindingMock = new Mock <IApplicationBinding <string> >();

            applicationBindingMock.As <ISupportNamingConvention>();
            applicationBindingMock.As <ISupportValidation>();
            var visitableApplicationBindingMock = applicationBindingMock.As <IVisitable <IApplicationBindingVisitor> >();

            var visitor = BindingInfoBuilderVisitor.Create();

            visitor.VisitApplicationBinding(applicationBindingMock.Object);

            visitableApplicationBindingMock.Verify(a => a.Accept(It.IsAny <ApplicationBindingEnvironmentSettlerVisitor>()), Times.Once);
        }
        public void CreateReceivePortTwoWay()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            // initialize BindingInfoBuilderVisitor.ApplicationName
            visitor.VisitApplicationBinding(new TestApplication());
            var binding = visitor.CreateReceivePort(new TestApplication.TwoWayReceivePort());

            Assert.That(binding.ApplicationName, Is.EqualTo("TestApplication"));
            Assert.That(binding.Description, Is.EqualTo("Some Useless Two-Way Test Receive Port"));
            Assert.That(binding.IsTwoWay, Is.True);
            Assert.That(binding.Name, Is.EqualTo("TwoWayReceivePort"));
            Assert.That(binding.ReceiveLocations.Count, Is.EqualTo(0));
        }
        public void CreateBindingInfo()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            visitor.VisitApplicationBinding(new TestApplication());
            var binding = visitor.BindingInfo;

            Assert.That(binding.BindingParameters.BindingActions, Is.EqualTo(BindingParameters.BindingActionTypes.Bind));
            Assert.That(binding.BindingParameters.BindingItems, Is.EqualTo(BindingParameters.BindingItemTypes.All));
            Assert.That(binding.BindingParameters.BindingScope, Is.EqualTo(BindingParameters.BindingScopeType.Application));
            Assert.That(binding.BindingParameters.BindingSetState, Is.EqualTo(BindingParameters.BindingSetStateType.UseServiceState));
            Assert.That(binding.BindingParameters.BindingsSourceVersion.ToString(), Is.EqualTo(new BindingInfo().Version));
            Assert.That(binding.Description, Is.EqualTo("Some Useless Test Application"));
            Assert.That(binding.ModuleRefCollection.Count, Is.EqualTo(1));
            Assert.That(binding.ModuleRefCollection[0].Name, Is.EqualTo("[Application:TestApplication]"));
        }
        public void CreateServiceRef()
        {
            var visitor = BindingInfoBuilderVisitor.Create();

            var orchestrationBinding = new ProcessOrchestrationBinding(
                ob => {
                ob.Description         = "Some Useless Orchestration.";
                ob.Host                = "Processing Host Name";
                ob.ReceivePort         = new TestApplication.OneWayReceivePort();
                ob.RequestResponsePort = new TestApplication.TwoWayReceivePort();
                ob.SendPort            = new TestApplication.OneWaySendPort();
                ob.SolicitResponsePort = new TestApplication.TwoWaySendPort();
            });
            var binding = visitor.CreateServiceRef(orchestrationBinding);

            Assert.That(binding.Description, Is.EqualTo("Some Useless Orchestration."));
            Assert.That(binding.Host.Name, Is.EqualTo("Processing Host Name"));
            Assert.That(binding.Host.Trusted, Is.False);
            Assert.That(binding.Host.Type, Is.EqualTo((int)HostType.Invalid));
            Assert.That(binding.Name, Is.EqualTo(typeof(Process).FullName));
            Assert.That(binding.State, Is.EqualTo(ServiceRef.ServiceRefState.Enlisted));
            Assert.That(binding.TrackingOption, Is.EqualTo(OrchestrationTrackingTypes.None));
            Assert.That(binding.Ports.Count, Is.EqualTo(4));

            Assert.That(binding.Ports[0].Modifier, Is.EqualTo((int)PortModifier.Import));
            Assert.That(binding.Ports[0].Name, Is.EqualTo("SendPort"));
            Assert.That(binding.Ports[0].ReceivePortRef, Is.Null);
            Assert.That(binding.Ports[0].SendPortRef.Name, Is.EqualTo(((ISupportNamingConvention) new TestApplication.OneWaySendPort()).Name));
            Assert.That(binding.Ports[1].Modifier, Is.EqualTo((int)PortModifier.Export));

            Assert.That(binding.Ports[1].Name, Is.EqualTo("ReceivePort"));
            Assert.That(binding.Ports[1].ReceivePortRef.Name, Is.EqualTo(((ISupportNamingConvention) new TestApplication.OneWayReceivePort()).Name));
            Assert.That(binding.Ports[1].SendPortRef, Is.Null);

            Assert.That(binding.Ports[2].Modifier, Is.EqualTo((int)PortModifier.Export));
            Assert.That(binding.Ports[2].Name, Is.EqualTo("RequestResponsePort"));
            Assert.That(binding.Ports[2].ReceivePortRef.Name, Is.EqualTo(((ISupportNamingConvention) new TestApplication.TwoWayReceivePort()).Name));
            Assert.That(binding.Ports[2].SendPortRef, Is.Null);

            Assert.That(binding.Ports[3].Modifier, Is.EqualTo((int)PortModifier.Import));
            Assert.That(binding.Ports[3].Name, Is.EqualTo("SolicitResponsePort"));
            Assert.That(binding.Ports[3].ReceivePortRef, Is.Null);
            Assert.That(binding.Ports[3].SendPortRef.Name, Is.EqualTo(((ISupportNamingConvention) new TestApplication.TwoWaySendPort()).Name));
        }