# 多泳道管理器测试指南

本文档提供了一系列命令，用于测试多泳道管理器组件的功能。

## 前提条件

1. 确保已安装 Nacos 服务器，并且可以通过 `localhost:8848` 访问
2. 确保已安装并配置好多泳道管理器组件

## 1. 启动测试应用

首先，我们需要启动两个不同泳道的应用实例进行测试。

### 启动 dev-lane 实例（端口 3001）

```bash
# 启动 dev-lane 实例
NITRO_PORT=3001 LANE_ENABLE=true LANE_ID=dev-lane SERVICE_NAME=my-test-app LANE_SERVER=localhost:8848 npm run dev
```

### 启动 test-lane 实例（端口 3002）

在另一个终端窗口中运行：

```bash
# 启动 test-lane 实例
NITRO_PORT=3002 LANE_ENABLE=true LANE_ID=test-lane SERVICE_NAME=my-test-app LANE_SERVER=localhost:8848 npm run dev
```

## 2. 测试命令

### 基本健康检查

首先，检查两个实例的健康状态：

```bash
# 检查 dev-lane 实例的健康状态
curl http://localhost:3001/api/lane-manager/health | jq

# 检查 test-lane 实例的健康状态
curl http://localhost:3002/api/lane-manager/health | jq
```

### 测试普通请求

测试向每个实例发送普通请求：

```bash
# 向 dev-lane 实例发送请求
curl -v http://localhost:3001/api/hello

# 向 test-lane 实例发送请求
curl -v http://localhost:3002/api/hello
```

### 测试跨泳道请求

测试跨泳道请求功能：

```bash
# 从 dev-lane 实例向 test-lane 发送请求
curl -v -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello

# 从 test-lane 实例向 dev-lane 发送请求
curl -v -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello
```

### 使用调试头获取详细信息

使用调试功能获取请求处理的详细信息：

```bash
# 使用调试头从 dev-lane 向 test-lane 发送请求
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello

# 使用调试头从 test-lane 向 dev-lane 发送请求
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello
```

### 测试泳道功能禁用情况

测试当泳道功能禁用时的行为：

```bash
# 启动一个禁用泳道功能的实例
NITRO_PORT=3003 LANE_ENABLE=false SERVICE_NAME=my-test-app npm run dev

# 向禁用泳道功能的实例发送请求
curl -v http://localhost:3003/api/hello

# 向禁用泳道功能的实例发送带泳道ID的请求（应该不会转发）
curl -v -H "X-Lane-ID: test-lane" http://localhost:3003/api/hello

# 使用调试头查看详细信息
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3003/api/hello
```

### 测试错误情况

测试当目标泳道不存在时的错误处理：

```bash
# 请求一个不存在的泳道
curl -v -H "X-Lane-ID: nonexistent-lane" http://localhost:3001/api/hello

# 使用调试头查看详细错误信息
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: nonexistent-lane" http://localhost:3001/api/hello
```

### 测试 Cookie 中的泳道 ID

测试从 Cookie 中获取泳道 ID：

```bash
# 使用 Cookie 设置泳道 ID
curl -v --cookie "x-lane-id=test-lane" http://localhost:3001/api/hello

# 使用调试头和 Cookie 查看详细信息
curl -v -H "X-Lane-Debug: true" --cookie "x-lane-id=test-lane" http://localhost:3001/api/hello
```

## 3. 验证 Nacos 注册情况

如果您有 Nacos 控制台，可以通过以下方式验证服务注册情况：

1. 打开浏览器访问 Nacos 控制台：http://localhost:8848/nacos/
2. 使用默认用户名/密码登录：nacos/nacos
3. 在服务列表中查找 `my-test-app` 服务
4. 验证是否有两个实例，分别属于 `dev-lane` 和 `test-lane` 泳道

## 4. 一键测试脚本

您也可以创建一个简单的测试脚本来自动执行这些测试：

```bash
#!/bin/bash

echo "===== 测试多泳道管理器 ====="

echo -e "\n1. 检查健康状态"
echo "dev-lane 健康状态:"
curl -s http://localhost:3001/api/lane-manager/health | jq
echo "test-lane 健康状态:"
curl -s http://localhost:3002/api/lane-manager/health | jq

echo -e "\n2. 测试普通请求"
echo "向 dev-lane 发送请求:"
curl -s http://localhost:3001/api/hello
echo -e "\n向 test-lane 发送请求:"
curl -s http://localhost:3002/api/hello

echo -e "\n3. 测试跨泳道请求"
echo "从 dev-lane 向 test-lane 发送请求:"
curl -s -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello
echo -e "\n从 test-lane 向 dev-lane 发送请求:"
curl -s -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello

echo -e "\n4. 使用调试头"
echo "使用调试头从 dev-lane 向 test-lane 发送请求:"
curl -s -i -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello | grep -i "X-Lane-Detail"

echo -e "\n测试完成"
```

将此脚本保存为 `test-lane-manager.sh`，然后执行：

```bash
chmod +x test-lane-manager.sh
./test-lane-manager.sh
```

## 5. 预期结果

### 健康检查

健康检查应返回类似以下的 JSON 响应：

```json
{
  "status": "ok",
  "registered": true,
  "port": 3001,
  "laneId": "dev-lane",
  "serviceName": "my-test-app",
  "timestamp": "2023-06-01T12:00:00.000Z",
  "nitroPluginLoaded": true
}
```

### 跨泳道请求

当发送跨泳道请求时，请求应该被转发到目标泳道的实例，并且响应头中应包含：

```
X-Proxied-By: multi-lane-manager
X-Original-Lane: dev-lane
X-Lane-ID: test-lane
```

### 调试信息

使用调试头时，响应头中应包含 `X-Lane-Detail` 头，其中包含请求处理的详细信息，例如：

```
X-Lane-Detail: 请求时间: 2023-06-01T12:00:00.000Z | 请求路径: GET /api/hello | 当前泳道: dev-lane | 服务名称: my-test-app | 目标泳道Header键: x-lane-id | 泳道ID来源: Header, 值: test-lane | 处理: 跨泳道请求 | 目标泳道: test-lane | 找到实例数量: 1 | 选择实例: 127.0.0.1:3002 | 负载均衡策略: ROUND_ROBIN
```
