public void TestEventTypeCreate()
        {
            // Arrange.
            var eventTypeInfo = new NameCommentStruct {
                Id = "123", Name = "TestEventType", Comment = "ForTest"
            };
            var dataServiceMock = new Mock <IDataService>();
            var service         = new CachedSubscriptionsManager(GetMockLogger(), dataServiceMock.Object, GetMockStatisticsService());

            // Act.
            service.CreateEventType(eventTypeInfo);

            // Assert.
            dataServiceMock.Verify(f => f.UpdateObject(It.Is <MessageType>(t => t.ID == eventTypeInfo.Id && t.Name == eventTypeInfo.Name && t.Description == eventTypeInfo.Comment)), Times.Once);
        }
示例#2
0
        public void TestMessageTypeCreate()
        {
            // Arrange.
            var messageTypeInfo = new ServiceBusMessageType {
                ID = "123", Name = "TestMessageType", Description = "ForTest"
            };
            var dataServiceMock = new Mock <IDataService>();
            var service         = new CachedSubscriptionsManager(GetMockLogger(), dataServiceMock.Object, GetMockStatisticsService());

            // Act.
            service.CreateMessageType(messageTypeInfo);

            // Assert.
            dataServiceMock.Verify(f => f.UpdateObject(It.Is <MessageType>(t => t.ID == messageTypeInfo.ID && t.Name == messageTypeInfo.Name && t.Description == messageTypeInfo.Description)), Times.Once);
        }
        public void TestClientCreate()
        {
            // Arrange.
            const string clientId        = "03FE3B98-2D09-4032-A5BF-03BEDF86F4F4";
            const string clientName      = "SucessClient";
            const string clientAddress   = "TestAddress";
            var          dataServiceMock = new Mock <IDataService>();
            var          service         = new CachedSubscriptionsManager(GetMockLogger(), dataServiceMock.Object, GetMockStatisticsService());

            // Act.
            service.CreateClient(clientId, clientName, clientAddress);

            // Assert.
            dataServiceMock.Verify(f => f.UpdateObject(It.Is <Client>(t => t.ID == clientId && t.Name == clientName && t.Address == clientAddress)), Times.Once);
            Assert.Throws <ArgumentNullException>(() => service.CreateClient(null, clientName, clientAddress));
        }
        public void TestUpdateFromDb()
        {
            // Arrange.
            var dataServiceMock = new Mock <IDataService>();
            var service         = new CachedSubscriptionsManager(GetMockLogger(), dataServiceMock.Object, GetMockStatisticsService())
            {
                UpdatePeriodMilliseconds = 100
            };

            service.Prepare();

            // Act.
            service.Start();
            Thread.Sleep(150);
            service.Stop();

            // Assert.
            dataServiceMock.Verify(f => f.LoadObjects(It.Is <LoadingCustomizationStruct>(lcs => lcs.View.DefineClassType == typeof(Subscription))), Times.AtLeast(2));
        }
        public void TestSubscribtionCreate()
        {
            foreach (var dataService in DataServices)
            {
                // Arrange.
                const string clientId       = "FDF33DF1-5DCA-41F9-A2E4-3B5C7E103452";
                const string messageType1Id = "EB6EC229-5E93-4B76-9993-5A1589787421";
                const string messageType2Id = "C8802C67-AC1B-497C-A707-5FF4191E0083";
                const string messageType3Id = "BC3F54C6-4E2F-43DA-B124-A0771F8F200C";
                var          service        = new CachedSubscriptionsManager(GetMockLogger(), dataService, GetMockStatisticsService());
                service.CreateClient(clientId, "TestClient1");
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType1Id,
                    Name    = "TestMessageType1",
                    Comment = "ForTest"
                });
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType2Id,
                    Name    = "TestMessageType2",
                    Comment = "ForTest"
                });
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType3Id,
                    Name    = "TestMessageType3",
                    Comment = "ForTest"
                });
                service.Prepare();

                // Act && Assert.
                // Creation.
                service.SubscribeOrUpdate(clientId, messageType1Id, false, null);
                service.SubscribeOrUpdate(clientId, messageType2Id, true, TransportType.HTTP);
                Assert.Throws <ArgumentNullException>(() => service.SubscribeOrUpdate(clientId, messageType3Id, true, null));
                Assert.Throws <ArgumentException>(() => service.SubscribeOrUpdate("B5D96C32-2B50-4514-B123-5D8D961F0AF0", messageType3Id, false, null));
                Assert.Throws <ArgumentException>(() => service.SubscribeOrUpdate(clientId, "B5D96C32-2B50-4514-B123-5D8D961F0AF0", false, null));
                var subs = service.GetSubscriptions();
                Assert.Equal(subs.Count(), 2);
                Assert.True(subs.All(sub => Guid.Parse(sub.Client.ID) == Guid.Parse(clientId) || Guid.Parse(sub.Client.__PrimaryKey.ToString()) == Guid.Parse(clientId)));
                var sub1 =
                    subs.FirstOrDefault(sub => Guid.Parse(sub.MessageType.ID) == Guid.Parse(messageType1Id) ||
                                        Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType1Id));
                var sub2 =
                    subs.FirstOrDefault(sub => Guid.Parse(sub.MessageType.ID) == Guid.Parse(messageType2Id) ||
                                        Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType2Id));
                Assert.True(!sub1.IsCallback && sub1.TransportType == TransportType.WCF && DateTime.Now < sub1.ExpiryDate);
                Assert.True(sub2.IsCallback && sub2.TransportType == TransportType.HTTP && DateTime.Now < sub2.ExpiryDate);

                // Updating.
                service.SubscribeOrUpdate(clientId, messageType1Id, true, TransportType.HTTP, DateTime.Now.AddDays(-1));
                service.SubscribeOrUpdate(clientId, messageType2Id, false, null, DateTime.Now.AddDays(-1));
                subs = service.GetSubscriptions(false);
                Assert.Equal(subs.Count(), 2);
                Assert.True(subs.All(sub => Guid.Parse(sub.Client.ID) == Guid.Parse(clientId) || Guid.Parse(sub.Client.__PrimaryKey.ToString()) == Guid.Parse(clientId)));
                sub1 =
                    subs.FirstOrDefault(sub => Guid.Parse(sub.MessageType.ID) == Guid.Parse(messageType1Id) ||
                                        Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType1Id));
                sub2 =
                    subs.FirstOrDefault(sub => Guid.Parse(sub.MessageType.ID) == Guid.Parse(messageType2Id) ||
                                        Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType2Id));
                Assert.True(sub1.IsCallback && sub1.TransportType == TransportType.HTTP && DateTime.Now > sub1.ExpiryDate);
                Assert.True(!sub2.IsCallback && sub2.TransportType == TransportType.HTTP && DateTime.Now > sub2.ExpiryDate);

                // Update all.
                service.UpdateAllSubscriptions(clientId);
                subs = service.GetSubscriptions();
                Assert.Equal(subs.Count(), 2);
                Assert.True(subs.All(sub => sub.ExpiryDate > DateTime.Now));
            }
        }
        public void TestDeleteClient()
        {
            foreach (var dataService in DataServices)
            {
                // Arrange.
                const string client1Id      = "FDF33DF1-5DCA-41F9-A2E4-3B5C7E103452";
                const string client2Id      = "31D12F7D-2D0E-43FB-8092-E6D34A9AB87D";
                const string messageType1Id = "EB6EC229-5E93-4B76-9993-5A1589787421";
                const string messageType2Id = "C8802C67-AC1B-497C-A707-5FF4191E0083";
                const string messageType3Id = "BC3F54C6-4E2F-43DA-B124-A0771F8F200C";
                var          service        = new CachedSubscriptionsManager(GetMockLogger(), dataService, GetMockStatisticsService());
                var          clientLcs      = LoadingCustomizationStruct.GetSimpleStruct(typeof(Client), Client.Views.ListView);
                var          messageLcs     = LoadingCustomizationStruct.GetSimpleStruct(typeof(Message), Message.Views.MessageLightView);
                service.CreateClient(client1Id, "TestClient1");
                service.CreateClient(client2Id, "TestClient2");
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType1Id,
                    Name    = "TestMessageType1",
                    Comment = "ForTest"
                });
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType2Id,
                    Name    = "TestMessageType2",
                    Comment = "ForTest"
                });
                service.CreateMessageType(new NameCommentStruct
                {
                    Id      = messageType3Id,
                    Name    = "TestMessageType3",
                    Comment = "ForTest"
                });
                service.Prepare();
                service.SubscribeOrUpdate(client1Id, messageType1Id, true, TransportType.WCF);
                service.SubscribeOrUpdate(client1Id, messageType3Id, true, TransportType.WCF);
                service.SubscribeOrUpdate(client1Id, messageType2Id, true, TransportType.WCF);
                service.SubscribeOrUpdate(client2Id, messageType2Id, true, TransportType.WCF);
                Guid client1Pk      = ServiceHelper.ConvertClientIdToPrimaryKey(client1Id, dataService, GetMockStatisticsService());
                Guid messageType1Pk = ServiceHelper.ConvertMessageTypeIdToPrimaryKey(messageType1Id, dataService, GetMockStatisticsService());
                var  client         = new Client();
                client.SetExistObjectPrimaryKey(client1Pk);
                var messageType = new MessageType();
                messageType.SetExistObjectPrimaryKey(messageType1Pk);
                DataObject message = new Message()
                {
                    Recipient     = client,
                    MessageType   = messageType,
                    ReceivingTime = DateTime.Now
                };
                dataService.UpdateObject(message);

                // Act && Assert.
                var clients = dataService.LoadObjects(clientLcs);
                Assert.Equal(clients.Length, 2);
                var messages = dataService.LoadObjects(messageLcs);
                Assert.Equal(messages.Length, 1);
                var subs = service.GetSubscriptions(false);
                Assert.Equal(subs.Count(), 4);

                Assert.Throws <ArgumentNullException>(() => service.DeleteClient(null));

                service.DeleteClient(client1Id);
                clients = dataService.LoadObjects(clientLcs);
                Assert.Equal(clients.Length, 1);
                Assert.True(clients.Cast <Client>().All(cl => Guid.Parse(cl.ID) == Guid.Parse(client2Id) || Guid.Parse(cl.__PrimaryKey.ToString()) == Guid.Parse(client2Id)));
                messages = dataService.LoadObjects(messageLcs);
                Assert.Equal(messages.Length, 0);
                subs = service.GetSubscriptions(false);
                Assert.Equal(subs.Count(), 1);
                Assert.True(subs.All(sub => Guid.Parse(sub.Client.ID) == Guid.Parse(client2Id) || Guid.Parse(sub.Client.__PrimaryKey.ToString()) == Guid.Parse(client2Id)));
                Assert.True(subs.All(sub => Guid.Parse(sub.MessageType.ID) == Guid.Parse(messageType2Id) || Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType2Id)));
            }
        }
        public void TestStartStop()
        {
            var service = new CachedSubscriptionsManager(GetMockLogger(), GetMockDataService(), GetMockStatisticsService());

            RunSBComponentFullCycle(service);
        }
        public void TestSubscriptionsLoading()
        {
            // Arrange.
            const string client1Id      = "03FE3B98-2D09-4032-A5BF-03BEDF86F4F4";
            const string client2Id      = "C94B558A-D961-4ABA-8F67-C52AE377FFA5";
            const string messageType1Id = "EB6EC229-5E93-4B76-9993-5A1589787421";
            const string messageType2Id = "C8802C67-AC1B-497C-A707-5FF4191E0083";
            const string messageType3Id = "BC3F54C6-4E2F-43DA-B124-A0771F8F200C";
            var          subscriptions  = new DataObject[]
            {
                new Subscription()
                {
                    Client = new Client()
                    {
                        __PrimaryKey = Guid.Parse(client1Id)
                    }, MessageType = new MessageType()
                    {
                        __PrimaryKey = Guid.Parse(messageType1Id)
                    }, ExpiryDate = new DateTime(DateTime.Now.Ticks + 100000000), IsCallback = true
                },
                new Subscription()
                {
                    Client = new Client()
                    {
                        __PrimaryKey = Guid.Parse(client1Id)
                    }, MessageType = new MessageType()
                    {
                        __PrimaryKey = Guid.Parse(messageType3Id)
                    }, ExpiryDate = new DateTime(DateTime.Now.Ticks - 100000000), IsCallback = true
                },
                new Subscription()
                {
                    Client = new Client()
                    {
                        __PrimaryKey = Guid.Parse(client1Id)
                    }, MessageType = new MessageType()
                    {
                        __PrimaryKey = Guid.Parse(messageType2Id)
                    }, ExpiryDate = new DateTime(DateTime.Now.Ticks + 100000000), IsCallback = false
                },
                new Subscription()
                {
                    Client = new Client()
                    {
                        __PrimaryKey = Guid.Parse(client2Id)
                    }, MessageType = new MessageType()
                    {
                        __PrimaryKey = Guid.Parse(messageType2Id)
                    }, ExpiryDate = new DateTime(DateTime.Now.Ticks + 100000000), IsCallback = false
                }
            };
            var dataServiceMock = new Mock <IDataService>();

            dataServiceMock.Setup(f => f.LoadObjects(It.Is <LoadingCustomizationStruct>(lcs => lcs.View.DefineClassType == typeof(Subscription)))).Returns(subscriptions);
            var service = new CachedSubscriptionsManager(GetMockLogger(), dataServiceMock.Object, GetMockStatisticsService());

            service.Prepare();

            // Act && Assert.
            var subs = service.GetSubscriptions();

            Assert.Equal(subs.Count(), 3);

            subs = service.GetSubscriptions(false);
            Assert.Equal(subs.Count(), 4);

            subs = service.GetSubscriptions(client2Id);
            Assert.Equal(subs.Count(), 1);
            Assert.True(subs.All(sub => Guid.Parse(sub.Client.__PrimaryKey.ToString()) == Guid.Parse(client2Id)));

            subs = service.GetSubscriptions(client2Id, false);
            Assert.Equal(subs.Count(), 1);
            Assert.True(subs.All(sub => Guid.Parse(sub.Client.__PrimaryKey.ToString()) == Guid.Parse(client2Id)));

            subs = service.GetCallbackSubscriptions();
            Assert.Equal(subs.Count(), 1);
            Assert.True(subs.All(sub => sub.IsCallback));

            subs = service.GetCallbackSubscriptions(false);
            Assert.Equal(subs.Count(), 2);
            Assert.True(subs.All(sub => sub.IsCallback));

            subs = service.GetSubscriptionsForMsgType(messageType2Id, client2Id);
            Assert.Equal(subs.Count(), 1);
            Assert.True(subs.All(sub => Guid.Parse(sub.MessageType.__PrimaryKey.ToString()) == Guid.Parse(messageType2Id)));
        }