Exemplo n.º 1
0
 public PyPIProjectManager(
     string directory,
     IManagerPackageActions <IManagerPackageVersionMetadata>?actions = null,
     IHttpClientFactory?httpClientFactory = null)
     : base(actions ?? new NoOpPackageActions(), httpClientFactory ?? new DefaultHttpClientFactory(), directory)
 {
 }
Exemplo n.º 2
0
        [DataRow("pkg:nuget/razorengine", "RazorEngine - A Templating Engine based on the Razor parser.", "Matthew Abbott, Ben Dornis, Matthias Dittrich", "4.5.1-alpha001")] // Normal package, no specified version
        public async Task MetadataSucceeds(string purlString, string?description = null, string?authors = null, string?latestVersion = null)
        {
            PackageURL purl = new(purlString);
            IManagerPackageActions <NuGetPackageVersionMetadata>?nugetPackageActions = PackageActionsHelper <NuGetPackageVersionMetadata> .SetupPackageActions(
                purl,
                JsonConvert.DeserializeObject <NuGetPackageVersionMetadata>(_metadata[purl.ToString()]),
                JsonConvert.DeserializeObject <IEnumerable <string> >(_versions[purl.ToString()])?.Reverse());

            _projectManager = new NuGetProjectManager(".", nugetPackageActions, _httpFactory);

            PackageMetadata metadata = await _projectManager.GetPackageMetadataAsync(purl, useCache : false);

            Assert.AreEqual(purl.Name, metadata.Name, ignoreCase: true);

            // If a version was specified, assert the response is for this version, otherwise assert for the latest version.
            Assert.AreEqual(!string.IsNullOrWhiteSpace(purl.Version) ? purl.Version : latestVersion,
                            metadata.PackageVersion);
            Assert.AreEqual(description, metadata.Description);
            if (!string.IsNullOrWhiteSpace(authors))
            {
                List <User> authorsList = authors.Split(", ").Select(author => new User()
                {
                    Name = author
                }).ToList();
                CollectionAssert.AreEquivalent(authorsList, metadata.Authors);
            }
        }
Exemplo n.º 3
0
 public NuGetProjectManager(
     string directory,
     IManagerPackageActions <NuGetPackageVersionMetadata>?actions = null,
     IHttpClientFactory?httpClientFactory = null)
     : base(actions ?? new NuGetPackageActions(), httpClientFactory ?? new DefaultHttpClientFactory(), directory)
 {
     GetRegistrationEndpointAsync().Wait();
 }
Exemplo n.º 4
0
        public async Task EnumerateVersionsSucceeds(
            string purlString,
            int count,
            string latestVersion,
            bool includePrerelease = true)
        {
            PackageURL purl = new(purlString);
            IManagerPackageActions <NuGetPackageVersionMetadata>?nugetPackageActions = PackageActionsHelper <NuGetPackageVersionMetadata> .SetupPackageActions(
                purl,
                JsonConvert.DeserializeObject <NuGetPackageVersionMetadata>(_metadata[purl.ToString()]),
                JsonConvert.DeserializeObject <IEnumerable <string> >(_versions[purl.ToString()])?.Reverse(),
                includePrerelease : includePrerelease);

            _projectManager = new NuGetProjectManager(".", nugetPackageActions, _httpFactory);

            List <string> versions = (await _projectManager.EnumerateVersionsAsync(purl, false, includePrerelease)).ToList();

            Assert.AreEqual(count, versions.Count);
            Assert.AreEqual(latestVersion, versions.First());
        }
Exemplo n.º 5
0
        public async Task NewtonsoftMutations_Succeeds_Async()
        {
            // arrange
            PackageURL newtonsoft = new("pkg:nuget/[email protected]");

            string[] squattingPackages = new[]
            {
                "pkg:nuget/newtons0ft.json", // ["AsciiHomoglyph","CloseLetters"]
                "pkg:nuget/newtousoft.json", // ["AsciiHomoglyph"]
                "pkg:nuget/newtonsoft.jsan", // ["AsciiHomoglyph","VowelSwap"]
                "pkg:nuget/mewtonsoft.json", // ["AsciiHomoglyph","BitFlip","CloseLetters"]
                "pkg:nuget/bewtonsoft.json", // ["CloseLetters"]
                "pkg:nuget/newtohsoft.json", // ["CloseLetters"]
            };

            IHttpClientFactory httpClientFactory =
                FindSquatsHelper.SetupHttpCalls(purl: newtonsoft, validSquats: squattingPackages);

            IManagerPackageActions <NuGetPackageVersionMetadata> packageActions = PackageActionsHelper <NuGetPackageVersionMetadata> .SetupPackageActions(newtonsoft, validSquats : squattingPackages) ?? throw new InvalidOperationException();

            Dictionary <string, ProjectManagerFactory.ConstructProjectManager> overrideDict = ProjectManagerFactory.GetDefaultManagers(httpClientFactory);

            overrideDict[NuGetProjectManager.Type] = directory =>
                                                     new NuGetProjectManager(directory, packageActions, httpClientFactory);

            FindPackageSquats findPackageSquats = new(new ProjectManagerFactory(overrideDict), newtonsoft);

            // act
            IDictionary <string, IList <Mutation> >?squatCandidates   = findPackageSquats.GenerateSquatCandidates();
            List <FindPackageSquatResult>           existingMutations = await findPackageSquats.FindExistingSquatsAsync(squatCandidates, new MutateOptions()
            {
                UseCache = false
            }).ToListAsync();

            Assert.IsNotNull(existingMutations);
            Assert.IsTrue(existingMutations.Any());
            string[] resultingMutationNames = existingMutations.Select(m => m.MutatedPackageUrl.ToString()).ToArray();
            CollectionAssert.AreEquivalent(squattingPackages, resultingMutationNames);
        }
Exemplo n.º 6
0
        public async Task DetectSquats(string packageUrl, bool generateSquats, bool expectedToHaveSquats)
        {
            PackageURL purl = new(packageUrl);

            IEnumerable <string>?validSquats = null;

            // Only populate validSquats if we want to generate squats.
            if (generateSquats)
            {
                validSquats = ProjectManagerFactory.GetDefaultManagers()[purl.Type].Invoke()?.EnumerateSquatCandidates(purl)?.Keys;
            }

            // Construct the mocked IHttpClientFactory
            IHttpClientFactory httpClientFactory = FindSquatsHelper.SetupHttpCalls(purl: purl, validSquats: validSquats);

            // Construct the manager overrides with the mocked IHttpClientFactory.
            Dictionary <string, ProjectManagerFactory.ConstructProjectManager> managerOverrides = ProjectManagerFactory.GetDefaultManagers(httpClientFactory);

            IManagerPackageActions <NuGetPackageVersionMetadata>?nugetPackageActions = PackageActionsHelper <NuGetPackageVersionMetadata> .SetupPackageActions(
                purl);

            // Override the NuGet constructor to add the mocked NuGetPackageActions.
            managerOverrides[NuGetProjectManager.Type] =
                _ => new NuGetProjectManager(".", nugetPackageActions, httpClientFactory);

            ProjectManagerFactory projectManagerFactory = new(managerOverrides);
            FindSquatsTool        fst = new(projectManagerFactory);

            FindSquatsTool.Options options = new()
            {
                Quiet   = true,
                Targets = new string[] { packageUrl }
            };
            (string output, int numSquats)result = await fst.RunAsync(options);

            Assert.IsTrue(expectedToHaveSquats ? result.numSquats > 0 : result.numSquats == 0);
        }