public Process.Process BuildExample() { Guid refGetCurrencyRate = Guid.Empty; ProcessBuilder builder = new ProcessBuilder(); builder .ForceUseTestOptions() // Step 1 Getting USD rates .AddStep("http://api.fixer.io/latest?base=USD&symbols=GBP,BRL", out refGetCurrencyRate) // Calling a api using the result of the first step .AddStep("http://soa-net.test/api/calculate-total/", HttpMethod.Post, () => { var step1 = builder.GetDynamicStep(refGetCurrencyRate); var currencyRate = step1.Result.Data; return(new { usd_brl = Convert.ToDecimal(currencyRate.rates.BRL.ToString()) }); }); return(builder.Build()); }
public Process.Process BuildExample() { Guid asyncStepReference = Guid.Empty; ProcessBuilder builder = new ProcessBuilder(); builder .ForceUseTestOptions() .AddAsyncSteps( out asyncStepReference, builder.CreateHttpStep("http://api.fixer.io/latest?base=USD&symbols=GBP", HttpMethod.Get, null, StepOptions.Test), builder.CreateHttpStep("http://api.fixer.io/latest?base=USD&symbols=BRL", HttpMethod.Get, null, StepOptions.Test) ) .AddStep("http://soa-net.test/api/compare-rates/", HttpMethod.Post, () => { var asyncSteps = builder.GetStep(asyncStepReference) as AsyncSteps; var gbp = asyncSteps.AsyncStepsList.ElementAt(0) as HttpStep; var brl = asyncSteps.AsyncStepsList.ElementAt(1) as HttpStep; return(new { rate1 = Convert.ToDecimal(gbp.Result.Data.rates.GBP.ToString()), rate2 = Convert.ToDecimal(brl.Result.Data.rates.BRL.ToString()) }); }); return(builder.Build()); }
public void InputAndTwoMutators() { var topic = TestExecuter.GetTopic(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(topic), Mutators = new MutatorList() { new CustomMutator(topic, null) { Then = (proc, row) => true, }, new CustomMutator(topic, null) { Then = (proc, row) => true, }, }, }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is CustomMutator); Assert.IsTrue((process as CustomMutator).InputProcess is CustomMutator); Assert.IsNotNull(((process as CustomMutator).InputProcess as CustomMutator).InputProcess); }
public void InputAndTwoMutators() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(context), Mutators = new MutatorList() { new CustomMutator(context) { Action = row => true, }, new CustomMutator(context) { Action = row => true, }, }, }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is CustomMutator); Assert.IsTrue((process as CustomMutator).InputProcess is CustomMutator); Assert.IsNotNull(((process as CustomMutator).InputProcess as CustomMutator).InputProcess); }
public override async Task ExecuteAsync() { var jenv = new SandboxBuilder(); if (Options.ForbidSystemCall) { jenv.ForbidSysCall(); } if (Options.TimeLimit > 0) { jenv.UserTime(Options.TimeLimit); } if (Options.MemoryLimit > 0) { jenv.Memory(Options.MemoryLimit); } if (Options.ProcessCountLimit > 0) { jenv.ProcessCount(Options.ProcessCountLimit); } var penv = new ProcessBuilder(); penv.UseExecutable(Options.ExecutableFile); if (Options.Arguments != null) { penv.UseArgument(Options.Arguments); } if (Options.WorkingDirectory != null) { penv.UseWorkingDir(Options.WorkingDirectory); } if (IOPorts.Count > 0) { penv.UseStdStream(true, true, true); } var cts = new CancellationTokenSource(); using (var jobObj = jenv.Build()) using (var proc = penv.Build(jobObj)) { IOPort = proc; var stats = IOPorts.Concat(Middlewares) .Select(func => func(cts.Token)).ToArray(); proc.WaitForExit(Math.Max(Options.TimeLimit * 10, 10000)); jobObj.Terminate(unchecked ((uint)Interop.ErrorCode.QuotaExceeded)); proc.ClosePipes(); cts.Cancel(); await Task.WhenAll(stats); IOPort = null; } }
/// <summary> /// Tries to initialize the definition /// </summary> /// <param name="errors"></param> /// <returns></returns> public bool TryInitialize(out string[] errors) { errors = new string[] {}; IReadOnlyList <ProcessValidationResult> validationResult; if (!ProcessBuilder.TryValidate(out validationResult)) { errors = validationResult.Select(r => $"{r.Artifact}-({r.ArtifactId}):{r.Message}").ToArray(); return(false); } _definition = ProcessBuilder.Build(); _definition.Id = Id; return(true); }
public void InputOnly() { var topic = TestExecuter.GetTopic(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(topic), Mutators = new MutatorList(), }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is AbstractProducer); }
public void InputOnly() { var context = TestExecuter.GetContext(); var builder = new ProcessBuilder() { InputProcess = TestData.Person(context), Mutators = new MutatorList(), }; var process = builder.Build(); Assert.IsNotNull(process); Assert.IsTrue(process is AbstractRowSource); }
public async Task Should_Process_Steps_In_Sequence() { //Arrange var expected = 11; var builder = new ProcessBuilder <ProcessingArgs>() .Add(context => { context.Result = 10; return(Task.CompletedTask); }) .Add(context => { context.Result += 1; return(Task.CompletedTask); }); var process = builder.Build(); var args = new ProcessingArgs(); //Act await process.Invoke(args); //Assert args.Result.Should().Be(expected); }
public async Task Should_Process_Steps_In_Sequence() { //Arrange var expected = 11; var builder = new ProcessBuilder() .AddStep(context => context.Result = 10) .AddStep(async(context, next) => { //do something before //pass context down stream await next(context); //do something after; }) .AddStep(context => { context.Result += 1; return(Task.CompletedTask); }); var process = builder.Build(); var args = new ProcessingArgs(); //Act await process.Invoke(args); //Assert args.Result.Should().Be(expected); }
public ISequence Build() { return(ProcessBuilder.Build()); }