Skip to content

Commit 5640c58

Browse files
Merge pull request #690 from bitmovin-engineering:main
PiperOrigin-RevId: 888625731
2 parents e9df447 + a4f4199 commit 5640c58

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

core/src/main/java/com/google/adk/sessions/VertexAiSessionService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,17 @@ public Single<ListSessionsResponse> listSessions(String appName, String userId)
128128
.map(
129129
listSessionsResponseMap ->
130130
parseListSessionsResponse(listSessionsResponseMap, appName, userId))
131-
.defaultIfEmpty(ListSessionsResponse.builder().build());
131+
.defaultIfEmpty(ListSessionsResponse.builder().sessions(new ArrayList<>()).build());
132132
}
133133

134134
private ListSessionsResponse parseListSessionsResponse(
135135
JsonNode listSessionsResponseMap, String appName, String userId) {
136+
JsonNode sessionsNode = listSessionsResponseMap.get("sessions");
137+
if (sessionsNode == null || sessionsNode.isNull() || sessionsNode.isEmpty()) {
138+
return ListSessionsResponse.builder().sessions(new ArrayList<>()).build();
139+
}
136140
List<Map<String, Object>> apiSessions =
137-
objectMapper.convertValue(
138-
listSessionsResponseMap.get("sessions"),
139-
new TypeReference<List<Map<String, Object>>>() {});
141+
objectMapper.convertValue(sessionsNode, new TypeReference<List<Map<String, Object>>>() {});
140142

141143
List<Session> sessions = new ArrayList<>();
142144
for (Map<String, Object> apiSession : apiSessions) {

core/src/test/java/com/google/adk/sessions/VertexAiSessionServiceTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.util.Optional;
2626
import java.util.concurrent.ConcurrentHashMap;
2727
import java.util.concurrent.ConcurrentMap;
28+
import okhttp3.MediaType;
29+
import okhttp3.ResponseBody;
2830
import org.junit.Before;
2931
import org.junit.Test;
3032
import org.junit.runner.RunWith;
@@ -37,6 +39,20 @@
3739
public class VertexAiSessionServiceTest {
3840

3941
private static final ObjectMapper mapper = JsonBaseModel.getMapper();
42+
private static final MediaType JSON_MEDIA_TYPE =
43+
MediaType.parse("application/json; charset=utf-8");
44+
45+
private static ApiResponse apiResponseJson(String json) {
46+
return new ApiResponse() {
47+
@Override
48+
public ResponseBody getResponseBody() {
49+
return ResponseBody.create(JSON_MEDIA_TYPE, json);
50+
}
51+
52+
@Override
53+
public void close() {}
54+
};
55+
}
4056

4157
private static final String MOCK_SESSION_STRING_1 =
4258
"""
@@ -319,6 +335,24 @@ public void listSessions_empty() {
319335
.isEmpty();
320336
}
321337

338+
@Test
339+
public void listSessions_missingSessionsField_returnsEmpty() {
340+
when(mockApiClient.request("GET", "reasoningEngines/123/sessions?filter=user_id=userX", ""))
341+
.thenReturn(apiResponseJson("{}"));
342+
343+
assertThat(vertexAiSessionService.listSessions("123", "userX").blockingGet().sessions())
344+
.isEmpty();
345+
}
346+
347+
@Test
348+
public void listSessions_nullSessionsField_returnsEmpty() {
349+
when(mockApiClient.request("GET", "reasoningEngines/123/sessions?filter=user_id=userY", ""))
350+
.thenReturn(apiResponseJson("{\"sessions\": null}"));
351+
352+
assertThat(vertexAiSessionService.listSessions("123", "userY").blockingGet().sessions())
353+
.isEmpty();
354+
}
355+
322356
@Test
323357
public void listEvents_empty() {
324358
assertThat(vertexAiSessionService.listEvents("789", "user1", "3").blockingGet().events())

0 commit comments

Comments
 (0)