public void SarifLogResultMatcher_CurrentLogEmpty_AllAbsent() { Random random = RandomSarifLogGenerator.GenerateRandomAndLog(this.output); SarifLog baselineLog = RandomSarifLogGenerator.GenerateSarifLogWithRuns(random, 1); SarifLog currentLog = new SarifLog(); currentLog.Runs = new Run[] { new Run() }; baselineLog.Runs[0].InstanceGuid = Guid.NewGuid().ToString(); currentLog.Runs[0].InstanceGuid = Guid.NewGuid().ToString(); currentLog.Runs[0].Tool = new Tool() { Name = "Test" }; foreach (Result result in baselineLog.Runs[0].Results) { result.CorrelationGuid = Guid.NewGuid().ToString(); } SarifLog calculatedNextBaseline = baseliner.Match(new SarifLog[] { baselineLog }, new SarifLog[] { currentLog }).First(); calculatedNextBaseline.Runs.Should().HaveCount(1); if (baselineLog.Runs[0].Results.Any()) { calculatedNextBaseline.Runs[0].Results.Should().HaveCount(baselineLog.Runs[0].Results.Count); calculatedNextBaseline.Runs[0].Results.Where(r => string.IsNullOrEmpty(r.CorrelationGuid)).Should().HaveCount(0); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).Should().HaveCount(baselineLog.Runs[0].Results.Count); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> AbsentResultProperties).Should().BeTrue(); AbsentResultProperties.Should().ContainKey("Run"); AbsentResultProperties["Run"].Should().BeEquivalentTo(baselineLog.Runs[0].InstanceGuid); } }
public void ResultMatchingBaseliner_BaselinesTwoSimpleSarifLogs() { Random random = RandomSarifLogGenerator.GenerateRandomAndLog(this.output); SarifLog baselineLog = RandomSarifLogGenerator.GenerateSarifLogWithRuns(random, 1); SarifLog currentLog = baselineLog.DeepClone(); baselineLog.Runs[0].Id = new RunAutomationDetails { InstanceGuid = Guid.NewGuid().ToString() }; currentLog.Runs[0].Id = new RunAutomationDetails { InstanceGuid = Guid.NewGuid().ToString() }; if (currentLog.Runs[0].Results.Any()) { currentLog.Runs[0].Results[0].Tags.Add("New Unused Tag"); } foreach (Result result in baselineLog.Runs[0].Results) { result.CorrelationGuid = Guid.NewGuid().ToString(); } SarifLog calculatedNextBaseline = baseliner.Match(new SarifLog[] { baselineLog }, new SarifLog[] { currentLog }).First(); calculatedNextBaseline.Runs.Should().HaveCount(1); if (currentLog.Runs[0].Results.Any()) { calculatedNextBaseline.Runs[0].Results.Should().HaveCount(currentLog.Runs[0].Results.Count + 1); calculatedNextBaseline.Runs[0].Results.Where(r => string.IsNullOrEmpty(r.CorrelationGuid)).Should().HaveCount(0); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> AbsentResultProperties).Should().BeTrue(); AbsentResultProperties.Should().ContainKey("Run"); AbsentResultProperties["Run"].Should().BeEquivalentTo(baselineLog.Runs[0].Id.InstanceGuid); int existingCount = currentLog.Runs[0].Results.Count - 1; calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Unchanged).Count().Should().Be(existingCount); if (existingCount > 0) { // In the event that we generated a SARIF run of only a single result, we will not have an 'existing' match // since we adjusted the sole result value by adding a property to it. calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Unchanged).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> CurrentResultProperties).Should().BeTrue(); CurrentResultProperties.Should().ContainKey("Run"); CurrentResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].Id.InstanceGuid); } calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> NewResultProperties).Should().BeTrue(); NewResultProperties.Should().ContainKey("Run"); NewResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].Id.InstanceGuid); } }
public void SarifLogResultMatcher_BaselinesTwoSimpleSarifLogs() { Random random = RandomSarifLogGenerator.GenerateRandomAndLog(this.output); SarifLog baselineLog = RandomSarifLogGenerator.GenerateSarifLogWithRuns(random, 1); SarifLog currentLog = baselineLog.DeepClone(); baselineLog.Runs[0].InstanceGuid = Guid.NewGuid().ToString(); currentLog.Runs[0].InstanceGuid = Guid.NewGuid().ToString(); if (currentLog.Runs[0].Results.Any()) { currentLog.Runs[0].Results[0].Tags.Add("New Unused Tag"); } foreach (Result result in baselineLog.Runs[0].Results) { result.CorrelationGuid = Guid.NewGuid().ToString(); } SarifLog calculatedNextBaseline = baseliner.Match(new SarifLog[] { baselineLog }, new SarifLog[] { currentLog }).First(); calculatedNextBaseline.Runs.Should().HaveCount(1); if (currentLog.Runs[0].Results.Any()) { calculatedNextBaseline.Runs[0].Results.Should().HaveCount(currentLog.Runs[0].Results.Count + 1); calculatedNextBaseline.Runs[0].Results.Where(r => string.IsNullOrEmpty(r.CorrelationGuid)).Should().HaveCount(0); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> AbsentResultProperties).Should().BeTrue(); AbsentResultProperties.Should().ContainKey("Run"); AbsentResultProperties["Run"].Should().BeEquivalentTo(baselineLog.Runs[0].InstanceGuid); if (currentLog.Runs[0].Results.Count > 1) { calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Existing).Should().HaveCount(currentLog.Runs[0].Results.Count - 1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Existing).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> CurrentResultProperties).Should().BeTrue(); CurrentResultProperties.Should().ContainKey("Run"); CurrentResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].InstanceGuid); } calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> NewResultProperties).Should().BeTrue(); NewResultProperties.Should().ContainKey("Run"); NewResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].InstanceGuid); } }
public void SarifLogResultMatcher_BaselinesTwoSimpleSarifLogs() { Random random = RandomSarifLogGenerator.GenerateRandomAndLog(this.output); SarifLog baselineLog = RandomSarifLogGenerator.GenerateSarifLogWithRuns(random, 1); SarifLog currentLog = baselineLog.DeepClone(); baselineLog.Runs[0].AutomationDetails = new RunAutomationDetails { Guid = Guid.NewGuid().ToString() }; currentLog.Runs[0].AutomationDetails = new RunAutomationDetails { Guid = Guid.NewGuid().ToString() }; // This code exists to force a result to diverge from the previous run. By modifying this tag, // we ensure that at least one result will be regarded as new (which implies one result // will be regarded as going absent). if (currentLog.Runs[0].Results.Any()) { currentLog.Runs[0].Results[0].Tags.Add("New Unused Tag"); } string propertyName = "WeLikePi"; float propertyValue = 3.14159F; baselineLog.Runs[0].SetProperty(propertyName, propertyValue); foreach (Result result in baselineLog.Runs[0].Results) { result.CorrelationGuid = Guid.NewGuid().ToString(); } SarifLog calculatedNextBaseline = s_preserveOldestPropertyBagMatcher.Match(new SarifLog[] { baselineLog }, new SarifLog[] { currentLog }).First(); calculatedNextBaseline.Runs.Should().HaveCount(1); calculatedNextBaseline.Runs[0].Properties.Should().NotBeNull(); calculatedNextBaseline.Runs[0].GetProperty <float>(propertyName).Should().Be(propertyValue); if (currentLog.Runs[0].Results.Any()) { calculatedNextBaseline.Runs[0].Results.Should().HaveCount(currentLog.Runs[0].Results.Count + 1); calculatedNextBaseline.Runs[0].Results.Where(r => string.IsNullOrEmpty(r.CorrelationGuid)).Should().HaveCount(0); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Absent).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> AbsentResultProperties).Should().BeTrue(); AbsentResultProperties.Should().ContainKey("Run"); AbsentResultProperties["Run"].Should().BeEquivalentTo(baselineLog.Runs[0].AutomationDetails.Guid); if (currentLog.Runs[0].Results.Count > 1) { calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Unchanged).Should().HaveCount(currentLog.Runs[0].Results.Count - 1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.Unchanged).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> CurrentResultProperties).Should().BeTrue(); CurrentResultProperties.Should().ContainKey("Run"); CurrentResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].AutomationDetails.Guid); } calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).Should().HaveCount(1); calculatedNextBaseline.Runs[0].Results.Where(r => r.BaselineState == BaselineState.New).First().TryGetProperty(SarifLogResultMatcher.ResultMatchingResultPropertyName, out Dictionary <string, string> NewResultProperties).Should().BeTrue(); NewResultProperties.Should().ContainKey("Run"); NewResultProperties["Run"].Should().BeEquivalentTo(currentLog.Runs[0].AutomationDetails.Guid); } }