diff --git a/core/src/main/java/com/google/adk/sessions/InMemorySessionService.java b/core/src/main/java/com/google/adk/sessions/InMemorySessionService.java index fa7c19193..200d2d899 100644 --- a/core/src/main/java/com/google/adk/sessions/InMemorySessionService.java +++ b/core/src/main/java/com/google/adk/sessions/InMemorySessionService.java @@ -306,6 +306,13 @@ public Single appendEvent(Session session, Event event) { String userId = session.userId(); String sessionId = session.id(); + ConcurrentMap> appSessions = sessions.get(appName); + ConcurrentMap userSessions = + appSessions == null ? null : appSessions.get(userId); + if (userSessions == null || !userSessions.containsKey(sessionId)) { + return Single.error(new SessionNotFoundException("Session not found: " + sessionId)); + } + // --- Update User/App State (Same as before) --- EventActions actions = event.actions(); if (actions != null) { diff --git a/core/src/test/java/com/google/adk/sessions/InMemorySessionServiceTest.java b/core/src/test/java/com/google/adk/sessions/InMemorySessionServiceTest.java index 14a3e930d..bfb776cfc 100644 --- a/core/src/test/java/com/google/adk/sessions/InMemorySessionServiceTest.java +++ b/core/src/test/java/com/google/adk/sessions/InMemorySessionServiceTest.java @@ -149,6 +149,20 @@ public void lifecycle_deleteSession() { .isNull(); } + @Test + public void appendEvent_rejectsDeletedSession() { + InMemorySessionService sessionService = new InMemorySessionService(); + Session session = + sessionService.createSession("app", "user", new HashMap<>(), "session1").blockingGet(); + sessionService.deleteSession("app", "user", "session1").blockingAwait(); + + sessionService + .appendEvent(session, Event.builder().build()) + .test() + .assertError(SessionNotFoundException.class); + assertThat(sessionService.listSessions("app", "user").blockingGet().sessions()).isEmpty(); + } + @Test public void appendEvent_updatesSessionState() { InMemorySessionService sessionService = new InMemorySessionService();