package com.evsuite.abrp; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; /** The offline buffer for live samples — pure JVM. */ public class TelemetryQueueTest { @Test public void batchesOldestFirstAndKeepsThemUntilConfirmed() { TelemetryQueue queue = new TelemetryQueue(); queue.add("a"); queue.add("b"); assertEquals(List.of("a", "b"), queue.peekBatch()); // Not confirmed yet: a failed request must not lose them. assertEquals(2, queue.size()); queue.remove(2); assertEquals(0, queue.size()); } @Test public void aBatchNeverExceedsWhatTheServerAccepts() { TelemetryQueue queue = new TelemetryQueue(); for (int i = 0; i < 1200; i++) queue.add(String.valueOf(i)); List batch = queue.peekBatch(); assertEquals(TelemetryQueue.MAX_BATCH, batch.size()); assertEquals("0", batch.get(0)); } @Test public void whenFullTheOldestSamplesAreDropped() { TelemetryQueue queue = new TelemetryQueue(3); for (String s : new String[]{"a", "b", "c", "d", "e"}) queue.add(s); assertEquals(List.of("c", "d", "e"), queue.peekBatch()); assertEquals(2, queue.dropped()); } @Test public void aSavedQueueComesBackInOrder() { TelemetryQueue q = new TelemetryQueue(10); q.add("{\"utc\":1}"); q.add("{\"utc\":2}"); TelemetryQueue restarted = new TelemetryQueue(10); restarted.add("{\"utc\":3}"); // taken after the restart assertEquals(2, restarted.restore(q.encode())); assertEquals(java.util.Arrays.asList("{\"utc\":1}", "{\"utc\":2}", "{\"utc\":3}"), restarted.peekBatch()); } @Test public void restoringKeepsTheCapacityByDroppingTheOldest() { TelemetryQueue q = new TelemetryQueue(10); for (int i = 1; i <= 4; i++) q.add("{\"utc\":" + i + "}"); TelemetryQueue small = new TelemetryQueue(3); small.restore(q.encode()); assertEquals(java.util.Arrays.asList("{\"utc\":2}", "{\"utc\":3}", "{\"utc\":4}"), small.peekBatch()); assertEquals(1, small.dropped()); } @Test public void aDamagedFileRestoresNothing() { TelemetryQueue q = new TelemetryQueue(10); assertEquals(0, q.restore("[\"{\\\"utc\\\":1}\", trunc")); assertEquals(0, q.restore("")); assertEquals(0, q.restore(null)); assertEquals(0, q.size()); } @Test public void everyChangeMovesTheVersion() { TelemetryQueue q = new TelemetryQueue(10); long v0 = q.version(); q.add("{\"utc\":1}"); long v1 = q.version(); q.remove(0); assertEquals(v1, q.version()); // nothing removed, nothing to save q.remove(1); assertTrue(q.version() > v1 && v1 > v0); } }