Exemple #1
0
        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
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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!");
            }
        }
Exemple #8
0
        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);
            }
        }
Exemple #9
0
        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());
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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"));
        }
Exemple #12
0
        // 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 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 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 TestConstructorNullClassname()
 {
     this.m_compMetaDef = new ComponentMetadataDefinition("test", @"C:\test.dll", null);
 }
 public void TestConstructorNullID()
 {
     this.m_compMetaDef = new ComponentMetadataDefinition(null, @"C:\test.dll", "test");
 }
 public void TestSetup()
 {
     this.m_compMetaDef = new ComponentMetadataDefinition("test", @"C:\test.dll", "test");
 }
        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 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);
                    }
                }
            }
        }
        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);
            }
        }