Exemple #1
0
        public void RabbitMQSource_NewConnection_GivenNoArgConstructor_ConnectionSuccess()
        {
            //-------------------------------Arrange-----------------------------
            var port        = 5672;
            var hostName    = Depends.EnableDocker?Depends.RigOpsIP:Depends.SVRDEVIP;
            var userName    = "******";
            var password    = "******";
            var virtualHost = "/";

            var rabbitMqSource = new RabbitMQSource
            {
                HostName    = hostName,
                UserName    = userName,
                Password    = password,
                Port        = port,
                VirtualHost = virtualHost,
            };

            //----------------------Pre-Assert---------------------------------
            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(5672, rabbitMqSource.Port);
            Assert.AreEqual(Depends.EnableDocker?Depends.RigOpsIP:Depends.SVRDEVIP, rabbitMqSource.HostName);
            Assert.AreEqual("test", rabbitMqSource.UserName);
            Assert.AreEqual("test", rabbitMqSource.Password);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);

            //-------------------------------Act---------------------------------
            using (var rabbitConnection = rabbitMqSource.NewConnection())
            {
                //-------------------------------Assert------------------------------
                Assert.IsTrue(rabbitConnection.IsOpen);
            }
        }
Exemple #2
0
        public void RabbitMQSource_NewConnection_Success()
        {
            //-------------------------------Arrange-----------------------------
            string xmlString = $@"<Source ID=""1a82a341-b678-4992-a25a-39cdd57198d4"" Name=""Example Rabbit MQ Source"" ResourceType=""RabbitMQSource"" IsValid=""false"" 
                                               ConnectionString=""HostName={(Depends.EnableDocker?Depends.RigOpsIP:Depends.SVRDEVIP)};Port=;UserName=test;Password=test;VirtualHost=/"" Type=""RabbitMQSource"" ServerVersion=""1.4.1.27"" ServerID=""693ca20d-fb17-4044-985a-df3051d6bac7"">
                                          <DisplayName>Example Rabbit MQ Source</DisplayName>
                                          <AuthorRoles>
                                          </AuthorRoles>
                                          <ErrorMessages />
                                          <TypeOf>RabbitMQSource</TypeOf>
                                          <VersionInfo DateTimeStamp=""2017-05-26T14:21:24.3247847+02:00"" Reason="""" User=""NT AUTHORITY\SYSTEM"" VersionNumber=""1"" ResourceId=""1a82a341-b678-4992-a25a-39cdd57198d4"" VersionId=""b1a6de00-3cac-41cd-b0ed-9fac9bb61266"" />
                                        </Source>";

            var xElement       = XElement.Parse(xmlString);
            var rabbitMqSource = new RabbitMQSource(xElement);

            //----------------------Pre-Assert---------------------------------
            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(5672, rabbitMqSource.Port);
            Assert.AreEqual(Depends.EnableDocker?Depends.RigOpsIP:Depends.SVRDEVIP, rabbitMqSource.HostName);
            Assert.AreEqual("test", rabbitMqSource.UserName);
            Assert.AreEqual("test", rabbitMqSource.Password);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);

            //-------------------------------Act---------------------------------
            using (var rabbitConnection = rabbitMqSource.NewConnection())
            {
                //-------------------------------Assert------------------------------
                Assert.IsTrue(rabbitConnection.IsOpen);
            }
        }
Exemple #3
0
        public void RabbitMQSource_Validate_ToXml_DefaultValues()
        {
            const string xmlString = @"<Source ID=""1a82a341-b678-4992-a25a-39cdd57198d4"" Name=""Example Rabbit MQ Source"" ResourceType=""RabbitMQSource"" IsValid=""false"" 
                                               ConnectionString=""HostName=localhost;Port=;UserName=warewolf;Password=test123;VirtualHost=hostyhost/"" Type=""RabbitMQSource"" ServerVersion=""1.4.1.27"" ServerID=""693ca20d-fb17-4044-985a-df3051d6bac7"">
                                          <DisplayName>Example Rabbit MQ Source</DisplayName>
                                          <AuthorRoles>
                                          </AuthorRoles>
                                          <ErrorMessages />
                                          <TypeOf>RabbitMQSource</TypeOf>
                                          <VersionInfo DateTimeStamp=""2017-05-26T14:21:24.3247847+02:00"" Reason="""" User=""NT AUTHORITY\SYSTEM"" VersionNumber=""3"" ResourceId=""1a82a341-b678-4992-a25a-39cdd57198d4"" VersionId=""b1a6de00-3cac-41cd-b0ed-9fac9bb61266"" />
                                        </Source>";

            var xElement       = XElement.Parse(xmlString);
            var rabbitMqSource = new RabbitMQSource(xElement);
            var result         = rabbitMqSource.ToXml();

            var rabbitMqSourceWithXml = new RabbitMQSource(result);

            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSourceWithXml.ResourceType);
            Assert.AreEqual(5672, rabbitMqSourceWithXml.Port);
            Assert.AreEqual("localhost", rabbitMqSourceWithXml.HostName);
            Assert.AreEqual("warewolf", rabbitMqSourceWithXml.UserName);
            Assert.AreEqual("test123", rabbitMqSourceWithXml.Password);
            Assert.AreEqual("hostyhost/", rabbitMqSourceWithXml.VirtualHost);
        }
Exemple #4
0
        public void RabbitMQSource_GivenXElement_WithoutValues_Constructor_Validate_DefaultValues()
        {
            const string xmlString = @"<Source ID=""2aa3fdba-e0c3-47dd-8dd5-e6f24aaf5c7a"" Name=""test server"" Type=""Dev2Server"" ConnectionString=""AppServerUri=http://178.63.172.163:3142/dsf;WebServerPort=3142;AuthenticationType=Public;UserName=;Password="" Version=""1.0"" ResourceType=""Server"" ServerID=""51a58300-7e9d-4927-a57b-e5d700b11b55"">
                                      <TypeOf>Dev2Server</TypeOf>
                                      <DisplayName>test server</DisplayName>
                                      <Category>WAREWOLF SERVERS</Category>
                                      <Signature xmlns=""http://www.w3.org/2000/09/xmldsig#"">
                                        <SignedInfo>
                                          <CanonicalizationMethod Algorithm=""http://www.w3.org/TR/2001/REC-xml-c14n-20010315"" />
                                          <SignatureMethod Algorithm=""http://www.w3.org/2000/09/xmldsig#rsa-sha1"" />
                                          <Reference URI="""">
                                            <Transforms>
                                              <Transform Algorithm=""http://www.w3.org/2000/09/xmldsig#enveloped-signature"" />
                                            </Transforms>
                                            <DigestMethod Algorithm=""http://www.w3.org/2000/09/xmldsig#sha1"" />
                                            <DigestValue>1ia51dqx+BIMQ4QgLt+DuKtTBUk=</DigestValue>
                                          </Reference>
                                        </SignedInfo>
                                        <SignatureValue>Wqd39EqkFE66XVETuuAqZveoTk3JiWtAk8m1m4QykeqY4/xQmdqRRSaEfYBr7EHsycI3STuILCjsz4OZgYQ2QL41jorbwULO3NxAEhu4nrb2EolpoNSJkahfL/N9X5CvLNwpburD4/bPMG2jYegVublIxE50yF6ZZWG5XiB6SF8=</SignatureValue>
                                      </Signature>
                                    </Source>";

            var xElement       = XElement.Parse(xmlString);
            var rabbitMqSource = new RabbitMQSource(xElement);

            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(5672, rabbitMqSource.Port);
            Assert.AreEqual("", rabbitMqSource.HostName);
            Assert.AreEqual("", rabbitMqSource.UserName);
            Assert.AreEqual("", rabbitMqSource.Password);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);
        }
        public IRabbitMQServiceSourceDefinition FetchSource(Guid resourceID)
        {
            var xaml   = _queryManager.FetchResourceXaml(resourceID);
            var source = new RabbitMQSource(xaml.ToXElement());
            var def    = new RabbitMQServiceSourceDefinition(source);

            return(def);
        }
        public void RabbitMQPublishDesignerViewModel2_Constructor2()
        {
            //------------Setup for test--------------------------
            CustomContainer.LoadedTypes = new List <Type>
            {
                typeof(ManageRabbitMQSourceModel)
            };

            var mockHelpViewModel = new Mock <IHelpWindowViewModel>();

            mockHelpViewModel.Setup(model => model.UpdateHelpText(It.IsAny <string>())).Verifiable();

            var mockUpdateManager = new Mock <IStudioUpdateManager>();
            var mockQueryManager  = new Mock <IQueryManager>();

            var guidOne = Guid.NewGuid();
            var guidTwo = Guid.NewGuid();

            var rabbitMqSourceOne = new RabbitMQSource {
                ResourceID = guidOne, ResourceName = "ResourceOne", HostName = "HostOne"
            };
            var rabbitMqSourceTwo = new RabbitMQSource {
                ResourceID = guidTwo, ResourceName = "ResourceTwo", HostName = "HostTwo"
            };
            var rabbitMqServiceSourceDefinitions = new List <IRabbitMQServiceSourceDefinition>
            {
                new RabbitMQServiceSourceDefinition(rabbitMqSourceOne),
                new RabbitMQServiceSourceDefinition(rabbitMqSourceTwo),
            };

            mockQueryManager.Setup(o => o.FetchRabbitMQServiceSources()).Returns(rabbitMqServiceSourceDefinitions);

            var server = new Mock <IServer>();

            server.Setup(server1 => server1.UpdateRepository).Returns(mockUpdateManager.Object);
            server.Setup(server1 => server1.QueryProxy).Returns(mockQueryManager.Object);

            var mockMainViewModel = new Mock <IShellViewModel>();

            mockMainViewModel.Setup(model => model.HelpViewModel).Returns(mockHelpViewModel.Object);
            mockMainViewModel.Setup(model => model.ActiveServer).Returns(server.Object);
            CustomContainer.Register(mockMainViewModel.Object);

            var publishRabbitMqActivity = new PublishRabbitMQActivity();
            //------------Execute Test---------------------------
            var vm = new RabbitMQPublishDesignerViewModel2(ModelItemUtils.CreateModelItem(publishRabbitMqActivity));

            //------------Assert Results-------------------------
            Assert.AreEqual(2, vm.RabbitMQSources.Count);
            Assert.AreEqual(guidOne, vm.RabbitMQSources[0].ResourceID);
            Assert.AreEqual("ResourceOne", vm.RabbitMQSources[0].ResourceName);
            Assert.AreEqual("HostOne", vm.RabbitMQSources[0].HostName);
            Assert.AreEqual(guidTwo, vm.RabbitMQSources[1].ResourceID);
            Assert.AreEqual("ResourceTwo", vm.RabbitMQSources[1].ResourceName);
            Assert.AreEqual("HostTwo", vm.RabbitMQSources[1].HostName);
        }
Exemple #7
0
        public void RabbitMQSource_Constructor_Validate_DefaultValues()
        {
            var rabbitMqSource = new RabbitMQSource();

            Assert.IsNotNull(rabbitMqSource.ResourceID);
            Assert.AreEqual(Guid.Empty, rabbitMqSource.ResourceID);
            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(5672, rabbitMqSource.Port);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);
        }
        public void RabbitMQSource_ShouldHaveConstructorAndSetDefaultValues()
        {
            var mqSource = new RabbitMQSource();

            Assert.IsNotNull(mqSource);
            Assert.IsNotNull(mqSource.ResourceID);
            Assert.AreEqual("RabbitMQSource", mqSource.ResourceType);
            Assert.AreEqual(5672, mqSource.Port);
            Assert.AreEqual("/", mqSource.VirtualHost);
        }
Exemple #9
0
        public void RabbitMQSource_Validate_DefaultValues()
        {
            var rabbitMqSource = new RabbitMQSource();

            Assert.IsTrue(rabbitMqSource.IsSource);
            Assert.IsFalse(rabbitMqSource.IsService);
            Assert.IsFalse(rabbitMqSource.IsFolder);
            Assert.IsFalse(rabbitMqSource.IsReservedService);
            Assert.IsFalse(rabbitMqSource.IsServer);
            Assert.IsFalse(rabbitMqSource.IsResourceVersion);
        }
Exemple #10
0
 public ValidationResult Test(RabbitMQSource source)
 {
     try
     {
         return(CanConnectServer(source));
     }
     catch (Exception ex)
     {
         RaiseError(ex);
         return(new ValidationResult {
             IsValid = false, ErrorMessage = ex.Message
         });
     }
 }
        protected override List <string> PerformExecution(Dictionary <string, string> evaluatedValues)
        {
            try
            {
                RabbitMQSource = ResourceCatalog.GetResource <RabbitMQSource>(GlobalConstants.ServerWorkspaceID, RabbitMQSourceResourceId);
                if (RabbitMQSource == null)
                {
                    return(new List <string> {
                        ErrorResource.RabbitSourceHasBeenDeleted
                    });
                }

                if (!evaluatedValues.TryGetValue("QueueName", out string queueName) ||
                    !evaluatedValues.TryGetValue("Message", out string message))
                {
                    return(new List <string> {
                        ErrorResource.RabbitQueueNameAndMessageRequired
                    });
                }

                ConnectionFactory.HostName    = RabbitMQSource.HostName;
                ConnectionFactory.Port        = RabbitMQSource.Port;
                ConnectionFactory.UserName    = RabbitMQSource.UserName;
                ConnectionFactory.Password    = RabbitMQSource.Password;
                ConnectionFactory.VirtualHost = RabbitMQSource.VirtualHost;

                using (Connection = ConnectionFactory.CreateConnection())
                {
                    using (Channel = Connection.CreateModel())
                    {
                        Channel.ExchangeDeclare(queueName, ExchangeType.Direct, IsDurable, IsAutoDelete, null);
                        Channel.QueueDeclare(queueName, IsDurable, IsExclusive, IsAutoDelete, null);
                        Channel.QueueBind(queueName, queueName, "", new Dictionary <string, object>());

                        var basicProperties = Channel.CreateBasicProperties();
                        basicProperties.Persistent = true;
                        Channel.BasicPublish(queueName, "", basicProperties, Encoding.UTF8.GetBytes(message));
                    }
                }
                Dev2Logger.Debug($"Message published to queue {queueName}", GlobalConstants.WarewolfDebug);
                return(new List <string> {
                    "Success"
                });
            }
            catch (Exception ex)
            {
                Dev2Logger.Error("PublishRabbitMQActivity", ex, GlobalConstants.WarewolfError);
                throw new Exception(ex.GetAllMessages());
            }
        }
        protected override List <string> PerformExecution(Dictionary <string, string> evaluatedValues)
        {
            _messages = new List <string>();
            try
            {
                RabbitSource =
                    ResourceCatalog.GetResource <RabbitMQSource>(GlobalConstants.ServerWorkspaceID,
                                                                 RabbitMQSourceResourceId);
                if (RabbitSource == null || RabbitSource.ResourceType != enSourceType.RabbitMQSource.ToString())
                {
                    _messages.Add(ErrorResource.RabbitSourceHasBeenDeleted);
                    return(_messages);
                }

                if (!evaluatedValues.TryGetValue("QueueName", out var queueName))
                {
                    _messages.Add(ErrorResource.RabbitQueueNameRequired);
                    return(_messages);
                }

                if (!evaluatedValues.TryGetValue("Prefetch", out var prefetch))
                {
                    prefetch = string.Empty;
                }

                ConnectionFactory.HostName    = RabbitSource.HostName;
                ConnectionFactory.Port        = RabbitSource.Port;
                ConnectionFactory.UserName    = RabbitSource.UserName;
                ConnectionFactory.Password    = RabbitSource.Password;
                ConnectionFactory.VirtualHost = RabbitSource.VirtualHost;

                using (Connection = ConnectionFactory.CreateConnection())
                {
                    using (Channel = Connection.CreateModel())
                    {
                        PerformExecutionOnChannel(queueName, prefetch);
                    }
                }

                return(new List <string> {
                    _result
                });
            }
            catch (Exception ex)
            {
                Dev2Logger.Error("ConsumeRabbitMQActivity", ex, GlobalConstants.WarewolfError);
                throw new Exception(ex.GetAllMessages());
            }
        }
Exemple #13
0
        private static IWorkerContext ConstructWorkerContext(out RabbitMQSource rabbitSource, out RabbitMQSource rabbitSink)
        {
            var mockArgs = new Mock <IArgs>();

            mockArgs.Setup(o => o.TriggerId).Returns(_resourceId.ToString());
            mockArgs.Setup(o => o.ServerEndpoint).Returns(new Uri("http://somehost:1234"));
            var mockResourceCatalogProxy = new Mock <IResourceCatalogProxy>();
            var mockFilePath             = new Mock <IFilePath>();

            mockFilePath.Setup(o => o.GetDirectoryName(It.IsAny <string>())).Returns("C:\\ProgramData\\Warewolf\\Triggers\\Queue");
            mockFilePath.Setup(o => o.GetFileName(It.IsAny <string>())).Returns(_resourceId.ToString() + ".bite");

            rabbitSource = new RabbitMQSource
            {
                ResourceID   = _sourceId,
                HostName     = "somehost",
                ResourceName = "my somehost resource",
            };
            rabbitSink = new RabbitMQSource
            {
                ResourceID   = _sinkId,
                HostName     = "somehost",
                ResourceName = "my somehost resource",
            };
            mockResourceCatalogProxy.Setup(o => o.GetResourceById <RabbitMQSource>(GlobalConstants.ServerWorkspaceID, _sourceId)).Returns(rabbitSource);
            mockResourceCatalogProxy.Setup(o => o.GetResourceById <RabbitMQSource>(GlobalConstants.ServerWorkspaceID, _sinkId)).Returns(rabbitSink);
            var mockTriggerCatalog = new Mock <ITriggersCatalog>();

            var triggerQueue = new TriggerQueue
            {
                QueueSourceId = _sourceId,
                QueueSinkId   = _sinkId,
                Options       = new IOption[] { new OptionBool {
                                                    Name = "Durable", Value = true
                                                } },
                ResourceId   = _resourceId,
                QueueName    = _queueName,
                WorkflowName = _workflowName,
                Inputs       = new List <IServiceInputBase> {
                    _expectedIServiceInput
                },
            };

            mockTriggerCatalog.Setup(o => o.PathFromResourceId(It.IsAny <string>())).Returns("C:\\ProgramData\\Warewolf\\Triggers\\Queue");
            mockTriggerCatalog.Setup(o => o.LoadQueueTriggerFromFile(It.IsAny <string>())).Returns(triggerQueue);
            return(new WorkerContext(mockArgs.Object, mockResourceCatalogProxy.Object, mockTriggerCatalog.Object, mockFilePath.Object));
        }
Exemple #14
0
        ValidationResult CanConnectServer(RabbitMQSource rabbitMQSource)
        {
            try
            {
                IConnectionFactory connectionFactory = new ConnectionFactory()
                {
                    HostName    = rabbitMQSource.HostName,
                    Port        = rabbitMQSource.Port,
                    UserName    = rabbitMQSource.UserName,
                    Password    = rabbitMQSource.Password,
                    VirtualHost = rabbitMQSource.VirtualHost
                };

                using (IConnection connection = connectionFactory.CreateConnection())
                {
                    using (IModel channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(queue: "TestRabbitMQServiceSource",
                                             durable: false,
                                             exclusive: false,
                                             autoDelete: false,
                                             arguments: null);

                        channel.BasicPublish(exchange: "",
                                             routingKey: "TestRabbitMQServiceSource",
                                             basicProperties: null,
                                             body: Encoding.UTF8.GetBytes("Test Message"));

                        channel.QueueDeleteNoWait("TestRabbitMQServiceSource", true, false);
                    }
                }
                return(new ValidationResult
                {
                    IsValid = true
                });
            }
            catch (Exception e)
            {
                return(new ValidationResult
                {
                    IsValid = false,
                    ErrorMessage = e.InnerException != null?string.Join(Environment.NewLine, e.Message, e.InnerException.Message) : e.Message
                });
            }
        }
        public void PerformSerialization_ShouldNotError()
        {
            //------------Setup for test--------------------------
            var dsfConsumeRabbitMQActivity = new DsfConsumeRabbitMQActivity();

            var resourceCatalog = new Mock <IResourceCatalog>();
            var rabbitMQSource  = new RabbitMQSource
            {
                HostName = "rsaklfsvrdev",
                Port     = 5672,
                UserName = "******",
                Password = "******"
            };


            resourceCatalog.Setup(r => r.GetResource <RabbitMQSource>(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(rabbitMQSource);

            var privateObject = new PrivateObject(dsfConsumeRabbitMQActivity);

            privateObject.SetProperty("ResourceCatalog", resourceCatalog.Object);
            dsfConsumeRabbitMQActivity.ReQueue = true;
            try
            {
                privateObject.Invoke("PerformExecution", new Dictionary <string, string> {
                    { "QueueName", "HuggsTest" }
                });
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Queue Q1 not found", ex.Message);
            }
            Dev2JsonSerializer serializer = new Dev2JsonSerializer();

            //------------Execute Test---------------------------
            try
            {
                var serializedAct = serializer.SerializeToBuilder(dsfConsumeRabbitMQActivity);
                //------------Assert Results-------------------------
                Assert.IsNotNull(serializedAct);
            }
            catch (Exception e)
            {
                Assert.Fail(e.Message);
            }
        }
        public void RabbitMQSource_NewConnection_GivenNoArgConstructor_ConnectionSuccess()
        {
            //-------------------------------Arrange-----------------------------
            //const string xmlString = @"<Source ID=""1a82a341-b678-4992-a25a-39cdd57198d4"" Name=""Example Rabbit MQ Source"" ResourceType=""RabbitMQSource"" IsValid=""false""
            //                                   ConnectionString=""HostName=rsaklfsvrdev.dev2.local;Port=;UserName=test;Password=test;VirtualHost=/"" Type=""RabbitMQSource"" ServerVersion=""1.4.1.27"" ServerID=""693ca20d-fb17-4044-985a-df3051d6bac7"">
            //                              <DisplayName>Example Rabbit MQ Source</DisplayName>
            //                              <AuthorRoles>
            //                              </AuthorRoles>
            //                              <ErrorMessages />
            //                              <TypeOf>RabbitMQSource</TypeOf>
            //                              <VersionInfo DateTimeStamp=""2017-05-26T14:21:24.3247847+02:00"" Reason="""" User=""NT AUTHORITY\SYSTEM"" VersionNumber=""3"" ResourceId=""1a82a341-b678-4992-a25a-39cdd57198d4"" VersionId=""b1a6de00-3cac-41cd-b0ed-9fac9bb61266"" />
            //                            </Source>";
            var port        = 5672;
            var hostName    = "rsaklfsvrdev.dev2.local";
            var userName    = "******";
            var password    = "******";
            var virtualHost = "/";

            var rabbitMqSource = new RabbitMQSource
            {
                HostName    = hostName,
                UserName    = userName,
                Password    = password,
                Port        = port,
                VirtualHost = virtualHost,
            };

            //----------------------Pre-Assert---------------------------------
            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(5672, rabbitMqSource.Port);
            Assert.AreEqual("rsaklfsvrdev.dev2.local", rabbitMqSource.HostName);
            Assert.AreEqual("test", rabbitMqSource.UserName);
            Assert.AreEqual("test", rabbitMqSource.Password);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);

            //-------------------------------Act---------------------------------
            using (var rabbitConnection = rabbitMqSource.NewConnection())
            {
                //-------------------------------Assert------------------------------
                Assert.IsTrue(rabbitConnection.IsOpen);
            }
        }
Exemple #17
0
        public void RabbitMQSource_NewConnection_GivenNoArgConstructor_ConnectionSuccess()
        {
            //-------------------------------Arrange-----------------------------
            var dependency  = new Depends(Depends.ContainerType.RabbitMQ);
            var port        = int.Parse(dependency.Container.Port);
            var hostName    = dependency.Container.IP;
            var userName    = "******";
            var password    = "******";
            var virtualHost = "/";

            var rabbitMqSource = new RabbitMQSource
            {
                HostName    = hostName,
                UserName    = userName,
                Password    = password,
                Port        = port,
                VirtualHost = virtualHost,
            };

            //----------------------Pre-Assert---------------------------------
            Assert.AreEqual(nameof(RabbitMQSource), rabbitMqSource.ResourceType);
            Assert.AreEqual(int.Parse(dependency.Container.Port), rabbitMqSource.Port);
            Assert.AreEqual(dependency.Container.IP, rabbitMqSource.HostName);
            Assert.AreEqual("test", rabbitMqSource.UserName);
            Assert.AreEqual("test", rabbitMqSource.Password);
            Assert.AreEqual("/", rabbitMqSource.VirtualHost);

            //-------------------------------Act---------------------------------
            try
            {
                using (var rabbitConnection = rabbitMqSource.NewConnection())
                {
                    //-------------------------------Assert------------------------------
                    Assert.IsTrue(rabbitConnection.IsOpen);
                }
            }
            catch (BrokerUnreachableException e)
            {
                Assert.Inconclusive(e.Message);
            }
        }
Exemple #18
0
        public StringBuilder Execute(Dictionary <string, StringBuilder> values, IWorkspace theWorkspace)
        {
            ExecuteMessage     msg        = new ExecuteMessage();
            Dev2JsonSerializer serializer = new Dev2JsonSerializer();

            try
            {
                Dev2Logger.Info("Save RabbitMQ Service Source");
                StringBuilder resourceDefinition;
                msg.HasError = false;

                values.TryGetValue("RabbitMQServiceSource", out resourceDefinition);

                RabbitMQServiceSourceDefinition rabbitMQServiceSourceDefinition = serializer.Deserialize <RabbitMQServiceSourceDefinition>(resourceDefinition);
                if (rabbitMQServiceSourceDefinition.ResourcePath.EndsWith("\\"))
                {
                    rabbitMQServiceSourceDefinition.ResourcePath = rabbitMQServiceSourceDefinition.ResourcePath.Substring(0, rabbitMQServiceSourceDefinition.ResourcePath.LastIndexOf("\\", StringComparison.Ordinal));
                }

                RabbitMQSource rabbitMQSource = new RabbitMQSource
                {
                    ResourceID   = rabbitMQServiceSourceDefinition.ResourceID,
                    ResourceName = rabbitMQServiceSourceDefinition.ResourceName,
                    HostName     = rabbitMQServiceSourceDefinition.HostName,
                    Port         = rabbitMQServiceSourceDefinition.Port,
                    UserName     = rabbitMQServiceSourceDefinition.UserName,
                    Password     = rabbitMQServiceSourceDefinition.Password,
                    VirtualHost  = rabbitMQServiceSourceDefinition.VirtualHost
                };

                ResourceCatalog.Instance.SaveResource(GlobalConstants.ServerWorkspaceID, rabbitMQSource, rabbitMQServiceSourceDefinition.ResourcePath);
            }
            catch (Exception err)
            {
                msg.HasError = true;
                msg.Message  = new StringBuilder(err.Message);
                Dev2Logger.Error("Save RabbitMQ Service Source Failed: " + err.Message);
            }

            return(serializer.SerializeToBuilder(msg));
        }
Exemple #19
0
        public void RabbitMQSource_Publish_Success()
        {
            //----------------------Arrange----------------------
            var queueSource = new RabbitMQSource();
            var queueName   = TestQueueNameGenerator.GetName;

            var config = new RabbitConfig
            {
                QueueName  = queueName,
                Exchange   = "",
                RoutingKey = queueName,
            };

            //----------------------Act--------------------------
            var message    = Guid.NewGuid().ToString();
            var data       = Encoding.UTF8.GetBytes(message);
            var connection = queueSource.NewConnection(config);

            try
            {
                var publisher = connection.NewPublisher(config);
                publisher.Publish(data);

                using (var testPublishSuccess = new TestPublishSuccess())
                {
                    var sentData = testPublishSuccess.GetSentMessage(config.QueueName);
                    //------------------------Assert----------------------
                    Assert.AreEqual(config.Exchange, sentData.Exchange);
                    Assert.AreEqual(config.RoutingKey, sentData.RoutingKey);
                    Assert.AreEqual(message, Encoding.UTF8.GetString(sentData.Body));
                }
            }
            finally
            {
                connection.DeleteQueue(config);
                connection.Dispose();
            }
        }
Exemple #20
0
        public void RabbitMQSource_GivenSourceCreateNewConnection_Success()
        {
            //----------------------Arrange----------------------
            var queueSource = new RabbitMQSource();
            var queueName   = TestQueueNameGenerator.GetName;

            var testConsumer = new TestConsumer();

            var config = new RabbitConfig
            {
                QueueName  = queueName,
                Exchange   = "",
                RoutingKey = queueName,
            };

            //----------------------Act--------------------------

            using (var connection = queueSource.NewConnection(config))
            {
                connection.StartConsuming(config, testConsumer);
            }

            int i = 0;

            while (!testConsumer.IsDataReceived)
            {
                Thread.Sleep(100);
                if (i >= 30)
                {
                    break;
                }
                i++;
            }
            //----------------------Assert-----------------------
            Assert.IsFalse(testConsumer.IsDataReceived);
        }
        protected override List <string> PerformExecution(Dictionary <string, string> evaluatedValues)
        {
            _messages = new List <string>();
            try
            {
                RabbitSource = ResourceCatalog.GetResource <RabbitMQSource>(GlobalConstants.ServerWorkspaceID, RabbitMQSourceResourceId);
                if (RabbitSource == null || RabbitSource.ResourceType != enSourceType.RabbitMQSource.ToString())
                {
                    return(new List <string> {
                        ErrorResource.RabbitSourceHasBeenDeleted
                    });
                }

                string queueName;
                if (!evaluatedValues.TryGetValue("QueueName", out queueName))
                {
                    return(new List <string> {
                        ErrorResource.RabbitQueueNameRequired
                    });
                }
                string prefetch;
                if (!evaluatedValues.TryGetValue("Prefetch", out prefetch))
                {
                    prefetch = string.Empty;
                }
                ConnectionFactory.HostName    = RabbitSource.HostName;
                ConnectionFactory.Port        = RabbitSource.Port;
                ConnectionFactory.UserName    = RabbitSource.UserName;
                ConnectionFactory.Password    = RabbitSource.Password;
                ConnectionFactory.VirtualHost = RabbitSource.VirtualHost;

                using (Connection = ConnectionFactory.CreateConnection())
                {
                    using (Channel = Connection.CreateModel())
                    {
                        if (!string.IsNullOrEmpty(TimeOut))
                        {
                            _timeOut = int.Parse(TimeOut);
                        }
                        _prefetch = string.IsNullOrEmpty(prefetch) ? (ushort)0 : ushort.Parse(prefetch);
                        if (_prefetch == 0)
                        {
                            _prefetch = ushort.MaxValue;
                        }
                        Channel.BasicQos(0, _prefetch, Acknowledge);
                        int msgCount = 0;
                        if (ReQueue)
                        {
                            BasicGetResult response;
                            try
                            {
                                response = Channel.BasicGet(queueName, false);
                            }
                            catch (Exception)
                            {
                                throw new Exception(string.Format(ErrorResource.RabbitQueueNotFound, queueName));
                            }

                            while (response != null && _prefetch > msgCount)
                            {
                                _messages.Add(Encoding.Default.GetString(response.Body));
                                msgCount++;
                                try
                                {
                                    response = Channel.BasicGet(queueName, false);
                                }
                                catch (Exception)
                                {
                                    throw new Exception(string.Format(ErrorResource.RabbitQueueNotFound, queueName));
                                }
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(TimeOut))
                            {
                                Consumer = new QueueingBasicConsumer(Channel);
                                try
                                {
                                    Channel.BasicConsume(queueName, false, Consumer);
                                }
                                catch (Exception)
                                {
                                    throw new Exception(string.Format(ErrorResource.RabbitQueueNotFound, queueName));
                                }
                                BasicDeliverEventArgs basicDeliverEventArgs;
                                ulong?tag = null;
                                while (Consumer.Queue.Dequeue((int)TimeSpan.FromSeconds(_timeOut).TotalMilliseconds, out basicDeliverEventArgs) && _prefetch > msgCount)
                                {
                                    if (basicDeliverEventArgs == null)
                                    {
                                        _result = string.Format("Empty, timeout: {0} second(s)", _timeOut);
                                    }
                                    else
                                    {
                                        var body = basicDeliverEventArgs.Body;
                                        _messages.Add(Encoding.Default.GetString(body));
                                        tag = basicDeliverEventArgs.DeliveryTag;
                                    }
                                    msgCount++;
                                }
                                if (tag.HasValue)
                                {
                                    Channel.BasicAck(tag.Value, _prefetch != 1);
                                }
                            }
                            else
                            {
                                uint messageCount;
                                try
                                {
                                    messageCount = Channel.MessageCount(queueName);
                                }
                                catch (Exception)
                                {
                                    messageCount = 0;
                                }
                                Consumer = new QueueingBasicConsumer(Channel);
                                try
                                {
                                    Channel.BasicConsume(queueName, false, Consumer);
                                }
                                catch (Exception)
                                {
                                    throw new Exception(string.Format(ErrorResource.RabbitQueueNotFound, queueName));
                                }

                                ulong?tag = null;
                                for (int i = 0; i < messageCount && _prefetch > msgCount; i++)
                                {
                                    var ea   = Consumer.Queue.Dequeue();
                                    var body = ea.Body;

                                    _messages.Add(Encoding.Default.GetString(body));
                                    tag = ea.DeliveryTag;
                                    msgCount++;
                                }
                                if (tag.HasValue)
                                {
                                    Channel.BasicAck(tag.Value, _prefetch != 1);
                                }
                                else
                                {
                                    _result = "Empty";
                                }
                            }
                        }
                    }
                }
                return(new List <string> {
                    _result
                });
            }
            catch (Exception ex)
            {
                Dev2Logger.Error("ConsumeRabbitMQActivity", ex);
                throw new Exception(ex.GetAllMessages());
            }
        }