42 lines
1.8 KiB
C#
42 lines
1.8 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|