public void TestRouteIsRemoved_BySocketIdentifier() { var logger = new Mock<ILogger>(); var externalRoutingTable = new ExternalRoutingTable(logger.Object); var messageHandlerIdentifier1 = new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity); var messageHandlerIdentifier2 = new MessageIdentifier(Message.CurrentVersion, AsyncMessage.MessageIdentity); var socketIdentifier1 = new SocketIdentifier(Guid.NewGuid().ToByteArray()); var socketIdentifier2 = new SocketIdentifier(Guid.NewGuid().ToByteArray()); var uri1 = new Uri("tcp://127.0.0.1:40"); var uri2 = new Uri("tcp://127.0.0.2:40"); var node1 = new Node(uri1, socketIdentifier1.Identity); var node2 = new Node(uri2, socketIdentifier2.Identity); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier1, socketIdentifier1, uri1); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier2, socketIdentifier1, uri1); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier1, socketIdentifier2, uri2); Assert.AreEqual(node1, externalRoutingTable.FindRoute(messageHandlerIdentifier1)); externalRoutingTable.RemoveNodeRoute(socketIdentifier1); Assert.AreEqual(node2, externalRoutingTable.FindRoute(messageHandlerIdentifier1)); Assert.AreEqual(node2, externalRoutingTable.FindRoute(messageHandlerIdentifier1)); Assert.IsNull(externalRoutingTable.FindRoute(messageHandlerIdentifier2)); }
public void TestIfNoRouteRegisteredForSpecificMessage_ExternalRoutingTableReturnsNull() { var logger = new Mock<ILogger>(); var externalRoutingTable = new ExternalRoutingTable(logger.Object); var messageHandlerIdentifier = new MessageIdentifier(Message.CurrentVersion, AsyncMessage.MessageIdentity); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier, new SocketIdentifier(Guid.NewGuid().ToByteArray()), new Uri("tcp://127.0.0.1:40")); Assert.IsNull(externalRoutingTable.FindRoute(new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity))); }
public void TestTwoExternalRegistrationsForSameMessage_AreReturnedInRoundRobinWay() { var logger = new Mock<ILogger>(); var externalRoutingTable = new ExternalRoutingTable(logger.Object); var messageHandlerIdentifier = new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity); var socketIdentifier1 = new SocketIdentifier(Guid.NewGuid().ToByteArray()); var socketIdentifier2 = new SocketIdentifier(Guid.NewGuid().ToByteArray()); var uri1 = new Uri("tcp://127.0.0.1:40"); var uri2 = new Uri("tcp://127.0.0.2:40"); var node1 = new Node(uri1, socketIdentifier1.Identity); var node2 = new Node(uri2, socketIdentifier2.Identity); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier, socketIdentifier1, uri1); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier, socketIdentifier2, uri2); Assert.AreEqual(node1, externalRoutingTable.FindRoute(messageHandlerIdentifier)); Assert.AreEqual(node2, externalRoutingTable.FindRoute(messageHandlerIdentifier)); Assert.AreEqual(node1, externalRoutingTable.FindRoute(messageHandlerIdentifier)); }
public void TestRemoveMessageRoute_RemovesOnlyProvidedMessageIdentifiers() { var logger = new Mock<ILogger>(); var externalRoutingTable = new ExternalRoutingTable(logger.Object); var messageHandlerIdentifier1 = new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity); var messageHandlerIdentifier2 = new MessageIdentifier(Message.CurrentVersion, AsyncMessage.MessageIdentity); var messageHandlerIdentifier3 = new MessageIdentifier(Message.CurrentVersion, AsyncExceptionMessage.MessageIdentity); var socketIdentifier = new SocketIdentifier(Guid.NewGuid().ToByteArray()); var uri = new Uri("tcp://127.0.0.1:40"); var node = new Node(uri, socketIdentifier.Identity); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier1, socketIdentifier, uri); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier2, socketIdentifier, uri); externalRoutingTable.AddMessageRoute(messageHandlerIdentifier3, socketIdentifier, uri); Assert.AreEqual(node, externalRoutingTable.FindRoute(messageHandlerIdentifier3)); externalRoutingTable.RemoveMessageRoute(new[] {messageHandlerIdentifier2, messageHandlerIdentifier3}, socketIdentifier); Assert.AreEqual(node, externalRoutingTable.FindRoute(messageHandlerIdentifier1)); Assert.IsNull(externalRoutingTable.FindRoute(messageHandlerIdentifier2)); Assert.IsNull(externalRoutingTable.FindRoute(messageHandlerIdentifier3)); }
public void Build() { AssertDependencyResolverSet(); var configurationProvider = new ConfigurationProvider(resolver.Resolve <KinoConfiguration>()); var scaleOutSocketConfiguration = configurationProvider.GetScaleOutConfiguration(); var clusterMembershipConfiguration = configurationProvider.GetClusterMembershipConfiguration(); var clusterHealthMonitorConfiguration = configurationProvider.GetClusterHealthMonitorConfiguration(); var heartBeatSenderConfiguration = configurationProvider.GetHeartBeatSenderConfiguration(); var socketConfiguration = configurationProvider.GetSocketConfiguration(); var rendezvousEndpoints = configurationProvider.GetRendezvousEndpointsConfiguration(); var socketFactory = new SocketFactory(socketConfiguration); var logger = resolver.Resolve <ILogger>(); var roundRobinDestinationList = new RoundRobinDestinationList(logger); var internalRoutingTable = new InternalRoutingTable(roundRobinDestinationList); var externalRoutingTable = new ExternalRoutingTable(roundRobinDestinationList, logger); var localSocketFactory = new LocalSocketFactory(); var routerLocalSocket = new LocalSocket <IMessage>(); var internalRegistrationSocket = new LocalSocket <InternalRouteRegistration>(); #if NET47 var instanceNameResolver = resolver.Resolve <IInstanceNameResolver>() ?? new InstanceNameResolver(); var performanceCounterManager = new PerformanceCounterManager <KinoPerformanceCounters>(instanceNameResolver, logger); #else var performanceCounterManager = default(IPerformanceCounterManager <KinoPerformanceCounters>); #endif var hashCodeProvider = resolver.Resolve <Func <HMAC> >() ?? (() => HMAC.Create("HMACMD5")); var securityProvider = resolver.Resolve <ISecurityProvider>() ?? new SecurityProvider(hashCodeProvider, resolver.Resolve <IDomainScopeResolver>(), resolver.Resolve <IDomainPrivateKeyProvider>()); var heartBeatSenderConfigurationManager = new HeartBeatSenderConfigurationManager(heartBeatSenderConfiguration); var configurationStorage = resolver.Resolve <IConfigurationStorage <RendezvousClusterConfiguration> >() ?? new RendezvousClusterConfigurationReadonlyStorage(rendezvousEndpoints); var rendezvousCluster = new RendezvousCluster(configurationStorage); var scaleoutConfigurationProvider = new ServiceLocator <ScaleOutConfigurationManager, NullScaleOutConfigurationManager, IScaleOutConfigurationManager>(clusterMembershipConfiguration, new ScaleOutConfigurationManager(scaleOutSocketConfiguration), new NullScaleOutConfigurationManager()) .GetService(); var connectedPeerRegistry = new ConnectedPeerRegistry(clusterHealthMonitorConfiguration); var clusterHealthMonitor = new ServiceLocator <ClusterHealthMonitor, NullClusterHealthMonitor, IClusterHealthMonitor>(clusterMembershipConfiguration, new ClusterHealthMonitor(socketFactory, localSocketFactory, securityProvider, routerLocalSocket, connectedPeerRegistry, clusterHealthMonitorConfiguration, logger), new NullClusterHealthMonitor()) .GetService(); var heartBeatSender = new ServiceLocator <HeartBeatSender, NullHeartBeatSender, IHeartBeatSender>(clusterMembershipConfiguration, new HeartBeatSender(socketFactory, heartBeatSenderConfigurationManager, scaleoutConfigurationProvider, logger), new NullHeartBeatSender()) .GetService(); var scaleOutListener = new ServiceLocator <ScaleOutListener, NullScaleOutListener, IScaleOutListener>(clusterMembershipConfiguration, new ScaleOutListener(socketFactory, routerLocalSocket, scaleoutConfigurationProvider, securityProvider, performanceCounterManager, logger), new NullScaleOutListener()) .GetService(); var autoDiscoverSender = new AutoDiscoverySender(rendezvousCluster, socketFactory, clusterMembershipConfiguration, performanceCounterManager, logger); var autoDiscoveryListener = new AutoDiscoveryListener(rendezvousCluster, socketFactory, scaleoutConfigurationProvider, clusterMembershipConfiguration, performanceCounterManager, routerLocalSocket, logger); var routeDiscovery = new RouteDiscovery(autoDiscoverSender, scaleoutConfigurationProvider, clusterMembershipConfiguration, securityProvider, logger); var clusterMonitor = new ServiceLocator <ClusterMonitor, NullClusterMonitor, IClusterMonitor>(clusterMembershipConfiguration, new ClusterMonitor(scaleoutConfigurationProvider, autoDiscoverSender, autoDiscoveryListener, heartBeatSenderConfigurationManager, routeDiscovery, securityProvider, clusterMembershipConfiguration, logger), new NullClusterMonitor()) .GetService(); var clusterServices = new ClusterServices(clusterMonitor, scaleOutListener, heartBeatSender, clusterHealthMonitor); var nodeRoutesRegistrar = new NodeRoutesRegistrar(clusterServices, internalRoutingTable, securityProvider); var internalMessageRouteRegistrationHandler = new InternalMessageRouteRegistrationHandler(clusterMonitor, internalRoutingTable, securityProvider); var serviceMessageHandlers = new IServiceMessageHandler[] { new ClusterMessageRoutesRequestHandler(securityProvider, nodeRoutesRegistrar), new PingHandler(), new ExternalMessageRouteRegistrationHandler(externalRoutingTable, securityProvider, clusterHealthMonitor, logger), new MessageRouteDiscoveryHandler(clusterMonitor, internalRoutingTable, securityProvider, logger), new MessageRouteUnregistrationHandler(clusterHealthMonitor, externalRoutingTable, securityProvider, logger), new NodeMessageRoutesRequestHandler(securityProvider, nodeRoutesRegistrar), new NodeUnregistrationHandler(clusterHealthMonitor, externalRoutingTable, securityProvider), new UnreachableNodeUnregistrationHandler(clusterHealthMonitor, externalRoutingTable) }; var serviceMessageHandlerRegistry = new ServiceMessageHandlerRegistry(serviceMessageHandlers); messageRouter = new MessageRouter(socketFactory, internalRoutingTable, externalRoutingTable, scaleoutConfigurationProvider, clusterServices, serviceMessageHandlerRegistry, performanceCounterManager, securityProvider, routerLocalSocket, internalRegistrationSocket, internalMessageRouteRegistrationHandler, roundRobinDestinationList, logger); var actorHostFactory = new ActorHostFactory(securityProvider, routerLocalSocket, internalRegistrationSocket, localSocketFactory, logger); var callbackHandlerStack = new CallbackHandlerStack(); createMessageHub = (keepLocal) => new MessageHub(callbackHandlerStack, routerLocalSocket, internalRegistrationSocket, localSocketFactory, scaleoutConfigurationProvider, securityProvider, logger, keepLocal); var messageHub = createMessageHub(false); getMessageHub = () => messageHub; actorHostManager = new ActorHostManager(actorHostFactory, logger); internalActorHostManager = new ActorHostManager(actorHostFactory, logger); var internalActor = new MessageRoutesActor(externalRoutingTable, internalRoutingTable); internalActorHostManager.AssignActor(internalActor); // isBuilt = true; }
private void Build() { var socketFactory = new SocketFactory(); var perfCountersManager = CreatePerfCountersManager(); var localSocketFactory = new LocalSocketFactory(); var routerLocalSocket = localSocketFactory.Create <IMessage>(); var internalRoutingTable = new InternalRoutingTable(); var externalRoutingTable = new ExternalRoutingTable(logger); var scaleOutConfigurationManager = new ScaleOutConfigurationManager(configurationProvider.GetRouterConfiguration(), configurationProvider.GetScaleOutConfiguration()); var rendezvousConfigurationStorage = new RendezvousClusterConfigurationReadonlyStorage(configurationProvider.GetRendezvousEndpointsConfiguration()); var rendezvousCluster = new RendezvousCluster(rendezvousConfigurationStorage); var securityProider = new SecurityProvider(() => HMAC.Create("HMACMD5"), domainScopeResolver, domainPrivateKeyProvider); var autoDiscoverSender = new AutoDiscoverySender(rendezvousCluster, scaleOutConfigurationManager, socketFactory, perfCountersManager, securityProider, logger); var autoDiscoverListener = new AutoDiscoveryListener(rendezvousCluster, socketFactory, scaleOutConfigurationManager, autoDiscoverSender, configurationProvider.GetClusterMembershipConfiguration(), perfCountersManager, securityProider, routerLocalSocket, logger); var routeDiscovery = new RouteDiscovery(autoDiscoverSender, scaleOutConfigurationManager, configurationProvider.GetClusterMembershipConfiguration(), securityProider, logger); var heartBeatSenderConfigurationManager = new HeartBeatSenderConfigurationManager(configurationProvider.GetHeartBeatSenderConfiguration()); var clusterConnectivity = new ClusterConnectivity(configurationProvider.GetClusterMembershipConfiguration(), scaleOutConfigurationManager, autoDiscoverSender, autoDiscoverListener, routeDiscovery, socketFactory, routerLocalSocket, scaleOutConfigurationManager, securityProider, perfCountersManager, logger, heartBeatSenderConfigurationManager, localSocketFactory, configurationProvider.GetClusterHealthMonitorConfiguration()); var internalRegistrationsSocket = localSocketFactory.Create <InternalRouteRegistration>(); var internalRegistrationsHandler = new InternalMessageRouteRegistrationHandler(clusterConnectivity, internalRoutingTable, securityProider, logger); messageRouter = new MessageRouter(socketFactory, internalRoutingTable, externalRoutingTable, scaleOutConfigurationManager, clusterConnectivity, CreateServiceMessageHandlers(clusterConnectivity, externalRoutingTable, internalRoutingTable, securityProider), perfCountersManager, securityProider, routerLocalSocket, internalRegistrationsSocket, internalRegistrationsHandler, logger); actorHostManager = new ActorHostManager(securityProider, perfCountersManager, routerLocalSocket, internalRegistrationsSocket, localSocketFactory, logger); var callbackHandlerStack = new CallbackHandlerStack(); messageHub = new MessageHub(callbackHandlerStack, perfCountersManager, routerLocalSocket, internalRegistrationsSocket, localSocketFactory, logger, false); }
public void TestIfUnregisterNodeMessageRouteMessage_AllRoutesAreRemovedFromExternalRoutingTable() { var externalRoutingTable = new ExternalRoutingTable(logger); var router = new MessageRouter(socketFactory.Object, new InternalRoutingTable(), externalRoutingTable, routerConfiguration, clusterMonitor.Object, messageTracer.Object, logger); try { StartMessageRouter(router); var messageIdentifiers = new[] { new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity), new MessageIdentifier(Message.CurrentVersion, AsyncMessage.MessageIdentity) }; var socketIdentity = SocketIdentifier.Create(); var uri = new Uri("tcp://127.0.0.1:8000"); messageIdentifiers.ForEach(mi => externalRoutingTable.AddMessageRoute(mi, socketIdentity, uri)); var message = Message.Create(new UnregisterNodeMessageRouteMessage { Uri = uri.ToSocketAddress(), SocketIdentity = socketIdentity.Identity }, UnregisterNodeMessageRouteMessage.MessageIdentity); CollectionAssert.IsNotEmpty(externalRoutingTable.GetAllRoutes()); messageRouterSocketFactory.GetRouterSocket().DeliverMessage(message); Thread.Sleep(AsyncOp); CollectionAssert.IsEmpty(externalRoutingTable.GetAllRoutes()); } finally { router.Stop(); } }
public void TestIfRegisterExternalMessageRouteMessageReceived_AllRoutesAreAddedToExternalRoutingTable() { var externalRoutingTable = new ExternalRoutingTable(logger); var router = new MessageRouter(socketFactory.Object, new InternalRoutingTable(), externalRoutingTable, routerConfiguration, clusterMonitor.Object, messageTracer.Object, logger); try { StartMessageRouter(router); var messageIdentifiers = new[] { new MessageIdentifier(Message.CurrentVersion, SimpleMessage.MessageIdentity), new MessageIdentifier(Message.CurrentVersion, AsyncMessage.MessageIdentity) }; var socketIdentity = SocketIdentifier.CreateIdentity(); var message = Message.Create(new RegisterExternalMessageRouteMessage { Uri = "tcp://127.0.0.1:8000", SocketIdentity = socketIdentity, MessageContracts = messageIdentifiers.Select(mi => new MessageContract { Version = mi.Version, Identity = mi.Identity }).ToArray() }, RegisterExternalMessageRouteMessage.MessageIdentity); messageRouterSocketFactory.GetRouterSocket().DeliverMessage(message); Thread.Sleep(AsyncOp); Assert.IsTrue(Unsafe.Equals(socketIdentity, externalRoutingTable.FindRoute(messageIdentifiers.First()).SocketIdentity)); Assert.IsTrue(Unsafe.Equals(socketIdentity, externalRoutingTable.FindRoute(messageIdentifiers.Second()).SocketIdentity)); } finally { router.Stop(); } }
public void Setup() { logger = new Mock <ILogger>(); externalRoutingTable = new ExternalRoutingTable(logger.Object); }
public ExternalRoutingTableTests() { logger = new Mock <ILogger>(); externalRoutingTable = new ExternalRoutingTable(new RoundRobinDestinationList(logger.Object), logger.Object); }