private IHost CreateHost()
        {
            var hostSetup = new HostSetup();

            hostSetup.Elevated = true;

            var hostFactory = new IsolatedProcessHostFactory(runtime);
            var host        = hostFactory.CreateHost(hostSetup, runtime.Logger);

            return(host);
        }
        public void PolicyPerformsCorrelationThenReporting()
        {
            CorrelatedExceptionEventArgs finalArgs;

            using (IHost host = new IsolatedProcessHostFactory(RuntimeAccessor.Instance).CreateHost(new HostSetup(), new MarkupStreamLogger(TestLog.Default)))
            {
                HostAssemblyResolverHook.InstallCallback(host);
                finalArgs = (CorrelatedExceptionEventArgs)host.GetHostService().Do <object, object>(PolicyPerformsCorrelationThenReportingCallback, null);
            }

            Assert.IsNotNull(finalArgs);
            Assert.AreEqual("foo\nbar", finalArgs.Message);
            Assert.IsInstanceOfType <Exception>(finalArgs.Exception);
            Assert.IsFalse(finalArgs.IsRecursive);
        }
        public void PolicyHandlesUnhandledExceptionsAndRecursion()
        {
            List <CorrelatedExceptionEventArgs> args;

            using (IHost host = new IsolatedProcessHostFactory(RuntimeAccessor.Instance).CreateHost(new HostSetup(), new MarkupStreamLogger(TestLog.Default)))
            {
                HostAssemblyResolverHook.InstallCallback(host);
                args = (List <CorrelatedExceptionEventArgs>)host.GetHostService().Do <object, object>(PolicyHandlesUnhandledExceptionsAndRecursionCallback, null);
            }

            Assert.Count(3, args);
            Assert.AreEqual("Error.", args[0].Exception.Message);
            Assert.IsFalse(args[0].IsRecursive);
            Assert.AreEqual("Correlation error.", args[1].Exception.Message);
            Assert.IsTrue(args[1].IsRecursive);
            Assert.AreEqual("Reporting error.", args[2].Exception.Message);
            Assert.IsTrue(args[2].IsRecursive);
        }