public void DispatchRequestsForConnectionStatusChangeToConnected() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = new MockEndpointCatalog(); endCatalog.Endpoints.Add("E1", new MockEndpoint("E1")); endCatalog.Endpoints.Add("E2", new MockEndpoint("E2")); endCatalog.Endpoints.Add("E3", new MockEndpoint("E3")); endCatalog.Endpoints["E1"].Default = new MockEndpointConfig("DefaultURI1"); endCatalog.Endpoints["E2"].Default = new MockEndpointConfig("DefaultURI2"); MockConnectionMonitor cm = CreateConnectionManager(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; //All these request have enough stamps to be dispatched Request r1 = new Request(); r1.Endpoint = "E1"; r1.Behavior.Stamps = 9; Request r2 = new Request(); r2.Endpoint = "E2"; r2.Behavior.Stamps = 9; //no endpoint Request r3 = new Request(); r3.Endpoint = "E3"; r3.Behavior.Stamps = 9; queue.Enqueue(r1); queue.Enqueue(r2); queue.Enqueue(r3); disp.SessionAllowDispatchs = 2; //Just allow the first two request dispatch cm.MockChangeConnectionStatus(false); //Is not connected mgr.StartAutomaticDispatch(); mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); //should hold on until connection cm.MockChangeConnectionStatus(true); //Should launch 1 request and stay locked in the second dispatch mgr.Join(1000); Assert.AreEqual(1, disp.RequestsReceived.Count); cm.MockChangeConnectionStatus(false); disp.SessionAllowDispatchs = null; //Unlock the locked dispatch. mgr.Join(1000); //Only the two first request should been dispatched Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.IsTrue(disp.RequestsReceived.Contains(r2)); Assert.IsFalse(disp.RequestsReceived.Contains(r3)); Assert.AreEqual(2, disp.RequestsReceived.Count); Assert.AreEqual(1, queue.GetCount()); }
public void DispatchRequestsForConnectionStatusChangeAccordingToStamps() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = new MockEndpointCatalog(); endCatalog.Endpoints.Add("E1", new MockEndpoint("E1")); endCatalog.Endpoints.Add("E2", new MockEndpoint("E2")); endCatalog.Endpoints.Add("E3", new MockEndpoint("E3")); endCatalog.Endpoints["E1"].Default = new MockEndpointConfig("DefaultURI1"); endCatalog.Endpoints["E2"].Default = new MockEndpointConfig("DefaultURI2"); MockConnectionMonitor cm = CreateConnectionManager(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; //ok Request r1 = new Request(); r1.Endpoint = "E1"; r1.Behavior.Stamps = 9; //not enough stamps Request r2 = new Request(); r2.Endpoint = "E2"; r2.Behavior.Stamps = 1; //no endpoint Request r3 = new Request(); r3.Endpoint = "E3"; r3.Behavior.Stamps = 9; queue.Enqueue(r1); queue.Enqueue(r2); queue.Enqueue(r3); mgr.StartAutomaticDispatch(); Assert.AreEqual(0, disp.RequestsReceived.Count); cm.MockChangeConnectionStatus(true); mgr.Join(1000); Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.IsFalse(disp.RequestsReceived.Contains(r3)); Assert.IsFalse(disp.RequestsReceived.Contains(r2)); Assert.AreEqual(1, disp.RequestsReceived.Count); Assert.AreEqual(2, queue.GetCount()); }
public void DoWithNoParams(OfflineBehavior behavior) { Request r = new Request(); r.MethodName = "DoWithNoParams"; r.Endpoint = "MockService"; r.OnlineProxyType = typeof(MockService); r.Behavior = behavior; requestQueue.Enqueue(r); }
public void DispatchRequestForCurrentConnectionShouldCheckForActiveConnection() { MockEndpointCatalog catalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); IRequestQueue queue = new MockRequestQueue(); IRequestQueue dlq = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, dlq, connectionMonitor, catalog); MockRequestDispatcher dispatcher = MockRequestDispatcher.Instance; Request request1 = new Request(); request1.Endpoint = "Endpoint"; request1.Behavior.MessageId = Guid.NewGuid(); request1.Behavior.Stamps = 9; request1.OnlineProxyType = typeof(MockService); request1.MethodName = "DoWithNoParams"; queue.Enqueue(request1); Request request2 = new Request(); request2.Endpoint = "Endpoint"; request2.Behavior.MessageId = Guid.NewGuid(); request2.Behavior.Stamps = 9; request2.OnlineProxyType = typeof(MockService); request2.MethodName = "DoWithNoParams"; queue.Enqueue(request2); connectionMonitor.MockChangeConnectionStatus(true); MockRequestDispatcher.Block = true; mgr.StartAutomaticDispatch(); Thread.Sleep(30); connectionMonitor.MockChangeConnectionStatus(false); MockRequestDispatcher.Block = false; Thread.Sleep(30); mgr.DispatchAllPendingRequests(); Thread.Sleep(30); mgr.Join(1000); Assert.AreEqual(1, dispatcher.RequestsReceived.Count); //request succeeded }
public void EnqueuedRequestsWithAutomaticDispatchStartedAreNotDispatchedIfThereIsNotConnection() { MockEndpointCatalog catalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); IRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, connectionMonitor, catalog); connectionMonitor.MockChangeConnectionStatus(false); mgr.StartAutomaticDispatch(); Request request = new Request(); request.Endpoint = "Endpoint"; request.Behavior.MessageId = Guid.NewGuid(); request.Behavior.Stamps = 9; request.OnlineProxyType = typeof(MockService); request.MethodName = "DoWithNoParams"; Assert.AreEqual(0, queue.GetCount()); queue.Enqueue(request); mgr.Join(1000); mgr.StopAutomaticDispatch(); Assert.AreEqual(1, queue.GetCount(), "The request should not be dispatched until connection is available."); }
public void IfRequestSucceedsRemoveFromQueue() { MockRequestQueue queue = new MockRequestQueue(); MockEndpointCatalog endCatalog = new MockEndpointCatalog(); MockRequestQueue deadletterQueue = new MockRequestQueue(); endCatalog.Endpoints.Add("E1", new MockEndpoint("E1")); endCatalog.Endpoints["E1"].Default = new MockEndpointConfig("DefaultURI2"); MockConnectionMonitor cm = new MockConnectionMonitor(); cm.CurrentNetwork = "net"; cm.CurrentConnectionPrice = 5; cm.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = new Request(); r1.Endpoint = "E1"; r1.Behavior.Stamps = 9; disp.ForceFails = false; mgr.StartAutomaticDispatch(); queue.Enqueue(r1); mgr.Join(1000); Assert.AreEqual(1, disp.RequestsReceived.Count); Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.AreEqual(0, queue.GetCount()); }
public void EnqueDoesntDispatchIfManagerIsStopped() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockRequestDispatcher disp = new MockRequestDispatcher(); MockEndpointCatalog endCatalog = new MockEndpointCatalog(); endCatalog.Endpoints.Add("E1", new MockEndpoint("E1")); endCatalog.Endpoints["E1"].Default = new MockEndpointConfig("DefaultURI2"); MockConnectionMonitor cm = new MockConnectionMonitor(); cm.CurrentNetwork = "net"; cm.CurrentConnectionPrice = 5; RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); Request r1 = new Request(); r1.Endpoint = "E1"; r1.Behavior.Stamps = 9; mgr.StartAutomaticDispatch(); mgr.StopAutomaticDispatch(); queue.Enqueue(r1); mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); }
public void RequestManagerPassesConnectionPriceToQueue() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); connectionMonitor.MockChangeConnectionStatus(true); MockEndpoint ep = new MockEndpoint("A"); ep.Default = new MockEndpointConfig("address"); endCatalog.Endpoints.Add("A", ep); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, connectionMonitor, endCatalog); Request request = new Request(); request.Endpoint = "A"; request.Behavior.Stamps = 9; queue.Enqueue(request); connectionMonitor.CurrentConnectionPrice = 5; mgr.DispatchAllPendingRequestsForConnection(); mgr.Join(1000); Assert.AreEqual(5, queue.CriteriaReceivedPrice); Assert.AreEqual(0, queue.requests.Count); }
public void DispatchAllRequestByTagBypassingCost() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); connectionMonitor.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; OfflineBehavior behavior = new OfflineBehavior(); behavior.Tag = "A"; Request r1 = new Request(); r1.Endpoint = "Endpoint"; Request r2 = new Request(); r2.Endpoint = "Endpoint"; Request r3 = new Request(); r3.Endpoint = "Endpoint"; r1.Behavior = behavior; r3.Behavior = behavior; queue.Enqueue(r1); queue.Enqueue(r2); queue.Enqueue(r3); mgr.DispatchPendingRequestsByTag("A"); mgr.Join(1000); Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.IsTrue(disp.RequestsReceived.Contains(r3)); Assert.IsFalse(disp.RequestsReceived.Contains(r2)); Assert.AreEqual(2, disp.RequestsReceived.Count); Assert.AreEqual(1, queue.GetCount()); }
public void DispatchAllPendingRequestsDoesntDispatchRequestsForUnavailableEndpoints() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); connectionMonitor.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = new Request(); r1.Endpoint = "Endpoint"; Request r2 = new Request(); r2.Endpoint = "Unavailable"; Request r3 = new Request(); r3.Endpoint = "Endpoint"; queue.Enqueue(r1); queue.Enqueue(r2); queue.Enqueue(r3); mgr.DispatchAllPendingRequests(); mgr.Join(1000); Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.IsTrue(disp.RequestsReceived.Contains(r3)); Assert.IsFalse(disp.RequestsReceived.Contains(r2)); Assert.AreEqual(2, disp.RequestsReceived.Count); Assert.AreEqual(1, queue.GetCount()); }
public void DispatchingRequestWhenConnectionDownRetriesRequestWhenConnectionReturns() { MockEndpointCatalog catalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); IRequestQueue queue = new MockRequestQueue(); IRequestQueue dlq = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, dlq, connectionMonitor, catalog); MockRequestDispatcher dispatcher = MockRequestDispatcher.Instance; Request request = new Request(); request.Endpoint = "Endpoint"; request.Behavior.MessageId = Guid.NewGuid(); request.Behavior.Stamps = 9; request.OnlineProxyType = typeof(MockService); request.MethodName = "DoWithNoParams"; queue.Enqueue(request); dispatcher.ForceFails = true; connectionMonitor.MockChangeConnectionStatus(true); MockRequestDispatcher.Block = true; mgr.StartAutomaticDispatch(); Thread.Sleep(30); connectionMonitor.MockChangeConnectionStatus(false); MockRequestDispatcher.Block = false; Thread.Sleep(30); Assert.AreEqual(0, dispatcher.RequestsReceived.Count); //request tried and failed Assert.AreEqual(0, mgr.DeadLetterQueue.GetCount()); //request not put in DLQ dispatcher.ForceFails = false; connectionMonitor.MockChangeConnectionStatus(true); Thread.Sleep(30); mgr.Join(1000); Assert.AreEqual(1, dispatcher.RequestsReceived.Count); //request succeeded Assert.AreSame(request, dispatcher.RequestsReceived[0]); }
public void RequestEndpointAsEmptyStringIsDispatchedWhenEndpointCatalogIsConfigured() { MockRequestQueue queue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockEndpoint ep = new MockEndpoint("A"); ep.Default = new MockEndpointConfig("address"); endCatalog.Endpoints.Add("A", ep); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockConnectionMonitor cm = new MockConnectionMonitor(); cm.CurrentNetwork = "net"; cm.CurrentConnectionPrice = 5; cm.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = new Request(); r1.Endpoint = ""; r1.Behavior.Stamps = 9; disp.ForceFails = false; queue.Enqueue(r1); mgr.StartAutomaticDispatch(); mgr.Join(1000); Assert.AreEqual(1, disp.RequestsReceived.Count); Assert.IsTrue(disp.RequestsReceived.Contains(r1)); Assert.AreEqual(0, queue.GetCount()); }
public void ExpiredMessagesDontGetDispatched() { MockRequestQueue queue = new MockRequestQueue(); MockRequestQueue dlq = new MockRequestQueue(); MockRequestDispatcher disp = new MockRequestDispatcher(); MockEndpointCatalog endCatalog = new MockEndpointCatalog(); endCatalog.Endpoints.Add("E1", new MockEndpoint("E1")); endCatalog.Endpoints["E1"].Default = new MockEndpointConfig("DefaultURI2"); MockConnectionMonitor cm = new MockConnectionMonitor(); cm.CurrentNetwork = "net"; cm.CurrentConnectionPrice = 5; cm.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, dlq, cm, endCatalog); Request r1 = new Request(); r1.Endpoint = "E1"; r1.Behavior.Stamps = 9; r1.Behavior.Expiration = DateTime.Now - TimeSpan.FromHours(1); //Already expired mgr.StartAutomaticDispatch(); queue.Enqueue(r1); mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); Assert.IsFalse(disp.RequestsReceived.Contains(r1)); Assert.AreEqual(0, queue.GetCount()); Assert.AreEqual(0, dlq.GetCount()); Assert.IsFalse(dlq.requests.Contains(r1)); }