/// <nodoc /> public IpcResult(IpcResultStatus status, string payload, TimeSpan actionDuraion) { m_exitCode = status; m_payload = payload ?? string.Empty; Timestamp = new IpcResultTimestamp(); ActionDuration = actionDuraion; }
public void TestHandleExceptions(IpcResultStatus status) { var exceptionMessage = "invalid operation"; var ipcResult = Utils.HandleExceptions(status, () => throw new InvalidOperationException(exceptionMessage)); XAssert.AreEqual(status, ipcResult.ExitCode); XAssert.Contains(ipcResult.Payload, exceptionMessage); }
private static IpcResultStatus MergeStatuses(IpcResultStatus lhs, IpcResultStatus rhs) { return (success(lhs) && success(rhs) ? IpcResultStatus.Success : success(lhs) && !success(rhs) ? rhs : !success(lhs) && success(rhs) ? lhs : IpcResultStatus.GenericError); bool success(IpcResultStatus s) => s == IpcResultStatus.Success; }
public void TestIpcResultMerge(IpcResultStatus lhsStatus, IpcResultStatus rhsStatus, IpcResultStatus mergeStatus) { var lhs = new IpcResult(lhsStatus, "lhs"); var rhs = new IpcResult(rhsStatus, "rhs"); var merged = IpcResult.Merge(lhs, rhs); // contains both payloads XAssert.Contains(merged.Payload, lhs.Payload, rhs.Payload); // has correct status XAssert.AreEqual(merged.ExitCode, mergeStatus); }
/// <summary> /// Async version of <see cref="HandleExceptions"/>. /// </summary> internal static async Task <IIpcResult> HandleExceptionsAsync(IpcResultStatus errorExitCode, Func <Task <IIpcResult> > clientHandler) { try { return(await clientHandler()); } catch (Exception e) { return(new IpcResult(errorExitCode, e.ToStringDemystified())); } }
/// <summary> /// Executes <paramref name="clientHandler"/>; if any exception happens, /// returns an <see cref="IIpcResult"/> with <see cref="IIpcResult.ExitCode"/> /// set to <paramref name="errorExitCode"/> and <see cref="IIpcResult.Payload"/> /// to the "ToString" value of the caught exception. /// </summary> internal static IIpcResult HandleExceptions(IpcResultStatus errorExitCode, Func <IIpcResult> clientHandler) { try { return(clientHandler()); } catch (Exception e) { return(new IpcResult(errorExitCode, e.ToStringDemystified())); } }
public async Task TestIpcResultSerializationAsync(IpcResultStatus status, string payload) { var duration = TimeSpan.FromMilliseconds(1234); var ipcResult = new IpcResult(status, payload, duration); // serialize using var stream = new MemoryStream(); await ipcResult.SerializeAsync(stream, CancellationToken.None); // reset stream position and deserialize stream.Position = 0; var ipcResultClone = await IpcResult.DeserializeAsync(stream, CancellationToken.None); // compare var errMessage = $"Cloning failed:\n - original: {ipcResult}\n - clone: {ipcResultClone}"; XAssert.AreEqual(status, ipcResultClone.ExitCode); XAssert.AreEqual(payload, ipcResultClone.Payload, errMessage); XAssert.AreEqual(duration, ipcResultClone.ActionDuration, errMessage); XAssert.AreNotEqual(ipcResult.Succeeded, ipcResult.Failed); }
/// <nodoc /> public IpcResult(IpcResultStatus status, string payload) : this(status, payload, TimeSpan.Zero) { }
private static IpcResultStatus ParseIpcStatus(string statusString, IpcResultStatus defaultValue = IpcResultStatus.ExecutionError) { return(Enum.TryParse <IpcResultStatus>(statusString, out var value) ? value : defaultValue); }
private static string RenderIpcStatus(IpcResultStatus status) { return(status.ToString()); }
internal DummyEchoingIpcClient(IpcResultStatus statusToAlwaysReturn) { m_status = statusToAlwaysReturn; }
internal DummyIpcProvider(IpcResultStatus statusToAlwaysReturn = IpcResultStatus.Success) { m_statusToAlwaysReturn = statusToAlwaysReturn; }
/// <nodoc /> public IpcResult(IpcResultStatus status, string payload) { m_exitCode = status; m_payload = payload ?? string.Empty; Timestamp = new IpcResultTimestamp(); }