247 lines
8.0 KiB
Java
247 lines
8.0 KiB
Java
package com.superbiz.agent.service.session;
|
|
|
|
import com.superbiz.agent.domain.model.SessionContext;
|
|
import com.superbiz.agent.domain.model.ToolCall;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.test.context.TestPropertySource;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.UUID;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
/**
|
|
* RedisSessionManager 单元测试
|
|
*/
|
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
|
|
@EnabledIfEnvironmentVariable(named = "SUPERBIZ_REDIS_PASSWORD", matches = ".+")
|
|
@TestPropertySource(properties = {
|
|
"spring.data.redis.host=${SUPERBIZ_REDIS_HOST:119.29.78.52}",
|
|
"spring.data.redis.port=${SUPERBIZ_REDIS_PORT:33308}",
|
|
"spring.data.redis.password=${SUPERBIZ_REDIS_PASSWORD}"
|
|
})
|
|
class RedisSessionManagerTest {
|
|
|
|
@Autowired
|
|
private SessionManager sessionManager;
|
|
|
|
private String testSessionId;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
testSessionId = "test-session-" + UUID.randomUUID().toString();
|
|
}
|
|
|
|
@Test
|
|
void testCreateAndGetSession() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-123")
|
|
.businessId("order-456")
|
|
.traceId("trace-789")
|
|
.build();
|
|
|
|
String sessionId = sessionManager.createSession(context, 300); // 5分钟
|
|
assertNotNull(sessionId);
|
|
assertEquals(testSessionId, sessionId);
|
|
System.out.println("✓ 创建会话成功: " + sessionId);
|
|
|
|
// 获取会话
|
|
Optional<SessionContext> retrieved = sessionManager.getSession(testSessionId);
|
|
assertTrue(retrieved.isPresent());
|
|
assertEquals("user-123", retrieved.get().getUserId());
|
|
assertEquals("ACTIVE", retrieved.get().getStatus());
|
|
assertNotNull(retrieved.get().getCreatedAt());
|
|
System.out.println("✓ 获取会话成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testUpdateSession() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-update")
|
|
.status("ACTIVE")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
|
|
// 获取并更新
|
|
Optional<SessionContext> retrieved = sessionManager.getSession(testSessionId);
|
|
assertTrue(retrieved.isPresent());
|
|
|
|
SessionContext toUpdate = retrieved.get();
|
|
toUpdate.setStatus("COMPLETED");
|
|
toUpdate.setBusinessId("updated-business-id");
|
|
|
|
sessionManager.updateSession(toUpdate);
|
|
|
|
// 验证更新
|
|
Optional<SessionContext> updated = sessionManager.getSession(testSessionId);
|
|
assertTrue(updated.isPresent());
|
|
assertEquals("COMPLETED", updated.get().getStatus());
|
|
assertEquals("updated-business-id", updated.get().getBusinessId());
|
|
System.out.println("✓ 更新会话成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testDeleteSession() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-delete")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
assertTrue(sessionManager.exists(testSessionId));
|
|
|
|
// 删除会话
|
|
sessionManager.deleteSession(testSessionId);
|
|
assertFalse(sessionManager.exists(testSessionId));
|
|
System.out.println("✓ 删除会话成功");
|
|
}
|
|
|
|
@Test
|
|
void testExists() {
|
|
assertFalse(sessionManager.exists(testSessionId));
|
|
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-exists")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
assertTrue(sessionManager.exists(testSessionId));
|
|
System.out.println("✓ 会话存在性检查成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testRefreshSession() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-refresh")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 60); // 1分钟
|
|
|
|
// 刷新过期时间
|
|
boolean refreshed = sessionManager.refreshSession(testSessionId, 600); // 延长到10分钟
|
|
assertTrue(refreshed);
|
|
assertTrue(sessionManager.exists(testSessionId));
|
|
System.out.println("✓ 刷新会话过期时间成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testAddToolCall() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-toolcall")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
|
|
// 添加工具调用记录
|
|
Map<String, Object> args = new HashMap<>();
|
|
args.put("query", "test query");
|
|
args.put("limit", 10);
|
|
|
|
ToolCall toolCall = ToolCall.builder()
|
|
.toolName("search_documents")
|
|
.arguments(args)
|
|
.result("found 5 documents")
|
|
.status("SUCCESS")
|
|
.duration(150L)
|
|
.calledAt(LocalDateTime.now())
|
|
.build();
|
|
|
|
sessionManager.addToolCall(testSessionId, toolCall);
|
|
|
|
// 验证工具调用已添加
|
|
Optional<SessionContext> retrieved = sessionManager.getSession(testSessionId);
|
|
assertTrue(retrieved.isPresent());
|
|
assertFalse(retrieved.get().getToolCalls().isEmpty());
|
|
assertEquals(1, retrieved.get().getToolCalls().size());
|
|
assertEquals("search_documents", retrieved.get().getToolCalls().get(0).getToolName());
|
|
System.out.println("✓ 添加工具调用记录成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testUpdateStatus() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-status")
|
|
.status("ACTIVE")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
|
|
// 更新状态
|
|
sessionManager.updateStatus(testSessionId, "COMPLETED");
|
|
|
|
// 验证状态已更新
|
|
Optional<SessionContext> retrieved = sessionManager.getSession(testSessionId);
|
|
assertTrue(retrieved.isPresent());
|
|
assertEquals("COMPLETED", retrieved.get().getStatus());
|
|
System.out.println("✓ 更新会话状态成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
|
|
@Test
|
|
void testMultipleToolCalls() {
|
|
// 创建会话
|
|
SessionContext context = SessionContext.builder()
|
|
.sessionId(testSessionId)
|
|
.userId("user-multi-tools")
|
|
.build();
|
|
|
|
sessionManager.createSession(context, 300);
|
|
|
|
// 添加多个工具调用
|
|
for (int i = 0; i < 3; i++) {
|
|
ToolCall toolCall = ToolCall.builder()
|
|
.toolName("tool_" + i)
|
|
.status("SUCCESS")
|
|
.calledAt(LocalDateTime.now())
|
|
.build();
|
|
sessionManager.addToolCall(testSessionId, toolCall);
|
|
}
|
|
|
|
// 验证所有工具调用
|
|
Optional<SessionContext> retrieved = sessionManager.getSession(testSessionId);
|
|
assertTrue(retrieved.isPresent());
|
|
assertEquals(3, retrieved.get().getToolCalls().size());
|
|
System.out.println("✓ 添加多个工具调用记录成功");
|
|
|
|
// 清理
|
|
sessionManager.deleteSession(testSessionId);
|
|
}
|
|
}
|