Esempio n. 1
0
        public void ProjectInstallWalkerIgnoresSolutionLevelPackages()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            IPackage projectPackage = PackageUtility.CreatePackage("A", "1.0",
                                                                   dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "[1.5]")
            }, content: new[] { "content" });

            sourceRepository.AddPackage(projectPackage);

            IPackage toolsPackage = PackageUtility.CreatePackage("B", "1.5", tools: new[] { "init.ps1" });

            sourceRepository.AddPackage(toolsPackage);

            IPackageOperationResolver resolver = new ProjectInstallWalker(localRepository,
                                                                          sourceRepository,
                                                                          new DependentsWalker(localRepository),
                                                                          NullLogger.Instance,
                                                                          ignoreDependencies: false);

            // Act
            var packages = resolver.ResolveOperations(projectPackage)
                           .ToDictionary(p => p.Package.Id);

            // Assert
            Assert.AreEqual(1, packages.Count);
            Assert.IsNotNull(packages["A"]);
        }
Esempio n. 2
0
        public void ResolveDependenciesForInstallSameDependencyAtDifferentLevelsInGraphDuringUpdate()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            // A1 -> B1, C1
            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                            content: new[] { "A1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0"),
                                                                    PackageDependency.CreateDependency("C", "1.0")
                                                                });
            // B1
            IPackage packageB = PackageUtility.CreatePackage("B", "1.0", new[] { "B1" });

            // C1 -> B1, D1
            IPackage packageC = PackageUtility.CreatePackage("C", "1.0",
                                                            content: new[] { "C1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0"),
                                                                    PackageDependency.CreateDependency("D", "1.0")
                                                                });

            // D1 -> B1
            IPackage packageD = PackageUtility.CreatePackage("D", "1.0",
                                                            content: new[] { "A1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0")
                                                                });

            // A2 -> B2, C2
            IPackage packageA2 = PackageUtility.CreatePackage("A", "2.0",
                                                            content: new[] { "A2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0"),
                                                                    PackageDependency.CreateDependency("C", "2.0")
                                                                });
            // B2
            IPackage packageB2 = PackageUtility.CreatePackage("B", "2.0", new[] { "B2" });

            // C2 -> B2, D2
            IPackage packageC2 = PackageUtility.CreatePackage("C", "2.0",
                                                            content: new[] { "C2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0"),
                                                                    PackageDependency.CreateDependency("D", "2.0")
                                                                });

            // D2 -> B2
            IPackage packageD2 = PackageUtility.CreatePackage("D", "2.0",
                                                            content: new[] { "D2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0")
                                                                });

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD);
            sourceRepository.AddPackage(packageA2);
            sourceRepository.AddPackage(packageB2);
            sourceRepository.AddPackage(packageC2);
            sourceRepository.AddPackage(packageD2);

            localRepository.AddPackage(packageA);
            localRepository.AddPackage(packageB);
            localRepository.AddPackage(packageC);
            localRepository.AddPackage(packageD);

            IPackageOperationResolver resolver = new ProjectInstallWalker(localRepository,
                                                                          sourceRepository,
                                                                          new DependentsWalker(localRepository),
                                                                          NullLogger.Instance,
                                                                          ignoreDependencies: false);

            var operations = resolver.ResolveOperations(packageA2).ToList();
            Assert.AreEqual(8, operations.Count);
            AssertOperation("A", "1.0", PackageAction.Uninstall, operations[0]);
            AssertOperation("C", "1.0", PackageAction.Uninstall, operations[1]);
            AssertOperation("D", "1.0", PackageAction.Uninstall, operations[2]);
            AssertOperation("B", "1.0", PackageAction.Uninstall, operations[3]);
            AssertOperation("B", "2.0", PackageAction.Install, operations[4]);
            AssertOperation("D", "2.0", PackageAction.Install, operations[5]);
            AssertOperation("C", "2.0", PackageAction.Install, operations[6]);
            AssertOperation("A", "2.0", PackageAction.Install, operations[7]);
        }
Esempio n. 3
0
        public void ResolveDependenciesForInstallDiamondDependencyGraphWithDifferntVersionOfSamePackage()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            // A -> [B, C]
            // B -> [D >= 1, E >= 2]
            // C -> [D >= 2, E >= 1]
            //     A
            //   /   \
            //  B     C
            //  | \   | \
            //  D1 E2 D2 E1

            IPackage packageA = PackageUtility.CreateProjectLevelPackage("A", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    new PackageDependency("B"),
                                                                    new PackageDependency("C")
                                                                });

            IPackage packageB = PackageUtility.CreateProjectLevelPackage("B", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("D", "1.0"),
                                                                    PackageDependency.CreateDependency("E", "2.0")
                                                                });

            IPackage packageC = PackageUtility.CreateProjectLevelPackage("C", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("D", "2.0"),
                                                                    PackageDependency.CreateDependency("E", "1.0")
                                                                });

            IPackage packageD10 = PackageUtility.CreateProjectLevelPackage("D", "1.0");
            IPackage packageD20 = PackageUtility.CreateProjectLevelPackage("D", "2.0");
            IPackage packageE10 = PackageUtility.CreateProjectLevelPackage("E", "1.0");
            IPackage packageE20 = PackageUtility.CreateProjectLevelPackage("E", "2.0");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD20);
            sourceRepository.AddPackage(packageD10);
            sourceRepository.AddPackage(packageE20);
            sourceRepository.AddPackage(packageE10);

            IPackageOperationResolver projectResolver = new ProjectInstallWalker(localRepository,
                                                                                sourceRepository,
                                                                                new DependentsWalker(localRepository),
                                                                                NullLogger.Instance,
                                                                                ignoreDependencies: false);

            IPackageOperationResolver resolver = new InstallWalker(localRepository,
                                                                   sourceRepository,
                                                                   NullLogger.Instance,
                                                                   ignoreDependencies: false);

            // Act
            var operations = resolver.ResolveOperations(packageA).ToList();
            var projectOperations = resolver.ResolveOperations(packageA).ToList();

            // Assert
            Assert.AreEqual(5, operations.Count);
            Assert.AreEqual("E", operations[0].Package.Id);
            Assert.AreEqual(new Version("2.0"), operations[0].Package.Version);
            Assert.AreEqual("B", operations[1].Package.Id);
            Assert.AreEqual("D", operations[2].Package.Id);
            Assert.AreEqual(new Version("2.0"), operations[2].Package.Version);
            Assert.AreEqual("C", operations[3].Package.Id);
            Assert.AreEqual("A", operations[4].Package.Id);

            Assert.AreEqual(5, projectOperations.Count);
            Assert.AreEqual("E", projectOperations[0].Package.Id);
            Assert.AreEqual(new Version("2.0"), projectOperations[0].Package.Version);
            Assert.AreEqual("B", projectOperations[1].Package.Id);
            Assert.AreEqual("D", projectOperations[2].Package.Id);
            Assert.AreEqual(new Version("2.0"), projectOperations[2].Package.Version);
            Assert.AreEqual("C", projectOperations[3].Package.Id);
            Assert.AreEqual("A", projectOperations[4].Package.Id);
        }
Esempio n. 4
0
        public void ProjectInstallWalkerIgnoresSolutionLevelPackages()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            IPackage projectPackage = PackageUtility.CreatePackage("A", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "[1.5]")
                                                                }, content: new[] { "content" });

            sourceRepository.AddPackage(projectPackage);

            IPackage toolsPackage = PackageUtility.CreatePackage("B", "1.5", tools: new[] { "init.ps1" });
            sourceRepository.AddPackage(toolsPackage);

            IPackageOperationResolver resolver = new ProjectInstallWalker(localRepository,
                                                                          sourceRepository,
                                                                          new DependentsWalker(localRepository),
                                                                          NullLogger.Instance,
                                                                          ignoreDependencies: false);

            // Act
            var packages = resolver.ResolveOperations(projectPackage)
                                   .ToDictionary(p => p.Package.Id);

            // Assert
            Assert.AreEqual(1, packages.Count);
            Assert.IsNotNull(packages["A"]);
        }
Esempio n. 5
0
        public void ResolveDependenciesForInstallSameDependencyAtDifferentLevelsInGraphDuringUpdate()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            // A1 -> B1, C1
            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                             content: new[] { "A1" },
                                                             dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "1.0"),
                PackageDependency.CreateDependency("C", "1.0")
            });
            // B1
            IPackage packageB = PackageUtility.CreatePackage("B", "1.0", new[] { "B1" });

            // C1 -> B1, D1
            IPackage packageC = PackageUtility.CreatePackage("C", "1.0",
                                                             content: new[] { "C1" },
                                                             dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "1.0"),
                PackageDependency.CreateDependency("D", "1.0")
            });

            // D1 -> B1
            IPackage packageD = PackageUtility.CreatePackage("D", "1.0",
                                                             content: new[] { "A1" },
                                                             dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "1.0")
            });

            // A2 -> B2, C2
            IPackage packageA2 = PackageUtility.CreatePackage("A", "2.0",
                                                              content: new[] { "A2" },
                                                              dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "2.0"),
                PackageDependency.CreateDependency("C", "2.0")
            });
            // B2
            IPackage packageB2 = PackageUtility.CreatePackage("B", "2.0", new[] { "B2" });

            // C2 -> B2, D2
            IPackage packageC2 = PackageUtility.CreatePackage("C", "2.0",
                                                              content: new[] { "C2" },
                                                              dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "2.0"),
                PackageDependency.CreateDependency("D", "2.0")
            });

            // D2 -> B2
            IPackage packageD2 = PackageUtility.CreatePackage("D", "2.0",
                                                              content: new[] { "D2" },
                                                              dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("B", "2.0")
            });


            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD);
            sourceRepository.AddPackage(packageA2);
            sourceRepository.AddPackage(packageB2);
            sourceRepository.AddPackage(packageC2);
            sourceRepository.AddPackage(packageD2);

            localRepository.AddPackage(packageA);
            localRepository.AddPackage(packageB);
            localRepository.AddPackage(packageC);
            localRepository.AddPackage(packageD);



            IPackageOperationResolver resolver = new ProjectInstallWalker(localRepository,
                                                                          sourceRepository,
                                                                          new DependentsWalker(localRepository),
                                                                          NullLogger.Instance,
                                                                          ignoreDependencies: false);

            var operations = resolver.ResolveOperations(packageA2).ToList();

            Assert.AreEqual(8, operations.Count);
            AssertOperation("A", "1.0", PackageAction.Uninstall, operations[0]);
            AssertOperation("C", "1.0", PackageAction.Uninstall, operations[1]);
            AssertOperation("D", "1.0", PackageAction.Uninstall, operations[2]);
            AssertOperation("B", "1.0", PackageAction.Uninstall, operations[3]);
            AssertOperation("B", "2.0", PackageAction.Install, operations[4]);
            AssertOperation("D", "2.0", PackageAction.Install, operations[5]);
            AssertOperation("C", "2.0", PackageAction.Install, operations[6]);
            AssertOperation("A", "2.0", PackageAction.Install, operations[7]);
        }
Esempio n. 6
0
        public void ResolveDependenciesForInstallDiamondDependencyGraphWithDifferntVersionOfSamePackage()
        {
            // Arrange
            var localRepository  = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            // A -> [B, C]
            // B -> [D >= 1, E >= 2]
            // C -> [D >= 2, E >= 1]
            //     A
            //   /   \
            //  B     C
            //  | \   | \
            //  D1 E2 D2 E1

            IPackage packageA = PackageUtility.CreateProjectLevelPackage("A", "1.0",
                                                                         dependencies: new List <PackageDependency> {
                new PackageDependency("B"),
                new PackageDependency("C")
            });


            IPackage packageB = PackageUtility.CreateProjectLevelPackage("B", "1.0",
                                                                         dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("D", "1.0"),
                PackageDependency.CreateDependency("E", "2.0")
            });

            IPackage packageC = PackageUtility.CreateProjectLevelPackage("C", "1.0",
                                                                         dependencies: new List <PackageDependency> {
                PackageDependency.CreateDependency("D", "2.0"),
                PackageDependency.CreateDependency("E", "1.0")
            });

            IPackage packageD10 = PackageUtility.CreateProjectLevelPackage("D", "1.0");
            IPackage packageD20 = PackageUtility.CreateProjectLevelPackage("D", "2.0");
            IPackage packageE10 = PackageUtility.CreateProjectLevelPackage("E", "1.0");
            IPackage packageE20 = PackageUtility.CreateProjectLevelPackage("E", "2.0");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD20);
            sourceRepository.AddPackage(packageD10);
            sourceRepository.AddPackage(packageE20);
            sourceRepository.AddPackage(packageE10);

            IPackageOperationResolver projectResolver = new ProjectInstallWalker(localRepository,
                                                                                 sourceRepository,
                                                                                 new DependentsWalker(localRepository),
                                                                                 NullLogger.Instance,
                                                                                 ignoreDependencies: false);

            IPackageOperationResolver resolver = new InstallWalker(localRepository,
                                                                   sourceRepository,
                                                                   NullLogger.Instance,
                                                                   ignoreDependencies: false);

            // Act
            var operations        = resolver.ResolveOperations(packageA).ToList();
            var projectOperations = resolver.ResolveOperations(packageA).ToList();

            // Assert
            Assert.AreEqual(5, operations.Count);
            Assert.AreEqual("E", operations[0].Package.Id);
            Assert.AreEqual(new Version("2.0"), operations[0].Package.Version);
            Assert.AreEqual("B", operations[1].Package.Id);
            Assert.AreEqual("D", operations[2].Package.Id);
            Assert.AreEqual(new Version("2.0"), operations[2].Package.Version);
            Assert.AreEqual("C", operations[3].Package.Id);
            Assert.AreEqual("A", operations[4].Package.Id);

            Assert.AreEqual(5, projectOperations.Count);
            Assert.AreEqual("E", projectOperations[0].Package.Id);
            Assert.AreEqual(new Version("2.0"), projectOperations[0].Package.Version);
            Assert.AreEqual("B", projectOperations[1].Package.Id);
            Assert.AreEqual("D", projectOperations[2].Package.Id);
            Assert.AreEqual(new Version("2.0"), projectOperations[2].Package.Version);
            Assert.AreEqual("C", projectOperations[3].Package.Id);
            Assert.AreEqual("A", projectOperations[4].Package.Id);
        }