Example #1
0
        public void RegisterOwnGlobalRoutes_RegisteresOnlyGlobalyRegisteredActors()
        {
            var actors = EnumerableExtensions.Produce(Randomizer.Int32(5, 15),
                                                      i => new ReceiverIdentifierRegistration(ReceiverIdentities.CreateForActor(), i % 2 == 0));
            var messageIdentifier = MessageIdentifier.Create <SimpleMessage>();
            var internalRoutes    = new InternalRouting
            {
                Actors = new[]
                {
                    new MessageActorRoute
                    {
                        Message = messageIdentifier,
                        Actors  = actors
                    }
                },
                MessageHubs = Enumerable.Empty <MessageHubRoute>()
            };

            internalRoutingTable.Setup(m => m.GetAllRoutes()).Returns(internalRoutes);
            var globalActors = internalRoutes.Actors
                               .SelectMany(r => r.Actors.Where(a => !a.LocalRegistration))
                               .Select(a => new ReceiverIdentifier(a.Identity));

            //
            registrar.RegisterOwnGlobalRoutes(domain);
            //
            Func <IEnumerable <MessageRoute>, bool> isGlobalMessageRoute = mrs =>
            {
                Assert.IsTrue(mrs.All(mr => mr.Message == messageIdentifier));
                CollectionAssert.AreEquivalent(globalActors, mrs.Select(mr => mr.Receiver));
                return(true);
            };

            clusterMonitor.Verify(m => m.RegisterSelf(It.Is <IEnumerable <MessageRoute> >(mrs => isGlobalMessageRoute(mrs)), domain), Times.Once);
        }
Example #2
0
        public void RegisterOwnGlobalRoutes_RegisteresOnlyGlobalyRegisteredMessageHubs()
        {
            var internalRoutes = new InternalRouting
            {
                Actors      = Enumerable.Empty <MessageActorRoute>(),
                MessageHubs = EnumerableExtensions.Produce(Randomizer.Int32(5, 15),
                                                           i => new MessageHubRoute
                {
                    MessageHub        = ReceiverIdentities.CreateForMessageHub(),
                    LocalRegistration = i % 2 == 0
                })
            };

            internalRoutingTable.Setup(m => m.GetAllRoutes()).Returns(internalRoutes);
            var globalMessageHubs = internalRoutes.MessageHubs.Where(mh => !mh.LocalRegistration);

            //
            registrar.RegisterOwnGlobalRoutes(domain);
            //
            Func <IEnumerable <MessageRoute>, bool> isGlobalMessageHub = mrs =>
            {
                CollectionAssert.AreEquivalent(globalMessageHubs.Select(mh => mh.MessageHub),
                                               mrs.Select(mr => mr.Receiver));
                return(true);
            };

            clusterMonitor.Verify(m => m.RegisterSelf(It.Is <IEnumerable <MessageRoute> >(mrs => isGlobalMessageHub(mrs)), domain), Times.Once);
        }
 private IEnumerable <Cluster.MessageRoute> GetActorRoutes(string domain, InternalRouting routes)
 => routes.Actors.SelectMany(r => r.Actors
                             .Where(a => !a.LocalRegistration)
                             .Select(a => new Cluster.MessageRoute
 {
     Receiver = new ReceiverIdentifier(a.Identity),
     Message  = r.Message
 }))
 .Where(r => securityProvider.GetDomain(r.Message.Identity) == domain);
Example #4
0
 public void Setup()
 {
     clusterMonitor       = new Mock <IClusterMonitor>();
     internalRoutingTable = new Mock <IInternalRoutingTable>();
     securityProvider     = new Mock <ISecurityProvider>();
     domain = Guid.NewGuid().ToString();
     securityProvider.Setup(m => m.DomainIsAllowed(domain)).Returns(true);
     logger         = new Mock <ILogger>();
     internalRoutes = GetInternalRoutes();
     internalRoutingTable.Setup(m => m.GetAllRoutes()).Returns(internalRoutes);
     handler = new MessageRouteDiscoveryHandler(clusterMonitor.Object,
                                                internalRoutingTable.Object,
                                                securityProvider.Object,
                                                logger.Object);
 }
Example #5
0
        public void RoutesFromNotFromRequestedDomain_AreNotRegistered()
        {
            var receiverIdentifierRegistration = new ReceiverIdentifierRegistration(ReceiverIdentities.CreateForActor(), false);
            var min            = 5;
            var internalRoutes = new InternalRouting
            {
                Actors = Randomizer.Int32(min, 15)
                         .Produce(() => new MessageActorRoute
                {
                    Message = new MessageIdentifier(Guid.NewGuid().ToByteArray(),
                                                    Randomizer.UInt16(),
                                                    Guid.NewGuid().ToByteArray()),
                    Actors = new[] { receiverIdentifierRegistration }
                }),
                MessageHubs = Enumerable.Empty <MessageHubRoute>()
            };

            internalRoutingTable.Setup(m => m.GetAllRoutes()).Returns(internalRoutes);
            var otherDomainRoutes   = internalRoutes.Actors.Take(min / 2).ToList();
            var allowedDomainRoutes = internalRoutes.Actors.Except(otherDomainRoutes);

            foreach (var route in otherDomainRoutes)
            {
                securityProvider.Setup(m => m.GetDomain(route.Message.Identity)).Returns(Guid.NewGuid().ToString);
            }
            //
            registrar.RegisterOwnGlobalRoutes(domain);
            //
            Func <IEnumerable <MessageRoute>, bool> areAllowedMessageRoutes = mrs =>
            {
                allowedDomainRoutes.Select(r => r.Message)
                .Should()
                .BeEquivalentTo(mrs.Select(r => r.Message));
                var receiverIdentifiers = allowedDomainRoutes.SelectMany(r => r.Actors.Select(a => new ReceiverIdentifier(a.Identity)));
                receiverIdentifiers.Should()
                .BeEquivalentTo(mrs.Select(r => r.Receiver));
                return(true);
            };

            clusterMonitor.Verify(m => m.RegisterSelf(It.Is <IEnumerable <MessageRoute> >(mrs => areAllowedMessageRoutes(mrs)), domain), Times.Once);
        }
 private static IEnumerable <Cluster.MessageRoute> GetMessageHubRoutes(InternalRouting routes)
 => routes.MessageHubs.Where(mh => !mh.LocalRegistration)
 .Select(mh => new Cluster.MessageRoute
 {
     Receiver = new ReceiverIdentifier(mh.MessageHub.Identity)
 });