Exemple #1
0
        public async Task Dogfeed_ExistingUnhealthyInstances_DestroysUnhealthyInstances()
        {
            //Arrange
            var fakeMediator = Substitute.For <IMediator>();

            FakeOutValidSupportedPlans(fakeMediator);
            FakeOutNewlyCreatedInstance(fakeMediator);

            fakeMediator
            .Send(Arg.Any <GetLoadBalancerByNameQuery>())
            .Returns(
                new LoadBalancer()
            {
                InstanceHealthSummary = new List <InstanceHealthSummary>()
                {
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "unhealthy-instance-1",
                        InstanceHealth = InstanceHealthState.Unhealthy
                    },
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "unhealthy-instance-2",
                        InstanceHealth = InstanceHealthState.Unhealthy
                    },
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "new-instance",
                        InstanceHealth = InstanceHealthState.Healthy
                    }
                }
            });

            await using var environment = await IntegrationTestEnvironment.CreateAsync(new EnvironmentSetupOptions ()
            {
                IocConfiguration = services =>
                {
                    IocRegistry.ConfigureDogfeeding(services);
                    FakeOutMinimalServices(services);

                    services.AddSingleton(fakeMediator);
                }
            });

            var dogfeedService = environment.ServiceProvider.GetRequiredService <IDogfeedService>();

            //Act
            await dogfeedService.DogfeedAsync();

            //Assert
            await fakeMediator
            .Received()
            .Send(Arg.Is <DeleteInstanceByNameCommand>(
                      arg => arg.Name == "unhealthy-instance-1"));

            await fakeMediator
            .Received()
            .Send(Arg.Is <DeleteInstanceByNameCommand>(
                      arg => arg.Name == "unhealthy-instance-2"));
        }
Exemple #2
0
        public async Task Dogfeed_AllDetailsGiven_AssignsStaticIpAddressToNewInstance()
        {
            //Arrange
            var fakeMediator = Substitute.For <IMediator>();

            FakeOutValidSupportedPlans(fakeMediator);
            FakeOutNewlyCreatedInstance(fakeMediator);

            fakeMediator
            .Send(Arg.Any <GetAllInstancesQuery>())
            .Returns(
                new[]
            {
                new Instance()
                {
                    Name = "new-instance"
                }
            });

            fakeMediator
            .Send(Arg.Any <GetLoadBalancerByNameQuery>())
            .Returns(
                new LoadBalancer()
            {
                InstanceHealthSummary = new List <InstanceHealthSummary>()
                {
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "new-instance",
                        InstanceHealth = InstanceHealthState.Healthy
                    }
                }
            });

            await using var environment = await IntegrationTestEnvironment.CreateAsync(new EnvironmentSetupOptions ()
            {
                IocConfiguration = services =>
                {
                    IocRegistry.ConfigureDogfeeding(services);
                    FakeOutMinimalServices(services);

                    services.AddSingleton(fakeMediator);
                }
            });

            var dogfeedService = environment.ServiceProvider.GetRequiredService <IDogfeedService>();

            //Act
            await dogfeedService.DogfeedAsync();

            //Assert
            await fakeMediator
            .Received()
            .Send(Arg.Is <AssignStaticIpToInstanceCommand>(
                      arg => arg.InstanceName == "new-instance" && arg.StaticIpName == "main-ip"));
        }
Exemple #3
0
        public void ConfigureServices(IServiceCollection services)
        {
            IocRegistry.Register(
                services,
                Configuration);

            ConfigureNGrok(services);
            ConfigureAspNetCore(services);
            ConfigureSwagger(services);
            ConfigureAuthentication(services);
        }
Exemple #4
0
        public async Task Dogfeed_ExceptionThrownWhileAttachingNewInstanceToLoadBalancer_CleansUpNewInstance()
        {
            //Arrange
            var fakeMediator = Substitute.For <IMediator>();

            FakeOutValidSupportedPlans(fakeMediator);
            FakeOutNewlyCreatedInstance(fakeMediator);

            fakeMediator
            .Send(Arg.Any <GetLoadBalancerByNameQuery>())
            .Returns(
                new LoadBalancer()
            {
                InstanceHealthSummary = new List <InstanceHealthSummary>()
                {
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "new-instance",
                        InstanceHealth = InstanceHealthState.Healthy
                    }
                }
            });

            fakeMediator
            .Send(Arg.Any <AttachInstancesToLoadBalancerCommand>())
            .Throws(new TestException());

            await using var environment = await IntegrationTestEnvironment.CreateAsync(new EnvironmentSetupOptions ()
            {
                IocConfiguration = services =>
                {
                    IocRegistry.ConfigureDogfeeding(services);
                    FakeOutMinimalServices(services);

                    services.AddSingleton(fakeMediator);
                }
            });

            var dogfeedService = environment.ServiceProvider.GetRequiredService <IDogfeedService>();

            //Act
            var exception = await Assert.ThrowsExceptionAsync <TestException>(async() =>
                                                                              await dogfeedService.DogfeedAsync());

            //Assert
            Assert.IsNotNull(exception);

            await fakeMediator
            .Received()
            .Send(Arg.Is <DeleteInstanceByNameCommand>(
                      arg => arg.Name == "new-instance"));
        }
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            var container = new IocContainer();

            IocRegistry.Register(container);
            IDependencyResolver resolver = DependencyResolver.Current;

            DependencyResolver.SetResolver(new IocDependencyResolver(container, resolver));
        }
        public static void ConfigureServicesForTesting(
            IServiceCollection services)
        {
            RemoveTimedHostedServices(services);
            ConfigureAmazonLightsailDefaultFakes(services);
            ConfigureAmazonIdentityDefaultFakes(services);
            ConfigureFakeDelay(services);

            IocRegistry.ConfigureMediatr(services,
                                         typeof(Startup).Assembly,
                                         typeof(TestServiceProviderFactory).Assembly);

            services.AddScoped <Mediator>();
        }
Exemple #7
0
        public static IHostBuilder CreateDoggerHostBuilder(IConfiguration?configuration, string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseSerilog()
        .ConfigureWebHostDefaults(webBuilder =>
        {
            if (configuration != null)
            {
                webBuilder.UseConfiguration(configuration);
            }

            webBuilder.UseStartup <Startup>();
            webBuilder.UseNGrok(new NgrokOptions()
            {
                Disable         = !Debugger.IsAttached,
                ShowNGrokWindow = false
            });
        })
        .ConfigureServices((context, services) =>
        {
            IocRegistry.RegisterDelayedHostedServices(services);
        });
Exemple #8
0
        private static async Task DogfeedAsync(IConfiguration configuration)
        {
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton(configuration);

            IocRegistry.Register(
                serviceCollection,
                configuration);

            IocRegistry.ConfigureDogfeeding(
                serviceCollection);

            await using var serviceProvider = serviceCollection.BuildServiceProvider();

            using var scope = serviceProvider.CreateScope();
            var dogfeedService = scope
                                 .ServiceProvider
                                 .GetRequiredService <IDogfeedService>();

            await dogfeedService.DogfeedAsync();
        }
Exemple #9
0
 public static IContainer Initialize()
 {
     _container = new Container(c => c.AddRegistry <IocRegistry>());
     IocRegistry.RegisterMappings(_container);
     return(_container);
 }
Exemple #10
0
        public async Task Dogfeed_NewInstanceHealthTimeoutExceeded_ThrowsException()
        {
            //Arrange
            var fakeMediator = Substitute.For <IMediator>();

            FakeOutValidSupportedPlans(fakeMediator);
            FakeOutNewlyCreatedInstance(fakeMediator);

            fakeMediator
            .Send(Arg.Any <GetLoadBalancerByNameQuery>())
            .Returns(
                new LoadBalancer()
            {
                InstanceHealthSummary = new List <InstanceHealthSummary>()
                {
                    new InstanceHealthSummary()
                    {
                        InstanceName   = "new-instance",
                        InstanceHealth = InstanceHealthState.Healthy
                    }
                }
            });

            var fakeStopwatchWithHighElapsedTime = Substitute.For <IStopwatch>();

            fakeStopwatchWithHighElapsedTime
            .Elapsed
            .Returns(TimeSpan.FromMinutes(31));

            var fakeTime = Substitute.For <ITime>();

            fakeTime
            .StartStopwatch()
            .Returns(fakeStopwatchWithHighElapsedTime);

            await using var environment = await IntegrationTestEnvironment.CreateAsync(new EnvironmentSetupOptions ()
            {
                IocConfiguration = services =>
                {
                    IocRegistry.ConfigureDogfeeding(services);
                    FakeOutMinimalServices(services);

                    services.AddSingleton(fakeMediator);
                    services.AddSingleton(fakeTime);
                }
            });

            var dogfeedService = environment.ServiceProvider.GetRequiredService <IDogfeedService>();

            //Act
            var exception = await Assert.ThrowsExceptionAsync <NewInstanceHealthTimeoutException>(async() =>
                                                                                                  await dogfeedService.DogfeedAsync());

            //Assert
            Assert.IsNotNull(exception);

            await fakeMediator
            .Received()
            .Send(Arg.Is <DeleteInstanceByNameCommand>(
                      arg => arg.Name == "new-instance"));
        }