using HaloPixelToolBox.Core.Models.Bar; using HaloPixelToolBox.Core.Models.User; using HaloPixelToolBox.Core.Utilities; using System.Net; using XFEExtension.NetCore.ServerInteractive.Models; using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels; if (!args.Contains("--integration", StringComparer.OrdinalIgnoreCase)) { Console.WriteLine("Pass --integration to run the ClientRequester end-to-end server test."); return; } var serverAddress = Environment.GetEnvironmentVariable("HALOPIXEL_SERVER_ADDRESS") ?? DataManager.DefaultRequestAddress; var userName = Environment.GetEnvironmentVariable("HALOPIXEL_ADMIN_USERNAME") ?? "admin"; var password = Environment.GetEnvironmentVariable("HALOPIXEL_ADMIN_PASSWORD") ?? "HaloPixelToolBox@2026"; var testVersion = $"0.0.{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}"; const string testIPAddress = "192.0.2.123"; var addressCreated = false; var ipBanned = false; try { Ensure(await DataManager.InitializeAsync([serverAddress], true), $"Cannot connect to {serverAddress}"); var publicAddress = await DataManager.ClientRequester.Request("getAddress", "3.1.35"); Ensure(publicAddress.StatusCode == HttpStatusCode.OK && publicAddress.Result?.Version == "3.1.35", "Public address lookup failed"); var login = await DataManager.ClientRequester.Request>("login", userName, password); Ensure(login.StatusCode == HttpStatusCode.OK && login.Result?.UserInfo is not null, "Admin login failed"); var testAddress = new AddressResolverModel { Version = testVersion, ModuleName = "integration-test.dll", BaseAddress = 0x1234, Offsets = [0x10, 0x20] }; var addAddress = await DataManager.ClientRequester.Request("addAddress", testAddress); Ensure(addAddress.StatusCode == HttpStatusCode.OK && addAddress.Result, "Adding an address failed"); addressCreated = true; testAddress.ModuleName = "integration-test-updated.dll"; testAddress.BaseAddress = 0x5678; var changeAddress = await DataManager.ClientRequester.Request("changeAddress", testVersion, testAddress); Ensure(changeAddress.StatusCode == HttpStatusCode.OK && changeAddress.Result, "Changing an address failed"); var addressList = await DataManager.ClientRequester.Request>("getAddressList"); Ensure(addressList.StatusCode == HttpStatusCode.OK && addressList.Result?.Any(item => item.Version == testVersion && item.BaseAddress == 0x5678) == true, "Address list did not contain the updated item"); var addBan = await DataManager.ClientRequester.Request("add_bannedIP", testIPAddress, "integration test"); Ensure(addBan.StatusCode == HttpStatusCode.OK, "Banning an IP failed"); ipBanned = true; var bannedList = await DataManager.ClientRequester.Request>("get_bannedIPList"); Ensure(bannedList.StatusCode == HttpStatusCode.OK && bannedList.Result?.Any(item => item.IPAddress == testIPAddress) == true, "Banned IP list did not contain the test IP"); Console.WriteLine("ClientRequester integration test passed."); } finally { if (addressCreated) { var removeAddress = await DataManager.ClientRequester.Request("removeAddress", testVersion); Ensure(removeAddress.StatusCode == HttpStatusCode.OK && removeAddress.Result, "Address cleanup failed"); } if (ipBanned) { var removeBan = await DataManager.ClientRequester.Request("remove_bannedIP", testIPAddress); Ensure(removeBan.StatusCode == HttpStatusCode.OK && removeBan.Result, "IP ban cleanup failed"); } } static void Ensure(bool condition, string message) { if (!condition) throw new InvalidOperationException(message); }