Files
niro-gen5w/tests/java/WeatherRefreshGateTest.java
T

60 lines
3.3 KiB
Java

import com.chaegeon.niro.WeatherRefreshGate;
public final class WeatherRefreshGateTest {
private static void check(boolean condition, String name) {
if (!condition) {
throw new AssertionError(name);
}
}
public static void main(String[] args) {
WeatherRefreshGate gate = new WeatherRefreshGate(60000L, 10000L, 2000L);
check(gate.admit(100L) == WeatherRefreshGate.Admission.FETCH,
"first fetch accepted");
check(gate.isRunning(), "running");
check(gate.admit(101L) == WeatherRefreshGate.Admission.COALESCE,
"in-flight request coalesced");
gate.finish(200L, WeatherRefreshGate.Admission.FETCH, true);
check(!gate.isRunning(), "finished");
check(gate.admit(300L) == WeatherRefreshGate.Admission.REPLAY,
"recent successful response replayed");
check(gate.replayDelayMillis(300L) == 1900L,
"first replay waits until two seconds after fetch callback");
check(gate.admit(301L) == WeatherRefreshGate.Admission.COALESCE,
"in-flight replay coalesced");
gate.finish(400L, WeatherRefreshGate.Admission.REPLAY, true);
check(gate.admit(500L) == WeatherRefreshGate.Admission.REPLAY,
"second replay admitted without new fetch");
check(gate.replayDelayMillis(500L) == 1900L,
"subsequent replay is paced from previous callback");
gate.finish(501L, WeatherRefreshGate.Admission.REPLAY, true);
check(gate.admit(60199L) == WeatherRefreshGate.Admission.REPLAY,
"replay does not extend fetch TTL");
check(gate.replayDelayMillis(60199L) == 0L,
"replay runs immediately after spacing elapsed");
gate.finish(60200L, WeatherRefreshGate.Admission.REPLAY, true);
check(gate.admit(60200L) == WeatherRefreshGate.Admission.FETCH,
"new fetch accepted at original TTL boundary");
gate.finish(60300L, WeatherRefreshGate.Admission.FETCH, false);
check(gate.admit(60301L) == WeatherRefreshGate.Admission.BACKOFF,
"fast failed-fetch retry is throttled");
check(!gate.isRunning(), "backoff does not start worker");
check(gate.admit(70299L) == WeatherRefreshGate.Admission.BACKOFF,
"retry stays throttled until boundary");
check(gate.admit(70300L) == WeatherRefreshGate.Admission.FETCH,
"failed fetch may retry after ten seconds");
gate.finish(70302L, WeatherRefreshGate.Admission.FETCH, true);
check(gate.admit(70303L) == WeatherRefreshGate.Admission.REPLAY,
"successful response becomes replayable");
gate.finish(70304L, WeatherRefreshGate.Admission.REPLAY, false);
check(gate.admit(70305L) == WeatherRefreshGate.Admission.BACKOFF,
"failed replay invalidates cache and throttles retry");
check(gate.admit(80303L) == WeatherRefreshGate.Admission.BACKOFF,
"failed replay still throttled before retry boundary");
check(gate.admit(80304L) == WeatherRefreshGate.Admission.FETCH,
"failed replay retries with fresh fetch after ten seconds");
gate.finish(80306L, WeatherRefreshGate.Admission.FETCH, false);
System.out.println("result=PASS_WEATHER_REFRESH_GATE");
}
}