private static void ConfigureServices(IServiceCollection services, IHttpStatusResultService httpStatusResultService, string databaseFile)
        {
            var connectionString = $"Data Source={databaseFile};cache=shared";

            var readerConnection = new SqliteConnection(connectionString);

            services.AddSingleton <IDbReader>(new Db(readerConnection));

            services.AddSingleton(provider => httpStatusResultService ?? new HttpStatusResultNullService());
            services.AddSingleton <IIterationResultRepository>(CreateIterationResultRepository(databaseFile, out var dbWriter));

            services.AddSingleton <IDbWriter>(dbWriter);

            services.AddSingleton <IHttpStatusResultStatisticsFactory, HttpStatusResultStatisticsFactory>();
            services.AddSingleton <IResultRepository, ResultRepository>();
            services.AddSingleton <IRequestResultRepository, RequestResultRepository>();
            services.AddSingleton <ITestResultRepository, TestResultRepository>();

            services.AddSingleton <IHostedService, ExecuteTestsService>();

            services.AddSingleton <ISimpleTransaction, SimpleTransaction>();

            services.AddSingleton <ISaveIterationQueue, SaveIterationQueueQueue>();
            services.AddSingleton <IHostedService, SaveIterationResultBackgroundService>(ioc =>
            {
                var transaction = ioc.GetRequiredService <ISimpleTransaction>();
                var repo        = ioc.GetRequiredService <IIterationResultRepository>();
                var queue       = ioc.GetRequiredService <ISaveIterationQueue>();
                return(new SaveIterationResultBackgroundService(transaction, repo, queue, "File"));
            });

            Domain.GraphStats.ConfigureGraphStats.ConfigureServices(services);
        }
Beispiel #2
0
        internal static Task StartAsync
        (
            ILoadTestExecution loadTestExecution,
            IReadOnlyList <ISchedule> schedules,
            IHttpStatusResultService httpStatusResultService,
            CancellationToken cancellationToken,
            ClientOptions options
        )
        {
            var host = new WebHostBuilder()
                       .UseKestrel()
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseStartup <Startup>()
                       .UseUrls("http://localhost:5000")
                       .ConfigureServices(services =>
            {
                ConfigureServices(services, httpStatusResultService, options.DatabaseFile);

                services.AddSingleton <ICancelTokenReference>(new CancelTokenReference(cancellationToken));

                services.AddSingleton(loadTestExecution);
                services.AddSingleton(schedules);
                services.AddSingleton(options);
            })
                       .Build();

            var stopWebUi = new CancellationTokenSource();

            cancellationToken.Register(Cancel(stopWebUi));

            return(host.RunAsync(stopWebUi.Token));
        }
 public ResultRepository(
     IDbReader dbConnection,
     IHttpStatusResultStatisticsFactory statisticsFactory,
     IHttpStatusResultService service,
     IRequestResultRepository requestResultRepository,
     ITestResultRepository testResultRepository)
 {
     _dbConnection            = dbConnection.Connection;
     _statisticsFactory       = statisticsFactory;
     _service                 = service;
     _requestResultRepository = requestResultRepository;
     _testResultRepository    = testResultRepository;
 }
Beispiel #4
0
        private static void ConfigureServices(IServiceCollection services, IHttpStatusResultService httpStatusResultService)
        {
            var now = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");

            services.AddSingleton <IDbConnection>(new SqliteConnection($"Data Source=Test_{now}.db"));

            services.AddSingleton(provider => httpStatusResultService ?? new HttpStatusResultNullService());
            services.AddSingleton <IIterationResultRepository, IterationResultRepository>();
            services.AddSingleton <IHttpStatusResultStatisticsFactory, HttpStatusResultStatisticsFactory>();
            services.AddSingleton <IHttpStatusResultRepository, HttpStatusResultRepository>();

            Domain.GraphStats.ConfigureGraphStats.ConfigureServices(services);
        }
Beispiel #5
0
        private static void ConfigureServices(IServiceCollection services, IHttpStatusResultService httpStatusResultService, string databaseFile)
        {
            var connectionString = $"Data Source={databaseFile};cache=shared";

            var readerConnection = new SqliteConnection(connectionString);

            services.AddSingleton <IDbReader>(new Db(readerConnection));

            var iterationResultRepository = CreateFileRepository(databaseFile);

            services.AddSingleton(provider => httpStatusResultService ?? new HttpStatusResultNullService());
            services.AddSingleton <IIterationResultRepository>(iterationResultRepository);
            services.AddSingleton <IHttpStatusResultStatisticsFactory, HttpStatusResultStatisticsFactory>();
            services.AddSingleton <IHttpStatusResultRepository, HttpStatusResultRepository>();

            services.AddSingleton <IHostedService, ExecuteTestsService>();

            var inMemorySave = new SaveIterationResultBackgroundService(iterationResultRepository, "File");

            services.AddSingleton <ISaveIterationResult>(inMemorySave);
            services.AddSingleton <IHostedService>(inMemorySave);

            Domain.GraphStats.ConfigureGraphStats.ConfigureServices(services);
        }
Beispiel #6
0
        internal static void Start(ILoadTestExecution loadTestExecution, IHttpStatusResultService httpStatusResultService, CancellationToken?cancellationToken = null)
        {
            var host = new WebHostBuilder()
                       .UseKestrel()
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseStartup <Startup>()
                       .UseUrls("http://localhost:5000")
                       .ConfigureServices(services =>
            {
                ConfigureServices(services, httpStatusResultService);

                InitializeWithServices(loadTestExecution, services);
            })
                       .Build();

            if (cancellationToken.HasValue)
            {
                host.Run(cancellationToken.Value);
            }
            else
            {
                host.Run();
            }
        }
Beispiel #7
0
        public static void Run(ILoadTestExecution testExecution, IReadOnlyList <ISchedule> schedule, IHttpStatusResultService httpStatusResultService, string[] args)
        {
            var config = new ConfigurationBuilder()
                         .AddCommandLine(args)
                         .Build();

            Patch1.Frequency = config.GetValue <long?>("frequency");

            var clientOptions = new ClientOptions(config.GetValue <string>("databaseFile"));

            Run(testExecution, schedule, httpStatusResultService, clientOptions);
        }
Beispiel #8
0
        public static void Run(ILoadTestExecution testExecution, IReadOnlyList <ISchedule> schedule, IHttpStatusResultService httpStatusResultService, ClientOptions clientOptions)
        {
            var cancellationSource = new CancellationTokenSource();

            Console.CancelKeyPress += ((sender, cancelEventArgs) =>
            {
                cancellationSource.Cancel();
                cancelEventArgs.Cancel = true;
            });

            //var t = new Timer(_ => { cancellationSource.Cancel(); }, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(0));

            var webUi = Program.StartAsync(testExecution, schedule, httpStatusResultService, cancellationSource.Token, clientOptions);

            Task.WaitAll(webUi);
        }
Beispiel #9
0
 public RequestResultRepository(IDbReader dbConnection, IHttpStatusResultService service)
 {
     _dbConnection = dbConnection.Connection;
     _service      = service;
 }
Beispiel #10
0
 public HttpStatusResultRepository(IDbConnection dbConnection, IHttpStatusResultStatisticsFactory statisticsFactory, IHttpStatusResultService service)
 {
     _dbConnection      = dbConnection;
     _statisticsFactory = statisticsFactory;
     _service           = service;
 }
Beispiel #11
0
        public static void Run(ILoadTestExecution testExecution, IReadOnlyList <ISchedule> schedule, IHttpStatusResultService httpStatusResultService)
        {
            var cancellationSource = new CancellationTokenSource();

            Console.CancelKeyPress += ((sender, args) =>
            {
                cancellationSource.Cancel();
                args.Cancel = true;
            });

            var options = new ParallelOptions
            {
                CancellationToken = cancellationSource.Token
            };

            Parallel.Invoke
            (
                options,
                () => testExecution.Execute(schedule, cancellationSource.Token),
                () => Program.Start(testExecution, httpStatusResultService, cancellationSource.Token)
            );
        }