//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReturnMinusOneIfNoDataIsAvailableForLogRotation()
        public virtual void ShouldReturnMinusOneIfNoDataIsAvailableForLogRotation()
        {
            DefaultTransactionTracer tracer = new DefaultTransactionTracer(_clock, _monitor, _jobScheduler);

            _jobScheduler.runJob();

            assertEquals(0, tracer.NumberOfLogRotationEvents());
            assertEquals(0, tracer.LogRotationAccumulatedTotalTimeMillis());
            verifyZeroInteractions(_monitor);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldComputeStartEndAndTotalTimeForLogRotation()
        public virtual void ShouldComputeStartEndAndTotalTimeForLogRotation()
        {
            DefaultTransactionTracer tracer = new DefaultTransactionTracer(_clock, _monitor, _jobScheduler);

            TriggerEvent(tracer, 20);

            assertEquals(1, tracer.NumberOfLogRotationEvents());
            assertEquals(20, tracer.LogRotationAccumulatedTotalTimeMillis());
            verify(_monitor, times(1)).lastLogRotationEventDuration(20L);

            TriggerEvent(tracer, 30);

            // should reset the total time value whenever read
            assertEquals(2, tracer.NumberOfLogRotationEvents());
            assertEquals(50, tracer.LogRotationAccumulatedTotalTimeMillis());
            verify(_monitor, times(1)).lastLogRotationEventDuration(30L);
        }
        private void TriggerEvent(DefaultTransactionTracer tracer, int eventDuration)
        {
            using (TransactionEvent txEvent = tracer.BeginTransaction())
            {
                using (CommitEvent commitEvent = txEvent.BeginCommitEvent())
                {
                    using (LogAppendEvent logAppendEvent = commitEvent.BeginLogAppend())
                    {
                        _clock.forward(ThreadLocalRandom.current().nextLong(200), TimeUnit.MILLISECONDS);
                        using (LogRotateEvent @event = logAppendEvent.BeginLogRotate())
                        {
                            _clock.forward(eventDuration, TimeUnit.MILLISECONDS);
                        }
                    }
                }
            }

            _jobScheduler.runJob();
        }