예제 #1
0
        public void CloseRequest_MaxEntryClosedRequestsLeaveAdditionalRequests_ShouldReorganizeQueue()
        {
            const int additional_requests = 5;
            const int max_entries         = 20;
            var       path = Path.Combine(Path.GetTempPath(), ".titanic", "Close_3");

            var sut = new TitanicFileIO(path, max_entries);

            for (var i = 0; i < max_entries + additional_requests; i++)
            {
                sut.SaveNewRequestEntry(Guid.NewGuid());   // -> fill titanic.queue
            }
            var requests = sut.GetRequestEntries(null).ToArray();

            requests.Length.Should().Be(max_entries + additional_requests);

            for (var i = 0; i < max_entries; i++)
            {
                sut.CloseRequest(requests[i].RequestId);
            }

            sut.GetNotClosedRequestEntries()
            .Count()
            .Should()
            .Be(additional_requests, "because 5 requests should have been left over!");

            Directory.Delete(sut.TitanicDirectory, true);
        }
예제 #2
0
        public void CloseRequest_MaxEntryClosedAndAdditionalRequestsAndReplies_ShouldReorganizeQueue()
        {
            const int max_entries         = 20;
            const int additional_requests = 5;
            var       path = Path.Combine(Path.GetTempPath(), ".titanic", "Close_4");

            var sut = new TitanicFileIO(path, max_entries);

            var titanicQueue = sut.TitanicQueue;

            for (var i = 0; i < max_entries + additional_requests; i++)
            {
                var id = Guid.NewGuid();
                sut.SaveNewRequestEntry(id);  // -> fill titanic.queue

                var message = new NetMQMessage();
                message.Push($"Message #{i}");
                message.Push("echo");

                sut.SaveMessage(TitanicOperation.Request, id, message);
            }

            foreach (var entry in sut.GetRequestEntries(null).Skip(3).Take(5))
            {
                sut.SaveProcessedRequestEntry(entry);

                var message = sut.GetMessage(TitanicOperation.Request, entry.RequestId);

                sut.SaveMessage(TitanicOperation.Reply, entry.RequestId, message);
            }

            var requests = sut.GetRequestEntries(null).ToArray();

            requests.Length.Should().Be(max_entries + additional_requests);
            requests.Count(re => re.State == RequestEntry.Is_Processed).Should().Be(5);

            for (var i = 0; i < max_entries; i++)
            {
                sut.CloseRequest(requests[i].RequestId);      // mark closed not worrying about state
            }
            sut.GetNotClosedRequestEntries()
            .Count()
            .Should()
            .Be(additional_requests, "because 5 requests should have been left over!");

            Directory.Delete(sut.TitanicDirectory, true);
        }