68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
using System.Text.Json;
|
|
|
|
namespace Zcbot.WindowsNode.Tests;
|
|
|
|
public sealed class JobRecoveryServiceTests
|
|
{
|
|
[Fact]
|
|
public void JobWithoutTerminalResumesExecution()
|
|
{
|
|
Assert.Equal(
|
|
JobRecoveryAction.ResumeExecution,
|
|
JobRecoveryService.Decide(CreateJob()));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("failed")]
|
|
[InlineData("cancelled")]
|
|
public void FailedOrCancelledTerminalIsReplayed(string status)
|
|
{
|
|
Assert.Equal(
|
|
JobRecoveryAction.ReplayTerminal,
|
|
JobRecoveryService.Decide(CreateJob(terminal: Terminal(status))));
|
|
}
|
|
|
|
[Fact]
|
|
public void UnconfirmedSuccessResumesOnlyOutputUpload()
|
|
{
|
|
Assert.Equal(
|
|
JobRecoveryAction.ResumeOutputUpload,
|
|
JobRecoveryService.Decide(CreateJob(terminal: Terminal("succeeded"))));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true, false)]
|
|
[InlineData(false, true)]
|
|
public void ConfirmedOrCloudTerminatedSuccessNeedsNoRecovery(
|
|
bool uploadComplete,
|
|
bool cloudTerminal)
|
|
{
|
|
Assert.Equal(
|
|
JobRecoveryAction.None,
|
|
JobRecoveryService.Decide(CreateJob(
|
|
terminal: Terminal("succeeded"),
|
|
uploadComplete: uploadComplete,
|
|
cloudTerminal: cloudTerminal)));
|
|
}
|
|
|
|
private static RecoverableJob CreateJob(
|
|
JsonElement? terminal = null,
|
|
bool uploadComplete = false,
|
|
bool cloudTerminal = false) => new(
|
|
Guid.NewGuid(),
|
|
Guid.NewGuid(),
|
|
new string('a', 64),
|
|
"origin.plot@v2",
|
|
null,
|
|
null,
|
|
terminal,
|
|
uploadComplete,
|
|
cloudTerminal);
|
|
|
|
private static JsonElement Terminal(string status)
|
|
{
|
|
using var document = JsonDocument.Parse($$"""{"status":"{{status}}"}""");
|
|
return document.RootElement.Clone();
|
|
}
|
|
}
|