FileSqlServerSync/Server/ServerTest/PipeTest.cs
ZhaoLei 4724e96efe feat: 增加在各个步骤前后调用扩展命令
c# 异步任务里面的异常,不会在异步之外被捕获。
```
try {

Task.Run(()=>{

throw new Exception()
//此异常不会被捕获

)
};
catch(Exception ex) {
//将不会捕获异常
}
2024-10-29 12:46:13 +08:00

103 lines
3.6 KiB
C#

using System.Runtime.InteropServices;
using System.Text.Json;
using Common;
using LocalServer;
using RemoteServer;
using XUnit.Project.Attributes;
/*using Newtonsoft.Json;*/
namespace ServerTest;
public class PipeTest
{
[Fact]
public async void TestCase()
{
//if (System.IO.File.Exists("Pipe.txt"))
//{
// System.IO.File.Delete("Pipe.txt");
//}
//System.IO.File.Create("Pipe.txt");
//msbuild 只能在windows上跑
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var p1 = new TestPipe(false, "1");
var x = Task.Run(async () =>
{
var rs = p1.Work(
(byte[] b) =>
{
var msg = JsonSerializer.Deserialize<SyncMsg>(b);
#pragma warning disable CS8602 // Dereference of a possibly null reference.
if (msg.Body == "发布完成!")
{
Task.Run(() =>
{
Task.Delay(1000).Wait();
_ = p1.Close("正常退出!");
});
}
#pragma warning restore CS8602 // Dereference of a possibly null reference.
System.IO.File.AppendAllText(
"Pipe.txt",
$"{msg.Step}-{msg.Type}:{msg.Body}\n"
);
Console.WriteLine(b);
return true;
}
);
await foreach (var r in rs)
{
Console.WriteLine(r);
}
});
//await p1.Close("sdf");
//await x;
var p2 = new TestPipe(false, "2");
p1.Other = p2;
p2.Other = p1;
var p3 = new TestPipe(true, "3");
var p4 = new TestPipe(true, "4");
p3.Other = p4;
p4.Other = p3;
LocalSyncServer.TempRootFile = "D:/FileSyncTest/stemp";
RemoteSyncServer.SqlPackageAbPath =
"C:\\Users\\ZHAOLEI\\.dotnet\\tools\\sqlpackage.exe";
//LocalSyncServer.MsdeployAbPath =
// "C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\msdeploy.exe";
LocalSyncServer.SqlPackageAbPath = "C:\\Users\\ZHAOLEI\\.dotnet\\tools\\sqlpackage.exe";
LocalSyncServer.MSBuildAbPath =
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\\amd64\\MSBuild.exe";
RemoteSyncServer.TempRootFile = "D:/FileSyncTest/dtemp";
RemoteSyncServerFactory.NamePwd = [new Tuple<string, string>("Test", "t123")];
var lf = new LocalSyncServerFactory();
var task1 = Task.Run(async () =>
{
await lf.CreateLocalSyncServer(p2, "Test", p3);
});
var rf = new RemoteSyncServerFactory();
var task2 = Task.Run(async () =>
{
await rf.CreateRemoteSyncServer(p4, "Test");
});
TestPipe.syncServerFactory = rf;
var starter = new SyncMsg
{
Body = JsonSerializer.Serialize(new PipeSeed().TestConfig),
Type = SyncMsgType.General,
Step = SyncProcessStep.Connect
};
await p1.SendMsg(starter);
await x;
if (p1.ErrResult != "正常退出!")
{
Assert.Fail(p1.ErrResult);
}
}
}
}