public void TestAddAssemblyNotExists() { //add a mock components string id = "fakeID"; string assembly = System.IO.Path.Combine(System.Environment.CurrentDirectory, "fake.dll"); //does not exists string classname = "fakeClassname"; ComponentMetadataDefinition compMetaDef = new ComponentMetadataDefinition(id, assembly, classname); Library.Add(compMetaDef); //throws exception, because dll does not exists }
public void AddNewConnectionCannotTargetStartNode() { IExperiment experiment = ExperimentManager.New(); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; ComponentMetadataDefinition def2 = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test.dll"), "IDontExist"); ExperimentNode node2 = ((IEditableExperiment)experiment).AddComponentFromDefinition(def2, -5, 5); ExperimentNodeConnection newEdge = ((IEditableExperiment)experiment).AddConnection(node2, experiment.StartNode); }
public void GetNewComponent() { IExperiment experiment = ExperimentManager.New(); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; ComponentMetadataDefinition def = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test.dll"), "IDontExist"); ExperimentNode node = ((IEditableExperiment)experiment).AddComponentFromDefinition(def, -5, 5); ExperimentNode foundNode = experiment.GetNode(node.ID); Assert.AreEqual(node, foundNode); }
public void LoadAssemblyNotInCurrentDomain() { // Ensure that the assembly is not already loaded foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.GetAssemblies()) { //Dynamic libraries generated dynamically in the process cannot access location - it would throw NotSupportedException //for example runtime assemblies Microsoft.GeneratedCode of xml serializers if (assm.IsDynamic == false) { Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase)); } } // We don't even want it in the reflection-only context foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()) { Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase)); } string id = "MockComponent"; string classname = "MockComponents.MockComponent"; //class exists and should be loaded ComponentMetadataDefinition compMetaDef = new ComponentMetadataDefinition(id, AssemblyPath, classname); ComponentMetadata compMetadata = new ComponentMetadata(compMetaDef, AppContext.BaseTestDirectory); Library.Add(compMetaDef); AppDomain testComponentsAppDomain = (new TraceLab.Core.Components.LibraryHelper(AppContext.WorkspaceInstance.TypeDirectories)).CreateDomain(id, true); try { Library.LoadComponent(compMetadata, CreateWorkspaceWrapper(compMetadata), null, testComponentsAppDomain); // Ensure that the assembly did not get loaded into the current application domain. foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.GetAssemblies()) { //Dynamic libraries generated dynamically in the process cannot access location - it would throw NotSupportedException //for example runtime assemblies Microsoft.GeneratedCode of xml serializers if (assm.IsDynamic == false) { Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase)); } } // We don't even want it in the reflection-only context foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()) { Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase)); } } finally { LibraryHelper.DestroyDomain(testComponentsAppDomain); } }
public void AddNewConnectionNullNode2() { IExperiment experiment = ExperimentManager.New(); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; ComponentMetadataDefinition def1 = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test.dll"), "IDontExist"); ExperimentNode node2 = ((IEditableExperiment)experiment).AddComponentFromDefinition(def1, -5, 5); Assert.AreEqual(0, experiment.EdgeCount); ExperimentNodeConnection newEdge = ((IEditableExperiment)experiment).AddConnection(null, node2); Assert.IsNotNull(newEdge); Assert.AreEqual(1, experiment.EdgeCount); }
public void RemoveComponent() { IExperiment experiment = ExperimentManager.New(); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; ComponentMetadataDefinition def = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test.dll"), "IDontExist"); ExperimentNode added = ((IEditableExperiment)experiment).AddComponentFromDefinition(def, -5, 5); ((IEditableExperiment)experiment).RemoveVertex(added); Assert.AreEqual(2, experiment.VertexCount); foreach (ExperimentNode node in experiment.Vertices) { Assert.AreNotEqual(added.ID, node.ID); } }
public void TestSetup() { AppContext = new TraceLabTestApplication(TestContext); MetadataDefinition definition; if (AppContext.Components.TryGetComponentDefinition(TraceLabTestApplication.TestEmptyComponentGUID, out definition)) { m_emptyComponentMetaDefinition = definition as ComponentMetadataDefinition; } else { Assert.Fail("Failed to locate component metadatadefinition!"); } if (AppContext.Components.TryGetComponentDefinition(TraceLabTestApplication.TestReaderComponentGUID, out definition)) { m_componentReaderMetaDefinition = definition as ComponentMetadataDefinition; } else { Assert.Fail("Failed to locate component metadatadefinition!"); } if (AppContext.Components.TryGetComponentDefinition(TraceLabTestApplication.TestWriterComponentGUID, out definition)) { m_componentWriterMetaDefinition = definition as ComponentMetadataDefinition; } else { Assert.Fail("Failed to locate component metadatadefinition!"); } if (AppContext.Components.TryGetComponentDefinition(TraceLabTestApplication.IncrementerComponentGUID, out definition)) { m_incrementerComponentMetaDefinition = definition as ComponentMetadataDefinition; } else { Assert.Fail("Failed to locate component metadatadefinition!"); } }
public void LoadComponentClassLoaded() { string id = "MockComponent"; string classname = "MockComponents.MockComponent"; //class exists and should be loaded ComponentMetadataDefinition compMetaDef = new ComponentMetadataDefinition(id, AssemblyPath, classname); ComponentMetadata compMetadata = new ComponentMetadata(compMetaDef, AppContext.BaseTestDirectory); Library.Add(compMetaDef); AppDomain testComponentsAppDomain = (new TraceLab.Core.Components.LibraryHelper(AppContext.WorkspaceInstance.TypeDirectories)).CreateDomain(id, true); try { Library.LoadComponent(compMetadata, CreateWorkspaceWrapper(compMetadata), null, testComponentsAppDomain); } finally { LibraryHelper.DestroyDomain(testComponentsAppDomain); } }
public void LoadComponentMetadataDirectoryScanner() { Library.Clear(); Assert.AreEqual(0, Library.Components.Count()); //set new directory path string path = System.IO.Path.GetDirectoryName(AssemblyPath); AppContext.Settings.ComponentPaths.Clear(); AppContext.Settings.ComponentPaths.Add(new SettingsPath(true, path)); var libraryAccessor = new ComponentsLibrary_Accessor(new PrivateObject(Library)); libraryAccessor.LoadComponentsDefinitions(AppContext.WorkspaceInstance.TypeDirectories); Assert.AreEqual(1, Library.Components.Count()); ComponentMetadataDefinition def = Library.Components.ElementAt(0) as ComponentMetadataDefinition; Assert.AreEqual("MockComponents.MockComponent", def.Classname); Assert.AreEqual(AssemblyPath.ToLower(), def.Assembly.ToLower()); }
public void AddNewConnection() { IExperiment experiment = ExperimentManager.New(); experiment.ExperimentInfo.FilePath = "C:\\somefakelocation\\mockExperiment.teml"; ComponentMetadataDefinition def1 = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test.dll"), "IDontExist"); ExperimentNode node1 = ((IEditableExperiment)experiment).AddComponentFromDefinition(def1, -5, 5); ComponentMetadataDefinition def2 = new ComponentMetadataDefinition(Guid.NewGuid().ToString(), System.IO.Path.Combine(AppContext.BaseTestDirectory, "Test2.dll"), "IDontExistEither"); ExperimentNode node2 = ((IEditableExperiment)experiment).AddComponentFromDefinition(def2, -5, 5); // We know already that experiments are modified after adding components, but we // want to make sure that they're modified after adding a connection too, so lets clear the modification flag first. experiment.ResetModifiedFlag(); Assert.IsFalse(experiment.IsModified); Assert.AreEqual(0, experiment.EdgeCount); ExperimentNodeConnection newEdge = ((IEditableExperiment)experiment).AddConnection(node1, node2); Assert.IsNotNull(newEdge); Assert.AreEqual(1, experiment.EdgeCount); Assert.IsTrue(experiment.IsModified); }
public void ComponentDefinitionsHaveTagsApplied() { Library.Clear(); string path = System.IO.Path.GetDirectoryName(AssemblyPath); AppContext.Settings.ComponentPaths.Clear(); AppContext.Settings.ComponentPaths.Add(new SettingsPath(true, path)); var libraryAccessor = new ComponentsLibrary_Accessor(new PrivateObject(Library)); libraryAccessor.LoadComponentsDefinitions(AppContext.WorkspaceInstance.TypeDirectories); ComponentMetadataDefinition def = Library.Components.ElementAt(0) as ComponentMetadataDefinition; Assert.AreEqual("MockComponents.MockComponent", def.Classname); Assert.IsNotNull(def.Tags); List <string> tags = new List <string>(def.Tags.Values); Assert.AreEqual(2, tags.Count); Assert.IsTrue(tags.Contains("Mock")); Assert.IsTrue(tags.Contains("DoesNothing")); }
// END HERZUM SPRINT 1.0 /// <summary> /// Attempts to create the primitive component. Component is created only if definition is a ComponentMetadataDefinition. /// Otherwise method returns false, and null node. /// </summary> /// <param name="experiment">The experiment to which new component is added.</param> /// <param name="metadataDefinition">The metadata definition which component is created based on.</param> /// <param name="data">The data containing position of new vertex</param> /// <param name="newCreatedNode">Output of new created node; null if metadatadefinition was not a ComponentMetadataDefinition</param> /// <returns> /// true if metadatadefinition was a ComponentMetadataDefinition and node has been created, otherwise false /// </returns> private static bool TryCreateComponent(IEditableExperiment experiment, MetadataDefinition metadataDefinition, SerializedVertexData data, out ExperimentNode newCreatedNode) { bool isCreated = false; newCreatedNode = null; ComponentMetadataDefinition componentMetadataDefinition = metadataDefinition as ComponentMetadataDefinition; if (componentMetadataDefinition != null) { data.Metadata = new ComponentMetadata(componentMetadataDefinition, System.IO.Path.GetDirectoryName(experiment.ExperimentInfo.FilePath)); string componentNodeId = Guid.NewGuid().ToString(); newCreatedNode = new ComponentNode(componentNodeId, data); experiment.AddVertex(newCreatedNode); //set the log settings of the new component experiment.SetLogLevelSettings(newCreatedNode); isCreated = true; } return(isCreated); }
public void TestSetup() { this.m_compMetaDef = new ComponentMetadataDefinition("test", @"C:\test.dll", "test"); }
public void TestConstructorNullID() { this.m_compMetaDef = new ComponentMetadataDefinition(null, @"C:\test.dll", "test"); }
public void TestConstructorNullClassname() { this.m_compMetaDef = new ComponentMetadataDefinition("test", @"C:\test.dll", null); }
public void TestAddAssemblyExists() { string id = "MockComponent"; string classname = "MockComponents.MockComponent"; ComponentMetadataDefinition compMetaDef = new ComponentMetadataDefinition(id, AssemblyPath, classname); Library.Add(compMetaDef); //should pass, dll should exist }
/// <summary> /// Extracts the components/types assemblies from the given vertex. /// </summary> /// <param name="pVertex">Vertex from the experiment graph.</param> private void ExtractFilesFromNode(ExperimentNode pVertex) { if (pVertex is ComponentNode) // Regular component { ComponentMetadata metaData = (ComponentMetadata)pVertex.Data.Metadata; if (metaData != null) { ComponentMetadataDefinition metaDataDef = metaData.ComponentMetadataDefinition; if (metaDataDef != null) { bool include; if (m_config.IncludeOtherPackagesAssemblies) { include = true; } else { //determine if component is independent or is coming from another package include = !IsAssemblyInAnotherPackage(metaDataDef.Assembly); } if (include) { // Component assembly this.m_componentAssemblies.Add(Path.GetFullPath(metaDataDef.Assembly)); // Extracting types from IOSpec ExtractTypesFromIOSpec(metaDataDef.IOSpecDefinition); } } ConfigWrapper config = metaData.ConfigWrapper; if (config != null) { // Extracting paths for files/directories from components' configuration foreach (ConfigPropertyObject configValue in config.ConfigValues.Values) { // Files if (configValue.Type == "TraceLabSDK.Component.Config.FilePath" && configValue.Value != null) { // Independent files if (configValue.Value is TraceLab.Core.Components.TraceLabFilePath == false) { if (this.m_config.IncludeIndependentFilesDirs) { var filePath = (TraceLabSDK.Component.Config.FilePath)configValue.Value; if (File.Exists(filePath.Absolute)) { PackageFileInfo packageFileInfo = new PackageFileInfo(filePath); m_files.Add(packageFileInfo); //Change config value relative path -> this path is saved within experiment (note, we operate on the experiment clone) //so that relative path is in the subfolder of Experiment folder filePath.Relative = packageFileInfo.RelativeLocation; } } } // Files contained in a package else { if (this.m_config.IncludeOtherPackagesFilesDirs) { //TraceLabFilePath represents the file reference located in the package var packageFilePath = (TraceLabFilePath)configValue.Value; if (File.Exists(packageFilePath.Absolute)) { PackageFileInfo packageFileInfo = new PackageFileInfo(packageFilePath); m_files.Add(packageFileInfo); //change the configValue to basic FilePath, (not TraceLabFilePath in the package), with updated Relative Path //so that relative path is in the subfolder of Experiment folder TraceLabSDK.Component.Config.FilePath basicFilePath = new TraceLabSDK.Component.Config.FilePath(); basicFilePath.Init(packageFilePath.Absolute, packageFilePath.DataRoot); basicFilePath.Relative = packageFileInfo.RelativeLocation; configValue.Value = basicFilePath; } } } } // Directories else if (configValue.Type == "TraceLabSDK.Component.Config.DirectoryPath" && configValue.Value != null) { // Independent directories if (configValue.Value is TraceLab.Core.Components.TraceLabDirectoryPath == false) { if (this.m_config.IncludeIndependentFilesDirs) { var dirPath = (TraceLabSDK.Component.Config.DirectoryPath)configValue.Value; if (Directory.Exists(dirPath.Absolute)) { PackageFileInfo packageDirectoryInfo = new PackageFileInfo(dirPath); m_directories.Add(packageDirectoryInfo); //Change config value relative path -> this path is saved within experiment (note, we operate on the experiment clone) //so that relative path is in the subfolder of Experiment folder dirPath.Relative = packageDirectoryInfo.RelativeLocation; } } } // Directories contained in a package else { if (this.m_config.IncludeOtherPackagesFilesDirs) { var packageDirPath = (TraceLabDirectoryPath)configValue.Value; if (Directory.Exists(packageDirPath.Absolute)) { PackageFileInfo packageDirInfo = new PackageFileInfo(packageDirPath); m_directories.Add(packageDirInfo); //change the configValue to basic FilePath, (not TraceLabFilePath in the package), with updated Relative Path //so that relative path is in the subfolder of Experiment folder TraceLabSDK.Component.Config.DirectoryPath basicFilePath = new TraceLabSDK.Component.Config.DirectoryPath(); basicFilePath.Init(packageDirPath.Absolute, packageDirPath.DataRoot); basicFilePath.Relative = packageDirInfo.RelativeLocation; configValue.Value = basicFilePath; } } } } } } } } else if (pVertex is CompositeComponentNode) // Composite Components, Loops & Scopes { CompositeComponentBaseMetadata metaData = (CompositeComponentBaseMetadata)pVertex.Data.Metadata; if (metaData != null) { foreach (var vertex in metaData.ComponentGraph.Vertices) { ExtractFilesFromNode(vertex); } // Only composite components have MetadataDefinition if (pVertex.Data.Metadata is CompositeComponentMetadata) { CompositeComponentMetadataDefinition metaDataDefinition = ((CompositeComponentMetadata)pVertex.Data.Metadata).ComponentMetadataDefinition; this.m_componentAssemblies.Add(Path.GetFullPath(metaDataDefinition.Assembly)); // Extracting types from IOSpec ExtractTypesFromIOSpec(metaDataDefinition.IOSpecDefinition); } } } }