Exemple #1
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);
            }
Exemple #2
0
        public async Task RunSCLFromFile(string path)
        {
            var scl = await File.ReadAllTextAsync(path);

            TestOutputHelper.WriteLine(scl);

            var sfs = StepFactoryStore.Create();

            var stepResult = SCLParsing.TryParseStep(scl)
                             .Bind(x => x.TryFreeze(TypeReference.Any.Instance, sfs));

            if (stepResult.IsFailure)
            {
                throw new XunitException(
                          string.Join(
                              ", ",
                              stepResult.Error.GetAllErrors()
                              .Select(x => x.Message + " " + x.Location.AsString())
                              )
                          );
            }

            var monad = new StateMonad(
                TestOutputHelper.BuildLogger(),
                SCLSettings.EmptySettings,
                sfs,
                ExternalContext.Default,
                new Dictionary <string, object>()
                );

            var r = await stepResult.Value.Run <Unit>(monad, CancellationToken.None);

            r.ShouldBeSuccessful();
        }
Exemple #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
                    );
            }
Exemple #4
0
            public virtual async Task <StateMonad> GetStateMonad(
                MockRepository mockRepository,
                ILogger logger)
            {
                var externalContext = ExternalContextSetupHelper.GetExternalContext(mockRepository);

                var tStepAssembly = Assembly.GetAssembly(typeof(TStep)) !;

                var sfs = StepFactoryStoreToUse.Unwrap(
                    StepFactoryStore.Create(Settings, tStepAssembly)
                    );

                var stateMonad = new StateMonad(
                    logger,
                    Settings,
                    sfs,
                    externalContext,
                    new Dictionary <string, object>()
                    );

                foreach (var action in InitialStateActions)
                {
                    await action(stateMonad);
                }

                return(stateMonad);
            }
Exemple #5
0
 private IStateMonad CreateMonad(MockRepository repo)
 {
     return
         (new StateMonad(
              repo.OneOf <ILogger>(),
              new SCLSettings(Entity.Create()),
              StepFactoryStore.Create(Array.Empty <ConnectorData>()),
              repo.OneOf <IExternalContext>(),
              repo.OneOf <IReadOnlyDictionary <string, object> >()
              ));
 }
Exemple #6
0
 /// <summary>
 /// Creates a new SCL Runner
 /// </summary>
 public SCLRunner(
     SCLSettings settings,
     ILogger logger,
     StepFactoryStore stepFactoryStore,
     IExternalContext externalContext)
 {
     _settings         = settings;
     _logger           = logger;
     _stepFactoryStore = stepFactoryStore;
     _externalContext  = externalContext;
 }
        public static StateMonad CreateStateMonad(ILogger logger)
        {
            var repo = new MockRepository(MockBehavior.Strict);

            var stateMonad = new StateMonad(
                logger,
                SCLSettings.EmptySettings,
                StepFactoryStore.Create(),
                repo.OneOf <IExternalContext>(),
                new Dictionary <string, object>()
                );

            return(stateMonad);
        }
Exemple #8
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();
        }
        public static IStateMonad GetStateMonad(
            ITestLoggerFactory testLoggerFactory,
            IExternalProcessRunner externalProcessRunner,
            IConsole console)
        {
            var sclSettings = SettingsHelpers.CreateSCLSettings(
                new NuixSettings(
                    Constants.NuixConsoleExe,
                    new Version(8, 0),
                    true,
                    Constants.AllNuixFeatures
                    )
                );

            var sfs = StepFactoryStore.Create(
                sclSettings,
                Assembly.GetAssembly(typeof(IRubyScriptStep)) !
                );

            var fileSystem = new MockFileSystem(
                new Dictionary <string, MockFileData>()
            {
                { NuixConnectionHelper.NuixGeneralScriptName, "Ultimate Nuix Script" }
            },
                AppContext.BaseDirectory
                );

            var monad = new StateMonad(
                testLoggerFactory.CreateLogger("Test"),
                sclSettings,
                sfs,
                new ExternalContext(
                    externalProcessRunner,
                    console,
                    (ConnectorInjection.FileSystemKey, fileSystem)
                    ),
                new Dictionary <string, object>()
                );

            return(monad);
        }
Exemple #10
0
            /// <inheritdoc />
            public override async Task <IStep> GetStepAsync(ITestOutputHelper testOutputHelper)
            {
                await Task.CompletedTask;

                var tStepAssembly = Assembly.GetAssembly(typeof(TStep)) !;

                var sfs = StepFactoryStoreToUse.Unwrap(
                    StepFactoryStore.Create(Settings, tStepAssembly)
                    );

                testOutputHelper.WriteLine(SCL);

                var deserializeResult = SCLParsing.TryParseStep(SCL);

                deserializeResult.ShouldBeSuccessful();

                var freezeResult = deserializeResult.Value.TryFreeze(TypeReference.Any.Instance, sfs);

                freezeResult.ShouldBeSuccessful();

                return(freezeResult.Value);
            }
Exemple #11
0
            /// <inheritdoc />
            public override async Task <IStep> GetStepAsync(ITestOutputHelper testOutputHelper)
            {
                await Task.CompletedTask;
                var yaml = Steps.Serialize();

                testOutputHelper.WriteLine(yaml);

                var sfs = StepFactoryStore.Create(
                    Settings,
                    Assembly.GetAssembly(typeof(TStep)) !,
                    Assembly.GetAssembly(typeof(DeleteItem)) !
                    );

                var deserializedStep = SCLParsing.TryParseStep(yaml);

                deserializedStep.ShouldBeSuccessful();

                var unfrozenStep = deserializedStep.Value.TryFreeze(TypeReference.Any.Instance, sfs);

                unfrozenStep.ShouldBeSuccessful();

                return(unfrozenStep.Value);
            }
Exemple #12
0
 public static T WithStepFactoryStore <T>(this T cws, StepFactoryStore stepFactoryStore)
     where T : ICaseThatExecutes
 {
     cws.StepFactoryStoreToUse = stepFactoryStore;
     return(cws);
 }
Exemple #13
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();
        }
    }