fix: 单元测试完成~快搞完了

1. RemoteSyncServer 的 StateHelper 改为私有
2. 修改删除的文件做一个备份
3. 更加详细的测试,主要是观察文件对比是否成功
4. websocket 正式测试
This commit is contained in:
zerlei 2024-09-26 17:49:40 +08:00
parent ffda80aa01
commit bfdda810d1
5 changed files with 54 additions and 23 deletions

View file

@ -7,7 +7,17 @@ public class LocalSyncServer
#pragma warning disable CA2211 // Non-constant fields should not be visible
public static string TempRootFile = "C:/TempPack";
#pragma warning restore CA2211 // Non-constant fields should not be visible
public StateHelpBase StateHelper;
private StateHelpBase StateHelper;
public void SetStateHelper(StateHelpBase helper)
{
StateHelper = helper;
}
public StateHelpBase GetStateHelper()
{
return StateHelper;
}
public Config? SyncConfig;

View file

@ -22,7 +22,7 @@ public abstract class StateHelpBase(
{
protected readonly LocalSyncServer Context = context;
protected readonly SyncProcessStep Step = step;
public readonly SyncProcessStep Step = step;
public SyncMsg CreateErrMsg(string Body)
{
@ -91,7 +91,7 @@ public class ConnectAuthorityHelper(LocalSyncServer context)
Context.LocalPipe.SendMsg(msg);
//下一步
var deployHelper = new DeployHelper(Context);
Context.StateHelper = deployHelper;
Context.SetStateHelper(deployHelper);
deployHelper.DeployProcess();
}
@ -107,7 +107,8 @@ public class ConnectAuthorityHelper(LocalSyncServer context)
var rs = Context.RemotePipe.Work(
(byte[] b) =>
{
return Context.StateHelper.ReceiveRemoteMsg(b);
var x = Context.GetStateHelper().Step;
return Context.GetStateHelper().ReceiveRemoteMsg(b);
},
Context.NotNullSyncConfig.RemoteUrl + "/websoc?Name=" + Context.Name
);
@ -142,7 +143,7 @@ public class DeployHelper(LocalSyncServer context)
{
Context.LocalPipe.SendMsg(CreateMsg("配置为不发布跳过此步骤")).Wait();
var h = new DiffFileAndPackHelper(Context);
Context.StateHelper = h;
Context.SetStateHelper(h);
h.DiffProcess();
}
else
@ -152,7 +153,7 @@ public class DeployHelper(LocalSyncServer context)
ProcessStartInfo startInfo =
new()
{
FileName = "msdeploy", // The command to execute (can be any command line tool)
FileName = "C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\msdeploy.exe", // The command to execute (can be any command line tool)
Arguments =
$" -verb:sync -source:contentPath={Context.NotNullSyncConfig.LocalProjectAbsolutePath} -dest:contentPath={Context.NotNullSyncConfig.LocalRootPath} -disablerule:BackupRule",
// The arguments to pass to the command (e.g., list directory contents)
@ -172,9 +173,9 @@ public class DeployHelper(LocalSyncServer context)
if (process.ExitCode == 0)
{
Context.LocalPipe.SendMsg(CreateMsg("发布成功!")).Wait();
Context.LocalPipe.SendMsg(CreateMsg("本地编译成功!")).Wait();
var h = new DiffFileAndPackHelper(Context);
Context.StateHelper = h;
Context.SetStateHelper(h);
h.DiffProcess();
}
else
@ -248,8 +249,8 @@ public class DiffFileAndPackHelper(LocalSyncServer context)
}
});
var n = new DeployMSSqlHelper(Context);
Context.SetStateHelper(n);
n.PackSqlServerProcess();
Context.StateHelper = n;
}
}
@ -263,7 +264,7 @@ public class DeployMSSqlHelper(LocalSyncServer context)
Context.NotNullSyncConfig.Id.ToString()
);
var h = new UploadPackedHelper(Context);
Context.StateHelper = h;
Context.SetStateHelper(h);
h.UpLoadPackedFile();
}
@ -297,7 +298,7 @@ public class DeployMSSqlHelper(LocalSyncServer context)
ProcessStartInfo startInfo =
new()
{
FileName = "SqlPackage", // The command to execute (can be any command line tool)
FileName = "C:\\Users\\ZHAOLEI\\.dotnet\\tools\\sqlpackage.exe", // The command to execute (can be any command line tool)
Arguments = arguments,
// The arguments to pass to the command (e.g., list directory contents)
RedirectStandardOutput = true, // Redirect the standard output to a string
@ -359,6 +360,8 @@ public class UploadPackedHelper(LocalSyncServer context)
)
.Wait();
Context.LocalPipe.SendMsg(CreateMsg("上传完成!")).Wait();
var x = Context.GetStateHelper().Step;
}
protected override void HandleLocalMsg(SyncMsg msg)
@ -370,7 +373,7 @@ public class UploadPackedHelper(LocalSyncServer context)
{
Context.LocalPipe.SendMsg(msg).Wait();
var h = new FinallyPublishHelper(Context);
Context.StateHelper = h;
Context.SetStateHelper(h);
}
}

View file

@ -126,7 +126,7 @@ public class UnPackAndReleaseHelper(RemoteSyncServer context)
public void UnPack()
{
FileDirOpForUnpack.FirstUnComparess(
Path.Combine(RemoteSyncServer.TempRootFile, Context.NotNullSyncConfig.Id.ToString()),
Path.Combine(RemoteSyncServer.TempRootFile),
Context.NotNullSyncConfig.Id.ToString()
);
Context.Pipe.SendMsg(CreateMsg("解压完成!")).Wait();
@ -149,14 +149,14 @@ public class FinallyPublishHelper(RemoteSyncServer context)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var arguments =
$" /Action:Publish /SourceFile: {RemoteSyncServer.TempRootFile}/{Context.NotNullSyncConfig.Id}/{Context.NotNullSyncConfig.Id}.dacpac"
$" /Action:Publish /SourceFile:{RemoteSyncServer.TempRootFile}/{Context.NotNullSyncConfig.Id}/{Context.NotNullSyncConfig.Id}.dacpac"
+ $" /TargetServerName:{Context.NotNullSyncConfig.DstDb.ServerName} /TargetDatabaseName:{Context.NotNullSyncConfig.DstDb.DatebaseName}"
+ $" /TargetUser:{Context.NotNullSyncConfig.DstDb.User} /TargetPassword:{Context.NotNullSyncConfig.DstDb.Password} /TargetTrustServerCertificate:True";
ProcessStartInfo startInfo =
new()
{
FileName = "SqlPackage", // The command to execute (can be any command line tool)
FileName = "C:\\Users\\ZHAOLEI\\.dotnet\\tools\\sqlpackage.exe", // The command to execute (can be any command line tool)
Arguments = arguments,
// The arguments to pass to the command (e.g., list directory contents)
RedirectStandardOutput = true, // Redirect the standard output to a string
@ -193,11 +193,7 @@ public class FinallyPublishHelper(RemoteSyncServer context)
Context.Pipe.SendMsg(CreateMsg("跳过数据库发布!")).Wait();
}
var DirFileOp = new FileDirOpForUnpack(
Path.Combine(
RemoteSyncServer.TempRootFile,
Context.NotNullSyncConfig.Id.ToString(),
Context.NotNullSyncConfig.Id.ToString()
),
Path.Combine(RemoteSyncServer.TempRootFile, Context.NotNullSyncConfig.Id.ToString()),
Context.NotNullSyncConfig.RemoteRootPath
);
Context.NotNullSyncConfig.DirFileConfigs.ForEach(e =>

View file

@ -19,6 +19,11 @@ public class PipeTest
var rs = p1.Work(
(byte[] b) =>
{
var msg = JsonSerializer.Deserialize<SyncMsg>(b);
if (msg.Body == "发布完成!")
{
p1.Close("正常退出!");
}
Console.WriteLine(b);
return true;
}
@ -44,6 +49,7 @@ public class PipeTest
lf.CreateLocalSyncServer(p2, "Test", p3);
var rf = new RemoteSyncServerFactory();
rf.CreateRemoteSyncServer(p4, "Test");
TestPipe.syncServerFactory = rf;
var starter = new SyncMsg
{
Body = JsonSerializer.Serialize(new PipeSeed().TestConfig),
@ -52,7 +58,7 @@ public class PipeTest
};
await p1.SendMsg(starter);
await x;
if (p1.ErrResult != null)
if (p1.ErrResult != "正常退出!")
{
Assert.Fail(p1.ErrResult);
}

View file

@ -2,6 +2,7 @@
using System.Text;
using System.Text.Json;
using Common;
using Microsoft.AspNetCore.Hosting.Server;
using RemoteServer;
namespace ServerTest
@ -14,6 +15,7 @@ namespace ServerTest
public TestPipe? Other;
public string? ErrResult;
public string Id = id;
public static RemoteSyncServerFactory syncServerFactory;
public override async IAsyncEnumerable<int> Work(
Func<byte[], bool> receiveCb,
@ -34,12 +36,19 @@ namespace ServerTest
dst = Path.Combine(RemoteSyncServer.TempRootFile, Path.GetFileName(filePath));
await Task.Run(() =>
{
System.IO.File.Copy(filePath, dst, true);
progressCb(100);
//if (!Directory.Exists(dst))
//{
// Directory.CreateDirectory(dst);
//}
System.IO.File.Copy(filePath, dst, true);
Task.Run(() =>
{
var it = syncServerFactory.GetServerByName("Test");
var h = new UnPackAndReleaseHelper(it);
it.StateHelper = h;
h.UnPack();
});
});
}
@ -111,8 +120,15 @@ namespace ServerTest
//var x = 1;
var id = Id;
//抛出异常 从 p3 传递到 p2
if (ErrResult == "正常退出!")
{
return;
}
else
{
throw new Exception(ErrResult);
}
}
}
}
}