Skip to content

Commit 693681f

Browse files
committed
feat(workers): Assign the correct source for resolutions
Signed-off-by: Martin Nonnenmacher <martin.nonnenmacher@doubleopen.org>
1 parent 39ec9c1 commit 693681f

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

workers/common/src/main/kotlin/resolutions/OrtServerResolutionProvider.kt

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,34 @@ class OrtServerResolutionProvider(
115115
ruleViolations: List<RuleViolation>,
116116
vulnerabilities: List<Vulnerability>
117117
): ResolvedItemsResult {
118-
val issueResolutions = issues
119-
.associateWith { getResolutionsFor(it) }
120-
.filterValues { it.isNotEmpty() }
118+
fun <T> resolutionSources(selector: (Resolutions) -> List<T>) = listOf(
119+
selector(globalResolutions) to ResolutionSource.GLOBAL,
120+
selector(repositoryConfigurationResolutions) to ResolutionSource.REPOSITORY,
121+
selector(managedResolutions) to ResolutionSource.SERVER
122+
)
123+
124+
val issueResolutions = issues.associateWith { issue ->
125+
resolutionSources { it.issues }.flatMap { (resolutions, source) ->
126+
resolutions.filter { it.matches(issue) }.map { it.mapToModel(source) }
127+
}
128+
}.filterValues { it.isNotEmpty() }.mapKeys { it.key.mapToModel() }
121129

122-
val ruleViolationResolutions = ruleViolations
123-
.associateWith { getResolutionsFor(it) }
124-
.filterValues { it.isNotEmpty() }
130+
val ruleViolationResolutions = ruleViolations.associateWith { violation ->
131+
resolutionSources { it.ruleViolations }.flatMap { (resolutions, source) ->
132+
resolutions.filter { it.matches(violation) }.map { it.mapToModel(source) }
133+
}
134+
}.filterValues { it.isNotEmpty() }.mapKeys { it.key.mapToModel() }
125135

126-
val vulnerabilityResolutions = vulnerabilities
127-
.associateWith { getResolutionsFor(it) }
128-
.filterValues { it.isNotEmpty() }
136+
val vulnerabilityResolutions = vulnerabilities.associateWith { vulnerability ->
137+
resolutionSources { it.vulnerabilities }.flatMap { (resolutions, source) ->
138+
resolutions.filter { it.matches(vulnerability) }.map { it.mapToModel(source) }
139+
}
140+
}.filterValues { it.isNotEmpty() }.mapKeys { it.key.mapToModel() }
129141

130142
return ResolvedItemsResult(
131-
issues = issueResolutions.map { (issue, resolutions) ->
132-
issue.mapToModel() to resolutions.map { it.mapToModel(ResolutionSource.REPOSITORY) }
133-
}.toMap(),
134-
ruleViolations = ruleViolationResolutions.map { (violation, resolutions) ->
135-
violation.mapToModel() to resolutions.map { it.mapToModel(ResolutionSource.REPOSITORY) }
136-
}.toMap(),
137-
vulnerabilities = vulnerabilityResolutions.map { (vulnerability, resolutions) ->
138-
vulnerability.mapToModel() to resolutions.map { it.mapToModel(ResolutionSource.REPOSITORY) }
139-
}.toMap()
143+
issues = issueResolutions,
144+
ruleViolations = ruleViolationResolutions,
145+
vulnerabilities = vulnerabilityResolutions
140146
)
141147
}
142148
}

workers/common/src/test/kotlin/resolutions/OrtServerResolutionProviderTest.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -466,15 +466,15 @@ class OrtServerResolutionProviderTest : WordSpec({
466466
val issue2 = Issue(source = "source", message = "match-2")
467467

468468
val expectedResolutionsForIssue1 = listOf(
469-
globalResolutions.issues[0].mapToModel(ResolutionSource.REPOSITORY),
469+
globalResolutions.issues[0].mapToModel(ResolutionSource.GLOBAL),
470470
repositoryConfigurationResolutions.issues[0].mapToModel(ResolutionSource.REPOSITORY),
471-
managedResolutions.issues[0].mapToModel(ResolutionSource.REPOSITORY)
471+
managedResolutions.issues[0].mapToModel(ResolutionSource.SERVER)
472472
)
473473

474474
val expectedResolutionsForIssue2 = listOf(
475-
globalResolutions.issues[1].mapToModel(ResolutionSource.REPOSITORY),
475+
globalResolutions.issues[1].mapToModel(ResolutionSource.GLOBAL),
476476
repositoryConfigurationResolutions.issues[1].mapToModel(ResolutionSource.REPOSITORY),
477-
managedResolutions.issues[1].mapToModel(ResolutionSource.REPOSITORY)
477+
managedResolutions.issues[1].mapToModel(ResolutionSource.SERVER)
478478
)
479479

480480
val matchResult = provider.matchResolutions(listOf(issue1, issue2), emptyList(), emptyList())
@@ -558,15 +558,15 @@ class OrtServerResolutionProviderTest : WordSpec({
558558
)
559559

560560
val expectedResolutionsForRuleViolation1 = listOf(
561-
globalResolutions.ruleViolations[0].mapToModel(ResolutionSource.REPOSITORY),
561+
globalResolutions.ruleViolations[0].mapToModel(ResolutionSource.GLOBAL),
562562
repositoryConfigurationResolutions.ruleViolations[0].mapToModel(ResolutionSource.REPOSITORY),
563-
managedResolutions.ruleViolations[0].mapToModel(ResolutionSource.REPOSITORY)
563+
managedResolutions.ruleViolations[0].mapToModel(ResolutionSource.SERVER)
564564
)
565565

566566
val expectedResolutionsForRuleViolation2 = listOf(
567-
globalResolutions.ruleViolations[1].mapToModel(ResolutionSource.REPOSITORY),
567+
globalResolutions.ruleViolations[1].mapToModel(ResolutionSource.GLOBAL),
568568
repositoryConfigurationResolutions.ruleViolations[1].mapToModel(ResolutionSource.REPOSITORY),
569-
managedResolutions.ruleViolations[1].mapToModel(ResolutionSource.REPOSITORY)
569+
managedResolutions.ruleViolations[1].mapToModel(ResolutionSource.SERVER)
570570
)
571571

572572
val matchResult =
@@ -634,15 +634,15 @@ class OrtServerResolutionProviderTest : WordSpec({
634634
val vulnerability2 = Vulnerability(id = "match-2", references = emptyList())
635635

636636
val expectedResolutionsForVulnerability1 = listOf(
637-
globalResolutions.vulnerabilities[0].mapToModel(ResolutionSource.REPOSITORY),
637+
globalResolutions.vulnerabilities[0].mapToModel(ResolutionSource.GLOBAL),
638638
repositoryConfigurationResolutions.vulnerabilities[0].mapToModel(ResolutionSource.REPOSITORY),
639-
managedResolutions.vulnerabilities[0].mapToModel(ResolutionSource.REPOSITORY)
639+
managedResolutions.vulnerabilities[0].mapToModel(ResolutionSource.SERVER)
640640
)
641641

642642
val expectedResolutionsForVulnerability2 = listOf(
643-
globalResolutions.vulnerabilities[1].mapToModel(ResolutionSource.REPOSITORY),
643+
globalResolutions.vulnerabilities[1].mapToModel(ResolutionSource.GLOBAL),
644644
repositoryConfigurationResolutions.vulnerabilities[1].mapToModel(ResolutionSource.REPOSITORY),
645-
managedResolutions.vulnerabilities[1].mapToModel(ResolutionSource.REPOSITORY)
645+
managedResolutions.vulnerabilities[1].mapToModel(ResolutionSource.SERVER)
646646
)
647647

648648
val matchResult =

0 commit comments

Comments
 (0)