public void WhenQueryingByNameReturnsExpectedResults()
            {
                var expectedResult = new Cwe {
                    CweId = "CWE-001", Name = "Name A: listed", Description = "Description A: listed.", Listed = true
                };
                var notExpectedResult1 = new Cwe {
                    CweId = "CWE-002", Name = "Name A: unlisted", Description = "Description A: unlisted.", Listed = false
                };
                var notExpectedResult2 = new Cwe {
                    CweId = "CWE-003", Name = "Name B", Description = "description B", Listed = true
                };

                var cweRepositoryMock = new Mock <IEntityRepository <Cwe> >();

                cweRepositoryMock
                .Setup(x => x.GetAll())
                .Returns(new[]
                {
                    expectedResult,
                    notExpectedResult1,
                    notExpectedResult2
                }.AsQueryable());

                var query        = new AutocompleteCweIdsQuery(cweRepositoryMock.Object);
                var queryResults = query.Execute("Name A");

                Assert.NotNull(queryResults);
                var singleResult = Assert.Single(queryResults.Results);

                // Only the listed element matching by name should be returned.
                Assert.Equal(expectedResult.Name, singleResult.Name);
                Assert.Equal(expectedResult.CweId, singleResult.CweId);
                Assert.Equal(expectedResult.Description, singleResult.Description);
            }
Exemplo n.º 2
0
            public void ReturnsHttp200AndExpectedBodyForValidRequests(string queryString, string expectedCweIdStartString)
            {
                var cweRepositoryMock = GetMock <IEntityRepository <Cwe> >();

                var expectedResult1 = new Cwe {
                    CweId = "CWE-011", Name = "Name A: listed", Description = "Description A: listed.", Listed = true
                };
                var notExpectedResult1 = new Cwe {
                    CweId = "CWE-012", Name = "Name A: unlisted", Description = "Description A: unlisted.", Listed = false
                };
                var expectedResult2 = new Cwe {
                    CweId = "CWE-013", Name = "Name B", Description = "description B", Listed = true
                };
                var expectedResult3 = new Cwe {
                    CweId = "CWE-014", Name = "Name C", Description = "description C", Listed = true
                };
                var expectedResult4 = new Cwe {
                    CweId = "CWE-015", Name = "Name D", Description = "description D", Listed = true
                };
                var expectedResult5 = new Cwe {
                    CweId = "CWE-016", Name = "Name E", Description = "description E", Listed = true
                };
                var notExpectedResult2 = new Cwe {
                    CweId = "CWE-017", Name = "Name F", Description = "description F", Listed = true
                };

                cweRepositoryMock
                .Setup(x => x.GetAll())
                .Returns(new[]
                {
                    expectedResult1,
                    notExpectedResult1,
                    expectedResult2,
                    expectedResult3,
                    expectedResult4,
                    expectedResult5,
                    notExpectedResult2
                }.AsQueryable());

                var queryResults = InvokeAndAssertStatusCode(queryString, HttpStatusCode.OK);

                Assert.True(queryResults.Success);
                Assert.Null(queryResults.ErrorMessage);

                Assert.Equal(5, queryResults.Results.Count);
                Assert.True(queryResults.Success);
                Assert.Null(queryResults.ErrorMessage);
                Assert.All(
                    queryResults.Results,
                    r =>
                {
                    Assert.StartsWith(expectedCweIdStartString, r.CweId, StringComparison.OrdinalIgnoreCase);

                    // Only the listed elements with CWE-ID starting with the query string should be returned (up to 5 elements).
                    Assert.NotEqual(notExpectedResult1.CweId, r.CweId, StringComparer.OrdinalIgnoreCase);

                    // Sorted numerically, this is the 6th element in the resultset and should be filtered out (max 5).
                    Assert.NotEqual(notExpectedResult2.CweId, r.CweId, StringComparer.OrdinalIgnoreCase);
                });
            }
            public void ReturnsExistingAndCreatedCwes()
            {
                // Arrange
                var matchingCwe1 = new Cwe
                {
                    CweId = "cve-1"
                };

                var notMatchingCwe1 = new Cwe
                {
                    CweId = "cve-2"
                };

                var matchingCwe2 = new Cwe
                {
                    CweId = "cve-3"
                };

                var notMatchingCwe2 = new Cwe
                {
                    CweId = "cve-4"
                };

                var cwes       = new[] { matchingCwe1, notMatchingCwe1, matchingCwe2, notMatchingCwe2 };
                var repository = GetMock <IEntityRepository <Cwe> >();

                repository
                .Setup(x => x.GetAll())
                .Returns(cwes.AsQueryable())
                .Verifiable();

                var service = Get <PackageDeprecationService>();

                var queriedCweIds = new[] { matchingCwe1.CweId, matchingCwe2.CweId };

                // Act
                var result = service.GetCwesById(queriedCweIds);

                // Assert
                Assert.Equal(2, result.Count);
                Assert.Contains(matchingCwe1, result);
                Assert.Contains(matchingCwe2, result);
            }
            public void ThrowsIfNoCweExistsForId()
            {
                // Arrange
                var matchingCwe1 = new Cwe
                {
                    CweId = "cve-1"
                };

                var notMatchingCwe1 = new Cwe
                {
                    CweId = "cve-2"
                };

                var matchingCwe2 = new Cwe
                {
                    CweId = "cve-3"
                };

                var notMatchingCwe2 = new Cwe
                {
                    CweId = "cve-4"
                };

                var cwes       = new[] { matchingCwe1, notMatchingCwe1, matchingCwe2, notMatchingCwe2 };
                var repository = GetMock <IEntityRepository <Cwe> >();

                repository
                .Setup(x => x.GetAll())
                .Returns(cwes.AsQueryable())
                .Verifiable();

                var service = Get <PackageDeprecationService>();

                var missingCweId  = "cwe-5";
                var queriedCweIds = new[] { matchingCwe1.CweId, matchingCwe2.CweId, missingCweId };

                // Act
                Assert.Throws <ArgumentException>(() => service.GetCwesById(queriedCweIds));
            }
        public void DeprecationFieldsAreSetAsExpected(
            PackageDeprecationStatus status,
            SeverityString_State severity,
            bool hasCves,
            bool hasCwes,
            bool hasAlternateRegistration,
            bool hasAlternatePackage)
        {
            // Arrange
            decimal?cvss;

            switch (severity)
            {
            case SeverityString_State.Critical:
                cvss = (decimal)9.5;
                break;

            case SeverityString_State.High:
                cvss = (decimal)7.5;
                break;

            case SeverityString_State.Medium:
                cvss = (decimal)5;
                break;

            case SeverityString_State.Low:
                cvss = (decimal)2;
                break;

            case SeverityString_State.None:
                cvss = null;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(severity));
            }

            var deprecation = new PackageDeprecation
            {
                CvssRating    = cvss,
                CustomMessage = "hello"
            };

            var cveIds = new[] { "CVE-2019-1111", "CVE-2019-2222" };

            if (hasCves)
            {
                foreach (var cveId in cveIds)
                {
                    var cve = new Cve
                    {
                        CveId = cveId
                    };

                    deprecation.Cves.Add(cve);
                }
            }

            var cweIds = new[] { "CWE-1", "CWE-2" };

            if (hasCwes)
            {
                foreach (var cweId in cweIds)
                {
                    var cwe = new Cwe
                    {
                        CweId = cweId
                    };

                    deprecation.Cwes.Add(cwe);
                }
            }

            var alternateRegistrationId = "alternateRegistrationId";

            if (hasAlternateRegistration)
            {
                var registration = new PackageRegistration
                {
                    Id = alternateRegistrationId
                };

                deprecation.AlternatePackageRegistration = registration;
            }

            var alternatePackageRegistrationId = "alternatePackageRegistration";
            var alternatePackageVersion        = "1.0.0-alt";

            if (hasAlternatePackage)
            {
                var alternatePackageRegistration = new PackageRegistration
                {
                    Id = alternatePackageRegistrationId
                };

                var alternatePackage = new Package
                {
                    Version             = alternatePackageVersion,
                    PackageRegistration = alternatePackageRegistration
                };

                deprecation.AlternatePackage = alternatePackage;
            }

            var package = CreateTestPackage("1.0.0");

            var linkedDeprecation = new PackageDeprecation
            {
                Status = status
            };

            package.Deprecations.Add(linkedDeprecation);

            // Act
            var model = new DisplayPackageViewModel(package, null, deprecation);

            // Assert
            Assert.Equal(status, model.DeprecationStatus);
            Assert.Equal(deprecation.CustomMessage, model.CustomMessage);

            string expectedString;

            switch (severity)
            {
            case SeverityString_State.Critical:
                expectedString = "Critical";
                break;

            case SeverityString_State.High:
                expectedString = "High";
                break;

            case SeverityString_State.Medium:
                expectedString = "Medium";
                break;

            case SeverityString_State.Low:
                expectedString = "Low";
                break;

            case SeverityString_State.None:
                expectedString = null;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(severity));
            }

            Assert.Equal(expectedString, model.Severity);

            if (hasCves)
            {
                Assert.Equal(cveIds, model.CveIds);
            }
            else
            {
                Assert.Empty(model.CveIds);
            }

            if (hasCwes)
            {
                Assert.Equal(cweIds, model.CweIds);
            }
            else
            {
                Assert.Empty(model.CweIds);
            }

            if (hasAlternatePackage)
            {
                Assert.Equal(alternatePackageRegistrationId, model.AlternatePackageId);
                Assert.Equal(alternatePackageVersion, model.AlternatePackageVersion);
            }
            else if (hasAlternateRegistration)
            {
                Assert.Equal(alternateRegistrationId, model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }
            else
            {
                Assert.Null(model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }

            var versionModel = model.PackageVersions.Single();

            Assert.Equal(status, versionModel.DeprecationStatus);
            Assert.Null(versionModel.Severity);
            Assert.Null(versionModel.CveIds);
            Assert.Null(versionModel.CweIds);
            Assert.Null(versionModel.AlternatePackageId);
            Assert.Null(versionModel.AlternatePackageVersion);
            Assert.Null(versionModel.CustomMessage);
        }
Exemplo n.º 6
0
 public VulnerabilityDetailState(Cwe cwe)
     : this(cwe.CweId, cwe.Description)
 {
     name = cwe.Name;
 }