# 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)