public void CheckMicroserviceConfigOnConfiguring()
        {
            //-- arrange

            var host    = new MicroserviceHost(CreateBootConfiguration(), new MicroserviceHostLoggerMock());
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();

            //-- assert

            var config = CreateBootConfiguration();

            handler.ContainerEventArgs.Should().NotBeNull();
            handler.ContainerEventArgs.AssemblyName.Should().Be(config.MicroserviceConfig.InjectionAdapter.Assembly);
            handler.ContainerEventArgs.Destination.Count.Should().Be(1);

            handler.FeatureLoaderEventArgsList.Should().HaveCount(
                1 + config.MicroserviceConfig.FrameworkModules.Length + config.MicroserviceConfig.ApplicationModules.Length);
            handler.FeatureLoaderEventArgsList.Should().ContainSingle(
                x => x.AssemblyName == config.MicroserviceConfig.ApplicationModules[0].Assembly);
            handler.FeatureLoaderEventArgsList.Should().ContainSingle(
                x => x.AssemblyName == config.MicroserviceConfig.ApplicationModules[1].Assembly);
            handler.FeatureLoaderEventArgsList.Should().ContainSingle(
                x => x.AssemblyName == config.MicroserviceConfig.FrameworkModules[0].Assembly);
        }
        public void CheckDefaultFeatureLoadersDiscoveredOnConfiguring()
        {
            //-- arrange

            var logger  = new MicroserviceHostLoggerMock();
            var host    = new MicroserviceHost(CreateBootConfiguration(), logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();

            //-- assert

            var logs = logger.TakeLog();

            logs.Should().Contain(new string[] {
                "FoundFeatureLoaderComponent(component=FirstFeatureLoader)",
                "FoundFeatureLoaderComponent(component=SecondFeatureLoader)",

                "FoundFeatureLoaderComponent(component=SeventhFeatureLoader)",
            });
        }
示例#3
0
        public void EmptyBootConfig_DefaultKernelFeaturesLoaded()
        {
            //-- arrange

            var bootConfig = CreateBootConfiguration(
                frameworkModules: new MicroserviceConfig.ModuleConfig[0],
                applicationModules: new MicroserviceConfig.ModuleConfig[0]);

            var assemlyLoadHandler    = new AssemblyLoadEventHandler();
            var logger                = new MicroserviceHostLoggerMock();
            var microserviceUnderTest = new MicroserviceHost(bootConfig, logger);

            microserviceUnderTest.AssemblyLoad += assemlyLoadHandler.Handle;

            var featureLog = new List <string>();

            InterceptAllFeatureLoadersLogs(featureLog);

            //-- act

            microserviceUnderTest.Configure();

            //-- assert

            featureLog.Should().Contain($"{typeof(Kernel_FeatureOne).Name}.{nameof(IFeatureLoader.ContributeComponents)}");
            featureLog.Should().Contain($"{typeof(Kernel_FeatureTwo).Name}.{nameof(IFeatureLoader.ContributeComponents)}");
            featureLog.Should().NotContain($"{typeof(Kernel_FeatureThree).Name}.{nameof(IFeatureLoader.ContributeComponents)}");
        }
        public void TryDiscoverDuplicatedFeatureLoaderOnConfiguring()
        {
            //-- arrange

            var logger  = new MicroserviceHostLoggerMock();
            var config  = CreateBootConfiguration();
            var host    = new MicroserviceHost(config, logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;
            host.AssemblyLoad += (object sender, AssemblyLoadEventArgs e) =>
            {
                if (e.ImplementedInterface == typeof(IFeatureLoader))
                {
                    if (e.AssemblyName == "FirstModuleAssembly")
                    {
                        e.Destination.Add(typeof(DuplicatedFeatureLoader));
                    }
                }
            };

            //-- act

            Action configuring = () => host.Configure();

            //-- assert

            configuring.ShouldThrow <Exception>();
        }
示例#5
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        private void RunMicroservice()
        {
            try
            {
                LogImportant($"run > {_microserviceFolderPath}");

                var bootConfig = BootConfiguration.LoadFromFiles(_microserviceFilePath, _environmentFilePath);
                bootConfig.ConfigsDirectory = _microserviceFolderPath;

                if (_noPublish)
                {
                    MapAssemblyLocationsFromSources(bootConfig);
                }

                using (var host = new MicroserviceHost(bootConfig, new MicroserviceHostLoggerMock()))
                {
                    host.Configure();
                    host.LoadAndActivate();

                    LogSuccess("Microservice is up.");
                    LogSuccess("Press ENTER to go down.");

                    Console.ReadLine();

                    host.DeactivateAndUnload();
                }
            }
            catch (Exception ex)
            {
                ReportFatalError(ex);
            }
        }
示例#6
0
        public void ModulesLoadedInOrder()
        {
            //-- arrange

            var logger     = new MicroserviceHostLoggerMock();
            var host       = new MicroserviceHost(CreateBootConfiguration(), logger);
            var handler    = new AssemblyLoadEventHandler();
            var assemblies = new List <string>();

            host.AssemblyLoad += handler.Handle;
            host.AssemblyLoad += (object sender, AssemblyLoadEventArgs e) =>
            {
                assemblies.Add(e.AssemblyName);
            };

            //-- act

            host.Configure();

            //-- assert

            assemblies.ToArray().Should().Equal(new string[] {
                "InjectionAdapter",
                "NWheels.Implementation",
                "FrameworkModule",
                "FirstModuleAssembly",
                "SecondModuleAssembly",
            });
        }
示例#7
0
        public void CanLoadInjectionAdapter()
        {
            //-- arrange

            var bootConfig = CreateBootConfiguration(
                frameworkModules: new MicroserviceConfig.ModuleConfig[0],
                applicationModules: new MicroserviceConfig.ModuleConfig[0]);

            var assemlyLoadHandler    = new AssemblyLoadEventHandler();
            var logger                = new MicroserviceHostLoggerMock();
            var microserviceUnderTest = new MicroserviceHost(bootConfig, logger);

            microserviceUnderTest.AssemblyLoad += assemlyLoadHandler.Handle;

            //-- act

            microserviceUnderTest.Configure();

            //-- assert

            assemlyLoadHandler.EventList.Count.Should().Be(2);

            assemlyLoadHandler.EventList[0].ImplementedInterface.Should().Be(typeof(IComponentContainerBuilder));
            assemlyLoadHandler.EventList[0].AssemblyName.Should().Be("InjectionAdapter");

            assemlyLoadHandler.EventList[1].ImplementedInterface.Should().Be(typeof(IFeatureLoader));
            assemlyLoadHandler.EventList[1].AssemblyName.Should().Be("NWheels.Implementation");
        }
示例#8
0
        public void InjectionAdapterCtorWithoutArgumentExceptionThrown()
        {
            //-- arrange

            var logger = new MicroserviceHostLoggerMock();
            var config = CreateBootConfiguration();

            config.MicroserviceConfig.InjectionAdapter.Assembly = "AdapterInjectionCtorWithoutArgument";
            var host    = new MicroserviceHost(config, logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;
            host.AssemblyLoad += (object sender, AssemblyLoadEventArgs e) =>
            {
                if (e.ImplementedInterface == typeof(IComponentContainerBuilder))
                {
                    if (e.AssemblyName == "AdapterInjectionCtorWithoutArgument")
                    {
                        e.Destination.Add(typeof(ComponentContainerBuilderCtorWithoutArgument));
                    }
                }
            };

            //-- act

            Action act = () => host.Configure();

            //-- assert

            act.ShouldThrow <Exception>();
        }
示例#9
0
        public void InjectionAdapterModuleFeatureLoadersWereNotLoaded()
        {
            //-- arrange

            var logger = new MicroserviceHostLoggerMock();
            var config = CreateBootConfiguration();
            var host   = new MicroserviceHost(config, logger);

            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;
            host.AssemblyLoad += (object sender, AssemblyLoadEventArgs e) =>
            {
                if ((e.AssemblyName == config.MicroserviceConfig.InjectionAdapter.Assembly &&
                     e.ImplementedInterface != typeof(IComponentContainerBuilder)) ||
                    (e.AssemblyName != config.MicroserviceConfig.InjectionAdapter.Assembly &&
                     e.ImplementedInterface == typeof(IComponentContainerBuilder)))
                {
                    throw new Exception("AssemblyLoadEventHandler.Handle check haven't passed.");
                }
            };

            //-- act

            Action act = () => host.Configure();

            //-- assert

            act.ShouldNotThrow <Exception>();
        }
示例#10
0
        public void NamedKernelModuleLoadedFirstInFrameworkModules()
        {
            //-- arrange

            var logger = new MicroserviceHostLoggerMock();
            var config = CreateBootConfiguration();

            config.MicroserviceConfig.FrameworkModules = new MicroserviceConfig.ModuleConfig[]
            {
                new MicroserviceConfig.ModuleConfig()
                {
                    Assembly = "NWheels.Implementation",
                    Features = new MicroserviceConfig.ModuleConfig.FeatureConfig[] {
                        new MicroserviceConfig.ModuleConfig.FeatureConfig()
                        {
                            Name = "NamedKernelFeatureLoader"
                        }
                    }
                }
            };
            var host    = new MicroserviceHost(config, logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += (object sender, AssemblyLoadEventArgs e) =>
            {
                if (e.ImplementedInterface == typeof(IFeatureLoader))
                {
                    if (e.AssemblyName == "NWheels.Implementation")
                    {
                        e.Destination.Add(typeof(NamedKernelFeatureLoader));
                    }
                }
            };
            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();

            //-- assert

            var logs = logger.TakeLog();

            logs.Skip(1 + 2).First().Should().Be(
                "FoundFeatureLoaderComponent(component=NamedKernelFeatureLoader)");
        }
示例#11
0
        public void GetCompileRegistredComponentAfterConfiguring()
        {
            //-- arrange

            var logger  = new MicroserviceHostLoggerMock();
            var host    = new MicroserviceHost(CreateBootConfiguration(), logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();
            var container = host.GetContainer();
            var component = container.Resolve <ICompileRegistered>();

            //-- assert

            component.Should().NotBeNull();
        }
示例#12
0
        public void TryDiscoverUnexistedFeatureLoaderOnConfiguring()
        {
            //-- arrange

            var logger = new MicroserviceHostLoggerMock();
            var config = CreateBootConfiguration();

            config.MicroserviceConfig.ApplicationModules[0].Features[0].Name = "Abracadabra";
            var host    = new MicroserviceHost(config, logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            Action configuring = () => host.Configure();

            //-- assert

            configuring.ShouldThrow <Exception>();
        }
示例#13
0
        public void InjectionAdapterLoadedFirst()
        {
            //-- arrange

            var logger  = new MicroserviceHostLoggerMock();
            var host    = new MicroserviceHost(CreateBootConfiguration(), logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();

            //-- assert

            var logs = logger.TakeLog();
            var firstLoadedComponent = logs.FirstOrDefault(x => x.StartsWith("FoundFeatureLoaderComponent"));

            firstLoadedComponent.Should().Be("FoundFeatureLoaderComponent(component=ComponentContainerBuilder)");
        }
示例#14
0
        public void CanExecuteFeatureLoadersLifecycle()
        {
            //-- arrange

            var host    = new MicroserviceHost(CreateBootConfiguration(), new MicroserviceHostLoggerMock());
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            var featureLoaderLog = new List <string>();

            AddFeatureLoaderLoggingInterceptor <FirstFeatureLoader>(featureLoaderLog);
            AddFeatureLoaderLoggingInterceptor <SecondFeatureLoader>(featureLoaderLog);

            //-- act

            host.Configure();

            //-- assert

            featureLoaderLog.Should().Equal(
                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeConfigSections)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeConfigSections)}",

                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeConfiguration)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeConfiguration)}",

                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeComponents)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeComponents)}",

                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeAdapterComponents)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeAdapterComponents)}",

                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.CompileComponents)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.CompileComponents)}",

                $"{typeof(FirstFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeCompiledComponents)}",
                $"{typeof(SecondFeatureLoader).Name}.{nameof(IFeatureLoader.ContributeCompiledComponents)}"
                );
        }
示例#15
0
        public void KernelModulesDefaultFeatureLoadersLoadedFirstAfterInjectionAdapter()
        {
            //-- arrange

            var logger  = new MicroserviceHostLoggerMock();
            var host    = new MicroserviceHost(CreateBootConfiguration(), logger);
            var handler = new AssemblyLoadEventHandler();

            host.AssemblyLoad += handler.Handle;

            //-- act

            host.Configure();

            //-- assert

            var logs = logger.TakeLog();

            logs.Skip(1).Take(2).OrderBy(x => x).Should().Equal(new string[] {
                "FoundFeatureLoaderComponent(component=CompilationFeatureLoader)",
                "FoundFeatureLoaderComponent(component=InvocationSchedulerFeatureLoader)",
            });
        }