Initial commit: Client Doc docs Server Tools
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using XWorld.Server.Gateway;
|
||||
|
||||
namespace XWorld.Server.Gateway.Tests
|
||||
{
|
||||
public class StaticFileServerTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task ServesExistingFile_200_WithExactBytes()
|
||||
{
|
||||
string root = Path.Combine(Path.GetTempPath(), "xw-cdn-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(Path.Combine(root, "minigame", "rps", "2"));
|
||||
byte[] payload = new byte[] { 1, 2, 3, 4, 250, 99, 0, 7 };
|
||||
File.WriteAllBytes(Path.Combine(root, "minigame", "rps", "2", "files.txt"), payload);
|
||||
|
||||
var cdn = new StaticFileServer(root, port: 0);
|
||||
await cdn.StartAsync();
|
||||
try
|
||||
{
|
||||
using var http = new HttpClient();
|
||||
HttpResponseMessage res = await http.GetAsync($"{cdn.HttpBaseUrl}/minigame/rps/2/files.txt");
|
||||
Assert.Equal(HttpStatusCode.OK, res.StatusCode);
|
||||
byte[] got = await res.Content.ReadAsByteArrayAsync();
|
||||
Assert.Equal(payload, got);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await cdn.StopAsync();
|
||||
try { Directory.Delete(root, true); } catch { }
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task MissingFile_404()
|
||||
{
|
||||
string root = Path.Combine(Path.GetTempPath(), "xw-cdn-" + Guid.NewGuid().ToString("N"));
|
||||
var cdn = new StaticFileServer(root, port: 0);
|
||||
await cdn.StartAsync();
|
||||
try
|
||||
{
|
||||
using var http = new HttpClient();
|
||||
HttpResponseMessage res = await http.GetAsync($"{cdn.HttpBaseUrl}/minigame/nope/1/game.json");
|
||||
Assert.Equal(HttpStatusCode.NotFound, res.StatusCode);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await cdn.StopAsync();
|
||||
try { Directory.Delete(root, true); } catch { }
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LanIp_ReturnsNonLoopbackIPv4_OrFallback()
|
||||
{
|
||||
string ip = LanIp.Resolve();
|
||||
Assert.False(string.IsNullOrWhiteSpace(ip));
|
||||
Assert.True(System.Net.IPAddress.TryParse(ip, out var parsed));
|
||||
Assert.Equal(System.Net.Sockets.AddressFamily.InterNetwork, parsed.AddressFamily);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user