This commit is contained in:
jimmy committed 2025-11-14 16:56:57 +08:00
1 parent 237cbd8788
commit ab3721912d
102 files changed
+7929 -20

No files matched your search

+292
View File
@@ -0,0 +1,292 @@
# NetServer.Test - 测试和示例项目
这个项目包含了 Sharp.NetServer 框架的完整测试和使用示例。
## 📁 项目结构
```
NetServer.Test/
├── UnitTests/ # 单元测试
│ ├── RouteTableTests.cs # 路由表测试
│ ├── MiddlewarePipelineTests.cs # 中间件管道测试
│ └── MiddlewareTests.cs # 中间件功能测试
│
├── IntegrationTests/ # 集成测试
│ └── ServerIntegrationTests.cs # 服务器集成测试
│
├── Examples/ # 完整示例
│ ├── Controllers/
│ │ ├── UserController.cs # 用户管理示例
│ │ ├── ProductController.cs # 产品管理示例
│ │ └── AuthController.cs # 认证示例
│ └── ExampleProgram.cs # 示例程序入口
│
└── NetServer.Test.csproj # 项目配置
```
## 🚀 运行测试
### 运行所有测试
```bash
cd test/NetServer.Test
dotnet test
```
### 运行特定测试类
```bash
dotnet test --filter "FullyQualifiedName~RouteTableTests"
dotnet test --filter "FullyQualifiedName~MiddlewarePipelineTests"
dotnet test --filter "FullyQualifiedName~ServerIntegrationTests"
```
## 🎯 运行示例程序
### 方式一:直接运行
```bash
cd test/NetServer.Test
dotnet run
# 或指定端口
dotnet run 8080
```
### 方式二:编译后运行
```bash
dotnet build
cd bin/Debug/net8.0
./NetServer.Test.exe # Windows
./NetServer.Test # Linux/Mac
```
## 📚 测试说明
### 1. 单元测试 (UnitTests/)
#### RouteTableTests.cs
测试路由系统的核心功能:
- ✅ 路由注册和发现
- ✅ 路由匹配(包括路径参数)
- ✅ 特性解析(授权、限流、缓存等)
- ✅ 无效路由处理
#### MiddlewarePipelineTests.cs
测试中间件管道:
- ✅ 中间件执行顺序
- ✅ 多个中间件的链式调用
- ✅ 中间件短路机制
### 2. 集成测试 (IntegrationTests/)
#### ServerIntegrationTests.cs
测试完整的服务器功能:
- ✅ HTTP GET/POST 请求处理
- ✅ 查询参数解析
- ✅ 404 错误处理
- ✅ CORS 响应头
- ✅ 并发请求处理
**注意**: 集成测试会启动一个真实的 HTTP 服务器,监听端口 15000。
## 💡 示例说明
### 1. 用户管理示例 (UserController.cs)
展示了完整的 CRUD 操作:
- `GET /api/users` - 获取所有用户(需要 Admin 角色)
- `GET /api/users/{id}` - 获取单个用户(带缓存)
- `POST /api/users` - 创建用户(需要 Admin 角色)
- `PUT /api/users/{id}` - 更新用户
- `DELETE /api/users/{id}` - 删除用户(需要 Admin 角色)
- `GET /api/users/search` - 搜索用户(允许匿名)
**特性展示**:
- 角色授权 (`[Authorize(Roles = "Admin")]`)
- 限流保护 (`[RateLimit]`)
- 响应缓存 (`[ResponseCache]`)
- 允许匿名访问 (`[AllowAnonymous]`)
### 2. 产品管理示例 (ProductController.cs)
展示了产品管理功能:
- `GET /api/products` - 获取所有产品(公开接口,带缓存和限流)
- `GET /api/products/{id}` - 获取产品详情(带缓存)
- `POST /api/products` - 创建产品(需要 Admin)
- `PATCH /api/products/{id}/stock` - 更新库存(需要认证)
- `DELETE /api/products/{id}` - 删除产品(需要 Admin)
- `GET /api/products/search` - 搜索产品(支持价格范围)
**特性展示**:
- 查询参数处理
- 部分更新 (PATCH)
- 复杂搜索条件
- 响应缓存策略
### 3. 认证示例 (AuthController.cs)
展示了完整的认证流程:
- `POST /api/auth/login` - 用户登录
- `POST /api/auth/logout` - 用户登出
- `GET /api/auth/me` - 获取当前用户信息
- `POST /api/auth/change-password` - 修改密码
- `POST /api/auth/refresh` - 刷新 Token
**特性展示**:
- 简单的 Token 认证实现
- Cookie 操作
- 密码验证
- 防暴力破解限流
### 4. 完整示例程序 (ExampleProgram.cs)
一个完整的可运行示例,包含:
- ✅ 服务器配置和启动
- ✅ CORS 配置
- ✅ 认证授权配置
- ✅ 限流和缓存配置
- ✅ 自定义中间件(请求计时)
- ✅ 日志配置
- ✅ 依赖注入
## 🔧 使用示例
### 启动服务器
```bash
cd test/NetServer.Test
dotnet run
```
服务器将在 `http://localhost:5000/` 启动。
### 测试 API
#### 1. 登录获取 Token
```bash
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
```
响应示例:
```json
{
"success": true,
"data": {
"token": "YWRtaW46QWRtaW46MTczNDU2Nzg5MA==",
"username": "admin",
"role": "Admin",
"expiresIn": 3600
},
"message": "登录成功",
"timestamp": 1734567890123
}
```
#### 2. 获取所有产品(无需认证)
```bash
curl http://localhost:5000/api/products
```
#### 3. 搜索用户(无需认证)
```bash
curl "http://localhost:5000/api/users/search?keyword=张"
```
#### 4. 获取用户详情(需要认证)
```bash
curl http://localhost:5000/api/users/1 \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
或使用 Cookie 认证:
```bash
curl http://localhost:5000/api/users/1 \
-b "auth_token=YOUR_TOKEN_HERE"
```
#### 5. 创建产品(需要 Admin 角色)
```bash
curl -X POST http://localhost:5000/api/products \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"name":"新产品","price":299,"stock":50,"category":"测试"}'
```
#### 6. 更新库存(需要认证)
```bash
curl -X PATCH http://localhost:5000/api/products/1/stock \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"quantity":100}'
```
## 🔑 测试账号
- **管理员**: `admin` / `admin123`
- **普通用户**: `user` / `user123`
## 📊 功能特性展示
### 认证授权
- ✅ 基于 Token 的认证
- ✅ Cookie 支持
- ✅ 角色验证
- ✅ 权限验证
### 限流
- ✅ 基于 IP 的限流
- ✅ 基于用户的限流
- ✅ 防暴力破解
### 缓存
- ✅ 内存响应缓存
- ✅ 基于查询参数的缓存变化
### CORS
- ✅ 跨域资源共享
- ✅ 预检请求处理
### 日志
- ✅ 请求日志记录
- ✅ 错误日志记录
- ✅ 性能监控(慢请求警告)
## 🎓 学习路径
1. **初学者**: 从 `ExampleProgram.cs` 开始,了解基本配置
2. **进阶**: 查看各个 Controller,学习如何使用特性
3. **高级**: 阅读单元测试和集成测试,深入理解框架原理
## 📝 注意事项
1. **端口占用**: 确保 5000 端口未被占用,或通过参数指定其他端口
2. **管理员权限**: Windows 上监听非 localhost 地址可能需要管理员权限
3. **Token 安全**: 示例中的 Token 实现仅用于演示,生产环境应使用 JWT
4. **数据持久化**: 示例使用内存存储,重启后数据会丢失
## 🚧 扩展建议
基于这些示例,你可以:
- 添加数据库支持(Entity Framework Core)
- 实现真正的 JWT 认证
- 添加 Swagger/OpenAPI 文档
- 实现文件上传功能
- 添加 WebSocket 支持
- 集成分布式缓存(Redis)
- 实现更复杂的业务逻辑
## 📖 相关文档
- [框架 README](../../src/Sharp/NetServer/README.md)
- [架构文档](../../src/Sharp/NetServer/ARCHITECTURE.md)