public void IsLockFileStillValid_WithProjectToProjectPackagesConfig_WithIncompatibleFrameworks_IgnoresCompatiblityChecksAndSucceeds() { // Arrange var framework = CommonFrameworks.NetStandard; var frameworkShortName = framework.GetShortFolderName(); var incompatibleFramework = CommonFrameworks.Net46; var projectA = ProjectJsonTestHelpers.GetPackageSpec("A", framework: frameworkShortName); var projectB = ProjectJsonTestHelpers.GetPackagesConfigPackageSpec("B", framework: incompatibleFramework.GetShortFolderName()); // A -> B projectA = projectA.WithTestProjectReference(projectB); var dgSpec = ProjectJsonTestHelpers.GetDGSpec(projectA, projectB); var lockFile = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(framework) .WithDependency(dep => dep .WithId("B") .WithType(PackageDependencyType.Project) .WithRequestedVersion(VersionRange.Parse("1.0.0")) )) .Build(); PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile).Should().BeTrue(); }
public void IsLockFileStillValid_TransitiveVersionsMovedToCentralFile_InvalidateLockFile() { // Arrange var framework = CommonFrameworks.NetStandard20; var projectName = "project"; var cpvm1 = new CentralPackageVersion("cpvm1", VersionRange.Parse("1.0.0")); var cpvm2 = new CentralPackageVersion("cpvm2", VersionRange.Parse("1.0.0")); var dependency1 = new LibraryDependency( new LibraryRange("cpvm1", versionRange: null, LibraryDependencyTarget.Package), LibraryDependencyType.Default, LibraryIncludeFlags.All, LibraryIncludeFlags.All, new List <Common.NuGetLogCode>(), autoReferenced: false, generatePathProperty: true, versionCentrallyManaged: false, LibraryDependencyReferenceType.Direct, aliases: "stuff"); var tfm = new TargetFrameworkInformation(); tfm.FrameworkName = framework; tfm.CentralPackageVersions.Add("cpvm1", cpvm1); tfm.CentralPackageVersions.Add("cpvm2", cpvm2); tfm.Dependencies.Add(dependency1); LibraryDependency.ApplyCentralVersionInformation(tfm.Dependencies, tfm.CentralPackageVersions); var project = new PackageSpec(new List <TargetFrameworkInformation>() { tfm }); project.RestoreMetadata = new ProjectRestoreMetadata() { ProjectUniqueName = projectName, CentralPackageVersionsEnabled = true }; DependencyGraphSpec dgSpec = new DependencyGraphSpec(); dgSpec.AddRestore(projectName); dgSpec.AddProject(project); var lockFile = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("cpvm1") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Direct)) .WithDependency(dep => dep .WithId("cpvm2") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Transitive))) .Build(); // The central package version cpvm2 has was changed from transitive to central var actual = PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile); Assert.False(actual); }
public void IsLockFileStillValid_WithProjectToProjectWithPrivateAssets_IgnoresSuppressedDependencies() { // Arrange var framework = CommonFrameworks.Net50; var frameworkShortName = framework.GetShortFolderName(); var projectA = ProjectJsonTestHelpers.GetPackageSpec("A", framework: frameworkShortName); var projectB = ProjectJsonTestHelpers.GetPackageSpec("B", framework: frameworkShortName); var projectC = ProjectJsonTestHelpers.GetPackageSpec("C", framework: frameworkShortName); // B (PrivateAssets.All) -> C projectB = projectB.WithTestProjectReference(projectC, privateAssets: LibraryIncludeFlags.All); // A -> B projectA = projectA.WithTestProjectReference(projectB); var dgSpec = ProjectJsonTestHelpers.GetDGSpec(projectA, projectB, projectC); var lockFile = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(framework) .WithDependency(dep => dep .WithId("B") .WithType(PackageDependencyType.Project) .WithRequestedVersion(VersionRange.Parse("1.0.0")))) .Build(); PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile).Should().BeTrue(); }
public void IsLockFileStillValid_VersionValidationCheck() { // Arrange var framework = CommonFrameworks.NetStandard20; var projectName = "project"; var dependency1 = new LibraryDependency( new LibraryRange("cpvm1", versionRange: VersionRange.Parse("1.0.0"), LibraryDependencyTarget.Package), LibraryDependencyType.Default, LibraryIncludeFlags.All, LibraryIncludeFlags.All, new List <Common.NuGetLogCode>(), autoReferenced: false, generatePathProperty: true, versionCentrallyManaged: false, LibraryDependencyReferenceType.Direct, aliases: "stuff"); var tfm = new TargetFrameworkInformation(); tfm.FrameworkName = framework; tfm.Dependencies.Add(dependency1); var project = new PackageSpec(new List <TargetFrameworkInformation>() { tfm }); project.RestoreMetadata = new ProjectRestoreMetadata() { ProjectUniqueName = projectName, CentralPackageVersionsEnabled = false }; DependencyGraphSpec dgSpec = new DependencyGraphSpec(); dgSpec.AddRestore(projectName); dgSpec.AddProject(project); var lockFile = new PackagesLockFileBuilder() .WithVersion(PackagesLockFileFormat.PackagesLockFileVersion + 1) .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("cpvm1") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Direct)) .WithDependency(dep => dep .WithId("otherDep") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Transitive))) .Build(); // Due to the increased version in the lock file the lock should be invalid var actual = PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile); Assert.False(actual); }
public void IsLockFileStillValid_WithProjectToProjectPackagesConfig_IncludesAllDependencies() { // Arrange var framework = CommonFrameworks.Net50; var frameworkShortName = framework.GetShortFolderName(); var projectA = ProjectJsonTestHelpers.GetPackageSpec("A", framework: frameworkShortName); var projectB = ProjectJsonTestHelpers.GetPackagesConfigPackageSpec("B"); var projectC = ProjectJsonTestHelpers.GetPackageSpec("C", framework: frameworkShortName); var packageC = new LibraryDependency( new LibraryRange("packageC", versionRange: VersionRange.Parse("2.0.0"), LibraryDependencyTarget.Package), type: LibraryDependencyType.Default, includeType: LibraryIncludeFlags.All, suppressParent: LibraryIncludeFlagUtils.DefaultSuppressParent, noWarn: new List <Common.NuGetLogCode>(), autoReferenced: false, generatePathProperty: true, versionCentrallyManaged: false, libraryDependencyReferenceType: LibraryDependencyReferenceType.Direct, aliases: null); // B -> C projectB = projectB.WithTestProjectReference(projectC); // A -> B projectA = projectA.WithTestProjectReference(projectB); // C -> PackageC projectC.TargetFrameworks.First().Dependencies.Add(packageC); var dgSpec = ProjectJsonTestHelpers.GetDGSpec(projectA, projectB, projectC); var lockFile = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(framework) .WithDependency(dep => dep .WithId("B") .WithType(PackageDependencyType.Project) .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithDependency(new PackageDependency("C", VersionRange.Parse("1.0.0")))) .WithDependency(dep => dep .WithId("C") .WithType(PackageDependencyType.Project) .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithDependency(new PackageDependency("packageC", VersionRange.Parse("2.0.0")))) .WithDependency(dep => dep .WithId("packageC") .WithType(PackageDependencyType.Transitive) .WithRequestedVersion(VersionRange.Parse("2.0.0")) .WithResolvedVersion(NuGetVersion.Parse("2.0.0")) )) .Build(); PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile).Should().BeTrue(); }
public void IsLockFileStillValid_DifferentVersions_AreNotEqual() { var x = new PackagesLockFileBuilder().Build(); var y = new PackagesLockFileBuilder() .WithVersion(PackagesLockFileFormat.Version + 1) .Build(); var actual = PackagesLockFileUtilities.IsLockFileStillValid(x, y); Assert.False(actual.IsValid); actual = PackagesLockFileUtilities.IsLockFileStillValid(y, x); Assert.False(actual.IsValid); }
public void IsLockFileStillValid_DifferentTargets_AreNotEqual() { var x = new PackagesLockFileBuilder() .WithTarget(target => target.WithFramework(CommonFrameworks.NetStandard20)) .Build(); var y = new PackagesLockFileBuilder() .WithTarget(target => target.WithFramework(CommonFrameworks.NetCoreApp22)) .Build(); var actual = PackagesLockFileUtilities.IsLockFileStillValid(x, y); Assert.False(actual.IsValid); actual = PackagesLockFileUtilities.IsLockFileStillValid(y, x); Assert.False(actual.IsValid); }
public void IsLockFileStillValid_MatchesDependencies_AreEqual() { var x = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("PackageA") .WithContentHash("ABC")) .WithDependency(dep => dep .WithId("PackageB") .WithContentHash("123"))) .Build(); var y = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("PackageA") .WithContentHash("XYZ")) .WithDependency(dep => dep .WithId("PackageB") .WithContentHash("890"))) .Build(); var actual = PackagesLockFileUtilities.IsLockFileStillValid(x, y); Assert.True(actual.IsValid); Assert.NotNull(actual.MatchedDependencies); Assert.Equal(2, actual.MatchedDependencies.Count); var depKvp = actual.MatchedDependencies.Single(d => d.Key.Id == "PackageA"); Assert.Equal("ABC", depKvp.Key.ContentHash); Assert.Equal("XYZ", depKvp.Value.ContentHash); depKvp = actual.MatchedDependencies.Single(d => d.Key.Id == "PackageB"); Assert.Equal("123", depKvp.Key.ContentHash); Assert.Equal("890", depKvp.Value.ContentHash); actual = PackagesLockFileUtilities.IsLockFileStillValid(y, x); Assert.True(actual.IsValid); Assert.NotNull(actual.MatchedDependencies); Assert.Equal(2, actual.MatchedDependencies.Count); depKvp = actual.MatchedDependencies.Single(d => d.Key.Id == "PackageA"); Assert.Equal("ABC", depKvp.Value.ContentHash); Assert.Equal("XYZ", depKvp.Key.ContentHash); depKvp = actual.MatchedDependencies.Single(d => d.Key.Id == "PackageB"); Assert.Equal("123", depKvp.Value.ContentHash); Assert.Equal("890", depKvp.Key.ContentHash); }
public void IsLockFileStillValid_DifferentDependency_AreNotEqual() { var x = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep.WithId("PackageA"))) .Build(); var y = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep.WithId("PackageB"))) .Build(); var actual = PackagesLockFileUtilities.IsLockFileStillValid(x, y); Assert.False(actual.IsValid); actual = PackagesLockFileUtilities.IsLockFileStillValid(y, x); Assert.False(actual.IsValid); }
public void IsLockFileStillValid_TransitiveDependencyNotCentrallyManaged_DoesNotInvalidateLockFile() { // Arrange var framework = CommonFrameworks.NetStandard20; var projectName = "project"; var cpvm1 = new CentralPackageVersion("cpvm1", VersionRange.Parse("1.0.0")); var cpvm2 = new CentralPackageVersion("cpvm2", VersionRange.Parse("1.0.0")); var dependency1 = new LibraryDependency( new LibraryRange("cpvm1", versionRange: null, LibraryDependencyTarget.Package), LibraryDependencyType.Default, LibraryIncludeFlags.All, LibraryIncludeFlags.All, new List <Common.NuGetLogCode>(), autoReferenced: false, generatePathProperty: true); var tfm = new TargetFrameworkInformation(); tfm.FrameworkName = framework; tfm.CentralPackageVersions.Add("cpvm1", cpvm1); tfm.CentralPackageVersions.Add("cpvm2", cpvm2); tfm.Dependencies.Add(dependency1); var project = new PackageSpec(new List <TargetFrameworkInformation>() { tfm }); project.RestoreMetadata = new ProjectRestoreMetadata() { ProjectUniqueName = projectName, CentralPackageVersionsEnabled = true }; DependencyGraphSpec dgSpec = new DependencyGraphSpec(); dgSpec.AddRestore(projectName); dgSpec.AddProject(project); var lockFile1 = new PackagesLockFileBuilder() .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("cpvm1") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Direct)) .WithDependency(dep => dep .WithId("otherDep") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Transitive))) .Build(); var lockFile2 = new PackagesLockFileBuilder() .WithVersion(PackagesLockFileFormat.PackagesLockFileVersion) .WithTarget(target => target .WithFramework(CommonFrameworks.NetStandard20) .WithDependency(dep => dep .WithId("cpvm1") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Direct)) .WithDependency(dep => dep .WithId("otherDep") .WithRequestedVersion(VersionRange.Parse("1.0.0")) .WithType(PackageDependencyType.Transitive))) .Build(); // Nothing changed // different versions of lock file versions are handled Assert.True(PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile1)); Assert.True(PackagesLockFileUtilities.IsLockFileStillValid(dgSpec, lockFile2)); }