Ejemplo n.º 1
0
        void Just_Convert_Sanity()
        {
            Maybe <int> i1 = Maybe.Just(5);
            Maybe <int> i2 = Maybe.Just(0);

            Maybe <string> s1 = Maybe.Just("s1");
            Maybe <string> s2 = Maybe.Just("s2");

            Assert.Equal("success", i1.Convert((just) => "success", () => "fail"));
            Assert.Equal("success", i2.Convert((just) => "success", () => "fail"));
            Assert.Equal("success", s1.Convert((just) => "success", () => "fail"));
            Assert.Equal("success", s2.Convert((just) => "success", () => "fail"));

            Assert.Equal("success", i1.Convert((just) => "success", "fail"));
            Assert.Equal("success", i2.Convert((just) => "success", "fail"));
            Assert.Equal("success", s1.Convert((just) => "success", "fail"));
            Assert.Equal("success", s2.Convert((just) => "success", "fail"));

            Assert.Equal("5success", i1.Convert((just) => $"{just}success", () => "fail"));
            Assert.Equal("0success", i2.Convert((just) => $"{just}success", () => "fail"));
            Assert.Equal("s1success", s1.Convert((just) => $"{just}success", () => "fail"));
            Assert.Equal("s2success", s2.Convert((just) => $"{just}success", () => "fail"));

            Assert.Equal("5success", i1.Convert((just) => $"{just}success", "fail"));
            Assert.Equal("0success", i2.Convert((just) => $"{just}success", "fail"));
            Assert.Equal("s1success", s1.Convert((just) => $"{just}success", "fail"));
            Assert.Equal("s2success", s2.Convert((just) => $"{just}success", "fail"));
        }
Ejemplo n.º 2
0
        public void Convert()
        {
            Assert.AreEqual(new Maybe <string>("10"), Maybe10.Convert(i => i.ToString()));
            Assert.AreEqual(Maybe <string> .Empty, MaybeEmpty.Convert(i => i.ToString()));

            Assert.AreEqual("10", Maybe10.Convert(i => i.ToString(), () => "none"));
            Assert.AreEqual("none", MaybeEmpty.Convert(i => i.ToString(), () => "none"));

            Assert.AreEqual("10", Maybe10.Convert(i => i.ToString(), "none"));
            Assert.AreEqual("none", MaybeEmpty.Convert(i => i.ToString(), "none"));
        }
Ejemplo n.º 3
0
        void Nothing_Convert_Sanity()
        {
            Maybe <int>    nI = Nothing <int> .Instance;
            Maybe <string> nS = Nothing <string> .Instance;
            Maybe <object> nO = Nothing <object> .Instance;

            Assert.Equal("success", nI.Convert((just) => "fail", () => "success"));
            Assert.Equal("success", nS.Convert((just) => "fail", () => "success"));
            Assert.Equal("success", nO.Convert((just) => "fail", () => "success"));

            Assert.Equal("success", nI.Convert((just) => "fail", "success"));
            Assert.Equal("success", nS.Convert((just) => "fail", "success"));
            Assert.Equal("success", nO.Convert((just) => "fail", "success"));
        }
Ejemplo n.º 4
0
 public static Maybe <IReportNode> ParseMaybe(this IReportParser parser, Maybe <TextParser> p)
 => p?parser.Parse(p.Value) : p.Convert <IReportNode>();
Ejemplo n.º 5
0
 protected Maybe <IReportNode> Error <T>(Maybe <T> p) => p.Convert <IReportNode>();
Ejemplo n.º 6
0
 public static IEnumerable <T> ToEnumerable <T>(this Maybe <T> maybe)
 => maybe.Convert(One, Enumerable.Empty <T>);
Ejemplo n.º 7
0
        /// <summary>
        /// Run the hosted runtime, blocking the calling thread.
        /// </summary>
        /// <returns>True if the worker stopped as planned (e.g. due to updated assemblies)</returns>
        public bool Run(Maybe<ICloudConfigurationSettings> externalRoleConfiguration)
        {
            _stoppedWaitHandle.Reset();

            // Runtime IoC Setup

            var runtimeBuilder = new ContainerBuilder();
            runtimeBuilder.RegisterModule(new CloudModule());
            runtimeBuilder.RegisterModule(externalRoleConfiguration.Convert(s =>  new CloudConfigurationModule(s), () => new CloudConfigurationModule()));
            runtimeBuilder.RegisterType<Runtime>().InstancePerDependency();

            // Run

            using (var runtimeContainer = runtimeBuilder.Build())
            {
                var log = runtimeContainer.Resolve<ILog>();

                AppDomain.CurrentDomain.UnhandledException += (sender, e) => log.ErrorFormat(
                    e.ExceptionObject as Exception,
                    "Runtime Host: An unhandled {0} exception occurred on worker {1} in a background thread. The Runtime Host will be restarted: {2}.",
                    e.ExceptionObject.GetType().Name, CloudEnvironment.PartitionKey, e.IsTerminating);

                _runtime = null;
                try
                {
                    _runtime = runtimeContainer.Resolve<Runtime>();
                    _runtime.RuntimeContainer = runtimeContainer;

                    // runtime endlessly keeps pinging queues for pending work
                    _runtime.Execute();

                    log.DebugFormat("Runtime Host: Runtime has stopped cleanly on worker {0}.",
                        CloudEnvironment.PartitionKey);
                }
                catch (TypeLoadException typeLoadException)
                {
                    log.ErrorFormat(typeLoadException, "Runtime Host: Type {0} could not be loaded. The Runtime Host will be restarted.",
                        typeLoadException.TypeName);
                }
                catch (FileLoadException fileLoadException)
                {
                    // Tentatively: referenced assembly is missing
                    log.Fatal(fileLoadException, "Runtime Host: Could not load assembly probably due to a missing reference assembly. The Runtime Host will be restarted.");
                }
                catch (SecurityException securityException)
                {
                    // Tentatively: assembly cannot be loaded due to security config
                    log.FatalFormat(securityException, "Runtime Host: Could not load assembly {0} probably due to security configuration. The Runtime Host will be restarted.",
                        securityException.FailedAssemblyInfo);
                }
                catch (TriggerRestartException)
                {
                    log.DebugFormat("Runtime Host: Triggered to stop execution on worker {0}. The Role Instance will be recycled and the Runtime Host restarted.",
                        CloudEnvironment.PartitionKey);

                    return true;
                }
                catch (ThreadAbortException)
                {
                    Thread.ResetAbort();
                    log.DebugFormat("Runtime Host: execution was aborted on worker {0}. The Runtime is stopping.", CloudEnvironment.PartitionKey);
                }
                catch (Exception ex)
                {
                    // Generic exception
                    log.ErrorFormat(ex, "Runtime Host: An unhandled {0} exception occurred on worker {1}. The Runtime Host will be restarted.",
                        ex.GetType().Name, CloudEnvironment.PartitionKey);
                }
                finally
                {
                    _stoppedWaitHandle.Set();
                    _runtime = null;
                }

                return false;
            }
        }