Merge branch 'main' into users/avannikumar/vcpkgProperties

This commit is contained in:
Amitla Vannikumar 2023-11-06 10:50:53 -08:00 коммит произвёл GitHub
Родитель bd3fe5d982 b61d0ec02c
Коммит 3744736eae
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
48 изменённых файлов: 734 добавлений и 733 удалений

2
.github/workflows/build.yml поставляемый
Просмотреть файл

@ -21,7 +21,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
fetch-depth: 0

8
.github/workflows/codeql-analysis.yml поставляемый
Просмотреть файл

@ -21,17 +21,17 @@ jobs:
security-events: write
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
fetch-depth: 0
- name: Initialize CodeQL
uses: github/codeql-action/init@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1
uses: github/codeql-action/init@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5
with:
languages: 'csharp'
- name: Autobuild
uses: github/codeql-action/autobuild@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1
uses: github/codeql-action/autobuild@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1
uses: github/codeql-action/analyze@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5

2
.github/workflows/gen-docs.yml поставляемый
Просмотреть файл

@ -16,7 +16,7 @@ jobs:
contents: write # for stefanzweifel/git-auto-commit-action to push code in repo
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
fetch-depth: 0

6
.github/workflows/ossf-scorecard.yml поставляемый
Просмотреть файл

@ -32,12 +32,12 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
with:
results_file: results.sarif
results_format: sarif
@ -67,6 +67,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1
uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5
with:
sarif_file: results.sarif

4
.github/workflows/release.yml поставляемый
Просмотреть файл

@ -22,7 +22,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
fetch-depth: 0
@ -36,7 +36,7 @@ jobs:
run: dotnet publish --configuration Release --output ./bin --self-contained --runtime ${{ matrix.rid }} -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true -p:DebugType=None -p:PublishTrimmed=false ./src/Microsoft.ComponentDetection
- name: Publish CLI tool
uses: shogo82148/actions-upload-release-asset@dbfb35b0d9069ff70bc1f9e47faba33ee30b2681 # v1.7.0
uses: shogo82148/actions-upload-release-asset@dccd6d23e64fd6a746dce6814c0bde0a04886085 # v1.7.2
continue-on-error: true
with:
upload_url: ${{ github.event.release.upload_url }}

4
.github/workflows/smoke-test.yml поставляемый
Просмотреть файл

@ -38,7 +38,7 @@ jobs:
name: ${{ matrix.language.name }}
steps:
- name: Checkout Component Detection
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup .NET
uses: actions/setup-dotnet@3447fd6a9f9e57506b15f895c5b76d3b197dc7c2 # v3.2.0
@ -47,7 +47,7 @@ jobs:
run: curl https://downloads.apache.org/ant/ivy/2.5.2/apache-ivy-2.5.2-bin.tar.gz | tar xOz apache-ivy-2.5.2/ivy-2.5.2.jar > /usr/share/ant/lib/ivy.jar
- name: Checkout Smoke Test Repo
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
repository: ${{ matrix.language.repo }}
path: smoke-test-repo

2
.github/workflows/snapshot-publish.yml поставляемый
Просмотреть файл

@ -21,7 +21,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Setup .NET Core
uses: actions/setup-dotnet@3447fd6a9f9e57506b15f895c5b76d3b197dc7c2 # v3

2
.github/workflows/snapshot-verify.yml поставляемый
Просмотреть файл

@ -17,7 +17,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- name: Make release snapshot output directory
run: mkdir ${{ github.workspace }}/release-output

Просмотреть файл

@ -11,8 +11,7 @@
<PackageVersion Include="coverlet.msbuild" Version="6.0.0" />
<PackageVersion Include="Docker.DotNet" Version="3.125.15" />
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
<PackageVersion Include="FluentAssertions.Analyzers" Version="0.25.0" />
<PackageVersion Include="Microsoft.AspNet.WebApi.Client" Version="5.2.9" />
<PackageVersion Include="FluentAssertions.Analyzers" Version="0.26.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
@ -24,7 +23,7 @@
<PackageVersion Include="DotNet.Glob" Version="2.1.1" />
<PackageVersion Include="MinVer" Version="4.3.0" />
<PackageVersion Include="Moq" Version="4.18.4" />
<PackageVersion Include="morelinq" Version="3.4.2" />
<PackageVersion Include="morelinq" Version="4.0.0" />
<PackageVersion Include="MSTest.TestAdapter" Version="3.1.1" />
<PackageVersion Include="MSTest.TestFramework" Version="3.1.1" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
@ -32,7 +31,7 @@
<PackageVersion Include="NuGet.ProjectModel" Version="6.7.0" />
<PackageVersion Include="NuGet.Versioning" Version="6.7.0" />
<PackageVersion Include="packageurl-dotnet" Version="1.0.0" />
<PackageVersion Include="Polly" Version="8.0.0" />
<PackageVersion Include="Polly" Version="8.1.0" />
<PackageVersion Include="SemanticVersioning" Version="2.0.2" />
<PackageVersion Include="Serilog" Version="3.0.1" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="7.0.0" />
@ -42,7 +41,7 @@
<PackageVersion Include="Serilog.Sinks.Map" Version="1.0.2" />
<PackageVersion Include="Spectre.Console" Version="0.47.0" />
<PackageVersion Include="Spectre.Console.Cli" Version="0.47.0" />
<PackageVersion Include="Spectre.Console.Cli.Extensions.DependencyInjection" Version="0.1.0" />
<PackageVersion Include="Spectre.Console.Cli.Extensions.DependencyInjection" Version="0.2.0" />
<PackageVersion Include="Spectre.Console.Testing" Version="0.47.0" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.507" />
<PackageVersion Include="System.Memory" Version="4.5.5" />
@ -51,8 +50,8 @@
<PackageVersion Include="System.Text.Json" Version="6.0.8" />
<PackageVersion Include="System.Threading.Tasks.Dataflow" Version="7.0.0" />
<PackageVersion Include="Tomlyn.Signed" Version="0.16.2" />
<PackageVersion Include="yamldotnet" Version="13.5.2" />
<PackageVersion Include="yamldotnet" Version="13.7.1" />
<PackageVersion Include="Faker.net" Version="2.0.154" />
<PackageVersion Include="Valleysoft.DockerfileModel" Version="1.1.0" />
</ItemGroup>
</Project>
</Project>

Просмотреть файл

@ -10,7 +10,7 @@ RUN dotnet publish -c Release -o out \
-p:PublishSingleFile=true \
./src/Microsoft.ComponentDetection
FROM mcr.microsoft.com/dotnet/runtime-deps:6.0-cbl-mariner2.0@sha256:98e5a9a0d1f8b55564e7412702258996e420e6bc8dbc973a9d0caad0469e8824 AS runtime
FROM mcr.microsoft.com/dotnet/runtime-deps:6.0-cbl-mariner2.0@sha256:8b045ea3a04beb743cf7dffc14ab79cc88f0623ca4943f4216e37d98a1bd266a AS runtime
WORKDIR /app
COPY --from=build /app/out ./

Просмотреть файл

@ -1,6 +1,6 @@
{
"sdk": {
"version": "6.0.414",
"version": "6.0.416",
"rollForward": "latestMinor"
}
}

Просмотреть файл

@ -2,7 +2,6 @@
<ItemGroup>
<PackageReference Include="Docker.DotNet" />
<PackageReference Include="Microsoft.AspNet.WebApi.Client" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Reactive" />
<PackageReference Include="System.Threading.Tasks.Dataflow" />

Просмотреть файл

@ -3,6 +3,7 @@ namespace Microsoft.ComponentDetection.Detectors.Tests;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.Poetry;
@ -87,7 +88,7 @@ package:
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
// packages from the conda section
this.AssertCondaLockComponentNameAndVersion(detectedComponents, "conda-lock", "2.1.0");
@ -97,26 +98,24 @@ package:
this.AssertPipComponentNameAndVersion(detectedComponents, "certifi", "2023.5.7");
this.AssertPipComponentNameAndVersion(detectedComponents, "requests", "2.31.0");
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
}
private void AssertCondaLockComponentNameAndVersion(IEnumerable<DetectedComponent> detectedComponents, string name, string version)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is CondaComponent component &&
component.Name.Equals(name) &&
component.Version.Equals(version)),
component.Version.Equals(version)).Should().NotBeNull(
$"Component with name {name} and version {version} was not found");
}
private void AssertPipComponentNameAndVersion(IEnumerable<DetectedComponent> detectedComponents, string name, string version)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is PipComponent component &&
component.Name.Equals(name) &&
component.Version.Equals(version)),
component.Version.Equals(version)).Should().NotBeNull(
$"Component with name {name} and version {version} was not found");
}
}

Просмотреть файл

@ -48,16 +48,16 @@ require (
.WithFile("go.mod", goMod)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
var discoveredComponents = detectedComponents.ToArray();
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/dgrijalva/jwt-go v3.2.0+incompatible - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "github.com/dgrijalva/jwt-go v3.2.0+incompatible - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Should().ContainSingle();
}
[TestMethod]
@ -79,23 +79,23 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
.WithFile("go.sum", goSum)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(6, detectedComponents.Count());
detectedComponents.Should().HaveCount(6);
var typedComponents = detectedComponents.Select(d => d.Component).ToList();
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/mock", "v1.1.1", "h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=")));
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/mock", "v1.2.0", "h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=")));
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/protobuf", "v0.0.0-20161109072736-4bd1920723d7", "h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=")));
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/protobuf", "v1.2.0", "h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=")));
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/protobuf", "v1.3.1", "h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=")));
Assert.IsTrue(typedComponents.Contains(
new GoComponent("github.com/golang/protobuf", "v1.3.2", "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=")));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/mock", "v1.1.1", "h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A="));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/mock", "v1.2.0", "h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A="));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/protobuf", "v0.0.0-20161109072736-4bd1920723d7", "h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U="));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/protobuf", "v1.2.0", "h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U="));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/protobuf", "v1.3.1", "h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg="));
typedComponents.Should().Contain(
new GoComponent("github.com/golang/protobuf", "v1.3.2", "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs="));
}
[TestMethod]
@ -115,16 +115,16 @@ require (
.WithFile("go.mod", goMod)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
var discoveredComponents = detectedComponents.ToArray();
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/dgrijalva/jwt-go v3.2.0+incompatible - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "github.com/dgrijalva/jwt-go v3.2.0+incompatible - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Should().ContainSingle();
}
[TestMethod]
@ -154,11 +154,11 @@ require (
.WithFile("go.mod", goMod2, fileLocation: Path.Join(Path.GetTempPath(), "another-location", "go.mod"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(4, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(4);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
Assert.IsTrue(dependencyGraphs.Keys.Count() == 2);
dependencyGraphs.Keys.Should().HaveCount(2);
var firstGraph = dependencyGraphs.Values.First();
var secondGraph = dependencyGraphs.Values.Skip(1).First();
@ -179,8 +179,8 @@ $#26^#25%4";
.WithFile("go.mod", invalidGoMod)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -257,10 +257,10 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZM
.WithFile("go.sum", goSum)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
}
[TestMethod]
@ -282,14 +282,14 @@ replace (
.WithFile("go.mod", goMod)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
var discoveredComponents = detectedComponents.ToArray();
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Count().Should().Be(1);
discoveredComponents.Where(component => component.Component.Id == "github.com/Azure/azure-pipeline-go v0.2.1 - Go").Should().ContainSingle();
discoveredComponents.Where(component => component.Component.Id == "github.com/kr/pretty v0.1.0 - Go").Should().ContainSingle();
}
[TestMethod]
@ -402,15 +402,15 @@ replace (
.WithFile("go.mod", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Where(component => component.Component.Id == "other v1.0.0 - Go").Should().HaveCount(0);
detectedComponents.Where(component => component.Component.Id == "other v1.2.0 - Go").Should().HaveCount(1);
detectedComponents.Where(component => component.Component.Id == "some-package v1.2.3 - Go").Should().HaveCount(1);
detectedComponents.Where(component => component.Component.Id == "test v2.0.0 - Go").Should().HaveCount(1);
detectedComponents.Where(component => component.Component.Id == "a v1.5.0 - Go").Should().HaveCount(1);
detectedComponents.Should().HaveCount(4);
detectedComponents.Should().NotContain(component => component.Component.Id == "other v1.0.0 - Go");
detectedComponents.Should().ContainSingle(component => component.Component.Id == "other v1.2.0 - Go");
detectedComponents.Should().ContainSingle(component => component.Component.Id == "some-package v1.2.3 - Go");
detectedComponents.Should().ContainSingle(component => component.Component.Id == "test v2.0.0 - Go");
detectedComponents.Should().ContainSingle(component => component.Component.Id == "a v1.5.0 - Go");
}
[TestMethod]
@ -464,10 +464,10 @@ github.com/prometheus/client_golang@v1.12.1 github.com/prometheus/common@v0.32.1
.WithFile("go.mod", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(3, detectedComponents.Count());
detectedComponents.Should().HaveCount(3);
}
[TestMethod]

Просмотреть файл

@ -1,6 +1,7 @@
namespace Microsoft.ComponentDetection.Detectors.Tests;
using System;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -22,10 +23,10 @@ public class GoComponentTests
public void ConstructorTest_NameVersion()
{
var goComponent = new GoComponent(TestName, TestVersion);
Assert.AreEqual(TestName, goComponent.Name);
Assert.AreEqual(TestVersion, goComponent.Version);
Assert.AreEqual(string.Empty, goComponent.Hash);
Assert.AreEqual($"{TestName} {TestVersion} - Go", goComponent.Id);
goComponent.Name.Should().Be(TestName);
goComponent.Version.Should().Be(TestVersion);
goComponent.Hash.Should().Be(string.Empty);
goComponent.Id.Should().Be($"{TestName} {TestVersion} - Go");
}
[TestMethod]
@ -46,10 +47,10 @@ public class GoComponentTests
public void ConstructorTest_NameVersionHash()
{
var goComponent = new GoComponent(TestName, TestVersion, TestHash);
Assert.AreEqual(TestName, goComponent.Name);
Assert.AreEqual(TestVersion, goComponent.Version);
Assert.AreEqual(TestHash, goComponent.Hash);
Assert.AreEqual($"{TestName} {TestVersion} - Go", goComponent.Id);
goComponent.Name.Should().Be(TestName);
goComponent.Version.Should().Be(TestVersion);
goComponent.Hash.Should().Be(TestHash);
goComponent.Id.Should().Be($"{TestName} {TestVersion} - Go");
}
[TestMethod]
@ -79,11 +80,11 @@ public class GoComponentTests
var goComponent1 = new GoComponent(TestName, TestVersion, TestHash);
var goComponent2 = new GoComponent(TestName, TestVersion, TestHash);
var goComponent3 = new GoComponent(TestName, TestVersion, Guid.NewGuid().ToString());
Assert.IsTrue(goComponent1.Equals(goComponent2));
Assert.IsTrue(((object)goComponent1).Equals(goComponent2));
goComponent1.Equals(goComponent2).Should().BeTrue();
((object)goComponent1).Equals(goComponent2).Should().BeTrue();
Assert.IsFalse(goComponent1.Equals(goComponent3));
Assert.IsFalse(((object)goComponent1).Equals(goComponent3));
goComponent1.Equals(goComponent3).Should().BeFalse();
((object)goComponent1).Equals(goComponent3).Should().BeFalse();
}
[TestMethod]
@ -91,6 +92,6 @@ public class GoComponentTests
{
var goComponent1 = new GoComponent(TestName, TestVersion, TestHash);
var goComponent2 = new GoComponent(TestName, TestVersion, TestHash);
Assert.IsTrue(goComponent1.GetHashCode() == goComponent2.GetHashCode());
goComponent1.GetHashCode().Should().Be(goComponent2.GetHashCode());
}
}

Просмотреть файл

@ -22,8 +22,8 @@ public class GradleComponentDetectorTests : BaseDetectorTest<GradleComponentDete
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -38,23 +38,23 @@ org.springframework:spring-jcl:5.0.5.RELEASE";
.WithFile("gradle.lockfile", validFileOne)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var discoveredComponents = componentRecorder.GetDetectedComponents().Select(c => (MavenComponent)c.Component).OrderBy(c => c.ArtifactId).ToList();
Assert.AreEqual(3, discoveredComponents.Count);
discoveredComponents.Should().HaveCount(3);
Assert.AreEqual("org.springframework", discoveredComponents[0].GroupId);
Assert.AreEqual("spring-beans", discoveredComponents[0].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[0].Version);
discoveredComponents[0].GroupId.Should().Be("org.springframework");
discoveredComponents[0].ArtifactId.Should().Be("spring-beans");
discoveredComponents[0].Version.Should().Be("5.0.5.RELEASE");
Assert.AreEqual("org.springframework", discoveredComponents[1].GroupId);
Assert.AreEqual("spring-core", discoveredComponents[1].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[1].Version);
discoveredComponents[1].GroupId.Should().Be("org.springframework");
discoveredComponents[1].ArtifactId.Should().Be("spring-core");
discoveredComponents[1].Version.Should().Be("5.0.5.RELEASE");
Assert.AreEqual("org.springframework", discoveredComponents[2].GroupId);
Assert.AreEqual("spring-jcl", discoveredComponents[2].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[2].Version);
discoveredComponents[2].GroupId.Should().Be("org.springframework");
discoveredComponents[2].ArtifactId.Should().Be("spring-jcl");
discoveredComponents[2].Version.Should().Be("5.0.5.RELEASE");
}
[TestMethod]
@ -69,24 +69,24 @@ org.springframework:spring-jcl:5.0.5.RELEASE=lintClassPath,debugCompile,releaseC
.WithFile("gradle.lockfile", validFileOne)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var discoveredComponents = detectedComponents.Select(c => (MavenComponent)c.Component).OrderBy(c => c.ArtifactId).ToList();
Assert.AreEqual(3, discoveredComponents.Count);
discoveredComponents.Should().HaveCount(3);
Assert.AreEqual("org.springframework", discoveredComponents[0].GroupId);
Assert.AreEqual("spring-beans", discoveredComponents[0].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[0].Version);
discoveredComponents[0].GroupId.Should().Be("org.springframework");
discoveredComponents[0].ArtifactId.Should().Be("spring-beans");
discoveredComponents[0].Version.Should().Be("5.0.5.RELEASE");
Assert.AreEqual("org.springframework", discoveredComponents[1].GroupId);
Assert.AreEqual("spring-core", discoveredComponents[1].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[1].Version);
discoveredComponents[1].GroupId.Should().Be("org.springframework");
discoveredComponents[1].ArtifactId.Should().Be("spring-core");
discoveredComponents[1].Version.Should().Be("5.0.5.RELEASE");
Assert.AreEqual("org.springframework", discoveredComponents[2].GroupId);
Assert.AreEqual("spring-jcl", discoveredComponents[2].ArtifactId);
Assert.AreEqual("5.0.5.RELEASE", discoveredComponents[2].Version);
discoveredComponents[2].GroupId.Should().Be("org.springframework");
discoveredComponents[2].ArtifactId.Should().Be("spring-jcl");
discoveredComponents[2].Version.Should().Be("5.0.5.RELEASE");
}
[TestMethod]
@ -109,11 +109,11 @@ org.springframework:spring-jcl:5.0.5.RELEASE";
.WithFile("gradle2.lockfile", validFileTwo)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(7, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(7);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Keys.Count().Should().Be(2);
dependencyGraphs.Keys.Should().HaveCount(2);
var graph1 = dependencyGraphs.Values.Single(dependencyGraph => dependencyGraph.GetComponents().Count() == 3);
var graph2 = dependencyGraphs.Values.Single(dependencyGraph => dependencyGraph.GetComponents().Count() == 5);
@ -154,16 +154,16 @@ org.springframework:spring-jcl:5.0.5.RELEASE";
.WithFile("gradle2.lockfile", validFileTwo)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
componentRecorder.ForOneComponent(componentRecorder.GetDetectedComponents().First().Component.Id, x =>
{
Enumerable.Count<string>(x.AllFileLocations).Should().Be(2);
x.AllFileLocations.Should().HaveCount(2);
});
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Keys.Count().Should().Be(2);
dependencyGraphs.Keys.Should().HaveCount(2);
var graph1 = dependencyGraphs.Values.First();
var graph2 = dependencyGraphs.Values.Skip(1).First();
@ -192,11 +192,11 @@ $#26^#25%4";
.WithFile("gradle2.lockfile", validFileTwo)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(5, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(5);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Keys.Count().Should().Be(1);
dependencyGraphs.Keys.Should().ContainSingle();
var graph2 = dependencyGraphs.Values.Single();

Просмотреть файл

@ -34,8 +34,8 @@ public class IvyDetectorTests : BaseDetectorTest<IvyDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
Assert.AreEqual(componentRecorder.GetDetectedComponents().Count(), 0);
Assert.AreEqual(detectorResult.ResultCode, ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
}
[TestMethod]
@ -54,22 +54,22 @@ public class IvyDetectorTests : BaseDetectorTest<IvyDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents(); // IsDevelopmentDependency = true in componentRecorder but null in detectedComponents... why?
Assert.AreEqual(3, detectedComponents.Count());
Assert.AreEqual(ProcessingResultCode.Success, detectorResult.ResultCode);
detectedComponents.Should().HaveCount(3);
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
foreach (var detectedComponent in detectedComponents)
{
var dm = (MavenComponent)detectedComponent.Component;
Assert.AreEqual(dm.ArtifactId.Replace('a', 'g'), dm.GroupId);
Assert.AreEqual(dm.GroupId.Replace('g', 'a'), dm.ArtifactId);
Assert.AreEqual(string.Format("{0}.{0}.{0}", dm.ArtifactId.Substring(1, 1)), dm.Version);
Assert.AreEqual(ComponentType.Maven, dm.Type);
dm.GroupId.Should().Be(dm.ArtifactId.Replace('a', 'g'));
dm.ArtifactId.Should().Be(dm.GroupId.Replace('g', 'a'));
dm.Version.Should().Be(string.Format("{0}.{0}.{0}", dm.ArtifactId.Substring(1, 1)));
dm.Type.Should().Be(ComponentType.Maven);
// "Detector should not populate DetectedComponent.DevelopmentDependency" - see ComponentRecorder.cs. Hence we get null not true (for d1g:d1a:1.1.1) or false here.
Assert.IsNull(detectedComponent.DevelopmentDependency);
detectedComponent.DevelopmentDependency.Should().BeNull();
// "Detector should not populate DetectedComponent.DependencyRoots!"
Assert.IsNull(detectedComponent.DependencyRoots);
detectedComponent.DependencyRoots.Should().BeNull();
}
}
@ -104,8 +104,8 @@ public class IvyDetectorTests : BaseDetectorTest<IvyDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents(); // IsDevelopmentDependency = true in componentRecorder but null in detectedComponents... why?
Assert.AreEqual(3, detectedComponents.Count());
Assert.AreEqual(ProcessingResultCode.Success, detectorResult.ResultCode);
detectedComponents.Should().HaveCount(3);
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
// There is only one graph
var dependencyGraph = componentRecorder.GetDependencyGraphsByLocation().Values.First();
@ -140,12 +140,12 @@ public class IvyDetectorTests : BaseDetectorTest<IvyDetector>
IvyDetector.AdditionalValidCommands,
It.IsAny<string[]>())).Callback((string cmd, IEnumerable<string> cmd2, string[] parameters) =>
{
Assert.AreEqual(parameters[0], "-buildfile");
parameters.Should().HaveElementAt(0, "-buildfile");
var workingDir = parameters[1].Replace("build.xml", string.Empty);
Directory.CreateDirectory(Path.Combine(workingDir, "target"));
var jsonFileOutputPath = Path.Combine(workingDir, "target", "RegisterUsage.json");
File.WriteAllText(jsonFileOutputPath, content);
Assert.AreEqual(parameters[2], "resolve-dependencies");
parameters.Should().HaveElementAt(2, "resolve-dependencies");
}).ReturnsAsync(new CommandLineExecutionResult
{
ExitCode = 0,

Просмотреть файл

@ -77,7 +77,7 @@ public class LinuxContainerDetectorTests
detectedComponents.Should().ContainSingle();
detectedComponents.First().Component.Id.Should().Be(BashPackageId);
scanResult.ContainerDetails.Should().ContainSingle();
detectedComponents.All(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id)).Should().BeTrue();
detectedComponents.Should().OnlyContain(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id));
componentRecorder.GetDetectedComponents().Select(detectedComponent => detectedComponent.Component.Id)
.Should().BeEquivalentTo(detectedComponents.Select(detectedComponent => detectedComponent.Component.Id));
}
@ -102,8 +102,8 @@ public class LinuxContainerDetectorTests
var detectedComponents = componentRecorder.GetDetectedComponents().ToList();
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponents.Should().HaveCount(0);
scanResult.ContainerDetails.Should().HaveCount(0);
detectedComponents.Should().BeEmpty();
scanResult.ContainerDetails.Should().BeEmpty();
this.mockLinuxContainerDetectorLogger.Verify(logger => logger.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
@ -129,8 +129,8 @@ public class LinuxContainerDetectorTests
var detectedComponents = componentRecorder.GetDetectedComponents();
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponents.Should().HaveCount(0);
scanResult.ContainerDetails.Should().HaveCount(0);
detectedComponents.Should().BeEmpty();
scanResult.ContainerDetails.Should().BeEmpty();
this.mockLinuxContainerDetectorLogger.Verify(logger => logger.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
@ -158,8 +158,8 @@ public class LinuxContainerDetectorTests
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponents.Should().ContainSingle();
detectedComponents.First().Component.Id.Should().Be(BashPackageId);
scanResult.ContainerDetails.Should().HaveCount(1);
detectedComponents.All(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id)).Should().BeTrue();
scanResult.ContainerDetails.Should().ContainSingle();
detectedComponents.Should().OnlyContain(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id));
}
[TestMethod]
@ -179,10 +179,10 @@ public class LinuxContainerDetectorTests
var detectedComponents = componentRecorder.GetDetectedComponents().ToList();
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
scanResult.ContainerDetails.Should().HaveCount(1);
detectedComponents.Should().HaveCount(1);
scanResult.ContainerDetails.Should().ContainSingle();
detectedComponents.Should().ContainSingle();
detectedComponents.First().Component.Id.Should().Be(BashPackageId);
detectedComponents.All(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id)).Should().BeTrue();
detectedComponents.Should().OnlyContain(dc => dc.ContainerDetailIds.Contains(scanResult.ContainerDetails.First().Id));
this.mockSyftLinuxScanner.Verify(scanner => scanner.ScanLinuxAsync(It.IsAny<string>(), It.IsAny<IEnumerable<DockerLayer>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()), Times.Once);
}

Просмотреть файл

@ -60,7 +60,7 @@ public class LinuxScannerTests
{
var result = (await this.linuxScanner.ScanLinuxAsync("fake_hash", new[] { new DockerLayer { LayerIndex = 0, DiffId = "sha256:f95fc50d21d981f1efe1f04109c2c3287c271794f5d9e4fdf9888851a174a971" } }, 0)).First().LinuxComponents;
result.Should().HaveCount(1);
result.Should().ContainSingle();
var package = result.First();
package.Name.Should().Be("test");
package.Version.Should().Be("1.0.0");

Просмотреть файл

@ -1,6 +1,7 @@
namespace Microsoft.ComponentDetection.Detectors.Tests;
using System;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts.BcdeModels;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -17,22 +18,22 @@ public class MavenParsingUtilitiesTests
var componentAndMetaData =
GenerateDetectedComponentAndMetadataFromMavenString("org.apache.maven:maven-artifact:jar:3.6.1-SNAPSHOT:provided");
Assert.IsNotNull(componentAndMetaData);
Assert.IsNotNull(componentAndMetaData.Component);
Assert.IsNotNull(componentAndMetaData.IsDevelopmentDependency);
Assert.IsNotNull(componentAndMetaData.DependencyScope);
componentAndMetaData.Should().NotBeNull();
componentAndMetaData.Component.Should().NotBeNull();
componentAndMetaData.IsDevelopmentDependency.Should().NotBeNull();
componentAndMetaData.DependencyScope.Should().NotBeNull();
var actualComponent = (MavenComponent)componentAndMetaData.Component.Component;
Assert.IsInstanceOfType(actualComponent, typeof(MavenComponent));
actualComponent.Should().BeOfType<MavenComponent>();
var expectedComponent = new MavenComponent("org.apache.maven", "maven-artifact", "3.6.1-SNAPSHOT");
Assert.AreEqual(expectedComponent.ArtifactId, actualComponent.ArtifactId);
Assert.AreEqual(expectedComponent.GroupId, actualComponent.GroupId);
Assert.AreEqual(expectedComponent.Version, actualComponent.Version);
actualComponent.ArtifactId.Should().Be(expectedComponent.ArtifactId);
actualComponent.GroupId.Should().Be(expectedComponent.GroupId);
actualComponent.Version.Should().Be(expectedComponent.Version);
Assert.IsFalse(componentAndMetaData.IsDevelopmentDependency);
Assert.AreEqual(DependencyScope.MavenProvided, componentAndMetaData.DependencyScope);
componentAndMetaData.IsDevelopmentDependency.Should().BeFalse();
componentAndMetaData.DependencyScope.Should().Be(DependencyScope.MavenProvided);
}
[TestMethod]
@ -41,12 +42,12 @@ public class MavenParsingUtilitiesTests
var componentAndMetaData =
GenerateDetectedComponentAndMetadataFromMavenString("org.apache.maven:maven-artifact:jar:3.6.1-SNAPSHOT");
Assert.IsNotNull(componentAndMetaData);
Assert.IsNotNull(componentAndMetaData.DependencyScope);
componentAndMetaData.Should().NotBeNull();
componentAndMetaData.DependencyScope.Should().NotBeNull();
var actualComponent = (MavenComponent)componentAndMetaData.Component.Component;
Assert.IsInstanceOfType(actualComponent, typeof(MavenComponent));
Assert.AreEqual(DependencyScope.MavenCompile, componentAndMetaData.DependencyScope);
actualComponent.Should().BeOfType<MavenComponent>();
componentAndMetaData.DependencyScope.Should().Be(DependencyScope.MavenCompile);
}
[TestMethod]
@ -55,12 +56,12 @@ public class MavenParsingUtilitiesTests
var componentAndMetaData =
GenerateDetectedComponentAndMetadataFromMavenString("org.apache.maven:maven-artifact:jar:3.6.1-SNAPSHOT:provided (optional)");
Assert.IsNotNull(componentAndMetaData);
Assert.IsNotNull(componentAndMetaData.DependencyScope);
componentAndMetaData.Should().NotBeNull();
componentAndMetaData.DependencyScope.Should().NotBeNull();
var actualComponent = (MavenComponent)componentAndMetaData.Component.Component;
Assert.IsInstanceOfType(actualComponent, typeof(MavenComponent));
Assert.AreEqual(DependencyScope.MavenProvided, componentAndMetaData.DependencyScope);
actualComponent.Should().BeOfType<MavenComponent>();
componentAndMetaData.DependencyScope.Should().Be(DependencyScope.MavenProvided);
}
[TestMethod]
@ -69,12 +70,12 @@ public class MavenParsingUtilitiesTests
var componentAndMetaData =
GenerateDetectedComponentAndMetadataFromMavenString("org.apache.maven:maven-artifact:jar:3.6.1-SNAPSHOT:test");
Assert.IsNotNull(componentAndMetaData);
Assert.IsNotNull(componentAndMetaData.IsDevelopmentDependency);
componentAndMetaData.Should().NotBeNull();
componentAndMetaData.IsDevelopmentDependency.Should().NotBeNull();
var actualComponent = (MavenComponent)componentAndMetaData.Component.Component;
Assert.IsInstanceOfType(actualComponent, typeof(MavenComponent));
Assert.IsTrue(componentAndMetaData.IsDevelopmentDependency);
actualComponent.Should().BeOfType<MavenComponent>();
componentAndMetaData.IsDevelopmentDependency.Should().BeTrue();
}
[TestMethod]
@ -82,6 +83,6 @@ public class MavenParsingUtilitiesTests
{
var ex = Assert.ThrowsException<InvalidOperationException>(
() => GenerateDetectedComponentAndMetadataFromMavenString("org.apache.maven:maven-artifact:jar:3.6.1-SNAPSHOT:invalidScope"));
Assert.IsTrue(ex.Message.Contains("invalid scope", StringComparison.OrdinalIgnoreCase));
ex.Message.Contains("invalid scope", StringComparison.OrdinalIgnoreCase).Should().BeTrue();
}
}

Просмотреть файл

@ -21,25 +21,25 @@ public class MavenStyleDependencyGraphParserTests
var parser = new MavenStyleDependencyGraphParser();
var parsedGraph = parser.Parse(sampleMavenDependencyTree);
Assert.AreEqual(parsedGraph.Children.Count, 20);
Assert.AreEqual(parsedGraph.Value, "org.apache.maven:maven-compat:jar:3.6.1-SNAPSHOT");
parsedGraph.Children.Should().HaveCount(20);
parsedGraph.Value.Should().Be("org.apache.maven:maven-compat:jar:3.6.1-SNAPSHOT");
// Verify a specific interesting path:
var mavenCore = parsedGraph.Children.FirstOrDefault(x => x.Value == "org.apache.maven:maven-core:jar:3.6.1-SNAPSHOT:compile");
Assert.IsNotNull(mavenCore);
Assert.AreEqual(mavenCore.Children.Count, 7);
mavenCore.Should().NotBeNull();
mavenCore.Children.Should().HaveCount(7);
var guice = mavenCore.Children.FirstOrDefault(x => x.Value == "com.google.inject:guice:jar:no_aop:4.2.1:compile");
Assert.IsNotNull(guice);
Assert.AreEqual(guice.Children.Count, 2);
guice.Should().NotBeNull();
guice.Children.Should().HaveCount(2);
var guava = guice.Children.FirstOrDefault(x => x.Value == "com.google.guava:guava:jar:25.1-android:compile");
Assert.IsNotNull(guava);
Assert.AreEqual(guava.Children.Count, 5);
guava.Should().NotBeNull();
guava.Children.Should().HaveCount(5);
var animalSnifferAnnotations = guava.Children.FirstOrDefault(x => x.Value == "org.codehaus.mojo:animal-sniffer-annotations:jar:1.14:compile");
Assert.IsNotNull(animalSnifferAnnotations);
Assert.AreEqual(animalSnifferAnnotations.Children.Count, 0);
animalSnifferAnnotations.Should().NotBeNull();
animalSnifferAnnotations.Children.Should().BeEmpty();
}
[TestMethod]
@ -66,7 +66,7 @@ public class MavenStyleDependencyGraphParserTests
var topLevelComponentDependencies = dependencyGraph.GetDependenciesForComponent(topLevelComponent.Component.Id);
topLevelComponentDependencies.Should().HaveCount(20);
topLevelComponentDependencies.Should().Contain(mavenCore.Component.Id);
topLevelComponentDependencies.All(componentId => dependencyGraph.IsComponentExplicitlyReferenced(componentId)).Should().BeTrue();
topLevelComponentDependencies.Should().OnlyContain(componentId => dependencyGraph.IsComponentExplicitlyReferenced(componentId));
var mavenCoreDependencies = dependencyGraph.GetDependenciesForComponent(mavenCore.Component.Id);
mavenCoreDependencies.Should().HaveCount(7);

Просмотреть файл

@ -7,6 +7,7 @@
<ItemGroup Label="Package References">
<PackageReference Include="coverlet.collector" PrivateAssets="all" />
<PackageReference Include="FluentAssertions.Analyzers" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NuGet.Versioning" />

Просмотреть файл

@ -36,8 +36,8 @@ public class MvnCliDetectorTests : BaseDetectorTest<MvnCliComponentDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility
.ExecuteDetectorAsync();
Assert.AreEqual(componentRecorder.GetDetectedComponents().Count(), 0);
Assert.AreEqual(detectorResult.ResultCode, ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
}
[TestMethod]
@ -51,15 +51,15 @@ public class MvnCliDetectorTests : BaseDetectorTest<MvnCliComponentDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(detectedComponents.Count(), 1);
Assert.AreEqual(detectorResult.ResultCode, ProcessingResultCode.Success);
detectedComponents.Should().ContainSingle();
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var mavenComponent = detectedComponents.First().Component as MavenComponent;
var splitComponent = componentString.Split(':');
Assert.AreEqual(splitComponent[0], mavenComponent.GroupId);
Assert.AreEqual(splitComponent[1], mavenComponent.ArtifactId);
Assert.AreEqual(splitComponent[3], mavenComponent.Version);
Assert.AreEqual(ComponentType.Maven, mavenComponent.Type);
splitComponent.Should().HaveElementAt(0, mavenComponent.GroupId);
splitComponent.Should().HaveElementAt(1, mavenComponent.ArtifactId);
splitComponent.Should().HaveElementAt(3, mavenComponent.Version);
mavenComponent.Type.Should().Be(ComponentType.Maven);
}
[TestMethod]
@ -103,14 +103,14 @@ public class MvnCliDetectorTests : BaseDetectorTest<MvnCliComponentDetector>
var (detectorResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(detectedComponents.Count(), 3);
Assert.AreEqual(detectorResult.ResultCode, ProcessingResultCode.Success);
detectedComponents.Should().HaveCount(3);
detectorResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var splitComponent = componentString.Split(':');
var splitChildComponent = childComponentString.Split(':');
var mavenComponent = detectedComponents.FirstOrDefault(x => (x.Component as MavenComponent).ArtifactId == splitChildComponent[1]);
Assert.IsNotNull(mavenComponent);
mavenComponent.Should().NotBeNull();
componentRecorder.AssertAllExplicitlyReferencedComponents<MavenComponent>(
mavenComponent.Component.Id,

Просмотреть файл

@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.Npm;
@ -28,12 +29,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(detectedComponents.First().Component.Type, ComponentType.Npm);
Assert.AreEqual(((NpmComponent)detectedComponents.First().Component).Name, componentName);
Assert.AreEqual(((NpmComponent)detectedComponents.First().Component).Version, version);
detectedComponents.Should().ContainSingle();
ComponentType.Npm.Should().Be(detectedComponents.First().Component.Type);
componentName.Should().Be(((NpmComponent)detectedComponents.First().Component).Name);
version.Should().Be(((NpmComponent)detectedComponents.First().Component).Version);
}
[TestMethod]
@ -46,12 +47,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.AreEqual(authorEmail, ((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().Be(authorEmail);
}
[TestMethod]
@ -64,12 +65,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().BeNull();
}
[TestMethod]
@ -84,12 +85,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.AreEqual(authorEmail, ((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().Be(authorEmail);
}
[TestMethod]
@ -103,12 +104,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().BeNull();
}
[TestMethod]
@ -123,11 +124,11 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author);
((NpmComponent)detectedComponents.First().Component).Author.Should().BeNull();
}
[TestMethod]
@ -141,12 +142,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
var (scanResult, componentRecorder) = await this.DetectorTestUtility
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().BeNull();
}
[TestMethod]
@ -161,12 +162,12 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.AreEqual(authorName, ((NpmComponent)detectedComponents.First().Component).Author.Name);
Assert.AreEqual(authorEmail, ((NpmComponent)detectedComponents.First().Component).Author.Email);
((NpmComponent)detectedComponents.First().Component).Author.Name.Should().Be(authorName);
((NpmComponent)detectedComponents.First().Component).Author.Email.Should().Be(authorEmail);
}
[TestMethod]
@ -181,11 +182,11 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author);
((NpmComponent)detectedComponents.First().Component).Author.Should().BeNull();
}
[TestMethod]
@ -200,20 +201,20 @@ public class NpmDetectorTests : BaseDetectorTest<NpmComponentDetector>
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
AssertDetectedComponentCount(detectedComponents, 1);
AssertNpmComponent(detectedComponents);
Assert.IsNull(((NpmComponent)detectedComponents.First().Component).Author);
((NpmComponent)detectedComponents.First().Component).Author.Should().BeNull();
}
private static void AssertDetectedComponentCount(IEnumerable<DetectedComponent> detectedComponents, int expectedCount)
{
Assert.AreEqual(expectedCount, detectedComponents.Count());
detectedComponents.Should().HaveCount(expectedCount);
}
private static void AssertNpmComponent(IEnumerable<DetectedComponent> detectedComponents)
{
Assert.AreEqual(detectedComponents.First().Component.Type, ComponentType.Npm);
detectedComponents.First().Component.Type.Should().Be(ComponentType.Npm);
}
}

Просмотреть файл

@ -46,15 +46,15 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
foreach (var component in detectedComponents)
{
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
component.Component.Id,
parentComponent0 => parentComponent0.Name == componentName0 && parentComponent0.Version == version0);
Assert.IsFalse(string.IsNullOrWhiteSpace(((NpmComponent)component.Component).Hash));
((NpmComponent)component.Component).Hash.Should().NotBeNullOrWhiteSpace();
}
}
@ -72,8 +72,8 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -85,8 +85,8 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(packageLockName, packageLockContents, this.packageLockJsonSearchPatterns, fileLocation: packageLockPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -117,10 +117,10 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
var component0 = detectedComponents.FirstOrDefault(x => x.Component.Id.Contains(componentName0));
@ -181,11 +181,11 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
var npmComponent2Id = new NpmComponent(componentName2, version2).Id;
var dependenciesFor0 = graph.GetDependenciesForComponent(npmComponent0Id);
Assert.AreEqual(dependenciesFor0.Count(), 2);
dependenciesFor0.Should().HaveCount(2);
var dependenciesFor2 = graph.GetDependenciesForComponent(npmComponent2Id);
Assert.AreEqual(dependenciesFor2.Count(), 1);
dependenciesFor2.Should().ContainSingle();
Assert.IsTrue(dependenciesFor0.Contains(npmComponent2Id));
dependenciesFor0.Should().Contain(npmComponent2Id);
}
[TestMethod]
@ -237,8 +237,8 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -290,8 +290,8 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -353,8 +353,8 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern, fileLocation: packageJsonFileLocation)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
}
[TestMethod]
@ -408,10 +408,10 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
foreach (var component in detectedComponents)
{
@ -439,10 +439,10 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonContents, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
foreach (var component in detectedComponents)
{
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
@ -488,10 +488,10 @@ public class NpmDetectorWithRootsTests : BaseDetectorTest<NpmComponentDetectorWi
.WithFile(this.packageJsonFileName, packageJsonTemplate2, this.packageJsonSearchPattern, fileLocation: packageJsonUnderNodeModules)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
foreach (var component in detectedComponents)
{
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(

Просмотреть файл

@ -45,15 +45,15 @@ public class NpmLockfile3DetectorTests : BaseDetectorTest<NpmLockfile3Detector>
.WithFile(packageJsonName, packageJsonContents, this.packageJsonSearchPattern, fileLocation: packageJsonPath)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(4, detectedComponents.Count());
detectedComponents.Should().HaveCount(4);
foreach (var component in detectedComponents)
{
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
component.Component.Id,
parentComponent0 => parentComponent0.Name == componentName0 && parentComponent0.Version == version0);
Assert.IsFalse(string.IsNullOrWhiteSpace(((NpmComponent)component.Component).Hash));
((NpmComponent)component.Component).Hash.Should().NotBeNullOrWhiteSpace();
}
}
@ -84,10 +84,10 @@ public class NpmLockfile3DetectorTests : BaseDetectorTest<NpmLockfile3Detector>
.WithFile(this.packageJsonFileName, packageJsonTemplate, this.packageJsonSearchPattern)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents().ToList();
Assert.AreEqual(4, detectedComponents.Count);
detectedComponents.Should().HaveCount(4);
var component0 = detectedComponents.First(x => x.Component.Id.Contains(componentName0));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
@ -108,7 +108,7 @@ public class NpmLockfile3DetectorTests : BaseDetectorTest<NpmLockfile3Detector>
componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NpmComponent>(
component.Component.Id,
parentComponent0 => parentComponent0.Name == componentName0 || parentComponent0.Name == componentName1);
Assert.IsFalse(string.IsNullOrWhiteSpace(((NpmComponent)component.Component).Hash));
((NpmComponent)component.Component).Hash.Should().NotBeNullOrWhiteSpace();
}
}

Просмотреть файл

@ -40,12 +40,12 @@ public class NpmUtilitiesTests
var componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNotNull(componentFromJProperty);
Assert.AreEqual(componentFromJProperty.Type, ComponentType.Npm);
componentFromJProperty.Should().NotBeNull();
componentFromJProperty.Type.Should().Be(ComponentType.Npm);
var npmComponent = (NpmComponent)componentFromJProperty;
Assert.AreEqual(npmComponent.Name, "async");
Assert.AreEqual(npmComponent.Version, "2.3.0");
npmComponent.Name.Should().Be("async");
npmComponent.Version.Should().Be("2.3.0");
}
[TestMethod]
@ -63,7 +63,7 @@ public class NpmUtilitiesTests
var componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
}
[TestMethod]
@ -79,7 +79,7 @@ public class NpmUtilitiesTests
var j = JObject.Parse(jsonInvalidCharacter);
var componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
var jsonUrlName = @"{
""http://thisis/my/packagename"": {
@ -91,7 +91,7 @@ public class NpmUtilitiesTests
j = JObject.Parse(jsonUrlName);
componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
var jsonInvalidInitialCharacter1 = @"{
""_async"": {
@ -103,7 +103,7 @@ public class NpmUtilitiesTests
j = JObject.Parse(jsonInvalidInitialCharacter1);
componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
var jsonInvalidInitialCharacter2 = @"{
"".async"": {
@ -115,7 +115,7 @@ public class NpmUtilitiesTests
j = JObject.Parse(jsonInvalidInitialCharacter2);
componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
var longPackageName = new string('a', 214);
var jsonLongName = $@"{{
@ -128,18 +128,18 @@ public class NpmUtilitiesTests
j = JObject.Parse(jsonLongName);
componentFromJProperty = NpmComponentUtilities.GetTypedComponent(j.Children<JProperty>().Single(), "registry.npmjs.org", this.loggerMock.Object);
Assert.IsNull(componentFromJProperty);
componentFromJProperty.Should().BeNull();
}
[TestMethod]
public void TestTryParseNpmVersion()
{
var parsed = NpmComponentUtilities.TryParseNpmVersion("registry.npmjs.org", "archiver", "https://registry.npmjs.org/archiver-2.1.1.tgz", out var parsedVersion);
Assert.IsTrue(parsed);
Assert.AreEqual(parsedVersion.ToString(), "2.1.1");
parsed.Should().BeTrue();
parsedVersion.ToString().Should().Be("2.1.1");
parsed = NpmComponentUtilities.TryParseNpmVersion("registry.npmjs.org", "archiver", "notavalidurl", out parsedVersion);
Assert.IsFalse(parsed);
parsed.Should().BeFalse();
}
[TestMethod]
@ -173,15 +173,15 @@ public class NpmUtilitiesTests
NpmComponentUtilities.TraverseAndRecordComponents(currentDependency, singleFileComponentRecorder1, typedComponent, typedComponent);
NpmComponentUtilities.TraverseAndRecordComponents(currentDependency, singleFileComponentRecorder2, typedComponent, typedComponent);
Assert.AreEqual(componentRecorder.GetDetectedComponents().Count(), 1);
Assert.IsNotNull(componentRecorder.GetComponent(typedComponent.Id));
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
componentRecorder.GetComponent(typedComponent.Id).Should().NotBeNull();
var graph1 = componentRecorder.GetDependencyGraphsByLocation()["/this/is/a/test/path/"];
var graph2 = componentRecorder.GetDependencyGraphsByLocation()["/this/is/a/different/path/"];
Assert.IsTrue(graph1.GetExplicitReferencedDependencyIds(typedComponent.Id).Contains(typedComponent.Id));
Assert.IsTrue(graph2.GetExplicitReferencedDependencyIds(typedComponent.Id).Contains(typedComponent.Id));
Assert.IsFalse(componentRecorder.GetEffectiveDevDependencyValue(typedComponent.Id).GetValueOrDefault(true));
graph1.GetExplicitReferencedDependencyIds(typedComponent.Id).Contains(typedComponent.Id).Should().BeTrue();
graph2.GetExplicitReferencedDependencyIds(typedComponent.Id).Contains(typedComponent.Id).Should().BeTrue();
componentRecorder.GetEffectiveDevDependencyValue(typedComponent.Id).GetValueOrDefault(true).Should().BeFalse();
var json1 = @"{
""test"": {
@ -200,18 +200,18 @@ public class NpmUtilitiesTests
NpmComponentUtilities.TraverseAndRecordComponents(currentDependency1, singleFileComponentRecorder2, typedComponent1, typedComponent1);
Assert.AreEqual(componentRecorder.GetDetectedComponents().Count(), 2);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
Assert.IsTrue(graph2.GetExplicitReferencedDependencyIds(typedComponent1.Id).Contains(typedComponent1.Id));
Assert.IsTrue(componentRecorder.GetEffectiveDevDependencyValue(typedComponent1.Id).GetValueOrDefault(false));
graph2.GetExplicitReferencedDependencyIds(typedComponent1.Id).Contains(typedComponent1.Id).Should().BeTrue();
componentRecorder.GetEffectiveDevDependencyValue(typedComponent1.Id).GetValueOrDefault(false).Should().BeTrue();
NpmComponentUtilities.TraverseAndRecordComponents(currentDependency1, singleFileComponentRecorder2, typedComponent, typedComponent1, parentComponentId: typedComponent1.Id);
Assert.AreEqual(componentRecorder.GetDetectedComponents().Count(), 2);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
var explicitlyReferencedDependencyIds = graph2.GetExplicitReferencedDependencyIds(typedComponent.Id);
Assert.IsTrue(explicitlyReferencedDependencyIds.Contains(typedComponent.Id));
Assert.IsTrue(explicitlyReferencedDependencyIds.Contains(typedComponent1.Id));
Assert.AreEqual(2, explicitlyReferencedDependencyIds.Count);
explicitlyReferencedDependencyIds.Should().Contain(typedComponent.Id);
explicitlyReferencedDependencyIds.Should().Contain(typedComponent1.Id);
explicitlyReferencedDependencyIds.Should().HaveCount(2);
}
[TestMethod]

Просмотреть файл

@ -38,8 +38,8 @@ public class NuGetComponentDetectorTests : BaseDetectorTest<NuGetComponentDetect
{
var (scanResult, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -54,14 +54,14 @@ public class NuGetComponentDetectorTests : BaseDetectorTest<NuGetComponentDetect
.WithFile("*.nuspec", nuspec)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode, "Result code does Not match.");
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count(), "Componet count does not match");
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success, "Result code does Not match.");
componentRecorder.GetDetectedComponents().Count().Should().Be(1, "Component count does not match");
var detectedComponent = componentRecorder.GetDetectedComponents().First().Component;
Assert.AreEqual(ComponentType.NuGet, detectedComponent.Type);
detectedComponent.Type.Should().Be(ComponentType.NuGet);
var nuGetComponent = (NuGetComponent)detectedComponent;
Assert.AreEqual(testComponentName, nuGetComponent.Name, "Component name does not match.");
Assert.AreEqual(testVersion, nuGetComponent.Version, "Component version does not match.");
CollectionAssert.AreEqual(testAuthors, nuGetComponent.Authors, "Authors does not match.");
nuGetComponent.Name.Should().Be(testComponentName, "Component name does not match.");
nuGetComponent.Version.Should().Be(testVersion, "Component version does not match.");
nuGetComponent.Authors.Should().BeEquivalentTo(testAuthors, "Authors does not match.");
}
[TestMethod]
@ -76,14 +76,14 @@ public class NuGetComponentDetectorTests : BaseDetectorTest<NuGetComponentDetect
.WithFile("*.nuspec", nuspec)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode, "Result code does Not match.");
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count(), "Componet count does not match");
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success, "Result code does Not match.");
componentRecorder.GetDetectedComponents().Count().Should().Be(1, "Component count does not match");
var detectedComponent = componentRecorder.GetDetectedComponents().First().Component;
Assert.AreEqual(ComponentType.NuGet, detectedComponent.Type);
detectedComponent.Type.Should().Be(ComponentType.NuGet);
var nuGetComponent = (NuGetComponent)detectedComponent;
Assert.AreEqual(testComponentName, nuGetComponent.Name, "Component name does not match.");
Assert.AreEqual(testVersion, nuGetComponent.Version, "Component version does not match.");
CollectionAssert.AreEqual(testAuthors, nuGetComponent.Authors, "Authors does not match.");
nuGetComponent.Name.Should().Be(testComponentName, "Component name does not match.");
nuGetComponent.Version.Should().Be(testVersion, "Component version does not match.");
nuGetComponent.Authors.Should().BeEquivalentTo(testAuthors, "Authors does not match.");
}
[TestMethod]
@ -95,8 +95,8 @@ public class NuGetComponentDetectorTests : BaseDetectorTest<NuGetComponentDetect
.WithFile("test.nupkg", nupkg)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
}
[TestMethod]
@ -110,8 +110,8 @@ public class NuGetComponentDetectorTests : BaseDetectorTest<NuGetComponentDetect
.WithFile("test.nupkg", nupkg)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
}
[TestMethod]
@ -154,10 +154,10 @@ NUGET
.AddServiceMock(this.mockLogger)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
// While there are 26 lines in the sample, several dependencies are identical, so there are only 11 matches.
Assert.AreEqual(11, componentRecorder.GetDetectedComponents().Count());
componentRecorder.GetDetectedComponents().Count().Should().Be(11);
// Verify that we stop executing after parsing the paket.lock file.
this.mockLogger.Verify(
@ -191,8 +191,8 @@ NUGET
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>()));
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
}
[TestMethod]
@ -267,8 +267,8 @@ NUGET
var scanResult = await detector.ExecuteDetectorAsync(new ScanRequest(new DirectoryInfo(sourceDirectoryPath), (name, directoryName) => false, null, new Dictionary<string, string>(), null, componentRecorder));
directoryWalkerMock.VerifyAll();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
}
[TestMethod]

Просмотреть файл

@ -4,6 +4,7 @@ using System;
using System.IO;
using System.IO.Compression;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Detectors.NuGet;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -22,7 +23,7 @@ public class NuGetNuspecUtilitiesTests
await Assert.ThrowsExceptionAsync<ArgumentException>(ShouldThrow);
// The position should always be reset to 0
Assert.AreEqual(0, stream.Position);
stream.Position.Should().Be(0);
}
[TestMethod]
@ -42,7 +43,7 @@ public class NuGetNuspecUtilitiesTests
await Assert.ThrowsExceptionAsync<ArgumentException>(ShouldThrow);
// The position should always be reset to 0
Assert.AreEqual(0, stream.Position);
stream.Position.Should().Be(0);
}
[TestMethod]
@ -63,7 +64,7 @@ public class NuGetNuspecUtilitiesTests
await Assert.ThrowsExceptionAsync<FileNotFoundException>(ShouldThrow);
// The position should always be reset to 0
Assert.AreEqual(0, stream.Position);
stream.Position.Should().Be(0);
}
[TestMethod]
@ -86,14 +87,14 @@ public class NuGetNuspecUtilitiesTests
var bytes = await NuGetNuspecUtilities.GetNuspecBytesAsync(stream);
Assert.AreEqual(randomBytes.Length, bytes.Length);
bytes.Should().HaveCount(randomBytes.Length);
for (var i = 0; i < randomBytes.Length; i++)
{
Assert.AreEqual(randomBytes[i], bytes[i]);
bytes.Should().HaveElementAt(i, randomBytes[i]);
}
// The position should always be reset to 0
Assert.AreEqual(0, stream.Position);
stream.Position.Should().Be(0);
}
}

Просмотреть файл

@ -44,13 +44,13 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
// Number of unique nodes in ProjectAssetsJson
Console.WriteLine(string.Join(",", detectedComponents.Select(x => x.Component.Id)));
Assert.AreEqual(3, detectedComponents.Count());
Assert.IsNotNull(detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("coverlet.msbuild")));
detectedComponents.Should().HaveCount(3);
detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("coverlet.msbuild")).Should().NotBeNull();
Assert.IsTrue(detectedComponents.All(x =>
detectedComponents.Should().OnlyContain(x =>
componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NuGetComponent>(
x.Component.Id,
y => y.Id == x.Component.Id)));
y => y.Id == x.Component.Id));
componentRecorder.ForAllComponents(grouping => Assert.IsTrue(grouping.AllFileLocations.Any(location => location.Contains("Loader.csproj"))));
}
@ -67,16 +67,16 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
// Number of unique nodes in ProjectAssetsJson
Console.WriteLine(string.Join(",", detectedComponents.Select(x => x.Component.Id)));
Assert.AreEqual(26, detectedComponents.Count());
Assert.IsNotNull(detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("Polly")));
Assert.AreEqual(5, detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().Count(x => x.Name.Contains("System.Composition")));
detectedComponents.Should().HaveCount(26);
detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("Polly")).Should().NotBeNull();
detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().Count(x => x.Name.Contains("System.Composition")).Should().Be(5);
var nugetVersioning = detectedComponents.FirstOrDefault(x => (x.Component as NuGetComponent).Name.Contains("NuGet.DependencyResolver.Core"));
Assert.IsNotNull(nugetVersioning);
nugetVersioning.Should().NotBeNull();
Assert.IsTrue(componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NuGetComponent>(
componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NuGetComponent>(
nugetVersioning.Component.Id,
x => x.Name.Contains("NuGet.ProjectModel")));
x => x.Name.Contains("NuGet.ProjectModel")).Should().BeTrue();
componentRecorder.ForAllComponents(grouping => Assert.IsTrue(grouping.AllFileLocations.Any(location => location.Contains("Detectors.csproj"))));
}
@ -92,8 +92,8 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
var ommittedComponentInformationJson = scanResult.AdditionalTelemetryDetails[NuGetProjectModelProjectCentricComponentDetector.OmittedFrameworkComponentsTelemetryKey];
var omittedComponentsWithCount = JsonConvert.DeserializeObject<Dictionary<string, int>>(ommittedComponentInformationJson);
Assert.IsTrue(omittedComponentsWithCount.Keys.Count > 5, "Ommitted framework assemblies are missing. There should be more than ten, but this is a gut check to make sure we have data.");
Assert.AreEqual(omittedComponentsWithCount["Microsoft.NETCore.App"], 4, "There should be four cases of the NETCore.App library being omitted in the test data.");
(omittedComponentsWithCount.Keys.Count > 5).Should().BeTrue("Ommitted framework assemblies are missing. There should be more than ten, but this is a gut check to make sure we have data.");
omittedComponentsWithCount["Microsoft.NETCore.App"].Should().Be(4, "There should be four cases of the NETCore.App library being omitted in the test data.");
}
[TestMethod]
@ -116,12 +116,12 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
var dependencies = graph.GetDependenciesForComponent(componentDetectionCommon.Component.Id);
foreach (var expectedId in expectedDependencyIdsForCompositionTypedParts)
{
Assert.IsTrue(dependencies.Contains(expectedId));
dependencies.Should().Contain(expectedId);
}
Assert.AreEqual(dependencies.Count(), expectedDependencyIdsForCompositionTypedParts.Length);
expectedDependencyIdsForCompositionTypedParts.Should().HaveSameCount(dependencies);
Assert.AreEqual(graph.GetComponents().Count(), detectedComponents.Count());
detectedComponents.Should().HaveCount(graph.GetComponents().Count());
// Top level dependencies look like this:
// (we expect all non-proj and non-framework to show up as explicit refs, so those will be absent from the check)
@ -172,7 +172,7 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
{
var component = detectedComponents.First(x => x.Component.Id == componentId);
var expectedExplicitRefValue = expectedExplicitRefs.Contains(((NuGetComponent)component.Component).Name);
Assert.AreEqual(expectedExplicitRefValue, graph.IsComponentExplicitlyReferenced(componentId));
graph.IsComponentExplicitlyReferenced(componentId).Should().Be(expectedExplicitRefValue);
}
}
@ -186,14 +186,14 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
// Number of unique nodes in ProjectAssetsJson
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
Assert.IsNotNull(detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("Microsoft.Extensions.DependencyModel")));
detectedComponents.Should().HaveCount(2);
detectedComponents.Select(x => x.Component).Cast<NuGetComponent>().FirstOrDefault(x => x.Name.Contains("Microsoft.Extensions.DependencyModel")).Should().NotBeNull();
var systemTextJson = detectedComponents.FirstOrDefault(x => (x.Component as NuGetComponent).Name.Contains("System.Text.Json"));
Assert.IsTrue(componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NuGetComponent>(
componentRecorder.IsDependencyOfExplicitlyReferencedComponents<NuGetComponent>(
systemTextJson.Component.Id,
x => x.Name.Contains("Microsoft.Extensions.DependencyModel")));
x => x.Name.Contains("Microsoft.Extensions.DependencyModel")).Should().BeTrue();
componentRecorder.ForAllComponents(grouping => Assert.IsTrue(grouping.AllFileLocations.Any(location => location.Contains("ExtCore.WebApplication.csproj"))));
}
@ -210,8 +210,8 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
var omittedComponentsWithCount = JsonConvert.DeserializeObject<Dictionary<string, int>>(ommittedComponentInformationJson);
// With 3.X, we don't expect there to be a lot of these, but there are still netstandard libraries present which can bring things into the graph
Assert.AreEqual(omittedComponentsWithCount.Keys.Count, 4, "Ommitted framework assemblies are missing. There should be more than ten, but this is a gut check to make sure we have data.");
Assert.AreEqual(omittedComponentsWithCount["System.Reflection"], 1, "There should be one case of the System.Reflection library being omitted in the test data.");
omittedComponentsWithCount.Keys.Should().HaveCount(4, "Ommitted framework assemblies are missing. There should be more than ten, but this is a gut check to make sure we have data.");
omittedComponentsWithCount["System.Reflection"].Should().Be(1, "There should be one case of the System.Reflection library being omitted in the test data.");
}
[TestMethod]
@ -236,10 +236,10 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
var dependencies = graph.GetDependenciesForComponent(componentDetectionCommon.Component.Id);
foreach (var expectedId in expectedDependencyIdsForExtensionsDependencyModel)
{
Assert.IsTrue(dependencies.Contains(expectedId));
dependencies.Should().Contain(expectedId);
}
Assert.AreEqual(graph.GetComponents().Count(), detectedComponents.Count());
detectedComponents.Should().HaveCount(graph.GetComponents().Count());
// Top level dependencies look like this:
// (we expect all non-proj and non-framework to show up as explicit refs, so those will be absent from the check)
@ -256,7 +256,7 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
{
var component = detectedComponents.First(x => x.Component.Id == componentId);
var expectedExplicitRefValue = expectedExplicitRefs.Contains(((NuGetComponent)component.Component).Name);
Assert.AreEqual(expectedExplicitRefValue, graph.IsComponentExplicitlyReferenced(componentId));
graph.IsComponentExplicitlyReferenced(componentId).Should().Be(expectedExplicitRefValue);
}
}
@ -279,7 +279,7 @@ public class NuGetProjectModelProjectCentricComponentDetectorTests : BaseDetecto
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Count.Should().Be(0);
dependencyGraphs.Should().BeEmpty();
}
private string Convert22SampleToOSAgnostic(string project_assets)

Просмотреть файл

@ -53,7 +53,7 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
.WithFile("setup.py", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
this.mockLogger.VerifyAll();
}
@ -62,7 +62,7 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
{
var (result, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
}
[TestMethod]
@ -101,23 +101,23 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
.WithFile("requirements.txt", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(8, detectedComponents.Count());
detectedComponents.Should().HaveCount(8);
var pipComponents = detectedComponents.Where(detectedComponent => detectedComponent.Component.Id.Contains("pip")).ToList();
Assert.AreEqual("1.2.3", ((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == "z").Component).Version);
((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == "z").Component).Version.Should().Be("1.2.3");
foreach (var item in setupPyRoots)
{
var reference = item.Value;
Assert.AreEqual(reference.Version, ((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == reference.Name).Component).Version);
((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == reference.Name).Component).Version.Should().Be(reference.Version);
}
var gitComponents = detectedComponents.Where(detectedComponent => detectedComponent.Component.Type == ComponentType.Git);
gitComponents.Count().Should().Be(1);
gitComponents.Should().ContainSingle();
var gitComponent = (GitComponent)gitComponents.Single().Component;
gitComponent.RepositoryUrl.Should().Be("https://github.com/example/example");
@ -157,8 +157,8 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
.WithFile("requirements.txt", string.Empty, fileLocation: Path.Join(Path.GetTempPath(), "TEST", "requirements.txt"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(5, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(5);
}
[TestMethod]
@ -212,8 +212,8 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
var discoveredComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(11, discoveredComponents.Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
discoveredComponents.Should().HaveCount(11);
var rootIds = new[]
{
@ -239,7 +239,7 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
this.CheckChild(componentRecorder, "dog 2.1 - pip", new[] { "c 1.0 - pip", });
var graphsByLocations = componentRecorder.GetDependencyGraphsByLocation();
Assert.AreEqual(2, graphsByLocations.Count);
graphsByLocations.Should().HaveCount(2);
var graph1ComponentsWithDeps = new Dictionary<string, string[]>
{
@ -252,8 +252,8 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
};
var graph1 = graphsByLocations[file1];
Assert.IsTrue(graph1ComponentsWithDeps.Keys.Take(2).All(graph1.IsComponentExplicitlyReferenced));
Assert.IsTrue(graph1ComponentsWithDeps.Keys.Skip(2).All(a => !graph1.IsComponentExplicitlyReferenced(a)));
graph1ComponentsWithDeps.Keys.Take(2).All(graph1.IsComponentExplicitlyReferenced).Should().BeTrue();
graph1ComponentsWithDeps.Keys.Skip(2).Should().OnlyContain(a => !graph1.IsComponentExplicitlyReferenced(a));
this.CheckGraphStructure(graph1, graph1ComponentsWithDeps);
var graph2ComponentsWithDeps = new Dictionary<string, string[]>
@ -269,38 +269,34 @@ public class PipComponentDetectorTests : BaseDetectorTest<PipComponentDetector>
};
var graph2 = graphsByLocations[file2];
Assert.IsTrue(graph2ComponentsWithDeps.Keys.Take(3).All(graph2.IsComponentExplicitlyReferenced));
Assert.IsTrue(graph2ComponentsWithDeps.Keys.Skip(3).All(a => !graph2.IsComponentExplicitlyReferenced(a)));
graph2ComponentsWithDeps.Keys.Take(3).All(graph2.IsComponentExplicitlyReferenced).Should().BeTrue();
graph2ComponentsWithDeps.Keys.Skip(3).Should().OnlyContain(a => !graph2.IsComponentExplicitlyReferenced(a));
this.CheckGraphStructure(graph2, graph2ComponentsWithDeps);
}
private void CheckGraphStructure(IDependencyGraph graph, Dictionary<string, string[]> graphComponentsWithDeps)
{
var graphComponents = graph.GetComponents().ToArray();
Assert.AreEqual(
graphComponents.Should().HaveCount(
graphComponentsWithDeps.Keys.Count,
graphComponents.Length,
$"Expected {graphComponentsWithDeps.Keys.Count} component to be recorded but got {graphComponents.Length} instead!");
foreach (var componentId in graphComponentsWithDeps.Keys)
{
Assert.IsTrue(
graphComponents.Contains(componentId),
$"Component `{componentId}` not recorded!");
graphComponents.Should().Contain(
componentId, $"Component `{componentId}` not recorded!");
var recordedDeps = graph.GetDependenciesForComponent(componentId).ToArray();
var expectedDeps = graphComponentsWithDeps[componentId];
Assert.AreEqual(
recordedDeps.Should().HaveCount(
expectedDeps.Length,
recordedDeps.Length,
$"Count missmatch of expected dependencies ({JsonConvert.SerializeObject(expectedDeps)}) and recorded dependencies ({JsonConvert.SerializeObject(recordedDeps)}) for `{componentId}`!");
foreach (var expectedDep in expectedDeps)
{
Assert.IsTrue(
recordedDeps.Contains(expectedDep),
$"Expected `{expectedDep}` in the list of dependencies for `{componentId}` but only recorded: {JsonConvert.SerializeObject(recordedDeps)}");
recordedDeps.Should().Contain(
expectedDep, $"Expected `{expectedDep}` in the list of dependencies for `{componentId}` but only recorded: {JsonConvert.SerializeObject(recordedDeps)}");
}
}
}

Просмотреть файл

@ -1,6 +1,7 @@
namespace Microsoft.ComponentDetection.Detectors.Tests;
using System.Collections.Generic;
using FluentAssertions;
using Microsoft.ComponentDetection.Detectors.Pip;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -15,13 +16,12 @@ public class PipDependencySpecifierTests
{
var dependencySpecifier = new PipDependencySpecification(specString, requiresDist);
Assert.AreEqual(referenceDependencySpecification.Name, dependencySpecifier.Name);
dependencySpecifier.Name.Should().Be(referenceDependencySpecification.Name);
for (var i = 0; i < referenceDependencySpecification.DependencySpecifiers.Count; i++)
{
Assert.AreEqual(
referenceDependencySpecification.DependencySpecifiers[i],
dependencySpecifier.DependencySpecifiers[i]);
dependencySpecifier.DependencySpecifiers.Should().HaveElementAt(
i, referenceDependencySpecification.DependencySpecifiers[i]);
}
}
}

Просмотреть файл

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.Pip;
@ -55,7 +56,7 @@ public class PipResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -66,7 +67,7 @@ public class PipResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -98,7 +99,7 @@ public class PipResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -109,7 +110,7 @@ public class PipResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -138,7 +139,7 @@ public class PipResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -146,7 +147,7 @@ public class PipResolverTests
expectedA.Children.Add(expectedB);
expectedB.Parents.Add(expectedA);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
this.pyPiClient.Verify(x => x.FetchPackageDependenciesAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PythonProjectRelease>()), Times.Exactly(2));
}
@ -181,7 +182,7 @@ public class PipResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -194,7 +195,7 @@ public class PipResolverTests
expectedC.Parents.Add(expectedA);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
this.pyPiClient.Verify(x => x.FetchPackageDependenciesAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PythonProjectRelease>()), Times.Exactly(4));
}

Просмотреть файл

@ -80,53 +80,53 @@ shrinkwrapVersion: 3";
.WithFile("shrinkwrap1.yaml", yamlFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(5, detectedComponents.Count());
detectedComponents.Should().HaveCount(5);
var queryString = detectedComponents.Single(component => ((NpmComponent)component.Component).Name.Contains("query-string"));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
queryString.Component.Id,
parentComponent => parentComponent.Name == "query-string-🙌");
Assert.AreEqual("4.3.4", ((NpmComponent)queryString.Component).Version);
Assert.IsTrue(componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false));
((NpmComponent)queryString.Component).Version.Should().Be("4.3.4");
componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false).Should().BeTrue();
var objectAssign = detectedComponents.Single(component => ((NpmComponent)component.Component).Name.Contains("object-assign"));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
objectAssign.Component.Id,
parentComponent => parentComponent.Name == "query-string-🙌" && parentComponent.Version == "4.3.4");
Assert.AreEqual("4.1.1", ((NpmComponent)objectAssign.Component).Version);
Assert.IsTrue(componentRecorder.GetEffectiveDevDependencyValue(objectAssign.Component.Id).GetValueOrDefault(false));
((NpmComponent)objectAssign.Component).Version.Should().Be("4.1.1");
componentRecorder.GetEffectiveDevDependencyValue(objectAssign.Component.Id).GetValueOrDefault(false).Should().BeTrue();
var strictUriEncode = detectedComponents.Single(component => ((NpmComponent)component.Component).Name.Contains("strict-uri-encode"));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
strictUriEncode.Component.Id,
parentComponent => parentComponent.Name == "query-string-🙌" && parentComponent.Version == "4.3.4");
Assert.AreEqual("1.1.0", ((NpmComponent)strictUriEncode.Component).Version);
Assert.IsFalse(componentRecorder.GetEffectiveDevDependencyValue(strictUriEncode.Component.Id).GetValueOrDefault(true));
((NpmComponent)strictUriEncode.Component).Version.Should().Be("1.1.0");
componentRecorder.GetEffectiveDevDependencyValue(strictUriEncode.Component.Id).GetValueOrDefault(true).Should().BeFalse();
var babelHelperCompilation = detectedComponents.Single(component => ((NpmComponent)component.Component).Name.Contains("helper-compilation-targets"));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
babelHelperCompilation.Component.Id,
parentComponent => parentComponent.Name == "@babel/helper-compilation-targets" && parentComponent.Version == "7.10.4");
Assert.IsFalse(componentRecorder.GetEffectiveDevDependencyValue(babelHelperCompilation.Component.Id).GetValueOrDefault(true));
componentRecorder.GetEffectiveDevDependencyValue(babelHelperCompilation.Component.Id).GetValueOrDefault(true).Should().BeFalse();
var test = detectedComponents.Single(component => ((NpmComponent)component.Component).Name.Contains("test"));
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
test.Component.Id,
parentComponent => parentComponent.Name == "query-string-🙌" && parentComponent.Version == "4.3.4");
Assert.IsTrue(componentRecorder.GetEffectiveDevDependencyValue(test.Component.Id).GetValueOrDefault(false));
componentRecorder.GetEffectiveDevDependencyValue(test.Component.Id).GetValueOrDefault(false).Should().BeTrue();
componentRecorder.ForAllComponents(grouping =>
{
Assert.IsTrue(grouping.AllFileLocations.First().Contains("shrinkwrap1.yaml"));
grouping.AllFileLocations.First().Should().Contain("shrinkwrap1.yaml");
});
foreach (var component in detectedComponents)
{
Assert.AreEqual(component.Component.Type, ComponentType.Npm);
ComponentType.Npm.Should().Be(component.Component.Type);
}
}
@ -182,13 +182,13 @@ shrinkwrapVersion: 3";
.WithFile("shrinkwrap2.yaml", yamlFile2)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(3, detectedComponents.Count());
detectedComponents.Should().HaveCount(3);
var strictUriEncodeComponent = detectedComponents.Select(x => new { Component = x.Component as NpmComponent, DetectedComponent = x }).FirstOrDefault(x => x.Component.Name.Contains("strict-uri-encode"));
Assert.IsNotNull(strictUriEncodeComponent);
strictUriEncodeComponent.Should().NotBeNull();
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
strictUriEncodeComponent.Component.Id,
@ -227,13 +227,13 @@ shrinkwrapVersion: 3";
.WithFile("shrinkwrap1.yaml", yamlFile1)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
var msItemsViewComponent = detectedComponents.Select(x => new { Component = x.Component as NpmComponent, DetectedComponent = x }).FirstOrDefault(x => x.Component.Name.Contains("@ms/items-view"));
Assert.IsNotNull(msItemsViewComponent);
msItemsViewComponent.Should().NotBeNull();
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
msItemsViewComponent.Component.Id,
parentComponent => parentComponent.Name == "query-string");
@ -302,8 +302,8 @@ shrinkwrapVersion: 3";
.WithFile("shrinkwrap1.yaml", yamlFile1)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -332,8 +332,8 @@ packages:
.WithFile("shrinkwrap1.yaml", yamlFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(4, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(4);
var queryStringComponentId = PnpmParsingUtilities.CreateDetectedComponentFromPnpmPath("/query-string/4.3.4").Component.Id;
var objectAssignComponentId = PnpmParsingUtilities.CreateDetectedComponentFromPnpmPath("/object-assign/4.1.1").Component.Id;
@ -343,19 +343,19 @@ packages:
var dependencyGraph = componentRecorder.GetDependencyGraphsByLocation().Values.First();
var queryStringDependencies = dependencyGraph.GetDependenciesForComponent(queryStringComponentId);
Assert.AreEqual(2, queryStringDependencies.Count());
Assert.IsTrue(queryStringDependencies.Contains(objectAssignComponentId));
Assert.IsTrue(queryStringDependencies.Contains(testComponentId));
queryStringDependencies.Should().HaveCount(2);
queryStringDependencies.Should().Contain(objectAssignComponentId);
queryStringDependencies.Should().Contain(testComponentId);
var objectAssignDependencies = dependencyGraph.GetDependenciesForComponent(objectAssignComponentId);
Assert.AreEqual(1, objectAssignDependencies.Count());
Assert.IsTrue(objectAssignDependencies.Contains(strictUriComponentId));
objectAssignDependencies.Should().ContainSingle();
objectAssignDependencies.Should().Contain(strictUriComponentId);
var stringUriDependencies = dependencyGraph.GetDependenciesForComponent(strictUriComponentId);
Assert.AreEqual(0, stringUriDependencies.Count());
stringUriDependencies.Should().BeEmpty();
var testDependencies = dependencyGraph.GetDependenciesForComponent(testComponentId);
Assert.AreEqual(0, testDependencies.Count());
testDependencies.Should().BeEmpty();
}
[TestMethod]
@ -389,10 +389,10 @@ packages:
var dependencyGraph = componentRecorder.GetDependencyGraphsByLocation().Values.First();
var queryStringDependencies = dependencyGraph.GetDependenciesForComponent(queryStringComponentId);
queryStringDependencies.Should().HaveCount(1);
queryStringDependencies.Should().ContainSingle();
queryStringDependencies.Should().Contain(nthcheck);
var nthCheckDependencies = dependencyGraph.GetDependenciesForComponent(nthcheck);
nthCheckDependencies.Should().HaveCount(0);
nthCheckDependencies.Should().BeEmpty();
}
}

Просмотреть файл

@ -45,7 +45,7 @@ shrinkwrapVersion: 3";
parsedYaml.packages.Should().ContainKey("/@ms/items-view/0.128.9/react-dom@15.6.2+react@15.6.2");
var queryStringPackage = parsedYaml.packages["/query-string/4.3.4"];
queryStringPackage.dependencies.Should().HaveCount(1);
queryStringPackage.dependencies.Should().ContainSingle();
queryStringPackage.dependencies.Should().ContainKey("@ms/items-view");
queryStringPackage.dependencies["@ms/items-view"].Should().BeEquivalentTo("/@ms/items-view/0.128.9/react-dom@15.6.2+react@15.6.2");
queryStringPackage.dev.Should().BeEquivalentTo("false");

Просмотреть файл

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.CocoaPods;
@ -28,8 +29,8 @@ COCOAPODS: 1.4.0.beta.1";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -64,10 +65,10 @@ COCOAPODS: 0.39.0";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(6, detectedComponents.Count());
detectedComponents.Should().HaveCount(6);
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.0");
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureData", "0.5.0");
@ -106,10 +107,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
this.AssertPodComponentNameAndVersion(detectedComponents, "MSAL", "1.0.7");
this.AssertPodComponentNameAndVersion(detectedComponents, "MSGraphClientSDK", "1.0.0");
@ -150,10 +151,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertGitComponentHashAndUrl(detectedComponents, "da7223e3c455fe558de361c611df36c6dcc4229d", "https://github.com/microsoftgraph/msgraph-sdk-objc.git");
}
@ -193,10 +194,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPodComponentNameAndVersion(detectedComponents, "MSGraphClientSDK", "1.0.0");
}
@ -236,10 +237,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPodComponentNameAndVersion(detectedComponents, "MSGraphClientSDK", "1.0.0");
}
@ -273,10 +274,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
this.AssertPodComponentNameAndVersion(detectedComponents, "CocoaLumberjack", "3.6.0");
this.AssertPodComponentNameAndVersion(detectedComponents, "SVGKit", "2.1.0");
@ -306,10 +307,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPodComponentNameAndVersion(detectedComponents, "Keys", "1.0.1");
}
@ -372,10 +373,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent2)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(8, detectedComponents.Count());
detectedComponents.Should().HaveCount(8);
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.0");
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.1");
@ -456,10 +457,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent2)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(8, detectedComponents.Count());
detectedComponents.Should().HaveCount(8);
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.0");
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.1");
@ -553,10 +554,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent2)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(8, detectedComponents.Count());
detectedComponents.Should().HaveCount(8);
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.0");
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.1");
@ -635,10 +636,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent3)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPodComponentNameAndVersion(detectedComponents, "AzureCore", "0.5.0");
}
@ -681,10 +682,10 @@ COCOAPODS: 1.8.4";
.WithFile("Podfile.lock", podfileLockContent2, fileLocation: Path.Join(Path.GetTempPath(), "sub-folder", "Podfile.lock"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
var firstComponent = detectedComponents.First();
componentRecorder.ForOneComponent(firstComponent.Component.Id, grouping => Assert.AreEqual(2, Enumerable.Count<string>(grouping.AllFileLocations)));
@ -692,42 +693,40 @@ COCOAPODS: 1.8.4";
private void AssertPodComponentNameAndVersion(IEnumerable<DetectedComponent> detectedComponents, string name, string version)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(component =>
detectedComponents.SingleOrDefault(component =>
component.Component is PodComponent &&
(component.Component as PodComponent).Name.Equals(name) &&
(component.Component as PodComponent).Version.Equals(version)),
(component.Component as PodComponent).Version.Equals(version)).Should().NotBeNull(
$"Component with name {name} and version {version} was not found");
}
private void AssertGitComponentHashAndUrl(IEnumerable<DetectedComponent> detectedComponents, string commitHash, string repositoryUrl)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(component =>
detectedComponents.SingleOrDefault(component =>
component.Component is GitComponent &&
(component.Component as GitComponent).CommitHash.Equals(commitHash) &&
(component.Component as GitComponent).RepositoryUrl.Equals(repositoryUrl)),
(component.Component as GitComponent).RepositoryUrl.Equals(repositoryUrl)).Should().NotBeNull(
$"Component with commit hash {commitHash} and repository url {repositoryUrl} was not found");
}
private void AssertPodComponentHasPodComponentDependencyRoot(IComponentRecorder recorder, (string Name, string Version) component, (string Name, string Version) root)
{
Assert.IsTrue(recorder.IsDependencyOfExplicitlyReferencedComponents<PodComponent>(
recorder.IsDependencyOfExplicitlyReferencedComponents<PodComponent>(
new PodComponent(component.Name, component.Version).Id,
x => x.Id == new PodComponent(root.Name, root.Version).Id));
x => x.Id == new PodComponent(root.Name, root.Version).Id).Should().BeTrue();
}
private void AssertPodComponentHasGitComponentDependencyRoot(IComponentRecorder recorder, (string Name, string Version) component, (string Commit, string Repo) root)
{
Assert.IsTrue(recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
new PodComponent(component.Name, component.Version).Id,
x => x.Id == new GitComponent(new Uri(root.Repo), root.Commit).Id));
x => x.Id == new GitComponent(new Uri(root.Repo), root.Commit).Id).Should().BeTrue();
}
private void AssertGitComponentHasGitComponentDependencyRoot(IComponentRecorder recorder, (string Commit, string Repo) component, (string Commit, string Repo) root)
{
Assert.IsTrue(recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
new GitComponent(new Uri(component.Repo), component.Commit).Id,
x => x.Id == new GitComponent(new Uri(root.Repo), root.Commit).Id));
x => x.Id == new GitComponent(new Uri(root.Repo), root.Commit).Id).Should().BeTrue();
}
}

Просмотреть файл

@ -3,6 +3,7 @@ namespace Microsoft.ComponentDetection.Detectors.Tests;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.Poetry;
@ -36,14 +37,14 @@ reference = ""custom""
.WithFile("poetry.lock", poetryLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPipComponentNameAndVersion(detectedComponents, "certifi", "2021.10.8");
var queryString = detectedComponents.Single(component => ((PipComponent)component.Component).Name.Contains("certifi"));
Assert.IsFalse(componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false));
componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false).Should().BeFalse();
}
[TestMethod]
@ -62,15 +63,15 @@ python-versions = ""*""
.WithFile("poetry.lock", poetryLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
detectedComponents.Should().ContainSingle();
this.AssertPipComponentNameAndVersion(detectedComponents, "certifi", "2021.10.8");
var queryString = detectedComponents.Single(component => ((PipComponent)component.Component).Name.Contains("certifi"));
Assert.IsTrue(componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false));
componentRecorder.GetEffectiveDevDependencyValue(queryString.Component.Id).GetValueOrDefault(false).Should().BeTrue();
}
[TestMethod]
@ -113,29 +114,28 @@ resolved_reference = ""232a5596424c98d11c3cf2e29b2f6a6c591c2ff3""";
.WithFile("poetry.lock", poetryLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
this.AssertGitComponentHashAndUrl(detectedComponents, "232a5596424c98d11c3cf2e29b2f6a6c591c2ff3", "https://github.com/requests/requests.git");
}
private void AssertPipComponentNameAndVersion(IEnumerable<DetectedComponent> detectedComponents, string name, string version)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is PipComponent component &&
component.Name.Equals(name) &&
component.Version.Equals(version)),
component.Version.Equals(version)).Should().NotBeNull(
$"Component with name {name} and version {version} was not found");
}
private void AssertGitComponentHashAndUrl(IEnumerable<DetectedComponent> detectedComponents, string commitHash, string repositoryUrl)
{
Assert.IsNotNull(detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is GitComponent component &&
component.CommitHash.Equals(commitHash) &&
component.RepositoryUrl.Equals(repositoryUrl)));
component.RepositoryUrl.Equals(repositoryUrl)).Should().NotBeNull();
}
}

Просмотреть файл

@ -58,7 +58,7 @@ other=2.1";
var service = new PythonCommandService(this.commandLineInvokationService.Object);
Assert.IsTrue(await service.PythonExistsAsync());
(await service.PythonExistsAsync()).Should().BeTrue();
}
[TestMethod]
@ -68,7 +68,7 @@ other=2.1";
var service = new PythonCommandService(this.commandLineInvokationService.Object);
Assert.IsFalse(await service.PythonExistsAsync());
(await service.PythonExistsAsync()).Should().BeFalse();
}
[TestMethod]
@ -78,7 +78,7 @@ other=2.1";
var service = new PythonCommandService(this.commandLineInvokationService.Object);
Assert.IsTrue(await service.PythonExistsAsync("test"));
(await service.PythonExistsAsync("test")).Should().BeTrue();
}
[TestMethod]
@ -88,7 +88,7 @@ other=2.1";
var service = new PythonCommandService(this.commandLineInvokationService.Object);
Assert.IsFalse(await service.PythonExistsAsync("test"));
(await service.PythonExistsAsync("test")).Should().BeFalse();
}
[TestMethod]
@ -105,7 +105,7 @@ other=2.1";
var result = await service.ParseFileAsync(fakePath);
Assert.AreEqual(0, result.Count);
result.Should().BeEmpty();
}
[TestMethod]
@ -122,7 +122,7 @@ other=2.1";
var result = await service.ParseFileAsync(fakePath);
Assert.AreEqual(0, result.Count);
result.Should().BeEmpty();
}
[TestMethod]
@ -139,8 +139,8 @@ other=2.1";
var result = await service.ParseFileAsync(fakePath);
Assert.AreEqual(1, result.Count);
Assert.AreEqual("None", result.First().PackageString);
result.Should().ContainSingle();
result.First().PackageString.Should().Be("None");
}
[TestMethod]
@ -158,11 +158,11 @@ other=2.1";
var result = await service.ParseFileAsync(fakePath);
var expected = new string[] { "knack==0.4.1", "setuptools>=1.0,!=1.1", "vsts-cli-common==0.1.3", "vsts-cli-admin==0.1.3", "vsts-cli-build==0.1.3", "vsts-cli-code==0.1.3", "vsts-cli-team==0.1.3", "vsts-cli-package==0.1.3", "vsts-cli-work==0.1.3" }.Select<string, (string, GitComponent)>(dep => (dep, null)).ToArray();
Assert.AreEqual(9, result.Count);
result.Should().HaveCount(9);
for (var i = 0; i < 9; i++)
{
Assert.AreEqual(expected[i], result[i]);
result.Should().HaveElementAt(i, expected[i]);
}
}
@ -187,11 +187,11 @@ other=2.1";
var result = await service.ParseFileAsync(testPath);
var expected = new string[] { "knack==0.4.1", "vsts-cli-common==0.1.3" }.Select<string, (string, GitComponent)>(dep => (dep, null)).ToArray();
Assert.AreEqual(expected.Length, result.Count);
result.Should().HaveCount(expected.Length);
for (var i = 0; i < expected.Length; i++)
{
Assert.AreEqual(expected[i], result[i]);
result.Should().HaveElementAt(i, expected[i]);
}
}
finally
@ -223,8 +223,8 @@ other=2.1";
var result = await service.ParseFileAsync(testPath);
(string, GitComponent) expected = ("knack==0.4.1", null);
Assert.AreEqual(1, result.Count);
Assert.AreEqual(expected, result.First());
result.Should().ContainSingle();
result.First().Should().Be(expected);
}
finally
{
@ -240,7 +240,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtBasicGitComponent, parseResult =>
{
parseResult.Count.Should().Be(1);
parseResult.Should().ContainSingle();
var (packageString, component) = parseResult.Single();
packageString.Should().BeNull();
@ -257,7 +257,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentAndEnvironmentMarker, parseResult =>
{
parseResult.Count.Should().Be(1);
parseResult.Should().ContainSingle();
var (packageString, component) = parseResult.Single();
packageString.Should().BeNull();
@ -274,7 +274,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentAndComment, parseResult =>
{
parseResult.Count.Should().Be(1);
parseResult.Should().ContainSingle();
var (packageString, component) = parseResult.Single();
packageString.Should().BeNull();
@ -291,7 +291,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentAndCommentAndEnvironmentMarker, parseResult =>
{
parseResult.Count.Should().Be(1);
parseResult.Should().ContainSingle();
var (packageString, component) = parseResult.Single();
packageString.Should().BeNull();
@ -308,7 +308,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentBranchInsteadOfCommitId, parseResult =>
{
parseResult.Count.Should().Be(0);
parseResult.Should().BeEmpty();
});
}
@ -317,7 +317,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentReleaseInsteadOfCommitId, parseResult =>
{
parseResult.Count.Should().Be(0);
parseResult.Should().BeEmpty();
});
}
@ -326,7 +326,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentCommitIdWrongLength, parseResult =>
{
parseResult.Count.Should().Be(0);
parseResult.Should().BeEmpty();
});
}
@ -335,7 +335,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtDoubleGitComponents, parseResult =>
{
parseResult.Count.Should().Be(2);
parseResult.Should().HaveCount(2);
var (packageString, component) = parseResult.First();
packageString.Should().BeNull();
@ -360,7 +360,7 @@ other=2.1";
{
await this.SetupAndParseReqsTxtAsync(this.requirementstxtGitComponentWrappedinRegularComponents, parseResult =>
{
parseResult.Count.Should().Be(3);
parseResult.Should().HaveCount(3);
var (packageString, component) = parseResult.First();
packageString.Should().NotBeNull();

Просмотреть файл

@ -17,12 +17,12 @@ public class PythonVersionTests
{
var pythonVersion = PythonVersion.Create("4!3.2.1.1rc2.post99.dev2");
Assert.AreEqual(4, pythonVersion.Epoch);
Assert.AreEqual("3.2.1.1", pythonVersion.Release);
Assert.AreEqual("rc", pythonVersion.PreReleaseLabel);
Assert.AreEqual(99, pythonVersion.PostNumber);
Assert.AreEqual("dev", pythonVersion.DevLabel);
Assert.AreEqual(2, pythonVersion.DevNumber);
pythonVersion.Epoch.Should().Be(4);
pythonVersion.Release.Should().Be("3.2.1.1");
pythonVersion.PreReleaseLabel.Should().Be("rc");
pythonVersion.PostNumber.Should().Be(99);
pythonVersion.DevLabel.Should().Be("dev");
pythonVersion.DevNumber.Should().Be(2);
}
[TestMethod]
@ -30,13 +30,13 @@ public class PythonVersionTests
{
var pythonVersion = PythonVersion.Create("4!3.2.1.1rc2.post90.dev");
Assert.AreEqual(4, pythonVersion.Epoch);
Assert.AreEqual("3.2.1.1", pythonVersion.Release);
Assert.AreEqual("rc", pythonVersion.PreReleaseLabel);
Assert.AreEqual(2, pythonVersion.PreReleaseNumber);
Assert.AreEqual(90, pythonVersion.PostNumber);
Assert.AreEqual("dev", pythonVersion.DevLabel);
Assert.AreEqual(0, pythonVersion.DevNumber);
pythonVersion.Epoch.Should().Be(4);
pythonVersion.Release.Should().Be("3.2.1.1");
pythonVersion.PreReleaseLabel.Should().Be("rc");
pythonVersion.PreReleaseNumber.Should().Be(2);
pythonVersion.PostNumber.Should().Be(90);
pythonVersion.DevLabel.Should().Be("dev");
pythonVersion.DevNumber.Should().Be(0);
}
[TestMethod]
@ -96,8 +96,8 @@ public class PythonVersionTests
foreach (var (specs, validVersions, invalidVersions) in testCases)
{
Assert.IsTrue(validVersions.All(x => PythonVersionUtilities.VersionValidForSpec(x, specs)));
Assert.IsTrue(invalidVersions.All(x => !PythonVersionUtilities.VersionValidForSpec(x, specs)));
validVersions.Should().OnlyContain(x => PythonVersionUtilities.VersionValidForSpec(x, specs));
invalidVersions.Should().OnlyContain(x => !PythonVersionUtilities.VersionValidForSpec(x, specs));
}
}

Просмотреть файл

@ -70,10 +70,10 @@ BUNDLED WITH
.WithFile("2Gemfile.lock", gemFileLockContent2)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(7, detectedComponents.Count());
detectedComponents.Should().HaveCount(7);
this.AssertRubyComponentNameAndVersion(detectedComponents, "acme-client", "2.0.0");
this.AssertRubyComponentNameAndVersion(detectedComponents, "actioncable", "5.2.1");
@ -99,10 +99,10 @@ BUNDLED WITH
.WithFile("1Gemfile.lock", gemFileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(2, detectedComponents.Count());
detectedComponents.Should().HaveCount(2);
// we do not record invalid/unknown versions
this.AssertRubyComponentNameAndVersion(detectedComponents, "CFPropertyList", "3.0.4");
@ -132,10 +132,10 @@ BUNDLED WITH
.WithFile("1Gemfile.lock", gemFileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(6, detectedComponents.Count());
detectedComponents.Should().HaveCount(6);
this.AssertRubyComponentNameAndVersion(detectedComponents, "acme-client", "2.0.0");
this.AssertRubyComponentNameAndVersion(detectedComponents, "actioncable", "5.2.1");
@ -166,10 +166,10 @@ BUNDLED WITH
.WithFile("1Gemfile.lock", gemFileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(5, detectedComponents.Count());
detectedComponents.Should().HaveCount(5);
this.AssertRubyComponentNameAndVersion(detectedComponents, "acme-client", "2.0.0");
this.AssertRubyComponentNameAndVersion(detectedComponents, "actioncable", "5.2.1");
@ -196,10 +196,10 @@ BUNDLED WITH
.WithFile("1Gemfile.lock", gemFileLockContent)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(3, detectedComponents.Count());
detectedComponents.Should().HaveCount(3);
this.AssertRubyComponentNameAndVersion(detectedComponents, "acme-client", "2.0.0");
this.AssertRubyComponentNameAndVersion(detectedComponents, "faraday", "1.0.0");
@ -249,20 +249,20 @@ GEM
acmeClientDependencies.Should().Contain(dep => dep == actioncableComponentId);
var actionCableDependencies = dependencyGraph.GetDependenciesForComponent(actioncableComponentId);
actionCableDependencies.Should().HaveCount(1);
actionCableDependencies.Should().ContainSingle();
actionCableDependencies.Should().Contain(dep => dep == nior4rComponentId);
var faradayDependencies = dependencyGraph.GetDependenciesForComponent(faradayComponentId);
faradayDependencies.Should().HaveCount(0);
faradayDependencies.Should().BeEmpty();
var niorDependencies = dependencyGraph.GetDependenciesForComponent(nior4rComponentId);
niorDependencies.Should().HaveCount(0);
niorDependencies.Should().BeEmpty();
var websocketDependencies = dependencyGraph.GetDependenciesForComponent(websocketDriverComponentId);
websocketDependencies.Should().HaveCount(0);
websocketDependencies.Should().BeEmpty();
var mailComponentDependencies = dependencyGraph.GetDependenciesForComponent(mailComponentId);
mailComponentDependencies.Should().HaveCount(1);
mailComponentDependencies.Should().ContainSingle();
mailComponentDependencies.Should().Contain(dep => dep == websocketDriverComponentId);
}
@ -341,7 +341,7 @@ GEM
.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(3, detectedComponents.Count());
detectedComponents.Should().HaveCount(3);
this.AssertGitComponentHashAndUrl(detectedComponents, commitHash: "commit-hash-1", repositoryUrl: "https://github.com/test/abc.git");
this.AssertGitComponentHashAndUrl(detectedComponents, commitHash: "commit-hash-2", repositoryUrl: "https://github.com/mikel/mail.git");
this.AssertRubyComponentNameAndVersion(detectedComponents, name: "mini_mime", version: "2.0.0");
@ -395,7 +395,7 @@ PATH
.ExecuteDetectorAsync();
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(3, detectedComponents.Count());
detectedComponents.Should().HaveCount(3);
this.AssertRubyComponentNameAndVersion(detectedComponents, name: "mini_mime", version: "2.0.0");
this.AssertRubyComponentNameAndVersion(detectedComponents, name: "test", version: "1.0.0");
@ -404,27 +404,26 @@ PATH
private void AssertRubyComponentNameAndVersion(IEnumerable<DetectedComponent> detectedComponents, string name, string version)
{
Assert.IsNotNull(
detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is RubyGemsComponent component &&
component.Name.Equals(name) &&
component.Version.Equals(version)),
component.Version.Equals(version)).Should().NotBeNull(
$"Component with name {name} and version {version} was not found");
}
private void AssertGitComponentHashAndUrl(IEnumerable<DetectedComponent> detectedComponents, string commitHash, string repositoryUrl)
{
Assert.IsNotNull(detectedComponents.SingleOrDefault(c =>
detectedComponents.SingleOrDefault(c =>
c.Component is GitComponent component &&
component.CommitHash.Equals(commitHash) &&
component.RepositoryUrl.Equals(repositoryUrl)));
component.RepositoryUrl.Equals(repositoryUrl)).Should().NotBeNull();
}
private void AssertGitComponentAsRootAndGitComponentAsSubDependency(IComponentRecorder recorder, string rootHash, string subDependencyHash)
{
var childDep = recorder.GetDetectedComponents().First(x => (x.Component as GitComponent)?.CommitHash == subDependencyHash);
Assert.IsTrue(recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
recorder.IsDependencyOfExplicitlyReferencedComponents<GitComponent>(
childDep.Component.Id,
parent => parent.CommitHash == rootHash));
parent => parent.CommitHash == rootHash).Should().BeTrue();
}
}

Просмотреть файл

@ -237,8 +237,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", this.testCargoLockString)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(6, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(6);
var graph = componentRecorder.GetDependencyGraphsByLocation().Values.First(); // There should only be 1
@ -288,11 +288,11 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithScanRequest(request)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var componentGraphs = componentRecorder.GetDependencyGraphsByLocation();
componentGraphs.Count.Should().Be(2); // 1 for each detector
componentGraphs.Should().HaveCount(2); // 1 for each detector
}
[TestMethod]
@ -303,11 +303,11 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", this.testCargoLockString, fileLocation: Path.Join(Path.GetTempPath(), "sub-path", "Cargo.lock"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var componentGraphs = componentRecorder.GetDependencyGraphsByLocation();
componentGraphs.Count.Should().Be(2); // 1 graph for each Cargo.lock
componentGraphs.Should().HaveCount(2); // 1 graph for each Cargo.lock
var graph1 = componentGraphs.Values.First();
var graph2 = componentGraphs.Values.Skip(1).First();
@ -326,11 +326,11 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", this.testCargoLockV2String, fileLocation: Path.Join(Path.GetTempPath(), "sub-path", "Cargo.lock"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var componentGraphs = componentRecorder.GetDependencyGraphsByLocation();
componentGraphs.Count.Should().Be(2); // 1 graph for each Cargo.lock
componentGraphs.Should().HaveCount(2); // 1 graph for each Cargo.lock
var graph1 = componentGraphs.Values.First();
var graph2 = componentGraphs.Values.Skip(1).First();
@ -348,8 +348,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", this.testCargoLockString)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(6, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(6);
IDictionary<string, string> packageVersions = new Dictionary<string, string>()
{
@ -378,7 +378,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
var packageName = (discoveredComponent.Component as CargoComponent).Name;
// Verify version
Assert.AreEqual(packageVersions[packageName], (discoveredComponent.Component as CargoComponent).Version);
(discoveredComponent.Component as CargoComponent).Version.Should().Be(packageVersions[packageName]);
var dependencyRoots = new HashSet<string>();
@ -393,7 +393,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
// Verify all packages were detected
foreach (var expectedPackage in packageVersions.Keys)
{
Assert.IsTrue(componentNames.Contains(expectedPackage));
componentNames.Should().Contain(expectedPackage);
}
}
@ -404,8 +404,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", this.testCargoLockV2String)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(7, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(7);
var packageVersions = new List<string>()
{
@ -436,7 +436,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
var componentKey = $"{component.Name} {component.Version}";
// Verify version
Assert.IsTrue(packageVersions.Contains(componentKey));
packageVersions.Should().Contain(componentKey);
componentRecorder.AssertAllExplicitlyReferencedComponents(
discoveredComponent.Component.Id,
@ -449,7 +449,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
// Verify all packages were detected
foreach (var expectedPackage in packageVersions)
{
Assert.IsTrue(componentNames.Contains(expectedPackage));
componentNames.Should().Contain(expectedPackage);
}
}
@ -529,8 +529,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", testCargoLock)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(7, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(7);
var graph = componentRecorder.GetDependencyGraphsByLocation().Values.First(); // There should only be 1
@ -598,11 +598,11 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Count.Should().Be(1);
dependencyGraphs.Should().ContainSingle();
var dependencyGraph = dependencyGraphs.Single().Value;
var foundComponents = dependencyGraph.GetComponents();
foundComponents.Count().Should().Be(2);
foundComponents.Should().HaveCount(2);
componentRecorder.ForOneComponent("other_dependency_dependency 0.1.12-alpha.6 - Cargo", (grouping) =>
{
@ -628,8 +628,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", string.Concat(this.testWorkspaceLockBaseDependency, lockFile))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(7, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(7);
var packageVersions = new List<string>()
{
@ -660,7 +660,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
var componentKey = $"{component.Name} {component.Version}";
// Verify version
Assert.IsTrue(packageVersions.Contains(componentKey));
packageVersions.Should().Contain(componentKey);
componentRecorder.AssertAllExplicitlyReferencedComponents(
discoveredComponent.Component.Id,
@ -673,7 +673,7 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
// Verify all packages were detected
foreach (var expectedPackage in packageVersions)
{
Assert.IsTrue(componentNames.Contains(expectedPackage));
componentNames.Should().Contain(expectedPackage);
}
}
@ -695,8 +695,8 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
.WithFile("Cargo.lock", lockFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(6, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(6);
}
[TestMethod]
@ -719,10 +719,10 @@ source = ""registry+https://github.com/rust-lang/crates.io-index""
var componentGraphs = componentRecorder.GetDependencyGraphsByLocation();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(6, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(6);
Assert.AreEqual(1, componentGraphs.Count); // Only 1 Cargo.lock is specified
componentGraphs.Should().ContainSingle(); // Only 1 Cargo.lock is specified
// A root Cargo.lock
componentRecorder.ForAllComponents(x => x.AllFileLocations.Count().Should().Be(1));
@ -758,8 +758,8 @@ dependencies = [
.WithFile("Cargo.lock", testLockString)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(2, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(2);
var graph = componentRecorder.GetDependencyGraphsByLocation().Values.First(); // There should only be 1
@ -796,11 +796,11 @@ source = ""git+https://github.com/microsoft/component-detection/?branch=main#abc
.WithFile("Cargo.lock", testLockString)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Count.Should().Be(1);
dependencyGraphs.Should().ContainSingle();
var dependencyGraph = dependencyGraphs.Single().Value;
dependencyGraph.Contains("my_git_dep 0.1.0 - Cargo").Should().BeTrue();
@ -832,13 +832,13 @@ source = ""registry+sparse+https://other.registry/index/""
.WithFile("Cargo.lock", testLockString)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
// If registries have identity, this should be 2
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
var dependencyGraphs = componentRecorder.GetDependencyGraphsByLocation();
dependencyGraphs.Count.Should().Be(1);
dependencyGraphs.Should().ContainSingle();
var dependencyGraph = dependencyGraphs.Single().Value;
@ -874,8 +874,8 @@ dependencies = []
.WithFile("Cargo.lock", testCargoLock)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(1, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(1);
var graph = componentRecorder.GetDependencyGraphsByLocation().Values.First(); // There should only be 1

Просмотреть файл

@ -7,6 +7,7 @@ using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Common.DependencyGraph;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
@ -104,7 +105,7 @@ public class Spdx22ComponentDetectorTests : BaseDetectorTest<Spdx22ComponentDete
.WithFile(spdxFileName, spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
@ -119,13 +120,13 @@ public class Spdx22ComponentDetectorTests : BaseDetectorTest<Spdx22ComponentDete
var checksum = BitConverter.ToString(SHA1.HashData(Encoding.UTF8.GetBytes(spdxFile))).Replace("-", string.Empty).ToLower();
#pragma warning restore CA5350
Assert.AreEqual(1, components.Count);
Assert.AreEqual(sbomComponent.Name, "Test 1.0.0");
Assert.AreEqual(sbomComponent.RootElementId, "SPDXRef-RootPackage");
Assert.AreEqual(sbomComponent.DocumentNamespace, new Uri("https://sbom.microsoft/Test/1.0.0/61de1a5-57cc-4732-9af5-edb321b4a7ee"));
Assert.AreEqual(sbomComponent.SpdxVersion, "SPDX-2.2");
Assert.AreEqual(sbomComponent.Checksum, checksum);
Assert.AreEqual(sbomComponent.Path, Path.Combine(Path.GetTempPath(), spdxFileName));
components.Should().ContainSingle();
sbomComponent.Name.Should().Be("Test 1.0.0");
sbomComponent.RootElementId.Should().Be("SPDXRef-RootPackage");
sbomComponent.DocumentNamespace.Should().Be(new Uri("https://sbom.microsoft/Test/1.0.0/61de1a5-57cc-4732-9af5-edb321b4a7ee"));
sbomComponent.SpdxVersion.Should().Be("SPDX-2.2");
sbomComponent.Checksum.Should().Be(checksum);
sbomComponent.Path.Should().Be(Path.Combine(Path.GetTempPath(), spdxFileName));
}
[TestMethod]
@ -137,11 +138,11 @@ public class Spdx22ComponentDetectorTests : BaseDetectorTest<Spdx22ComponentDete
.WithFile("manifest.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
Assert.IsFalse(components.Any());
components.Should().BeEmpty();
}
[TestMethod]
@ -153,10 +154,10 @@ public class Spdx22ComponentDetectorTests : BaseDetectorTest<Spdx22ComponentDete
.WithFile("manifest.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
Assert.IsFalse(components.Any());
components.Should().BeEmpty();
}
}

Просмотреть файл

@ -53,7 +53,7 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
.WithFile("setup.py", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
this.mockLogger.VerifyAll();
}
@ -62,7 +62,7 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
{
var (result, componentRecorder) = await this.DetectorTestUtility.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
}
[TestMethod]
@ -101,23 +101,23 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
.WithFile("requirements.txt", string.Empty)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
result.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(8, detectedComponents.Count());
detectedComponents.Should().HaveCount(8);
var pipComponents = detectedComponents.Where(detectedComponent => detectedComponent.Component.Id.Contains("pip")).ToList();
Assert.AreEqual("1.2.3", ((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == "z").Component).Version);
((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == "z").Component).Version.Should().Be("1.2.3");
foreach (var item in setupPyRoots)
{
var reference = item.Value;
Assert.AreEqual(reference.Version, ((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == reference.Name).Component).Version);
((PipComponent)pipComponents.Single(x => ((PipComponent)x.Component).Name == reference.Name).Component).Version.Should().Be(reference.Version);
}
var gitComponents = detectedComponents.Where(detectedComponent => detectedComponent.Component.Type == ComponentType.Git);
gitComponents.Count().Should().Be(1);
gitComponents.Should().ContainSingle();
var gitComponent = (GitComponent)gitComponents.Single().Component;
gitComponent.RepositoryUrl.Should().Be("https://github.com/example/example");
@ -157,8 +157,8 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
.WithFile("requirements.txt", string.Empty, fileLocation: Path.Join(Path.GetTempPath(), "TEST", "requirements.txt"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(5, componentRecorder.GetDetectedComponents().Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(5);
}
[TestMethod]
@ -212,8 +212,8 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
var discoveredComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(ProcessingResultCode.Success, result.ResultCode);
Assert.AreEqual(11, discoveredComponents.Count());
result.ResultCode.Should().Be(ProcessingResultCode.Success);
discoveredComponents.Should().HaveCount(11);
var rootIds = new[]
{
@ -239,7 +239,7 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
this.CheckChild(componentRecorder, "dog 2.1 - pip", new[] { "c 1.0 - pip", });
var graphsByLocations = componentRecorder.GetDependencyGraphsByLocation();
Assert.AreEqual(2, graphsByLocations.Count);
graphsByLocations.Should().HaveCount(2);
var graph1ComponentsWithDeps = new Dictionary<string, string[]>
{
@ -252,8 +252,8 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
};
var graph1 = graphsByLocations[file1];
Assert.IsTrue(graph1ComponentsWithDeps.Keys.Take(2).All(graph1.IsComponentExplicitlyReferenced));
Assert.IsTrue(graph1ComponentsWithDeps.Keys.Skip(2).All(a => !graph1.IsComponentExplicitlyReferenced(a)));
graph1ComponentsWithDeps.Keys.Take(2).All(graph1.IsComponentExplicitlyReferenced).Should().BeTrue();
graph1ComponentsWithDeps.Keys.Skip(2).Should().OnlyContain(a => !graph1.IsComponentExplicitlyReferenced(a));
this.CheckGraphStructure(graph1, graph1ComponentsWithDeps);
var graph2ComponentsWithDeps = new Dictionary<string, string[]>
@ -269,38 +269,33 @@ public class SimplePipComponentDetectorTests : BaseDetectorTest<SimplePipCompone
};
var graph2 = graphsByLocations[file2];
Assert.IsTrue(graph2ComponentsWithDeps.Keys.Take(3).All(graph2.IsComponentExplicitlyReferenced));
Assert.IsTrue(graph2ComponentsWithDeps.Keys.Skip(3).All(a => !graph2.IsComponentExplicitlyReferenced(a)));
graph2ComponentsWithDeps.Keys.Take(3).All(graph2.IsComponentExplicitlyReferenced).Should().BeTrue();
graph2ComponentsWithDeps.Keys.Skip(3).Should().OnlyContain(a => !graph2.IsComponentExplicitlyReferenced(a));
this.CheckGraphStructure(graph2, graph2ComponentsWithDeps);
}
private void CheckGraphStructure(IDependencyGraph graph, Dictionary<string, string[]> graphComponentsWithDeps)
{
var graphComponents = graph.GetComponents().ToArray();
Assert.AreEqual(
graphComponents.Should().HaveCount(
graphComponentsWithDeps.Keys.Count,
graphComponents.Length,
$"Expected {graphComponentsWithDeps.Keys.Count} component to be recorded but got {graphComponents.Length} instead!");
foreach (var componentId in graphComponentsWithDeps.Keys)
{
Assert.IsTrue(
graphComponents.Contains(componentId),
$"Component `{componentId}` not recorded!");
graphComponents.Should().Contain(componentId, $"Component `{componentId}` not recorded!");
var recordedDeps = graph.GetDependenciesForComponent(componentId).ToArray();
var expectedDeps = graphComponentsWithDeps[componentId];
Assert.AreEqual(
recordedDeps.Should().HaveCount(
expectedDeps.Length,
recordedDeps.Length,
$"Count missmatch of expected dependencies ({JsonConvert.SerializeObject(expectedDeps)}) and recorded dependencies ({JsonConvert.SerializeObject(recordedDeps)}) for `{componentId}`!");
foreach (var expectedDep in expectedDeps)
{
Assert.IsTrue(
recordedDeps.Contains(expectedDep),
$"Expected `{expectedDep}` in the list of dependencies for `{componentId}` but only recorded: {JsonConvert.SerializeObject(recordedDeps)}");
recordedDeps.Should().Contain(
expectedDep, $"Expected `{expectedDep}` in the list of dependencies for `{componentId}` but only recorded: {JsonConvert.SerializeObject(recordedDeps)}");
}
}
}

Просмотреть файл

@ -7,6 +7,7 @@ using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
using Microsoft.ComponentDetection.Detectors.Pip;
@ -58,7 +59,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -69,7 +70,7 @@ public class SimplePythonResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -104,7 +105,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -115,7 +116,7 @@ public class SimplePythonResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -145,7 +146,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -153,7 +154,7 @@ public class SimplePythonResolverTests
expectedA.Children.Add(expectedB);
expectedB.Parents.Add(expectedA);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
this.simplePyPiClient.Verify(x => x.FetchPackageFileStreamAsync(It.IsAny<Uri>()), Times.Exactly(2));
}
@ -189,7 +190,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -202,7 +203,7 @@ public class SimplePythonResolverTests
expectedC.Parents.Add(expectedA);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
this.simplePyPiClient.Verify(x => x.FetchPackageFileStreamAsync(It.IsAny<Uri>()), Times.Exactly(4));
}
@ -235,7 +236,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.15.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.19"));
@ -246,7 +247,7 @@ public class SimplePythonResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -278,7 +279,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "1.20"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0.0"));
@ -286,7 +287,7 @@ public class SimplePythonResolverTests
expectedA.Children.Add(expectedB);
expectedB.Parents.Add(expectedA);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
[TestMethod]
@ -344,7 +345,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
}
[TestMethod]
@ -377,7 +378,7 @@ public class SimplePythonResolverTests
var resolveResult = await resolver.ResolveRootsAsync(this.recorderMock.Object, dependencies);
Assert.IsNotNull(resolveResult);
resolveResult.Should().NotBeNull();
var expectedA = new PipGraphNode(new PipComponent("a", "10.0.0"));
var expectedB = new PipGraphNode(new PipComponent("b", "1.0"));
@ -388,7 +389,7 @@ public class SimplePythonResolverTests
expectedB.Children.Add(expectedC);
expectedC.Parents.Add(expectedB);
Assert.IsTrue(this.CompareGraphs(resolveResult.First(), expectedA));
this.CompareGraphs(resolveResult.First(), expectedA).Should().BeTrue();
}
private bool CompareGraphs(PipGraphNode a, PipGraphNode b)

Просмотреть файл

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Common.DependencyGraph;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Contracts.TypedComponent;
@ -66,7 +67,7 @@ public class VcpkgComponentDetectorTests : BaseDetectorTest<VcpkgComponentDetect
.WithFile("vcpkg.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
@ -77,13 +78,13 @@ public class VcpkgComponentDetectorTests : BaseDetectorTest<VcpkgComponentDetect
throw new AssertFailedException($"{nameof(sbomComponent)} is null");
}
Assert.AreEqual(1, components.Count);
Assert.AreEqual("nlohmann-json", sbomComponent.Name);
Assert.AreEqual("3.10.4", sbomComponent.Version);
Assert.AreEqual(5, sbomComponent.PortVersion);
Assert.AreEqual("SPDXRef-port", sbomComponent.SPDXID);
Assert.AreEqual("git+https://github.com/Microsoft/vcpkg#ports/nlohmann-json", sbomComponent.DownloadLocation);
Assert.AreEqual("pkg:vcpkg/nlohmann-json@3.10.4?port_version=5", sbomComponent.PackageUrl.ToString());
components.Should().ContainSingle();
sbomComponent.Name.Should().Be("nlohmann-json");
sbomComponent.Version.Should().Be("3.10.4");
sbomComponent.PortVersion.Should().Be(5);
sbomComponent.SPDXID.Should().Be("SPDXRef-port");
sbomComponent.DownloadLocation.Should().Be("git+https://github.com/Microsoft/vcpkg#ports/nlohmann-json");
sbomComponent.PackageUrl.ToString().Should().Be("pkg:vcpkg/nlohmann-json@3.10.4?port_version=5");
}
[TestMethod]
@ -125,24 +126,24 @@ public class VcpkgComponentDetectorTests : BaseDetectorTest<VcpkgComponentDetect
.WithFile("vcpkg.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
Assert.AreEqual(2, components.Count);
components.Should().HaveCount(2);
var sbomComponent = (VcpkgComponent)components.FirstOrDefault(c => ((VcpkgComponent)c?.Component).SPDXID.Equals("SPDXRef-binary")).Component;
Assert.IsNotNull(sbomComponent);
Assert.AreEqual("tinyxml2:x64-linux", sbomComponent.Name);
Assert.AreEqual("5c7679507def92c5c71df44aec08a90a5c749f7f805b3f0e8e70f5e8a5b1b8d0", sbomComponent.Version);
Assert.AreEqual("SPDXRef-binary", sbomComponent.SPDXID);
Assert.AreEqual("NONE", sbomComponent.DownloadLocation);
sbomComponent.Should().NotBeNull();
sbomComponent.Name.Should().Be("tinyxml2:x64-linux");
sbomComponent.Version.Should().Be("5c7679507def92c5c71df44aec08a90a5c749f7f805b3f0e8e70f5e8a5b1b8d0");
sbomComponent.SPDXID.Should().Be("SPDXRef-binary");
sbomComponent.DownloadLocation.Should().Be("NONE");
sbomComponent = (VcpkgComponent)components.FirstOrDefault(c => ((VcpkgComponent)c.Component).SPDXID.Equals("SPDXRef-resource-1")).Component;
Assert.AreEqual("leethomason/tinyxml2", sbomComponent.Name);
Assert.AreEqual("9.0.0", sbomComponent.Version);
Assert.AreEqual("SPDXRef-resource-1", sbomComponent.SPDXID);
Assert.AreEqual("git+https://github.com/leethomason/tinyxml2", sbomComponent.DownloadLocation);
sbomComponent.Name.Should().Be("leethomason/tinyxml2");
sbomComponent.Version.Should().Be("9.0.0");
sbomComponent.SPDXID.Should().Be("SPDXRef-resource-1");
sbomComponent.DownloadLocation.Should().Be("git+https://github.com/leethomason/tinyxml2");
}
[TestMethod]
@ -154,11 +155,11 @@ public class VcpkgComponentDetectorTests : BaseDetectorTest<VcpkgComponentDetect
.WithFile("vcpkg.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
Assert.IsFalse(components.Any());
components.Should().BeEmpty();
}
[TestMethod]
@ -170,11 +171,11 @@ public class VcpkgComponentDetectorTests : BaseDetectorTest<VcpkgComponentDetect
.WithFile("vcpkg.spdx.json", spdxFile)
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
var components = detectedComponents.ToList();
Assert.IsFalse(components.Any());
components.Should().BeEmpty();
}
[TestMethod]

Просмотреть файл

@ -4,6 +4,7 @@ using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.ComponentDetection.Detectors.Yarn;
using Microsoft.ComponentDetection.Detectors.Yarn.Parsers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -42,9 +43,9 @@ public class YarnBlockFileTests
file = await YarnBlockFile.CreateBlockFileAsync(stream);
}
Assert.AreEqual(0, file.Count());
Assert.AreEqual(string.Empty, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.Invalid, file.YarnLockVersion);
file.Should().BeEmpty();
file.VersionHeader.Should().Be(string.Empty);
file.YarnLockVersion.Should().Be(YarnLockVersion.Invalid);
}
[TestMethod]
@ -62,9 +63,9 @@ public class YarnBlockFileTests
var file = await YarnBlockFile.CreateBlockFileAsync(stream);
Assert.AreEqual(0, file.Count());
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V1, file.YarnLockVersion);
file.Should().BeEmpty();
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V1);
}
[TestMethod]
@ -90,12 +91,14 @@ public class YarnBlockFileTests
var block = file.Single();
Assert.AreEqual(block.Title, "block1");
Assert.AreEqual(1, block.Children.Count);
Assert.AreEqual("value", block.Values["property"]);
Assert.AreEqual("otherValue", block.Children.Single(x => x.Title == "block2").Values["otherProperty"]);
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V1, file.YarnLockVersion);
block.Title.Should().Be("block1");
block.Children.Should().ContainSingle();
block.Values["property"].Should().Be("value");
block.Children.Single(x => x.Title == "block2").Values.Should().ContainKey("otherProperty");
var value = block.Children.Single(x => x.Title == "block2").Values["otherProperty"];
value.Should().Be("otherValue");
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V1);
}
[TestMethod]
@ -137,9 +140,9 @@ public class YarnBlockFileTests
var file = await YarnBlockFile.CreateBlockFileAsync(stream);
Assert.AreEqual(3, file.Count());
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V1, file.YarnLockVersion);
file.Should().HaveCount(3);
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V1);
}
[TestMethod]
@ -164,9 +167,9 @@ public class YarnBlockFileTests
var file = await YarnBlockFile.CreateBlockFileAsync(stream);
Assert.AreEqual(0, file.Count());
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V2, file.YarnLockVersion);
file.Should().BeEmpty();
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V2);
}
[TestMethod]
@ -199,12 +202,13 @@ public class YarnBlockFileTests
var block = file.Single();
Assert.AreEqual(block.Title, "block1");
Assert.AreEqual(1, block.Children.Count);
Assert.AreEqual("value", block.Values["property"]);
Assert.AreEqual("otherValue", block.Children.Single(x => x.Title == "block2").Values["otherProperty"]);
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V2, file.YarnLockVersion);
block.Title.Should().Be("block1");
block.Children.Should().ContainSingle();
block.Values["property"].Should().Be("value");
block.Children.Single(x => x.Title == "block2").Values.Should().ContainKey("otherProperty");
var value = block.Children.Single(x => x.Title == "block2").Values["otherProperty"];
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V2);
}
[TestMethod]
@ -237,12 +241,13 @@ public class YarnBlockFileTests
var block = file.Single();
Assert.AreEqual(block.Title, "block1");
Assert.AreEqual(1, block.Children.Count);
Assert.AreEqual("value", block.Values["property"]);
Assert.AreEqual("otherValue", block.Children.Single(x => x.Title == "block2").Values["otherProperty"]);
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V2, file.YarnLockVersion);
block.Title.Should().Be("block1");
block.Children.Should().ContainSingle();
block.Values["property"].Should().Be("value");
block.Children.Single(x => x.Title == "block2").Values.Should().ContainKey("otherProperty");
var value = block.Children.Single(x => x.Title == "block2").Values["otherProperty"];
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V2);
}
[TestMethod]
@ -287,8 +292,8 @@ public class YarnBlockFileTests
var file = await YarnBlockFile.CreateBlockFileAsync(stream);
Assert.AreEqual(3, file.Count());
Assert.AreEqual(yarnLockFileVersionString, file.VersionHeader);
Assert.AreEqual(YarnLockVersion.V2, file.YarnLockVersion);
file.Should().HaveCount(3);
file.VersionHeader.Should().Be(yarnLockFileVersionString);
file.YarnLockVersion.Should().Be(YarnLockVersion.V2);
}
}

Просмотреть файл

@ -55,8 +55,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJson, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -70,8 +70,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJson, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -99,8 +99,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJsonContent, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -126,8 +126,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJsonContent, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(0, componentRecorder.GetDetectedComponents().Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
componentRecorder.GetDetectedComponents().Count().Should().Be(0);
}
[TestMethod]
@ -150,12 +150,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJsonContent, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -182,12 +182,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", packageJsonContent, new List<string> { "package.json" })
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -228,12 +228,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", workspaceJsonComponentStream.Stream, new[] { "package.json" }, Path.Combine(Path.GetTempPath(), "workspace", "package.json"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -277,11 +277,11 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
detectedComponents.Should().HaveCount(1);
detectedComponents.Should().ContainSingle();
// checking if workspace's "package.json FilePath entry" is added or not.
var detectedFilePaths = detectedComponents.First().FilePaths;
detectedFilePaths.Should().HaveCount(1);
detectedFilePaths.Should().ContainSingle();
var expectedWorkSpacePackageJsonPath = Path.Combine(Path.GetTempPath(), "workspace", "package.json");
detectedComponents.First().FilePaths.Contains(expectedWorkSpacePackageJsonPath).Should().Be(true);
}
@ -320,12 +320,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", workspaceJsonComponentStream.Stream, new[] { "package.json" }, Path.Combine(Path.GetTempPath(), "workspace", "package.json"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -366,12 +366,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", workspaceJsonComponentStream.Stream, new[] { "package.json" }, Path.Combine(Path.GetTempPath(), "workspace", "package.json"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -412,12 +412,12 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
.WithFile("package.json", workspaceJsonComponentStream.Stream, new[] { "package.json" }, Path.Combine(Path.GetTempPath(), "workspace", "package.json"))
.ExecuteDetectorAsync();
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
var detectedComponents = componentRecorder.GetDetectedComponents();
Assert.AreEqual(1, detectedComponents.Count());
Assert.AreEqual(componentA.Name, ((NpmComponent)detectedComponents.Single().Component).Name);
Assert.AreEqual(version0, ((NpmComponent)detectedComponents.Single().Component).Version);
detectedComponents.Should().ContainSingle();
((NpmComponent)detectedComponents.Single().Component).Name.Should().Be(componentA.Name);
((NpmComponent)detectedComponents.Single().Component).Version.Should().Be(version0);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
detectedComponents.Single().Component.Id,
@ -459,8 +459,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
var component0 = detectedComponents.Select(x => x.Component).Cast<NpmComponent>().Single(x => x.Name == componentA.Name);
var component1 = detectedComponents.Select(x => x.Component).Cast<NpmComponent>().Single(x => x.Name == componentB.Name);
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, detectedComponents.Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponents.Should().HaveCount(2);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
component0.Id,
@ -506,8 +506,8 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
var component0 = detectedComponents.Select(x => x.Component).Cast<NpmComponent>().Single(x => x.Name == componentA.Name);
var component1 = detectedComponents.Select(x => x.Component).Cast<NpmComponent>().Single(x => x.Name == componentB.Name);
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, detectedComponents.Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponents.Should().HaveCount(2);
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
component0.Id,
@ -579,21 +579,21 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
var componentA = detectedComponentes.Single(x => ((NpmComponent)x.Component).Name == componentNameA);
var componentB = detectedComponentes.Single(x => ((NpmComponent)x.Component).Name == componentNameB);
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, detectedComponentes.Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponentes.Should().HaveCount(2);
// Component A
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
componentA.Component.Id,
parentComponent => parentComponent.Id == componentA.Component.Id);
Assert.AreEqual(false, componentRecorder.GetEffectiveDevDependencyValue(componentA.Component.Id));
componentRecorder.GetEffectiveDevDependencyValue(componentA.Component.Id).Should().Be(false);
// Component B
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
componentB.Component.Id,
parentComponent1 => parentComponent1.Id == componentA.Component.Id,
parentComponent2 => parentComponent2.Id == componentB.Component.Id);
Assert.AreEqual(false, componentRecorder.GetEffectiveDevDependencyValue(componentB.Component.Id));
componentRecorder.GetEffectiveDevDependencyValue(componentB.Component.Id).Should().Be(false);
}
[TestMethod]
@ -655,21 +655,21 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
var componentA = detectedComponentes.Single(x => ((NpmComponent)x.Component).Name == componentNameA);
var componentB = detectedComponentes.Single(x => ((NpmComponent)x.Component).Name == componentNameB);
Assert.AreEqual(ProcessingResultCode.Success, scanResult.ResultCode);
Assert.AreEqual(2, detectedComponentes.Count());
scanResult.ResultCode.Should().Be(ProcessingResultCode.Success);
detectedComponentes.Should().HaveCount(2);
// Component A
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
componentA.Component.Id,
parentComponent => parentComponent.Id == componentA.Component.Id);
Assert.AreEqual(false, componentRecorder.GetEffectiveDevDependencyValue(componentA.Component.Id));
componentRecorder.GetEffectiveDevDependencyValue(componentA.Component.Id).Should().Be(false);
// Component B
componentRecorder.AssertAllExplicitlyReferencedComponents<NpmComponent>(
componentB.Component.Id,
parentComponent1 => parentComponent1.Id == componentA.Component.Id,
parentComponent2 => parentComponent2.Id == componentB.Component.Id);
Assert.AreEqual(false, componentRecorder.GetEffectiveDevDependencyValue(componentB.Component.Id));
componentRecorder.GetEffectiveDevDependencyValue(componentB.Component.Id).Should().Be(false);
}
[TestMethod]
@ -812,7 +812,7 @@ public class YarnLockDetectorTests : BaseDetectorTest<YarnLockComponentDetector>
var detectedComponents = componentRecorder.GetDetectedComponents();
detectedComponents.Should().HaveCount(1);
detectedComponents.Should().ContainSingle();
var detectedComponent = detectedComponents.First();
}

Просмотреть файл

@ -3,6 +3,7 @@ namespace Microsoft.ComponentDetection.Detectors.Tests;
using System;
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using Microsoft.ComponentDetection.Contracts;
using Microsoft.ComponentDetection.Detectors.Yarn;
using Microsoft.ComponentDetection.Detectors.Yarn.Parsers;
@ -29,9 +30,9 @@ public class YarnParserTests
{
var parser = new YarnLockParser(this.loggerMock.Object);
void Action() => parser.Parse(this.recorderMock.Object, null, this.loggerMock.Object);
var action = () => parser.Parse(this.recorderMock.Object, null, this.loggerMock.Object);
Assert.ThrowsException<ArgumentNullException>(Action);
action.Should().ThrowExactly<ArgumentNullException>();
}
[TestMethod]
@ -44,7 +45,7 @@ public class YarnParserTests
var blockFile = new Mock<IYarnBlockFile>();
blockFile.Setup(x => x.YarnLockVersion).Returns(yarnLockFileVersion);
Assert.IsTrue(parser.CanParse(blockFile.Object.YarnLockVersion));
parser.CanParse(blockFile.Object.YarnLockVersion).Should().BeTrue();
}
[TestMethod]
@ -57,7 +58,7 @@ public class YarnParserTests
var blockFile = new Mock<IYarnBlockFile>();
blockFile.Setup(x => x.YarnLockVersion).Returns(yarnLockFileVersion);
Assert.IsTrue(parser.CanParse(blockFile.Object.YarnLockVersion));
parser.CanParse(blockFile.Object.YarnLockVersion).Should().BeTrue();
}
[TestMethod]
@ -74,8 +75,8 @@ public class YarnParserTests
var file = parser.Parse(this.recorderMock.Object, blockFile.Object, this.loggerMock.Object);
Assert.AreEqual(YarnLockVersion.V1, file.LockVersion);
Assert.AreEqual(0, file.Entries.Count());
file.LockVersion.Should().Be(YarnLockVersion.V1);
file.Entries.Should().BeEmpty();
}
[TestMethod]
@ -104,8 +105,8 @@ public class YarnParserTests
var file = parser.Parse(this.recorderMock.Object, blockFile.Object, this.loggerMock.Object);
Assert.AreEqual(YarnLockVersion.V1, file.LockVersion);
Assert.AreEqual(3, file.Entries.Count());
file.LockVersion.Should().Be(YarnLockVersion.V1);
file.Entries.Should().HaveCount(3);
foreach (var entry in file.Entries)
{
@ -140,11 +141,11 @@ public class YarnParserTests
var file = parser.Parse(this.recorderMock.Object, blockFile.Object, this.loggerMock.Object);
Assert.AreEqual(YarnLockVersion.V1, file.LockVersion);
Assert.AreEqual(2, file.Entries.Count());
file.LockVersion.Should().Be(YarnLockVersion.V1);
file.Entries.Should().HaveCount(2);
Assert.IsNotNull(file.Entries.FirstOrDefault(x => x.LookupKey == "a@1.0.0"));
Assert.IsNotNull(file.Entries.FirstOrDefault(x => x.LookupKey == "b@2.4.6"));
file.Entries.FirstOrDefault(x => x.LookupKey == "a@1.0.0").Should().NotBeNull();
file.Entries.FirstOrDefault(x => x.LookupKey == "b@2.4.6").Should().NotBeNull();
}
private YarnBlock CreateDependencyBlock(IDictionary<string, string> dependencies)
@ -185,15 +186,15 @@ public class YarnParserTests
var componentName = block.Title.Split(',').Select(x => x.Trim()).First().Split('@')[0];
var blockVersions = block.Title.Split(',').Select(x => x.Trim()).Select(x => x.Split('@')[1]);
Assert.AreEqual(componentName, entry.Name);
entry.Name.Should().Be(componentName);
foreach (var version in blockVersions)
{
Assert.IsTrue(entry.Satisfied.Contains(YarnLockParser.NormalizeVersion(version)));
entry.Satisfied.Should().Contain(YarnLockParser.NormalizeVersion(version));
}
Assert.AreEqual(block.Values["version"], entry.Version);
Assert.AreEqual(block.Values["resolved"], entry.Resolved);
entry.Version.Should().Be(block.Values["version"]);
entry.Resolved.Should().Be(block.Values["resolved"]);
var dependencies = block.Children.SingleOrDefault(x => x.Title == "dependencies");
@ -201,7 +202,7 @@ public class YarnParserTests
{
foreach (var dependency in dependencies.Values)
{
Assert.IsNotNull(entry.Dependencies.SingleOrDefault(x => x.Name == dependency.Key && x.Version == dependency.Value));
entry.Dependencies.SingleOrDefault(x => x.Name == dependency.Key && x.Version == dependency.Value).Should().NotBeNull();
}
}
}