Пример #1
0
        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());
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
    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);
    }
Пример #10
0
    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);
    }
Пример #11
0
 public ISequence Build()
 {
     return(ProcessBuilder.Build());
 }