Files
SuperBizAgent-java/src/test/java/com/superbiz/agent/service/session/RedisSessionManagerTest.java
T

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);
}
}