then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative(); then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative(); then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative();
@Test public void verifyVirtualTimeOnNextInterval() { Duration r; r = StepVerifier.withVirtualTime(() -> Flux.interval(Duration.ofSeconds(3)) .map(d -> "t" + d)) .thenAwait(Duration.ofSeconds(3)) .expectNext("t0") .thenAwait(Duration.ofSeconds(3)) .expectNext("t1") .thenAwait(Duration.ofSeconds(3)) .expectNext("t2") .thenCancel() .verify(); assertThat(r.minus(Duration.ofSeconds(9)).toMillis()).isNegative(); }
then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative(); then(detailedMetrics.getAvailablePermissions()).isEqualTo(0); then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative(); limit.refreshLimit(); then(detailedMetrics.getAvailablePermissions()).isEqualTo(3); then(limit.reservePermission(ZERO)).isNegative(); then(limit.reservePermission(TIMEOUT)).isNegative();
@Test public void rejectedByTimeoutNonBlocking() throws Exception { setTimeOnNanos(CYCLE_IN_NANOS); long permission = rateLimiter.reservePermission(Duration.ZERO); then(permission).isZero(); then(metrics.getAvailablePermissions()).isEqualTo(0); then(metrics.getNanosToWait()).isEqualTo(CYCLE_IN_NANOS); then(metrics.getNumberOfWaitingThreads()).isEqualTo(0); long failedPermission = rateLimiter.reservePermission(Duration.ofNanos(CYCLE_IN_NANOS - 1)); then(failedPermission).isNegative(); then(metrics.getAvailablePermissions()).isEqualTo(0); then(metrics.getNanosToWait()).isEqualTo(CYCLE_IN_NANOS); then(metrics.getNumberOfWaitingThreads()).isEqualTo(0); setTimeOnNanos(CYCLE_IN_NANOS * 2 - 1); then(metrics.getAvailablePermissions()).isEqualTo(0); then(metrics.getNanosToWait()).isEqualTo(1L); then(metrics.getNumberOfWaitingThreads()).isEqualTo(0); }
@Test public void testPeriodic() { long interval = JobRequest.MIN_INTERVAL * 5; JobRequest request = getBuilder() .setPeriodic(interval) .setExtras(new PersistableBundleCompat()) .build(); assertThat(request.getJobId()).isGreaterThan(0); assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); assertThat(request.getIntervalMs()).isEqualTo(interval); assertThat(request.getFlexMs()).isEqualTo(interval); assertThat(request.isPeriodic()).isTrue(); assertThat(request.isFlexSupport()).isFalse(); assertThat(request.getStartMs()).isNegative(); assertThat(request.getEndMs()).isNegative(); assertThat(request.getBackoffMs()).isEqualTo(JobRequest.DEFAULT_BACKOFF_MS); assertThat(request.getBackoffPolicy()).isEqualTo(JobRequest.DEFAULT_BACKOFF_POLICY); assertThat(request.getExtras()).isNotNull(); assertThat(request.isExact()).isFalse(); assertThat(request.requiredNetworkType()).isEqualTo(JobRequest.DEFAULT_NETWORK_TYPE); assertThat(request.requirementsEnforced()).isFalse(); assertThat(request.requiresCharging()).isFalse(); assertThat(request.requiresDeviceIdle()).isFalse(); }
then(fourthPermission).isZero(); then(firstNoPermission).isNegative(); then(secondNoPermission).isNegative();