コード例 #1
0
        public async Task ExpiredThresholdCausesRecordUpdate()
        {
            // Arrange
            await using var context = JosekiTestsDb.CreateUniqueContext();
            var parser   = new ConfigurationParser("config.sample.yaml");
            var cveCache = new CveCache(parser, context, new MemoryCache(new MemoryCacheOptions()));

            var id             = this.GetCveId();
            var now            = DateTime.UtcNow;
            var expirationDate = now.AddDays(-(parser.Get().Cache.CveTtl + 1));
            var oldCve         = new CveEntity
            {
                CveId       = id,
                Severity    = joseki.db.entities.CveSeverity.Medium,
                PackageName = Guid.NewGuid().ToString(),
                Title       = Guid.NewGuid().ToString(),
                Description = Guid.NewGuid().ToString(),
                Remediation = Guid.NewGuid().ToString(),
                References  = Guid.NewGuid().ToString(),
                DateUpdated = expirationDate,
                DateCreated = expirationDate,
            };

            // this is the hack -_-
            // Use sync version, because it does not update DateUpdated & DateCreated
            context.Cve.Add(oldCve);
            context.SaveChanges();

            var newCve = new CVE
            {
                Id          = id,
                Description = Guid.NewGuid().ToString(),
                Remediation = Guid.NewGuid().ToString(),
                Severity    = CveSeverity.High,
                PackageName = Guid.NewGuid().ToString(),
                Title       = Guid.NewGuid().ToString(),
                References  = Guid.NewGuid().ToString(),
            };

            // Act & Assert
            context.Cve.Count().Should().Be(1, "context should have the only one record before GetOrAddItem");
            await cveCache.GetOrAddItem(id, () => newCve);

            var actualEntity = await context.Cve.FirstAsync(i => i.CveId == id);

            actualEntity.Description.Should().Be(newCve.Description);
            actualEntity.Remediation.Should().Be(newCve.Remediation);
            actualEntity.PackageName.Should().Be(newCve.PackageName);
            actualEntity.Title.Should().Be(newCve.Title);
            actualEntity.References.Should().Be(newCve.References);
            actualEntity.Severity.Should().Be(joseki.db.entities.CveSeverity.High);
            actualEntity.DateUpdated.Should().BeOnOrAfter(now);
        }
コード例 #2
0
        public async Task SeveralGetRequestsAddOnlySingleRecordToDb()
        {
            // Arrange
            await using var context = JosekiTestsDb.CreateUniqueContext();
            var parser   = new ConfigurationParser("config.sample.yaml");
            var cveCache = new CveCache(parser, context, new MemoryCache(new MemoryCacheOptions()));

            var id  = this.GetCveId();
            var cve = new CVE {
                Id = id, Description = Guid.NewGuid().ToString(),
            };

            // Act & Assert
            context.Cve.Count().Should().Be(0, "context should be empty before the first GetOrAddItem");
            await cveCache.GetOrAddItem(id, () => cve);

            await cveCache.GetOrAddItem(id, () => cve);

            await cveCache.GetOrAddItem(id, () => cve);

            context.Cve.Count().Should().Be(1, "context should have a single value after three GetOrAddItem");
        }
コード例 #3
0
        public async Task GetExistingItemDoesNotAddNewRecords()
        {
            // Arrange
            await using var context = JosekiTestsDb.CreateUniqueContext();
            var parser   = new ConfigurationParser("config.sample.yaml");
            var cveCache = new CveCache(parser, context, new MemoryCache(new MemoryCacheOptions()));

            var id  = this.GetCveId();
            var cve = new CVE {
                Id = id, Description = Guid.NewGuid().ToString(),
            };

            context.Cve.Add(cve.ToEntity());
            await context.SaveChangesAsync();

            // Act & Assert
            context.Cve.Count().Should().Be(1, "context should have the only one record before GetOrAddItem");
            await cveCache.GetOrAddItem(id, () => cve);

            context.Cve.Count().Should().Be(1, "context should still have the only one record after GetOrAddItem");
        }