Ejemplo n.º 1
0
        public void ManyAwaits()
        {
            // Arrange
            var sut = QueueStateMonitor.Initialize(0);

            // Act
            var waitingTasks =
                Enumerable.Range(0, 5)
                .Select(_ => sut.GetCurrent().NextUpdate)
                .ToList();


            // Assert
            waitingTasks.ShouldAllBe(t => t.IsCompleted == false);
            sut.Update(12);
            waitingTasks.ShouldAllBe(t => t.IsCompleted);
            waitingTasks.ShouldAllBe(t => t.Result.TailIndex == 12);
        }
Ejemplo n.º 2
0
        public async Task PulsesBefore()
        {
            // Arrange
            var sut = QueueStateMonitor.Initialize(0);

            // Act
            sut.Update(1);
            sut.Update(2);
            sut.Update(3);

            var state = sut.GetCurrent();

            state.TailIndex.ShouldBe(3);
            sut.Update(4);
            var update = await state.NextUpdate;

            // Assert
            update.TailIndex.ShouldBe(4);
        }
Ejemplo n.º 3
0
        public PersistentQueue(PersistentQueueConfiguration configuration)
        {
            Configuration = configuration;

            _metaDataItemSize = MetaData.Size();
            _indexItemSize    = IndexItem.Size();
            var indexPageSize = _indexItemSize * configuration.IndexItemsPerPage;

            _dataPageSize = Configuration.DataPageSize;

            // Init page factories
            // MetaPage: Page size = item size => only 1 item possible.
            _metaPageFactory  = new PageFactory(_metaDataItemSize, Configuration.GetMetaPath(), TimeSpan.FromHours(1));
            _indexPageFactory = new PageFactory(indexPageSize, Configuration.GetIndexPath());
            _dataPageFactory  = new PageFactory(_dataPageSize, Configuration.GetDataPath());

            InitializeMetaData();

            _queueMonitor = QueueStateMonitor.Initialize(_metaData.TailIndex);
        }
Ejemplo n.º 4
0
        public void ShouldContinueOnOtherThread()
        {
            // Arrange
            var sut = QueueStateMonitor.Initialize(0);

            ;

            var pulseThreadId = Thread.CurrentThread.ManagedThreadId;

            // Act
            var waitThreadIdTask =
                sut.GetCurrent().NextUpdate
                .ContinueWith(t => Thread.CurrentThread.ManagedThreadId);

            sut.Update(0);

            // Assert
            var waitThreadId = waitThreadIdTask.Result;

            waitThreadId.ShouldNotBe(pulseThreadId);
            waitThreadId.ShouldNotBe(Thread.CurrentThread.ManagedThreadId);
        }