From eb2b209e9171917f96d61a7e507b12e50d8cc81e Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Mon, 27 Apr 2026 00:20:54 +0200 Subject: [PATCH] Test: Add unit tests for SessionDisconnectJob --- .../sessions/SessionDisconnectJobTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionDisconnectJobTest.java diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionDisconnectJobTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionDisconnectJobTest.java new file mode 100644 index 0000000..e352515 --- /dev/null +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionDisconnectJobTest.java @@ -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 = new AtomicReference<>(); + eventBus.subscribe(DisconnectEvent.class, (event) -> disconnectEvent.set(event)); + + disconnectJob.run(); + assertEquals(disconnectEvent.get().sessionId(), expiredSession.getId()); + } +} -- 2.52.0