Пример #1
0
 protected override void AttachToViewProcess(RemoteViewClient remoteViewClient)
 {
     //Still want to tick on time changed because it may need a recompile
     //Should probably deal with this ourselves
     var options = new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.TriggersEnabled | ViewExecutionFlags.AwaitMarketData, null, new ViewCycleExecutionOptions(default(DateTimeOffset), new LiveMarketDataSpecification()));
     remoteViewClient.AttachToViewProcess(_basisViewName, options);
 }
 public void CanRunSingleYesterdayCycleBatchWithVersion()
 {
     DateTimeOffset valuationTime = DateTimeOffset.Now - TimeSpan.FromDays(1);
     var seq = ArbitraryViewCycleExecutionSequence.Create(valuationTime);
     const ViewExecutionFlags flags = ViewExecutionFlags.RunAsFastAsPossible | ViewExecutionFlags.AwaitMarketData;
     IViewExecutionOptions req = new ExecutionOptions(seq, flags, defaultExecutionOptions:new ViewCycleExecutionOptions(valuationTime, new LiveMarketDataSpecification()), versionCorrection:new VersionCorrection(valuationTime, valuationTime));
     var runToCompletion = RunToCompletion(req);
     Assert.Equal(1, runToCompletion.Item1.Count());
     Assert.Equal(1, runToCompletion.Item2.Count());
     AssertApproximatelyEqual(req.ExecutionSequence.Next.ValuationTime, runToCompletion.Item2.Single().FullResult.ValuationTime);
 }
        public void NumberOfResultsIsConsistent(ViewDefinition viewDefinition)
        {
            using (var remoteViewClient = Context.ViewProcessor.CreateClient())
            {
                var options = new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.TriggersEnabled | ViewExecutionFlags.AwaitMarketData, defaultExecutionOptions:new ViewCycleExecutionOptions(default(DateTimeOffset), new LiveMarketDataSpecification()));
                var resultsEnum = remoteViewClient.GetResults(viewDefinition.UniqueID, options);

                var results = resultsEnum.Take(3).ToList();
                AssertNumberOfResultsIsConsistentOnRecompile(results);
            }
        }
        public void CanSpecifyLiveData(string dataSource)
        {
            using (var remoteViewClient = Context.ViewProcessor.CreateClient())
            {
                var pSpec = new LiveMarketDataSpecification(dataSource);
                var spec = pSpec;
                var options = new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.TriggersEnabled, null, new ViewCycleExecutionOptions(default(DateTimeOffset), spec));
                //const string viewDefinitionName = "Primitives Only (Combined) 04f3f46f-15d5-48d9-a17e-848505d4246b";
                const string viewDefinitionName = "Equity Option Test View 1";
                var resultsEnum = remoteViewClient.GetResults(viewDefinitionName, options);

                var results = resultsEnum.Take(1).ToList();
                Assert.True(results.All(r => r != null));
                Console.Out.WriteLine("{0}: {1}", dataSource, string.Join(",", results.SelectMany(r => r.AllLiveData.Select(d => d.Specification.TargetSpecification.Uid.ToString())).OrderBy(u => u)));
            }
        }
        public void CanGetVersionCorrection(string versionAsOf, string correctedTo)
        {
            VersionCorrection vc = versionAsOf == null ? VersionCorrection.Latest : new VersionCorrection(DateTimeOffset.Parse(versionAsOf), DateTimeOffset.Parse(correctedTo));
            using (var remoteViewClient = Context.ViewProcessor.CreateClient())
            {
                var options = new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.CompileOnly, versionCorrection: vc);
                remoteViewClient.AttachToViewProcess("Equity Option Test View 1", options);

                for (int i = 0; i < 30; i++)
                {
                    var viewDefinition = remoteViewClient.GetViewDefinition();
                    if (viewDefinition != null)
                    {
                        ValueAssertions.AssertSensibleValue(viewDefinition);
                        var roundTripped = remoteViewClient.GetProcessVersionCorrection();
                        Assert.Equal(vc, roundTripped);
                        return;
                    }
                    Thread.Sleep(TimeSpan.FromSeconds(1));
                }
                Assert.True(false, "Failed to get view definition");
            }
        }
        public void NumberOfResultsIsConsistent(ViewDefinition defn)
        {
            const int cyclesCount = 5;

            using (var remoteViewClient = Context.ViewProcessor.CreateClient())
            using (var mre = new ManualResetEvent(false))
            {
                var cycles = new BlockingCollection<IEngineResourceReference<IViewCycle>>();

                var listener = new EventViewResultListener();
                listener.ProcessCompleted += delegate { mre.Set(); };
                listener.ViewDefinitionCompilationFailed += delegate { mre.Set(); };
                listener.CycleExecutionFailed += delegate { mre.Set(); };

                listener.CycleCompleted += (sender, e) =>
                                               {
                                                   cycles.Add(remoteViewClient.CreateCycleReference(e.FullResult.ViewCycleId));
                                                   remoteViewClient.TriggerCycle();
                                               };

                remoteViewClient.SetResultListener(listener);
                remoteViewClient.SetViewCycleAccessSupported(true);

                var sequence = ArbitraryViewCycleExecutionSequence.Create(Enumerable.Range(0, cyclesCount).Select(i => DateTimeOffset.Now + TimeSpan.FromHours(i)));
                var options = new ExecutionOptions(sequence, ViewExecutionFlags.TriggersEnabled | ViewExecutionFlags.AwaitMarketData, null, new ViewCycleExecutionOptions(default(DateTimeOffset), ExecutionOptions.GetDefaultMarketDataSpec()));

                remoteViewClient.AttachToViewProcess(defn.UniqueID, options);

                TimeSpan timeout = TimeSpan.FromMinutes(5);
                if (! mre.WaitOne(timeout))
                {
                    throw new TimeoutException(string.Format("Failed to get result in {0}", timeout));
                }
                Assert.Equal(cyclesCount, cycles.Count);

                var specs = cycles.Select(GetAllSpecs).ToList();

                var inconsistent = specs.Zip(specs.Skip(1), Tuple.Create).SelectMany(
                    t =>
                        {
                            var diff = new HashSet<Tuple<string, ValueSpecification>>(t.Item1);
                            diff.SymmetricExceptWith(t.Item2);
                            return diff;
                        }).Distinct();
                if (inconsistent.Any())
                {
                    var counts = string.Join(",", specs.Select(c => c.Count.ToString()));
                    var inconsistentStrings = specs.Select(s => string.Join(",", s.Where(x => inconsistent.Contains(x)).Select(x => x.ToString())));
                    string inconsistentString = string.Join(Environment.NewLine, inconsistentStrings);
                    throw new Exception(string.Format("Inconsistent number of results for {0} {1}: {2}", defn.Name, counts, inconsistentString));
                }
            }
        }
 private static IViewExecutionOptions GetNoTickOptions(IViewExecutionOptions options)
 {
     options = new ExecutionOptions(options.ExecutionSequence,
                                    options.Flags & ~ViewExecutionFlags.TriggerCycleOnTimeElapsed,
                                    options.MaxSuccessiveDeltaCycles,
                                    options.DefaultExecutionOptions);
     return options;
 }