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); }
/// <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); }
/// <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 ); }
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(); }
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(); } }