Exemplo n.º 1
0
        /// <summary>
        /// Finds stage runners by using the supplied provider.
        /// </summary>
        /// <param name="provider">The provider used to find stage runners.</param>
        /// <returns>The builder.</returns>
        public IRunnerBuilder FindStageRunners(IStageComponentProvider provider)
        {
            // Just add for now, will use to find components when building runner
            _providers.Add(provider ?? throw new ArgumentNullException(nameof(provider)));

            return(this);
        }
Exemplo n.º 2
0
        public void FindStageRunnersWithSuccess(IRunnerBuilder builder, IStageComponentProvider provider, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a stage component provider"
            .x(() => provider = _mockProvider.Object);

            "When finding stage runners using a provider"
            .x(() => e = Record.Exception(() => builder.FindStageRunners(provider)));

            "Then the find method should succeed"
            .x(() => e.Should().BeNull());
        }
Exemplo n.º 3
0
        public void FindStageRunnersWithNullProvider(IRunnerBuilder builder, IStageComponentProvider provider, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a null provider"
            .x(() => provider.Should().BeNull());

            "When finding stage runners using a provider"
            .x(() => e = Record.Exception(() => builder.FindStageRunners(provider)));

            "Then the find method should throw an exception"
            .x(() => e.Should().NotBeNull().And.Subject.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("provider"));
        }
Exemplo n.º 4
0
 /// <summary>
 /// Constructs an instance of the <see cref="App"/> class with its dependencies.
 /// </summary>
 /// <param name="generator">The unique ID generator.</param>
 /// <param name="builder">The migration runner builder.</param>
 /// <param name="provider">The provider used to find stage runners.</param>
 /// <param name="modelProvider">The provider used to find model provider.</param>
 /// <param name="pluginHost">The stage runner plugin host.</param>
 /// <param name="options">The command line options.</param>
 /// <param name="loggingService">The logging service.</param>
 /// <param name="runnerLogger">The logger for the runner.</param>
 /// <param name="logger">The logger for the app.</param>
 public App(
     IUniqueIdGenerator generator,
     IRunnerBuilder builder,
     IStageComponentProvider provider,
     PluginModelComponentProvider modelProvider,
     IPluginHost <IRunnerComponent> pluginHost,
     IAppOptionsService options,
     ILoggingService loggingService,
     ILogger <Runner.Engine.Runner> runnerLogger,
     ILogger <App> logger)
 {
     // Validate and set members
     _generator      = generator ?? throw new ArgumentNullException(nameof(generator));
     _builder        = builder ?? throw new ArgumentNullException(nameof(builder));
     _provider       = provider ?? throw new ArgumentNullException(nameof(provider));
     _modelProvider  = modelProvider ?? throw new ArgumentNullException(nameof(modelProvider));
     _pluginHost     = pluginHost ?? throw new ArgumentNullException(nameof(pluginHost));
     _options        = options ?? throw new ArgumentNullException(nameof(options));
     _loggingService = loggingService ?? throw new ArgumentNullException(nameof(loggingService));
     _runnerLogger   = runnerLogger ?? throw new ArgumentNullException(nameof(runnerLogger));
     _logger         = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Exemplo n.º 5
0
        public void BuildWithModelFunction(IRunnerBuilder builder, IRunner runner, IStageComponentProvider provider, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a stage component provider"
            .x(() => provider = _mockProvider.Object);

            "When building the runner"
            .x(() => e = Record.Exception(() => runner = builder.FindStageRunners(provider).SetModel(() => _mockModel.Object).Build()));

            "Then the build method should succeed"
            .x(() => e.Should().BeNull());

            "And the model should have been set by the model function"
            .x(() =>
            {
                runner.RunState.Should().NotBeNull();
                runner.RunState.Configuration.Should().NotBeNull();
                runner.RunState.Model.Should().BeEquivalentTo(_mockModel.Object);
            });
        }
Exemplo n.º 6
0
        public void BuildWithSkipFunction(IRunnerBuilder builder, IRunner runner, IStageComponentProvider provider, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a stage component provider"
            .x(() => provider = _mockProvider.Object);

            "When building the runner"
            .x(() => e = Record.Exception(() => runner = builder.FindStageRunners(provider).SkipStageRunner(r => (r.Stages & Stages.Discover) == Stages.Discover ? true : false).Build()));

            "Then the build method should succeed"
            .x(() => e.Should().BeNull());

            "And the Discover stage runner only should be set to skip execution"
            .x(() =>
            {
                runner.RunState.Should().NotBeNull();
                runner.RunState.Configuration.Should().NotBeNull();
                runner.RunState.Configuration.StageRunners.Should().NotBeNull().And.Subject.Should().HaveCount(4);
                runner.RunState.Configuration.StageRunners.Where(r => r.Skip && (r.Stages & Stages.Discover) == Stages.Discover).Should().HaveCount(1);
                runner.RunState.Configuration.StageRunners.Where(r => !r.Skip && (r.Stages & Stages.Discover) != Stages.Discover).Should().HaveCount(3);
            });
        }
Exemplo n.º 7
0
        public void BuildWithPriorityFunction(IRunnerBuilder builder, IRunner runner, IStageComponentProvider provider, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a stage component provider"
            .x(() => provider = _mockProvider.Object);

            "When building the runner"
            .x(() => e = Record.Exception(() => runner = builder.FindStageRunners(provider).SetStageRunnerPriority(r => (r.Stages & Stages.Discover) == Stages.Discover ? 100 : 10).Build()));

            "Then the build method should succeed"
            .x(() => e.Should().BeNull());

            "And there should be 4 stage runners found in config with correct priorities"
            .x(() =>
            {
                runner.RunState.Should().NotBeNull();
                runner.RunState.Configuration.Should().NotBeNull();
                runner.RunState.Configuration.StageRunners.Should().NotBeNull().And.Subject.Should().HaveCount(4);
                runner.RunState.Configuration.StageRunners.Where(r => r.Priority == 100 && (r.Stages & Stages.Discover) == Stages.Discover).Should().HaveCount(1);
                runner.RunState.Configuration.StageRunners.Where(r => r.Priority == 10 && (r.Stages & Stages.Discover) != Stages.Discover).Should().HaveCount(3);
            });
        }
Exemplo n.º 8
0
        public void BuildWithStageComponentProviderTwice(IRunnerBuilder builder, IRunner runner, IStageComponentProvider provider1, IStageComponentProvider provider2, Exception e)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a stage component provider"
            .x(() => provider1 = _mockProvider.Object);

            "And a second stage component provider"
            .x(() => provider2 = _mockProvider.Object);

            "When building the runner"
            .x(() => e = Record.Exception(() => runner = builder.FindStageRunners(provider1).FindStageRunners(provider2).Build()));

            "Then the build method should succeed"
            .x(() => e.Should().BeNull());

            "And there should be 8 stage runners found in config"
            .x(() =>
            {
                runner.RunState.Should().NotBeNull();
                runner.RunState.Configuration.Should().NotBeNull();
                runner.RunState.Configuration.StageRunners.Should().NotBeNull().And.Subject.Should().HaveCount(8);
            });
        }
Exemplo n.º 9
0
        public void FindStageRunnersWithTwoProvidersWithSuccess(IRunnerBuilder builder, IStageComponentProvider provider1, IStageComponentProvider provider2, Exception e1, Exception e2)
        {
            "Given a runner builder"
            .x(() => builder = new RunnerBuilder());

            "And a first stage component provider"
            .x(() => provider1 = _mockProvider.Object);

            "And a second stage component provider"
            .x(() => provider2 = new Mock <IStageComponentProvider>().Object);

            "When finding stage runners using a provider"
            .x(() => e1 = Record.Exception(() => builder.FindStageRunners(provider1)));

            "And finding stage runners using a second instance of a provider"
            .x(() => e2 = Record.Exception(() => builder.FindStageRunners(provider2)));

            "Then the first find method should succeed"
            .x(() => e1.Should().BeNull());

            "And the second find method should succeed"
            .x(() => e2.Should().BeNull());
        }