76 lines
2.8 KiB
C#
76 lines
2.8 KiB
C#
// Copyright (C) 2026 SharpEmu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
using SharpEmu.HLE;
|
|
using SharpEmu.Libs.Network;
|
|
using Xunit;
|
|
|
|
namespace SharpEmu.Libs.Tests.Network;
|
|
|
|
public sealed class Http2ExportsTests
|
|
{
|
|
private const ulong MemoryBase = 0x1_0000_0000;
|
|
|
|
[Fact]
|
|
public void RequestLifecycle_RemainsLocalAndBlocksTransmission()
|
|
{
|
|
Http2Exports.ResetRuntimeState();
|
|
var memory = new FakeCpuMemory(MemoryBase, 0x2000);
|
|
var ctx = new CpuContext(memory, Generation.Gen5);
|
|
|
|
ctx[CpuRegister.Rdi] = 1;
|
|
ctx[CpuRegister.Rsi] = 2;
|
|
ctx[CpuRegister.Rdx] = 0x10000;
|
|
ctx[CpuRegister.Rcx] = 4;
|
|
Assert.Equal(0, Http2Exports.Http2Init(ctx));
|
|
var contextId = unchecked((int)ctx[CpuRegister.Rax]);
|
|
|
|
var userAgentAddress = memory.WriteCString(MemoryBase + 0x100, "SharpEmu test");
|
|
ctx[CpuRegister.Rdi] = unchecked((uint)contextId);
|
|
ctx[CpuRegister.Rsi] = userAgentAddress;
|
|
ctx[CpuRegister.Rdx] = 3;
|
|
ctx[CpuRegister.Rcx] = 0;
|
|
Assert.Equal(contextId + 0x1000, Http2Exports.Http2CreateTemplate(ctx));
|
|
var templateId = unchecked((int)ctx[CpuRegister.Rax]);
|
|
|
|
var methodAddress = memory.WriteCString(MemoryBase + 0x200, "GET");
|
|
var urlAddress = memory.WriteCString(MemoryBase + 0x300, "https://example.invalid/");
|
|
ctx[CpuRegister.Rdi] = unchecked((uint)templateId);
|
|
ctx[CpuRegister.Rsi] = methodAddress;
|
|
ctx[CpuRegister.Rdx] = urlAddress;
|
|
ctx[CpuRegister.Rcx] = 0;
|
|
Assert.Equal(templateId + 0x1000, Http2Exports.Http2CreateRequestWithUrl(ctx));
|
|
var requestId = unchecked((int)ctx[CpuRegister.Rax]);
|
|
|
|
ctx[CpuRegister.Rdi] = unchecked((uint)requestId);
|
|
ctx[CpuRegister.Rsi] = 0;
|
|
ctx[CpuRegister.Rdx] = 0;
|
|
Assert.Equal(unchecked((int)0x817B5224), Http2Exports.Http2SendRequest(ctx));
|
|
|
|
ctx[CpuRegister.Rdi] = unchecked((uint)requestId);
|
|
Assert.Equal(0, Http2Exports.Http2DeleteRequest(ctx));
|
|
Assert.Equal(unchecked((int)0x817B1100), Http2Exports.Http2DeleteRequest(ctx));
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateTemplate_RejectsInvalidVersion()
|
|
{
|
|
Http2Exports.ResetRuntimeState();
|
|
var memory = new FakeCpuMemory(MemoryBase, 0x1000);
|
|
var ctx = new CpuContext(memory, Generation.Gen5);
|
|
ctx[CpuRegister.Rdi] = 1;
|
|
ctx[CpuRegister.Rsi] = 2;
|
|
ctx[CpuRegister.Rdx] = 0x1000;
|
|
ctx[CpuRegister.Rcx] = 1;
|
|
_ = Http2Exports.Http2Init(ctx);
|
|
var contextId = ctx[CpuRegister.Rax];
|
|
|
|
ctx[CpuRegister.Rdi] = contextId;
|
|
ctx[CpuRegister.Rsi] = memory.WriteCString(MemoryBase + 0x100, "test");
|
|
ctx[CpuRegister.Rdx] = 4;
|
|
ctx[CpuRegister.Rcx] = 0;
|
|
|
|
Assert.Equal(unchecked((int)0x817B106A), Http2Exports.Http2CreateTemplate(ctx));
|
|
}
|
|
}
|