/// <summary> /// Creates the experiment. /// </summary> /// <param name="experiment">The experiment.</param> /// <param name="baseline">The baseline - if baseline is different than null it is going to be written into workspace before executing the experiment /// with the Unitname BASELINE.</param> /// <returns></returns> private IExperimentRunner CreateExperimentRunner(Workspace workspace, ComponentsLibrary library, TraceLabSDK.Types.Contests.TLExperimentResults baseline) { RunnableExperimentBase graph = null; var experimentWorkspaceWrapper = WorkspaceWrapperFactory.CreateExperimentWorkspaceWrapper(workspace, ExperimentInfo.Id); RunnableNodeFactory templateGraphNodesFactory = new RunnableNodeFactory(experimentWorkspaceWrapper); graph = GraphAdapter.Adapt(this, templateGraphNodesFactory, library, experimentWorkspaceWrapper.TypeDirectories); //clear Workspace experimentWorkspaceWrapper.DeleteExperimentUnits(); //if baseline has been provided write it into the workspace before returning the dispatcher if (baseline != null) { experimentWorkspaceWrapper.Store("BASELINE", baseline); } IExperimentRunner dispatcher = ExperimentRunnerFactory.CreateExperimentRunner(graph); dispatcher.NodeExecuting += dispatcher_NodeExecuting; dispatcher.NodeFinished += dispatcher_NodeFinished; dispatcher.NodeHasError += dispatcher_NodeHasError; dispatcher.ExperimentFinished += dispatcher_ExperimentFinished; dispatcher.ExperimentStarted += dispatcher_ExperimentStarted; m_dispatcher = dispatcher; return(dispatcher); }
internal static IExperimentRunner CreateExperimentRunner(IExperiment currentExperiment, TraceLab.Core.Workspaces.Workspace workspace, TraceLab.Core.Components.ComponentsLibrary library) { // Allow all nodes to send info to logs - if any targets exist. foreach (TraceLab.Core.Experiments.ExperimentNode node in currentExperiment.Vertices) { var componentNode = node as TraceLab.Core.Experiments.ComponentNode; if (componentNode != null) { foreach (TraceLab.Core.Settings.LogLevelItem item in componentNode.Data.Metadata.LogLevels) { item.IsEnabled = true; } } } RunnableNodeFactory templateGraphNodesFactory = new RunnableNodeFactory(workspace); TraceLab.Core.ExperimentExecution.RunnableExperimentBase template = GraphAdapter.Adapt(currentExperiment, templateGraphNodesFactory, library, workspace.TypeDirectories); var dispatcher = ExperimentRunnerFactory.CreateExperimentRunner(template); return(dispatcher); }
private static IExperimentRunner CreateExperiment(Experiment experiment, Workspace workspace, ComponentsLibrary library) { RunnableExperimentBase graph = null; ExperimentWorkspaceWrapper experimentWorkspaceWrapper = WorkspaceWrapperFactory.CreateExperimentWorkspaceWrapper(workspace, experiment.ExperimentInfo.Id); RunnableNodeFactory templateGraphNodesFactory = new RunnableNodeFactory(experimentWorkspaceWrapper); graph = GraphAdapter.Adapt(experiment, templateGraphNodesFactory, library, workspace.TypeDirectories); //clear Workspace workspace.DeleteUnits(experiment.ExperimentInfo.Id); IExperimentRunner dispatcher = ExperimentRunnerFactory.CreateExperimentRunner(graph); return(dispatcher); }
public void TestTemplateGraphDisposal_ValidNodes() { IEditableExperiment experiment = ((IEditableExperiment)ExperimentManager.New()); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; //construct some simple m_experiment ExperimentNode node1 = experiment.AddComponentFromDefinition(m_emptyComponentMetaDefinition, 5, 5); ExperimentNode node2 = experiment.AddComponentFromDefinition(m_emptyComponentMetaDefinition, 5, 5); experiment.AddConnection(experiment.StartNode, node1); experiment.AddConnection(node1, node2); experiment.AddConnection(node2, experiment.EndNode); //initiate mockNodesFactory MockNodesFactory mockNodesFactory = new MockNodesFactory(); RunnableExperimentBase template = GraphAdapter.Adapt(experiment, mockNodesFactory, AppContext.Components, AppContext.WorkspaceInstance.TypeDirectories); foreach (MockNode node in mockNodesFactory.CreatedNodes) { Assert.IsFalse(node.disposed); } //execute disptacher, because in case of correct graph dispatcher disposes nodes MockProgress progress = new MockProgress(); using (var dispatcher = ExperimentRunnerFactory.CreateExperimentRunner(template)) { dispatcher.ExecuteExperiment(progress); Assert.IsFalse(progress.HasError); } foreach (MockNode node in mockNodesFactory.CreatedNodes) { Assert.IsTrue(node.disposed); } }