public void CloseRequest_NotExistingRequest_ShouldReturnWithOutChangingQueue() { var sut = new TitanicMemoryIO (); for (var i = 0; i < 10; i++) sut.SaveNewRequestEntry (Guid.NewGuid ()); var id = Guid.NewGuid (); sut.CloseRequest (id); sut.NumberOfRequests.Should ().Be (10); }
public void TitanicReply_RequestReplyPending_ShouldSentCorrectReply () { var io = new TitanicMemoryIO (); using (var reqWorker = new FakeRequestMDPWorker ()) using (var repWorker = new FakeReplyMDPWorker ()) using (var closeWorker = new FakeCloseMDPWorker ()) using (var dispatchClient = new FakeDispatchMDPClient ()) using (var sut = new TitanicBroker (io)) { // setup the queue with a request var guid = Guid.NewGuid (); var msg = new NetMQMessage (); msg.Push (guid.ToString ()); // queue is setup with a request pending io.SaveNewRequestEntry (guid, msg); // setup the fake replyWorker's request repWorker.Request = new NetMQMessage (); repWorker.Request.Push (guid.ToString ()); // start the process chain - worker & client should only run until they hit an AutoResetEvent Task.Factory.StartNew (() => sut.Run (reqWorker, repWorker, closeWorker, dispatchClient)); // signal worker to go ahead repWorker.waitHandle.Set (); // give everything some time to process Thread.Sleep (_sleep_for); // TEST COMMUNICATION repWorker.Reply.FrameCount.Should ().Be (1, "because a 1 frame message is expected. ({0})", repWorker.Reply); repWorker.Reply.First.ConvertToString ().Should ().Be ("Pending"); // TEST QUEUE io.GetRequestEntries (e => e.RequestId == guid).Count ().Should ().Be (1); var queueEntry = io.GetRequestEntry (guid); queueEntry.State.Should ().Be (RequestEntry.Is_Pending); io.ExistsMessage (TitanicOperation.Request, guid).Should ().BeTrue (); io.ExistsMessage (TitanicOperation.Reply, guid).Should ().BeFalse (); io.ExistsMessage (TitanicOperation.Close, guid).Should ().BeFalse (); } }
public void TitanicClose_RequestToCloseRequest_ShouldDeleteRequestFromQueue () { var io = new TitanicMemoryIO (); using (var reqWorker = new FakeRequestMDPWorker ()) using (var repWorker = new FakeReplyMDPWorker ()) using (var closeWorker = new FakeCloseMDPWorker ()) using (var dispatchClient = new FakeDispatchMDPClient ()) using (var sut = new TitanicBroker (io)) { // setup the queue with a request var guid = Guid.NewGuid (); // message content is of no importance here io.SaveNewRequestEntry (guid, new NetMQMessage ()); var entry = io.GetRequestEntry (guid); io.SaveProcessedRequestEntry (entry); // set up the fake client's request closeWorker.Request = new NetMQMessage (); closeWorker.Request.Push (guid.ToString ()); // start the TitanicBroker (Close will automatically start and // wait for a signal to proceed with sending the setup request message // start the process chain - worker & client should only run until they hit an AutoResetEvent Task.Factory.StartNew (() => sut.Run (reqWorker, repWorker, closeWorker, dispatchClient)); // signal closeWorker to go ahead closeWorker.waitHandle.Set (); // give everything some time to process Thread.Sleep (_sleep_for); // TEST COMMUNICATION closeWorker.Reply.FrameCount.Should ().Be (1, "because only one frame should have been returned."); closeWorker.Reply.First.ConvertToString ().Should ().Be ("Ok", "because 'Ok' should have been send."); // TEST QUEUE io.ExistsMessage (TitanicOperation.Request, guid).Should ().BeFalse (); io.ExistsMessage (TitanicOperation.Reply, guid).Should ().BeFalse (); io.ExistsMessage (TitanicOperation.Close, guid).Should ().BeFalse (); } }
public void GetMessage_ExistingRequestWrongState_ShouldReturnCorrectMessage () { var sut = new TitanicMemoryIO (); var ids = new Guid[10]; var expected = new NetMQMessage (); for (var i = 0; i < 10; i++) { ids[i] = Guid.NewGuid (); var request = new NetMQMessage (); request.Push ($"Request #{i}"); request.Push ("echo"); sut.SaveNewRequestEntry (ids[i], request); } var result = sut.GetMessage (TitanicOperation.Reply, Guid.NewGuid ()); result.Should ().BeEquivalentTo (expected); }
public void SaveNewRequest_MultipleRequestGuidOnly_ShouldUpdateQueue () { var sut = new TitanicMemoryIO (); for (var i = 0; i < 10; i++) sut.SaveNewRequestEntry (Guid.NewGuid ()); sut.NumberOfRequests.Should ().Be (10); }
public void GetMessage_ExistingRequest_ShouldReturnCorrectMessage () { var sut = new TitanicMemoryIO (); var ids = new Guid[10]; var expected = new NetMQMessage (); expected.Push ("Request #3"); expected.Push ("echo"); for (var i = 0; i < 10; i++) { ids[i] = Guid.NewGuid (); var request = new NetMQMessage (); request.Push (string.Format ("Request #{0}", i)); request.Push ("echo"); sut.SaveNewRequestEntry (ids[i], request); } var result = sut.GetMessage (TitanicOperation.Request, ids[3]); result.Should ().BeEquivalentTo (expected); }