public void DispatchOneRequestForciblyRemoveItFromTheQueue() { MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); MockRequestQueue requestQueue = new MockRequestQueue(); connectionMonitor.MockChangeConnectionStatus(true); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r = new Request(); r.Endpoint = "Endpoint"; mgr.RequestQueue.Enqueue(r); Assert.AreEqual(1, mgr.RequestQueue.GetCount()); mgr.DispatchRequest(r); mgr.Join(1000); Assert.AreEqual(0, mgr.RequestQueue.GetCount()); Assert.AreSame(r, disp.RequestsReceived[0]); Assert.IsFalse(requestQueue.requests.Contains(r)); }
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 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 WebServiceProxyFactorySetsCredential() { Request request = new Request(); request.Endpoint = "endpoint"; request.OnlineProxyType = typeof(MockClient); NetworkCredential creds = new NetworkCredential("user", "pwd"); MockEndpointCatalog catalog = new MockEndpointCatalog(); MockEndpoint endpoint = new MockEndpoint("endpoint"); endpoint.Default = new MockEndpointConfig(defaultURL); endpoint.Default.Credential = creds; catalog.Endpoints.Add("endpoint", endpoint); WCFProxyFactory <IMockService> factory = new WCFProxyFactory <IMockService>((IEndpointCatalog)catalog); MockClient proxy = (MockClient)factory.GetOnlineProxy(request, "Network"); Assert.IsNotNull(proxy); Assert.AreEqual("user", proxy.ClientCredentials.UserName.UserName); Assert.AreEqual("pwd", proxy.ClientCredentials.UserName.Password); }
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 FactoryCallTheSpecifiedMethod() { Request request = new Request(); request.Endpoint = "endpoint"; request.MethodName = "CalledMethod"; request.OnlineProxyType = typeof(MockClient); NetworkCredential creds = new NetworkCredential("user", "pwd"); MockEndpointCatalog catalog = new MockEndpointCatalog(); MockEndpoint endpoint = new MockEndpoint("endpoint"); endpoint.Default = new MockEndpointConfig(defaultURL); endpoint.Default.Credential = creds; catalog.Endpoints.Add("endpoint", endpoint); WCFProxyFactory <IMockService> factory = new WCFProxyFactory <IMockService>((IEndpointCatalog)catalog); MockClient proxy = (MockClient)factory.GetOnlineProxy(request, "Network"); Exception exception = null; factory.CallOnlineProxyMethod(proxy, request, ref exception); Assert.IsTrue(proxy.MethodCalled); }
public void DispatchRequestsByTagUsesDifferentThread() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r = new Request(); r.Behavior.Tag = "Tag"; r.Endpoint = "E1"; mgr.RequestQueue.Enqueue(r); disp.ThreadId = 0; requestQueue.ThreadId = 0; connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchPendingRequestsByTag("Tag"); mgr.Join(1000); int threadId = Thread.CurrentThread.ManagedThreadId; Assert.AreNotEqual(threadId, requestQueue.ThreadId, "Call to queue should have been on a different thread"); Assert.AreNotEqual(threadId, disp.ThreadId, "Call to dispatcher shoul dhave been on a different thread"); Assert.AreEqual(disp.ThreadId, requestQueue.ThreadId); Assert.AreNotEqual(0, disp.ThreadId); Assert.AreSame(r, disp.RequestsReceived[0]); Assert.AreEqual(1, disp.RequestsReceived.Count); }
public void DispatchOneRequestForciblyOnlyWorksIfItsConnected() { MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); MockRequestQueue requestQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r = new Request(); r.Endpoint = "Endpoint"; mgr.RequestQueue.Enqueue(r); connectionMonitor.MockChangeConnectionStatus(false); mgr.DispatchRequest(r); // mgr.DispatchRequest(r); // r should be dispatched once mgr.DispatchRequest(r); // mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(r); mgr.Join(1000); Assert.AreEqual(1, disp.RequestsReceived.Count); // r should be dispatched once Assert.AreSame(r, disp.RequestsReceived[0]); }
public void ManangerSendsSentEventAfterRequestSent() { MockEndpointCatalog catalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = new MockConnectionMonitor(); IRequestQueue queue = new MockRequestQueue(); connectionMonitor.MockChangeConnectionStatus(true); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, connectionMonitor, catalog); dispatchedRequest = null; mgr.RequestDispatched += new EventHandler <RequestDispatchedEventArgs>(OnRequestDispatched); Request request = new Request(); request.Endpoint = "Endpoint"; request.Behavior.MessageId = Guid.NewGuid(); request.Behavior.Stamps = 9; request.OnlineProxyType = typeof(MockService); request.MethodName = "DoWithNoParams"; mgr.RequestQueue.Enqueue(request); mgr.DispatchAllPendingRequests(); mgr.Join(1000); Assert.IsNotNull(dispatchedRequest); Assert.AreEqual(DispatchResult.Succeeded, dispatchResult); }
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 RequestsWithMissingEndpointAreMovedToTheDeadLetterQueue() { MockRequestDispatcher disp = new MockRequestDispatcher(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadLetterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadLetterQueue, connectionMonitor, endCatalog); Request r = new Request(); r.Endpoint = "MissingEndpoint"; mgr.RequestQueue.Enqueue(r); connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(r); mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); Assert.AreEqual(1, deadLetterQueue.GetCount()); Assert.AreEqual(0, requestQueue.GetCount()); Assert.AreSame(r, deadLetterQueue.requests[0]); }
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); }
private static MockEndpointCatalog CreateEndpointCatalog() { MockEndpointCatalog endCatalog = new MockEndpointCatalog(); endCatalog.Endpoints.Add("Endpoint", new MockEndpoint("Endpoint")); endCatalog.Endpoints["Endpoint"].Default = new MockEndpointConfig("DefaultURI"); return(endCatalog); }
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 DispatchRequestOnConnectionChangesRestartsActiveCommand() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = CreateRequest(9, String.Empty, "E1"); mgr.RequestQueue.Enqueue(r1); Request r2 = CreateRequest(3, String.Empty, "E1"); mgr.RequestQueue.Enqueue(r2); Request r3 = CreateRequest(9, String.Empty, "E1"); mgr.RequestQueue.Enqueue(r3); MockRequestDispatcher.Block = true; connectionMonitor.MockChangeConnectionStatus(false); mgr.StartAutomaticDispatch(); connectionMonitor.CurrentNetwork = "net"; connectionMonitor.CurrentConnectionPrice = 9; connectionMonitor.MockChangeConnectionStatus(true); //Should starts OnAutomaticDispatch of { r1, r3 } Thread.Sleep(30); //Starts r1 dispatching which is blocked //Change to a price 3 connection connectionMonitor.MockChangeConnectionStatus(false); //Disconnect MockRequestDispatcher.Block = false; //Unblock and finish the r1 dispatching connectionMonitor.CurrentConnectionPrice = 3; Thread.Sleep(30); connectionMonitor.MockChangeConnectionStatus(true); //Should restart active command {r2, r3} //Should starts OnAutomaticDispatch Thread.Sleep(30); MockRequestDispatcher.Block = false; mgr.StopAutomaticDispatch(); mgr.Join(1000); Assert.AreEqual(3, disp.RequestsReceived.Count); Assert.AreSame(r1, disp.RequestsReceived[0]); Assert.AreEqual(r2, disp.RequestsReceived[1]); Assert.AreEqual(r3, disp.RequestsReceived[2]); }
public void GetOnlineProxyUsesProxyAddressIfNoEndPointConfigured() { Request request = new Request(); request.Endpoint = "MissingEndpoint"; request.OnlineProxyType = typeof(MockWebServiceProxy); MockEndpointCatalog catalog = new MockEndpointCatalog(); WebServiceProxyFactory factory = new WebServiceProxyFactory((IEndpointCatalog)catalog); SoapHttpClientProtocol proxy = (SoapHttpClientProtocol)factory.GetOnlineProxy(request, "Network"); Assert.IsNotNull(proxy); Assert.IsNotNull(proxy.Url); Assert.AreEqual("http://MyUrl.myurl.com/".ToLower(), proxy.Url.ToLower()); }
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 RequestManagerIsCreatedStopped() { 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 = CreateConnectionManager(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(queue, deadletterQueue, cm, endCatalog); Assert.IsFalse(mgr.AutomaticDispatcherRunning); }
public void GetOnlineProxyUsesProxyAddressIfNoEndPointConfigured() { Request request = new Request(); request.Endpoint = "MissingEndpoint"; request.MethodName = "CalledMethod"; request.OnlineProxyType = typeof(MockClient); MockEndpointCatalog catalog = new MockEndpointCatalog(); WCFProxyFactory <IMockService> factory = new WCFProxyFactory <IMockService>((IEndpointCatalog)catalog); MockClient proxy = (MockClient)factory.GetOnlineProxy(request, "Network"); Assert.IsNotNull(proxy); Assert.IsNotNull(proxy.Endpoint); Assert.AreEqual(new EndpointAddress("http://myurl.com"), proxy.Endpoint.Address); }
public void DispatchWithAutomaticDispatchStopsDispatchingWhenConnectionGoesAway() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = new Request(); r1.Behavior.Stamps = 9; r1.Endpoint = "E1"; mgr.RequestQueue.Enqueue(r1); Request r2 = new Request(); r2.Behavior.Stamps = 3; r2.Endpoint = "E1"; mgr.RequestQueue.Enqueue(r2); Request r3 = new Request(); r3.Behavior.Stamps = 9; r3.Endpoint = "E1"; mgr.RequestQueue.Enqueue(r3); MockRequestDispatcher.Block = true; connectionMonitor.CurrentNetwork = "net"; connectionMonitor.CurrentConnectionPrice = 3; connectionMonitor.MockChangeConnectionStatus(true); mgr.StartAutomaticDispatch(); Thread.Sleep(30); connectionMonitor.MockChangeConnectionStatus(false); Thread.Sleep(30); MockRequestDispatcher.Block = false; mgr.Join(1000); mgr.StartAutomaticDispatch(); Assert.AreEqual(1, disp.RequestsReceived.Count); Assert.AreSame(r1, disp.RequestsReceived[0]); }
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 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 DispatchingMethodsUseOnlyOneDispatchAtTheSameTime() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue Dlq = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, Dlq, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag1", 9); EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag2", 9); EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag1", 3); EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag1", 3); EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag2", 9); EnqueueNewRequest(mgr.RequestQueue, "E1", "Tag1", 9); MockRequestDispatcher.Block = false; MockRequestDispatcher.SlowMode = true; MockRequestDispatcher.UniqueDispatch = true; MockRequestDispatcher.DispatchRunning = 0; connectionMonitor.CurrentConnectionPrice = 3; mgr.StartAutomaticDispatch(); mgr.DispatchPendingRequestsByTag("Tag1"); connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(mgr.RequestQueue.GetNextRequest()); connectionMonitor.CurrentConnectionPrice = 8; mgr.DispatchAllPendingRequestsForConnection(); connectionMonitor.MockChangeConnectionStatus(false); mgr.DispatchAllPendingRequests(); connectionMonitor.MockChangeConnectionStatus(true); mgr.Join(10000); mgr.StopAutomaticDispatch(); MockRequestDispatcher.SlowMode = false; Assert.IsTrue(MockRequestDispatcher.UniqueDispatch); Assert.AreEqual(0, MockRequestDispatcher.DispatchRunning); Assert.AreEqual(6, disp.RequestsReceived.Count); }
public void DispatchDoesNotDispatchRequestsOutOfTheQueue() { MockRequestDispatcher disp = new MockRequestDispatcher(); MockRequestQueue deadletterQueue = new MockRequestQueue(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); MockRequestQueue requestQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); Request r = new Request(); r.Endpoint = "Endpoint"; connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(r); mgr.Join(1000); Assert.AreEqual(0, disp.RequestsReceived.Count); }
public void DispatchRequestInSameOrderAsCommandsWereEntered() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = CreateRequest(9, "Tag", "E1"); mgr.RequestQueue.Enqueue(r1); Request r2 = CreateRequest(3, String.Empty, "E1"); mgr.RequestQueue.Enqueue(r2); Request r3 = CreateRequest(9, "Tag", "E1"); mgr.RequestQueue.Enqueue(r3); connectionMonitor.MockChangeConnectionStatus(false); mgr.StartAutomaticDispatch(); mgr.DispatchPendingRequestsByTag("Tag"); //Should dispatch r1 and r3 Thread.Sleep(30); connectionMonitor.CurrentNetwork = "net"; connectionMonitor.CurrentConnectionPrice = 3; connectionMonitor.MockChangeConnectionStatus(true); //Should starts OnAutomaticDispatch to dispatch r2 Thread.Sleep(30); mgr.Join(1000); Assert.AreEqual(3, disp.RequestsReceived.Count); Assert.AreEqual(r1, disp.RequestsReceived[0]); Assert.AreEqual(r3, disp.RequestsReceived[1]); Assert.AreEqual(r2, disp.RequestsReceived[2]); }
public void DispatchRequestDoesNotDispatchPreviouslyDispatchedRequests() { MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionMonitor(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadletterQueue = new MockRequestQueue(); RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadletterQueue, connectionMonitor, endCatalog); MockRequestDispatcher disp = MockRequestDispatcher.Instance; Request r1 = CreateRequest(9, "Tag", "E1"); mgr.RequestQueue.Enqueue(r1); Request r2 = CreateRequest(9, "Dispatched", "E1"); mgr.RequestQueue.Enqueue(r2); Request r3 = CreateRequest(9, "Tag", "E1"); mgr.RequestQueue.Enqueue(r3); connectionMonitor.MockChangeConnectionStatus(false); mgr.DispatchAllPendingRequests(); //When connection comes up it will try to dispatch r1, r2 and r3 Thread.Sleep(30); connectionMonitor.CurrentNetwork = "net"; connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(r2); //Explicitly dispatch for r2 ('cause there is an active connection should start //the dispatching thread and process all pending dispatch commands). Thread.Sleep(30); mgr.Join(1000); Assert.AreEqual(3, disp.RequestsReceived.Count); Assert.AreEqual(r1, disp.RequestsReceived[0]); Assert.AreEqual(r2, disp.RequestsReceived[1]); Assert.AreEqual(r3, disp.RequestsReceived[2]); }
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 WebServiceProxyFactorySetsAddress() { Request request = new Request(); request.Endpoint = "endpoint"; request.OnlineProxyType = typeof(MockWebServiceProxy); NetworkCredential creds = new NetworkCredential("user", "pwd"); MockEndpointCatalog catalog = new MockEndpointCatalog(); MockEndpoint endpoint = new MockEndpoint("endpoint"); endpoint.Default = new MockEndpointConfig(defaultURL); endpoint.Default.Credential = creds; catalog.Endpoints.Add("endpoint", endpoint); WebServiceProxyFactory factory = new WebServiceProxyFactory((IEndpointCatalog)catalog); SoapHttpClientProtocol proxy = (SoapHttpClientProtocol)factory.GetOnlineProxy(request, "Network"); Assert.IsNotNull(proxy); Assert.AreEqual(defaultURL, proxy.Url); }
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 ExpiredMessagesFiresRequestDispatchedAsExpired() { MockRequestDispatcher disp = new MockRequestDispatcher(); MockEndpointCatalog endCatalog = CreateEndpointCatalog(); MockConnectionMonitor connectionMonitor = CreateConnectionManager(); MockRequestQueue requestQueue = new MockRequestQueue(); MockRequestQueue deadLetterQueue = new MockRequestQueue(); DispatchResult? result = null; connectionMonitor.CurrentConnectionPrice = 1; RequestManager mgr = RequestManager.Instance; mgr.Initialize <MockRequestDispatcher>(requestQueue, deadLetterQueue, connectionMonitor, endCatalog); mgr.RequestDispatched += delegate(object sender, RequestDispatchedEventArgs args) { result = args.Result; }; Request request = new Request(); request.Endpoint = "Endpoint"; request.Behavior.MessageId = Guid.NewGuid(); request.Behavior.Stamps = 9; request.OnlineProxyType = typeof(MockService); request.MethodName = "DoWithNoParams"; request.Behavior.Expiration = DateTime.Now - TimeSpan.FromDays(1); mgr.RequestQueue.Enqueue(request); connectionMonitor.MockChangeConnectionStatus(true); mgr.DispatchRequest(request); //mgr.StartAutomaticDispatch(); mgr.Join(1000); Assert.AreEqual(DispatchResult.Expired, result); Assert.AreEqual(0, disp.RequestsReceived.Count); Assert.AreEqual(0, deadLetterQueue.GetCount()); }