This is an automated email from the ASF dual-hosted git repository. voidmatcha pushed a commit to branch temp/seung-00/assistant-transport-base in repository https://gitbox.apache.org/repos/asf/zeppelin.git
commit 2b7b903f055046e924c3be5ff31ce0f42efd1099 Author: YONGJAE LEE <[email protected]> AuthorDate: Thu Oct 8 19:13:42 2026 +0900 Return not found for missing assistant conversations --- .../service/assistant/AssistantService.java | 2 +- .../service/assistant/AssistantServiceTest.java | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java index b259855ba6..eae06d9acd 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java @@ -129,7 +129,7 @@ public class AssistantService { return notebook.processNote(noteId, note -> { if (note == null) throw new NoteNotFoundException(noteId); - return conversationRepository.find(noteId, conversationId).orElseThrow(); + return conversationRepository.find(noteId, conversationId).orElseThrow(NotFoundException::new); }); } diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java index cb4b5630e7..6d8fb618ae 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java @@ -34,6 +34,7 @@ import java.util.function.Consumer; import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.ClientErrorException; import jakarta.ws.rs.ForbiddenException; +import jakarta.ws.rs.NotFoundException; import jakarta.ws.rs.ServiceUnavailableException; import org.apache.zeppelin.notebook.AuthorizationService; import org.apache.zeppelin.notebook.Note; @@ -129,6 +130,35 @@ class AssistantServiceTest { verifyNoInteractions(repository); } + @Test + void rejectsMissingConversation() throws Exception { + var notebook = mock(Notebook.class); + when(notebook.processNote(eq("noteId"), any())) + .thenAnswer(invocation -> ((NoteProcessor<?>) invocation.getArgument(1)).process(new Note())); + var authorization = mock(AuthorizationService.class); + when(authorization.isReader("noteId", userAndRoles)).thenReturn(true); + var repository = mock(ConversationRepository.class); + when(repository.find("noteId", "missing")).thenReturn(Optional.empty()); + var sut = new AssistantService(true, notebook, null, null, authorization, repository); + + assertThrows(NotFoundException.class, + () -> sut.getConversation("noteId", "missing", userAndRoles)); + assertThrows(NotFoundException.class, + () -> sut.listMessages("noteId", "missing", null, 10, userAndRoles)); + assertThrows(NotFoundException.class, + () -> sut.updateTitle("noteId", "missing", "title", authInfo.getUser(), userAndRoles)); + assertThrows(NotFoundException.class, + () -> sut.deleteConversation("noteId", "missing", authInfo.getUser(), userAndRoles)); + + var events = new ArrayList<AssistantEventPayload>(); + sut.sendMessage("noteId", "missing", "hi", authInfo, userAndRoles, + (type, payload) -> events.add(payload)); + assertEquals(1, events.size()); + assertEquals(404, ((AssistantEventPayload.RunFailed) events.get(0)).error.status); + verify(repository, never()).update(any(), any()); + verify(repository, never()).delete(anyString(), anyString()); + } + @Test void releasesSlotAfterFailure() throws Exception { var notebook = mock(Notebook.class);
