using System.Net; using System.Text.Json; using XFEExtension.NetCore.ServerInteractive.Models; using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels; using XFEExtension.NetCore.ServerInteractive.TServer.Models; using XFEExtension.NetCore.ServerInteractive.Utilities.Extensions; using XFEExtension.NetCore.ServerInteractive.Utilities.Requester; namespace XFEExtension.NetCore.ServerInteractive.Test; internal class Program { private static readonly ClientRequester s_xFEClientRequester = ClientRequesterBuilder.CreateBuilder() .UseXFEStandardRequest() .AddRequest("test", (_, _, _) => new { execute = "test" }, response => response) .AddRequest("echo", (_, _, parameters) => new { execute = "echo", message = parameters.Length > 0 ? parameters[0] : string.Empty }, response => response) .AddRequest("math/add", (_, _, parameters) => new { execute = "math/add", a = parameters.Length > 0 ? parameters[0] : 0, b = parameters.Length > 1 ? parameters[1] : 0 }, response => response) .AddRequest("math/multiply", (_, _, parameters) => new { execute = "math/multiply", a = parameters.Length > 0 ? parameters[0] : 0, b = parameters.Length > 1 ? parameters[1] : 0 }, response => response) .AddRequest("status", (_, _, _) => new { execute = "status" }, response => response) .AddRequest("greet", (_, _, parameters) => new { execute = "greet", name = parameters.Length > 0 ? parameters[0] : string.Empty }, response => response) .AddRequest("time", (_, _, _) => new { execute = "time" }, response => response) .Build(options => { options.RequestAddress = "http://localhost:3302/backend"; }); private static readonly TableRequester TableRequester = new(); static Program() { s_xFEClientRequester.MessageReceived += XFEClientRequester_MessageReceived; TableRequester.RequestAddress = s_xFEClientRequester.RequestAddress; } private static void XFEClientRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e) { Console.WriteLine($"请求完成:{e.StatusCode}\t{e.Message}"); } #region 基础测试 // [SMTest] public static async Task TestPOST() { using var client = new HttpClient { BaseAddress = new Uri("http://localhost:3305/api/") }; var response = await client.PostAsync("v1/test/myTest/test2/test5/test6",new StringContent("test")); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); } else { var errorContent = await response.Content.ReadAsStringAsync(); throw new HttpRequestException($"请求失败:{response.StatusCode},响应内容:{errorContent}"); } } /// /// 测试基本的test端点请求 /// //[SMTest] public static async Task Test() { var result = await s_xFEClientRequester.Request("test"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result); } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } } /// /// 测试连接检查端点 /// //[SMTest] public static async Task Check() { try { var result = await s_xFEClientRequester.Request("check_connect"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result); } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } } catch (Exception ex) { Console.WriteLine(ex); } } #endregion #region 用户登录测试 /// /// 测试用户登录功能 /// //[SMTest("Admin", "123456")] public static async Task Login(string account, string password) { var result = await s_xFEClientRequester.Request>("login", account, password); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result.Session); Console.WriteLine(result.Result.ExpireDate); Console.WriteLine(result.Result.UserInfo.Id); Console.WriteLine(result.Result.UserInfo.NickName); Console.WriteLine(result.Result.UserInfo.PermissionLevel); TableRequester.RequestAddress = s_xFEClientRequester.RequestAddress; TableRequester.Session = result.Result.Session; TableRequester.DeviceInfo = s_xFEClientRequester.DeviceInfo; } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } } /// /// 测试无效用户登录(错误密码) /// //[SMTest("Admin", "wrong_password")] public static async Task LoginWithWrongPassword(string account, string password) { var result = await s_xFEClientRequester.Request>("login", account, password); Console.WriteLine($"状态码:{result.StatusCode}"); Console.WriteLine($"消息:{result.Message}"); } /// /// 测试无效用户登录(不存在的用户) /// //[SMTest("NonExistentUser", "123456")] public static async Task LoginWithNonExistentUser(string account, string password) { var result = await s_xFEClientRequester.Request>("login", account, password); Console.WriteLine($"状态码:{result.StatusCode}"); Console.WriteLine($"消息:{result.Message}"); } /// /// 测试重新登录功能 /// //[SMTest] public static async Task ReLogin() { var result = await s_xFEClientRequester.Request("relogin"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result.Id); Console.WriteLine(result.Result.NickName); Console.WriteLine(result.Result.PermissionLevel); } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } } #endregion #region Echo服务测试 /// /// 测试Echo服务:发送消息并验证原样返回 /// //[SMTest] public static async Task EchoTest() { var result = await s_xFEClientRequester.Request("echo", "Hello, XFE!"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"Echo响应:{result.Result}"); } else { Console.WriteLine($"Echo失败:{result.StatusCode} {result.Message}"); } } /// /// 测试Echo服务:发送空消息 /// //[SMTest] public static async Task EchoEmptyTest() { var result = await s_xFEClientRequester.Request("echo", string.Empty); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"空Echo响应:{result.Result}"); } else { Console.WriteLine($"空Echo失败:{result.StatusCode} {result.Message}"); } } /// /// 测试Echo服务:发送中文消息 /// //[SMTest] public static async Task EchoChineseTest() { var result = await s_xFEClientRequester.Request("echo", "你好,世界!"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"中文Echo响应:{result.Result}"); } else { Console.WriteLine($"中文Echo失败:{result.StatusCode} {result.Message}"); } } #endregion #region 数学运算服务测试 /// /// 测试加法运算 /// //[SMTest] public static async Task MathAddTest() { var result = await s_xFEClientRequester.Request("math/add", 3.0, 5.0); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"3 + 5 = {result.Result}"); } else { Console.WriteLine($"加法失败:{result.StatusCode} {result.Message}"); } } /// /// 测试乘法运算 /// //[SMTest] public static async Task MathMultiplyTest() { var result = await s_xFEClientRequester.Request("math/multiply", 4.0, 7.0); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"4 × 7 = {result.Result}"); } else { Console.WriteLine($"乘法失败:{result.StatusCode} {result.Message}"); } } /// /// 测试加法运算:负数 /// //[SMTest] public static async Task MathAddNegativeTest() { var result = await s_xFEClientRequester.Request("math/add", -10.0, 3.0); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"-10 + 3 = {result.Result}"); } else { Console.WriteLine($"负数加法失败:{result.StatusCode} {result.Message}"); } } /// /// 测试乘法运算:零 /// //[SMTest] public static async Task MathMultiplyZeroTest() { var result = await s_xFEClientRequester.Request("math/multiply", 42.0, 0.0); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"42 × 0 = {result.Result}"); } else { Console.WriteLine($"零乘法失败:{result.StatusCode} {result.Message}"); } } /// /// 测试加法运算:小数 /// //[SMTest] public static async Task MathAddDecimalTest() { var result = await s_xFEClientRequester.Request("math/add", 1.5, 2.3); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"1.5 + 2.3 = {result.Result}"); } else { Console.WriteLine($"小数加法失败:{result.StatusCode} {result.Message}"); } } #endregion #region 状态服务测试 /// /// 测试服务器状态端点 /// //[SMTest] public static async Task StatusTest() { var result = await s_xFEClientRequester.Request("status"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"服务器状态:{result.Result}"); } else { Console.WriteLine($"状态查询失败:{result.StatusCode} {result.Message}"); } } #endregion #region 问候服务测试 /// /// 测试问候服务:正常名称 /// //[SMTest] public static async Task GreetTest() { var result = await s_xFEClientRequester.Request("greet", "XFEstudio"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"问候响应:{result.Result}"); } else { Console.WriteLine($"问候失败:{result.StatusCode} {result.Message}"); } } /// /// 测试问候服务:空名称(应返回错误) /// //[SMTest] public static async Task GreetEmptyNameTest() { var result = await s_xFEClientRequester.Request("greet"); Console.WriteLine($"空名称状态码:{result.StatusCode}"); Console.WriteLine($"空名称消息:{result.Message}"); } #endregion #region 时间服务测试 /// /// 测试服务器时间端点 /// //[SMTest] public static async Task TimeTest() { var result = await s_xFEClientRequester.Request("time"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine($"服务器时间:{result.Result}"); } else { Console.WriteLine($"时间查询失败:{result.StatusCode} {result.Message}"); } } #endregion #region 压力测试 /// /// 压力测试:并行发送10000个请求 /// //[SMTest] public static async Task TestBench() { await Parallel.ForEachAsync(Enumerable.Range(0, 10000), async (_, _) => { var result = await s_xFEClientRequester.Request("test"); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result); } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } }); } #endregion #region 日志服务测试 /// /// 测试获取服务器日志 /// //[SMTest] public static async Task GetLog() { var result = await s_xFEClientRequester.Request("get_log", DateTime.MinValue, DateTime.MaxValue); if (result.StatusCode == HttpStatusCode.OK) { Console.WriteLine(result.Result); } else { Console.WriteLine(result.StatusCode); Console.WriteLine(result.Message); } } #endregion #region 数据表操作测试 /// /// 测试Order模型序列化 /// //[SMTest] public static string ConvertOrder() { var order = new Order { Description = "测试订单的描述", Name = "测试订单" }; return JsonSerializer.Serialize(order); } /// /// 测试添加订单 /// //[SMTest] public static async Task AddOrder() => await TableRequester.Add(new() { Description = "测试订单的描述", Name = "测试订单" }); /// /// 测试获取订单列表 /// [SMTest] public static async Task GetOrder() { var result = await TableRequester.Get(); foreach (var order in result.DataList) { Console.WriteLine($"ID:{order.Id}\tName:{order.Name}\tDS:{order.Description}"); } } /// /// 测试修改订单 /// //[SMTest] public static async Task ChangeOrder() { var result = await TableRequester.Get(); var order = result.DataList[0]; Console.WriteLine($"ID:{order.Id}\tName:{order.Name}\tDS:{order.Description}"); order.Description = "这是一条修改后的测试订单"; order.Name = "Test001"; await TableRequester.Change(order); } /// /// 测试获取修改后的订单列表 /// //[SMTest] public static async Task GetOrder2() { var result = await TableRequester.Get(); foreach (var order in result.DataList) { Console.WriteLine($"ID:{order.Id}\tName:{order.Name}\tDS:{order.Description}"); } Console.ReadLine(); } #endregion }