Merge branch 'feat/134-write-unit-tests-for-sessiondisconnectjob' into 'main'

Unit tests for SessionDisconnectJob

Closes #134

See merge request cs108-fs26/Gruppe-13!160
This commit was merged in pull request #316.
This commit is contained in:
Lars Simon Winzer
2026-04-27 00:38:34 +02:00
@@ -0,0 +1,60 @@
package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent;
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus;
import java.lang.reflect.Field;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class SessionDisconnectJobTest {
private EventBus eventBus;
private SessionManager sessionManager;
@BeforeEach
void initEnvironment() {
eventBus = new EventBus();
sessionManager = new SessionManager(eventBus, null);
}
@Test
void testDisconnectValidSession() {
SessionDisconnectJob disconnectJob =
new SessionDisconnectJob(sessionManager, eventBus, Duration.ofSeconds(30));
sessionManager.create(null, null);
sessionManager.create(null, null);
AtomicBoolean disconnectOccurred = new AtomicBoolean(false);
eventBus.subscribe(DisconnectEvent.class, (event) -> disconnectOccurred.set(true));
disconnectJob.run();
assertFalse(disconnectOccurred.get());
}
@Test
void testDisconnectExpiredSession()
throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
SessionDisconnectJob disconnectJob =
new SessionDisconnectJob(sessionManager, eventBus, Duration.ofSeconds(30));
sessionManager.create(null, null);
Session expiredSession = sessionManager.create(null, null);
Field lastActivityField = Session.class.getDeclaredField("lastActivity");
lastActivityField.setAccessible(true);
lastActivityField.set(expiredSession, Instant.now().minus(35, ChronoUnit.SECONDS));
AtomicReference<DisconnectEvent> disconnectEvent = new AtomicReference<>();
eventBus.subscribe(DisconnectEvent.class, (event) -> disconnectEvent.set(event));
disconnectJob.run();
assertEquals(disconnectEvent.get().sessionId(), expiredSession.getId());
}
}