Ejemplo n.º 1
0
        public void one_module_has_lower_version_than_required_results_in_exception()
        {
            /* Graph:
             * A  -> B (wrong version) -> C
             */
            var upper = new Version("1.2.0.0");
            var lower = new Version("1.0.0.0");

            var c = SetUpModuleInfoWithVersion("C", upper);
            var b = SetUpModuleInfoWithVersion("B", lower,
                                               new KeyValuePair <string, Version>("C", lower));
            var a = SetUpModuleInfoWithVersion("A", upper,
                                               new KeyValuePair <string, Version>("B", upper));

            Modules = new[]
            {
                a,
                b,
                c
            };

            // no expected modules but exception
            Assert.Throws <ArgumentException>(() => DependencyChecker.SortModules(Modules),
                                              "The modules should not be possible to sort. Missing version.");
        }
Ejemplo n.º 2
0
        public void sorting_properly_modules_with_equal_high_versions()
        {
            /*  More complex graph:
             *     P
             *   /   \
             *  A     Z
             *   \   /
             *     Q
             */

            var version = new Version("2.2.1.4");

            var z = SetUpModuleInfoWithVersion("Z", version);
            var p = SetUpModuleInfoWithVersion("P", version,
                                               new KeyValuePair <string, Version>("Z", version));
            var q = SetUpModuleInfoWithVersion("Q", version,
                                               new KeyValuePair <string, Version>("Z", version));

            ModuleInfo a = SetUpModuleInfoWithVersion("A", version,
                                                      new KeyValuePair <string, Version>("P", version),
                                                      new KeyValuePair <string, Version>("Q", version));

            Modules = new[]
            {
                a, q, p, z
            };
            ExpectedModules = new[]
            {
                z, p, q, a
            };

            Assert.AreEqual(ExpectedModules, DependencyChecker.SortModules(Modules),
                            "The list was sorted wrongly.");
        }
Ejemplo n.º 3
0
        public TypeDescriptor(Type type)
        {
            if (type == null)
                throw new ArgumentNullException("type");

            QualifiedName = type.AssemblyQualifiedName;
            Version = new Version(type.Assembly.GetName().Version);
        }
Ejemplo n.º 4
0
        public TypeDescriptor(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            QualifiedName = type.AssemblyQualifiedName;
            Version       = new Version(type.Assembly.GetName().Version);
        }
Ejemplo n.º 5
0
        public TypeDescriptor(string qualifiedName, Version version)
        {
            if (string.IsNullOrEmpty(qualifiedName))
                throw new ArgumentNullException("qualifiedName");

            if (version == null)
                throw new ArgumentNullException("version");

            QualifiedName = qualifiedName;
            Version = version;
        }
Ejemplo n.º 6
0
 private static ModuleDependency SetUpModuleDependency(string name, Version version)
 {
     return(new ModuleDependency
     {
         ModuleName = name,
         HasLoadingOrderPriority = false,
         // default values
         MinimalVersion = version,
         ProcessorArchitecture = ProcessorArchitecture.None
     });
 }
Ejemplo n.º 7
0
        public TypeDescriptor(string qualifiedName, Version version)
        {
            if (string.IsNullOrEmpty(qualifiedName))
            {
                throw new ArgumentNullException("qualifiedName");
            }

            if (version == null)
            {
                throw new ArgumentNullException("version");
            }

            QualifiedName = qualifiedName;
            Version       = version;
        }
Ejemplo n.º 8
0
        private static Mock<IModuleManifestFactory> SetUpManifestFactory(string name,
            List<ModuleDependency>
            dependencies,
            Version version)
        {
            var moduleManifestFacotry = new Mock<IModuleManifestFactory>(MockBehavior.Loose);
            moduleManifestFacotry.Setup(x => x.GetManifest(It.IsAny<ModuleInfo>()))
                .Returns(new ModuleManifest
                             {
                                 Issuer = @"ISSUER_NAME",
                                 ModuleName = name,
                                 ModuleDependencies = dependencies,
                                 ModuleVersion = version
                             }
                );

            return moduleManifestFacotry;
        }
Ejemplo n.º 9
0
        public void set_up()
        {
            _moduleName = "test_module.dll";
            var moduleVersion = new Nomad.Utils.Version("0.1.1.0");

            _moduleManifest = new ModuleManifest {
                ModuleName = _moduleName, ModuleVersion = moduleVersion
            };

            // sick creating of dependency checker
            IEnumerable <ModuleInfo> outter = new List <ModuleInfo>();

            DependencyChecker.Setup(
                x =>
                x.CheckModules(It.IsAny <IEnumerable <ModuleInfo> >(),
                               It.IsAny <IEnumerable <ModuleInfo> >(),
                               out outter))
            .Returns(true);
        }
Ejemplo n.º 10
0
        private static Mock <IModuleManifestFactory> SetUpManifestFactory(string name,
                                                                          List <ModuleDependency>
                                                                          dependencies,
                                                                          Version version)
        {
            var moduleManifestFacotry = new Mock <IModuleManifestFactory>(MockBehavior.Loose);

            moduleManifestFacotry.Setup(x => x.GetManifest(It.IsAny <ModuleInfo>()))
            .Returns(new ModuleManifest
            {
                Issuer             = @"ISSUER_NAME",
                ModuleName         = name,
                ModuleDependencies = dependencies,
                ModuleVersion      = version
            }
                     );

            return(moduleManifestFacotry);
        }
Ejemplo n.º 11
0
        public void sorting_proper_with_various_versions()
        {
            /*
             * Quite the DAG graph
             *       Q
             *     /
             *    P -- R
             *   /      \
             *  A        Z
             *   \     /
             *      B
             *
             */
            var high    = new Version("2.2.37.2");
            var neutral = new Version("1.5.0.0");
            var low     = new Version("1.0.0.50");

            var z = SetUpModuleInfoWithVersion("Z", neutral);
            var b = SetUpModuleInfoWithVersion("B", neutral,
                                               new KeyValuePair <string, Version>("Z", neutral));
            var r = SetUpModuleInfoWithVersion("R", neutral,
                                               new KeyValuePair <string, Version>("Z", low));
            var q = SetUpModuleInfoWithVersion("Q", high);
            var p = SetUpModuleInfoWithVersion("P", neutral,
                                               new KeyValuePair <string, Version>("Q", high),
                                               new KeyValuePair <string, Version>("R", low));

            var a = SetUpModuleInfoWithVersion("A", high,
                                               new KeyValuePair <string, Version>("P", neutral),
                                               new KeyValuePair <string, Version>("B", low));

            Modules = new[]
            {
                a, p, q, z, b, r,
            };
            ExpectedModules = new[]
            {
                q, z, r, p, b, a
            };

            Assert.AreEqual(ExpectedModules, DependencyChecker.SortModules(Modules), "This complex case should be possible to sort");
        }
Ejemplo n.º 12
0
        protected static ModuleInfo SetUpModuleInfoWithVersion(string moduleName, Version version,
            params
            KeyValuePair<string, Version>[]
            dependenciesNamesAndVersions)
        {
            // make sure that assemblies are not the same beacause of the path.
            string modulePath = @"SAMPLE_MODULE_PATH_WITH_VERSION" + Random.Next(0, 100);

            var moduleManifestFacotry = new Mock<IModuleManifestFactory>(MockBehavior.Loose);
            moduleManifestFacotry.Setup(x => x.GetManifest(It.IsAny<ModuleInfo>()))
                .Returns(new ModuleManifest
                             {
                                 Issuer = @"ISSUER_NAME",
                                 ModuleName = moduleName,
                                 ModuleDependencies = SetUpDependenciesWithVersion(dependenciesNamesAndVersions),
                                 ModuleVersion = version
                             }
                );

            return new ModuleInfo(modulePath, moduleManifestFacotry.Object);
        }
Ejemplo n.º 13
0
        protected static ModuleInfo SetUpModuleInfoWithVersion(string moduleName, Version version,
                                                               params
                                                               KeyValuePair <string, Version>[]
                                                               dependenciesNamesAndVersions)
        {
            // make sure that assemblies are not the same beacause of the path.
            string modulePath = @"SAMPLE_MODULE_PATH_WITH_VERSION" + Random.Next(0, 100);

            var moduleManifestFacotry = new Mock <IModuleManifestFactory>(MockBehavior.Loose);

            moduleManifestFacotry.Setup(x => x.GetManifest(It.IsAny <ModuleInfo>()))
            .Returns(new ModuleManifest
            {
                Issuer             = @"ISSUER_NAME",
                ModuleName         = moduleName,
                ModuleDependencies = SetUpDependenciesWithVersion(dependenciesNamesAndVersions),
                ModuleVersion      = version
            }
                     );

            return(new ModuleInfo(modulePath, moduleManifestFacotry.Object));
        }
Ejemplo n.º 14
0
        internal static void UnPackData(TypeDescriptor typeDescriptor, byte[] byteStream, out object sendObject, out Type type)
        {
            type = Type.GetType(typeDescriptor.QualifiedName);
            if (type != null)
            {
                var nomadVersion = new Version(type.Assembly.GetName().Version);

                if (!nomadVersion.Equals(typeDescriptor.Version))
                {
                    throw new InvalidCastException("The version of the assembly does not match");
                }
            }

            // try deserializing object
            sendObject = Deserialize(byteStream);

            // check if o is assignable
            if (type != null && !type.IsInstanceOfType(sendObject))
            {
                throw new InvalidCastException("The sent object cannot be casted to sent type");
            }
        }
Ejemplo n.º 15
0
        internal static void UnPackData(TypeDescriptor typeDescriptor, byte[] byteStream, out object sendObject, out Type type)
        {
            type = Type.GetType(typeDescriptor.QualifiedName);
            if (type != null)
            {
                var nomadVersion = new Version(type.Assembly.GetName().Version);

                if (!nomadVersion.Equals(typeDescriptor.Version))
                {
                    throw new InvalidCastException("The version of the assembly does not match");
                }
            }

            // try deserializing object
            sendObject = Deserialize(byteStream);

            // check if o is assignable
            if (type != null && !type.IsInstanceOfType(sendObject))
            {
                throw new InvalidCastException("The sent object cannot be casted to sent type");
            }
        }
Ejemplo n.º 16
0
 private static ModuleDependency SetUpModuleDependency(string name, Version version)
 {
     return new ModuleDependency
                {
                    ModuleName = name,
                    HasLoadingOrderPriority = false,
                    // default values
                    MinimalVersion = version,
                    ProcessorArchitecture = ProcessorArchitecture.None
                };
 }
Ejemplo n.º 17
0
        public void set_up()
        {
            _moduleName = "test_module.dll";
            var moduleVersion = new Nomad.Utils.Version("0.1.1.0");

            _moduleManifest = new ModuleManifest { ModuleName = _moduleName, ModuleVersion = moduleVersion };

            // sick creating of dependency checker
            IEnumerable<ModuleInfo> outter = new List<ModuleInfo>();
            DependencyChecker.Setup(
                x =>
                x.CheckModules(It.IsAny<IEnumerable<ModuleInfo>>(),
                               It.IsAny<IEnumerable<ModuleInfo>>(),
                               out outter))
                .Returns(true);
        }
Ejemplo n.º 18
0
        private void GoDFS(string myNode, ModuleWrapper myNodeInfo)
        {
            // get list of nodes to go
            List <string> nodesToGo;

            if (!_nextNodeList.TryGetValue(myNode, out nodesToGo))
            {
                if (_sortingMode == SortingMode.Exceptions)
                {
                    throw new ArgumentException(
                              string.Format(
                                  "No such dependency in dictionary. The {0} could not be found.",
                                  myNode), "myNode");
                }
                else if (_sortingMode == SortingMode.Silent)
                {
                    _canBeSorted = false;
                    return; // nodes to go wil be empty -> no place to go
                }
            }

            // stop condition (already visted)
            if (myNodeInfo.Color == NodeColor.Black)
            {
                return;
            }

            // stop c
            if (myNodeInfo.Color == NodeColor.Gray)
            {
                if (_sortingMode == SortingMode.Exceptions)
                {
                    throw new ArgumentException(
                              string.Format("DependencyGraph has cycles. Duplicated node is {0}.", myNode),
                              "myNode");
                }
                else if (_sortingMode == SortingMode.Silent)
                {
                    _canBeSorted = false;
                    return;
                }
            }

            // mark node as gray (meaning we are traversing this node)
            myNodeInfo.Color = NodeColor.Gray;

            foreach (string nodeName in nodesToGo)
            {
                // check if the node exists
                ModuleWrapper nodeToGo;
                if (!_myNodesDict.TryGetValue(nodeName, out nodeToGo))
                {
                    if (_sortingMode == SortingMode.Exceptions)
                    {
                        throw new ArgumentException(
                                  string.Format(
                                      "No such dependency in dictionary. The {0} could not be found.",
                                      myNode),
                                  "myNode");
                    }
                    else if (_sortingMode == SortingMode.Silent)
                    {
                        _canBeSorted = false;

                        // add the starting node to the list of non valid nodes (it has some empty reference)
                        if (!_nonValidModules.Contains(myNodeInfo.Module))
                        {
                            _nonValidModules.Add(myNodeInfo.Module);
                        }

                        // go to another node
                        continue;
                    }
                }

                // get version
                string name = nodeName;
                IEnumerable <Version> myNodeDependencyVersions =
                    myNodeInfo.Module.Manifest.ModuleDependencies.Where(
                        x => x.ModuleName.Equals(name)).Select(x => x.MinimalVersion);

                Version myNodeDependencyVersion =
                    myNodeDependencyVersions.SingleOrDefault();

                Version dependencyVersion = nodeToGo.Module.Manifest.ModuleVersion;

                // compare values of the versions, using system feature
                if (myNodeDependencyVersion.GetSystemVersion() >
                    dependencyVersion.GetSystemVersion())
                {
                    if (_sortingMode == SortingMode.Exceptions)
                    {
                        throw new ArgumentException(
                                  string.Format(
                                      "Dependency version ({0}) is higher than module's version {1}",
                                      myNodeDependencyVersion, dependencyVersion));
                    }
                    else if (_sortingMode == SortingMode.Silent)
                    {
                        _canBeSorted = false;

                        // wrong version means that our node has wrong reference
                        if (!_nonValidModules.Contains(myNodeInfo.Module))
                        {
                            _nonValidModules.Add(myNodeInfo.Module);
                        }

                        // let go this way
                    }
                }

                // if everything ok, go DFS
                GoDFS(nodeName, nodeToGo);
            }
            _stack.Push(myNodeInfo.Module);
            myNodeInfo.Color = NodeColor.Black;
        }