public void TryAdd_should_return_false_if_event_was_not_added([Values] bool fromOwner)
        {
            muxer = new SingleFileMuxer(writerProviderFactory, singleFileWorker, new FileLogSettings {
                EventsQueueCapacity = 0
            });

            muxer.TryAdd(CreateEventInfo(), fromOwner).Should().BeFalse();
        }
        public void EventsLost_should_be_incremented_after_losing_an_event()
        {
            muxer = new SingleFileMuxer(writerProviderFactory, singleFileWorker, new FileLogSettings {
                EventsQueueCapacity = 0
            });

            muxer.TryAdd(CreateEventInfo(), true);
            muxer.TryAdd(CreateEventInfo(), true);

            muxer.EventsLost.Should().Be(2);
        }
        public void TryAdd_should_wait_for_buffer_space_if_specified()
        {
            singleFileWorker = new SingleFileWorker();
            muxer            = new SingleFileMuxer(writerProviderFactory, singleFileWorker, new FileLogSettings
            {
                WaitIfQueueIsFull   = true,
                EventsQueueCapacity = 1
            });

            for (var i = 0; i < 10; i++)
            {
                muxer.TryAdd(CreateEventInfo(), false).Should().BeTrue();
            }

            muxer.Dispose();

            eventsWriter.Received(10)
            .WriteEvents(
                Arg.Any <LogEventInfo[]>(),
                Arg.Is(1));
        }
        public void TestSetup()
        {
            eventsWriter = Substitute.For <IEventsWriter>();

            eventsWriterProvider = Substitute.For <IEventsWriterProvider>();
            eventsWriterProvider.ObtainWriterAsync(Arg.Any <CancellationToken>()).Returns(Task.FromResult(eventsWriter));

            writerProviderFactory = Substitute.For <IEventsWriterProviderFactory>();
            writerProviderFactory.CreateProvider(Arg.Any <FilePath>(), Arg.Do <Func <FileLogSettings> >(x => settingsInsideMuxer = x)).Returns(eventsWriterProvider);

            singleFileWorker = Substitute.For <ISingleFileWorker>();
            singleFileWorker.WritePendingEventsAsync(
                Arg.Any <IEventsWriterProvider>(),
                Arg.Any <ConcurrentBoundedQueue <LogEventInfo> >(),
                Arg.Any <LogEventInfo[]>(),
                Arg.Any <AtomicLong>(),
                Arg.Any <AtomicLong>(),
                Arg.Any <CancellationToken>())
            .Returns(Task.FromResult(true));

            muxer = new SingleFileMuxer(writerProviderFactory, singleFileWorker, new FileLogSettings());
        }