Beispiel #1
0
        public async Task <int> ValidateSCL(
            CancellationToken cancellationToken,
            [Operand(Description = "SCL string")] string scl)
        {
            if (string.IsNullOrWhiteSpace(scl))
            {
                throw new CommandLineArgumentException("Please provide a valid SCL string.");
            }

            var stepFactoryStore =
                await _connectorManager.GetStepFactoryStoreAsync(cancellationToken);

            var stepResult = SCLParsing.TryParseStep(scl)
                             .Bind(x => x.TryFreeze(TypeReference.Any.Instance, stepFactoryStore))
                             .Map(SCLRunner.ConvertToUnitStep);

            if (stepResult.IsSuccess)
            {
                _logger.LogInformation("Successfully validated SCL");

                return(Success);
            }

            SCLRunner.LogError(_logger, stepResult.Error);

            return(Failure);
        }
Beispiel #2
0
            /// <inheritdoc />
            public async Task RunAsync(ITestOutputHelper testOutputHelper)
            {
                var spf = StepFactoryStore.Create();

                var loggerFactory = TestLoggerFactory.Create();

                loggerFactory.AddXunit(testOutputHelper);

                var logger = loggerFactory.CreateLogger("Test");
                var repo   = new MockRepository(MockBehavior.Strict);

                var context = ExternalContextSetupHelper.GetExternalContext(repo);

                var sclRunner = new SCLRunner(
                    SCLSettings.EmptySettings,
                    logger,
                    spf,
                    context
                    );

                var r = await sclRunner.RunSequenceFromTextAsync(
                    SCL,
                    new Dictionary <string, object>(),
                    CancellationToken.None
                    );

                r.ShouldBeSuccessful();

                loggerFactory.Sink.LogEntries.Should().SatisfyRespectively(ExpectedLogs);
            }
Beispiel #3
0
            /// <inheritdoc />
            public async Task RunAsync(ITestOutputHelper testOutputHelper)
            {
                testOutputHelper.WriteLine(SCL);

                var stepFactoryStore = StepFactoryStore.Create();
                var loggerFactory    = TestLoggerFactory.Create();

                loggerFactory.AddXunit(testOutputHelper);
                var repository = new MockRepository(MockBehavior.Strict);

                var externalContext = ExternalContextSetupHelper.GetExternalContext(repository);

                var runner = new SCLRunner(
                    SCLSettings.EmptySettings,
                    loggerFactory.CreateLogger("Test"),
                    stepFactoryStore,
                    externalContext
                    );

                var result = await runner.RunSequenceFromTextAsync(
                    SCL,
                    new Dictionary <string, object>(),
                    CancellationToken.None
                    );

                result.ShouldBeSuccessful();

                LogChecker.CheckLoggedValues(
                    loggerFactory,
                    LogLevel.Information,
                    ExpectedLoggedValues
                    );
            }
Beispiel #4
0
        public async Task RunSCLSequence()
        {
            const string scl = @"
- <root> = 'Documentation'
- <docs> = GenerateDocumentation

# Create a directory for each connector
- <docs>
  | ArrayDistinct (From <Entity> 'Directory')
  | ForEach (
      CreateDirectory (PathCombine [<root>, (From <Entity> 'Directory')])
    )

# Export all steps to .\<root>\ConnectorName\StepName.md
- <docs>
  | Foreach (
      FileWrite
        (From <Entity> 'FileText')
        (PathCombine [<root>, (From <Entity> 'Directory'), (From <Entity> 'FileName')])
    )

";

            var logger =
                TestOutputHelper.BuildLogger(new LoggingConfig()
            {
                LogLevel = LogLevel.Information
            });

            var sfs = StepFactoryStore.Create();

            var runner = new SCLRunner(
                SCLSettings.EmptySettings,
                logger,
                sfs,
                ExternalContext.Default
                );

            var r = await runner.RunSequenceFromTextAsync(
                scl,
                new Dictionary <string, object>(),
                CancellationToken.None
                );

            r.ShouldBeSuccessful();
        }
Beispiel #5
0
        public async Task TestConnector()
        {
            var logger = new TestOutputLogger("Step Logger", TestOutputHelper);

            var absolutePath = PluginLoadContext.GetAbsolutePath(RelativePath);

            var assembly = PluginLoadContext.LoadPlugin(
                absolutePath,
                logger
                );

            assembly.ShouldBeSuccessful();

            var stepTypes = assembly.Value.GetTypes()
                            .Where(x => typeof(IStep).IsAssignableFrom(x))
                            .ToList();

            foreach (var type in stepTypes)
            {
                TestOutputHelper.WriteLine(type.Name);
            }

            var stepFactoryStore = StepFactoryStore.Create(
                new ConnectorData(ConnectorSettings.DefaultForAssembly(assembly.Value), assembly.Value)
                );

            var injectedContextsResult = stepFactoryStore.TryGetInjectedContexts(
                new SCLSettings(
                    Entity.Create(
                        new List <(EntityPropertyKey key, object?value)>()
            {
                (new EntityPropertyKey(new[] { "connectors", "example", "colorSource" }),
                 "Red")
            }
                        )
                    )
                );

            injectedContextsResult.ShouldBeSuccessful();

            var externalContext = ExternalContext.Default with
            {
                InjectedContexts = injectedContextsResult.Value
            };

            var runner = new SCLRunner(
                SCLSettings.EmptySettings,
                logger,
                stepFactoryStore,
                externalContext
                );

            var r = await
                    runner.RunSequenceFromTextAsync(
                "Log (GetTestString)",
                new Dictionary <string, object>(),
                CancellationToken.None
                );

            r.ShouldBeSuccessful();
        }
    }