Beispiel #1
0
 /// <nodoc />
 public IpcResult(IpcResultStatus status, string payload, TimeSpan actionDuraion)
 {
     m_exitCode     = status;
     m_payload      = payload ?? string.Empty;
     Timestamp      = new IpcResultTimestamp();
     ActionDuration = actionDuraion;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 /// <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()));
     }
 }
Beispiel #6
0
 /// <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()));
     }
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 /// <nodoc />
 public IpcResult(IpcResultStatus status, string payload) : this(status, payload, TimeSpan.Zero)
 {
 }
Beispiel #9
0
 private static IpcResultStatus ParseIpcStatus(string statusString, IpcResultStatus defaultValue = IpcResultStatus.ExecutionError)
 {
     return(Enum.TryParse <IpcResultStatus>(statusString, out var value)
         ? value
         : defaultValue);
 }
Beispiel #10
0
 private static string RenderIpcStatus(IpcResultStatus status)
 {
     return(status.ToString());
 }
Beispiel #11
0
 internal DummyEchoingIpcClient(IpcResultStatus statusToAlwaysReturn)
 {
     m_status = statusToAlwaysReturn;
 }
Beispiel #12
0
 internal DummyIpcProvider(IpcResultStatus statusToAlwaysReturn = IpcResultStatus.Success)
 {
     m_statusToAlwaysReturn = statusToAlwaysReturn;
 }
Beispiel #13
0
 /// <nodoc />
 public IpcResult(IpcResultStatus status, string payload)
 {
     m_exitCode = status;
     m_payload  = payload ?? string.Empty;
     Timestamp  = new IpcResultTimestamp();
 }