Initial commit: Client Doc docs Server Tools

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ud18010
2026-07-10 10:24:29 +08:00
co-authored by Cursor
commit 7e35d8da31
3374 changed files with 680813 additions and 0 deletions
@@ -0,0 +1,41 @@
using Xunit;
using XWorld.PublishTool;
using XGame.MiniGame;
namespace XWorld.PublishTool.Tests
{
public class ClientServerDigestConsistencyTests
{
[Fact]
public void ClientDigest_Matches_ServerDigest_ForSameFilesTxt()
{
// 服务端发布侧:构建清单、渲染 files.txt、算 digest(被签名的就是这个 digest)
var server = new FilesManifest();
server.Add("RPS.Core.dll.bytes", "aaa111bbb222ccc333ddd444eee555ff", 100);
server.Add("RPS.Client.dll.bytes", "11112222333344445555666677778888", 200);
server.Add("ui_rps.unity3d", "ffffeeeeddddccccbbbbaaaa99998888", 4096);
string filesTxt = server.Render();
string serverDigest = server.Digest();
// 客户端下载侧:拿到同一份 files.txt → LoadFilesList → Digest(验签时重算的就是这个)
var client = new MiniGameManifest();
client.LoadFilesList(filesTxt);
string clientDigest = client.Digest();
Assert.Equal(serverDigest, clientDigest); // 两端逐字节一致 → 签名可验
Assert.NotEqual("", clientDigest);
}
[Fact]
public void ClientDigest_IsOrderIndependent_LikeServer()
{
// 不同插入顺序,digest 应相同(两端都按 name Ordinal 排序)
var s1 = new FilesManifest(); s1.Add("b", "22", 2); s1.Add("a", "11", 1);
var s2 = new FilesManifest(); s2.Add("a", "11", 1); s2.Add("b", "22", 2);
var c1 = new MiniGameManifest(); c1.LoadFilesList(s1.Render());
var c2 = new MiniGameManifest(); c2.LoadFilesList(s2.Render());
Assert.Equal(c1.Digest(), c2.Digest());
Assert.Equal(s1.Digest(), c1.Digest());
}
}
}