Skip to content

Commit 9338faa

Browse files
author
Andrew Kent
committed
Muzzle inverse assertions
1 parent 2670514 commit 9338faa

2 files changed

Lines changed: 49 additions & 10 deletions

File tree

buildSrc/src/main/groovy/MuzzlePlugin.groovy

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ class MuzzlePlugin implements Plugin<Project> {
103103
muzzleDirectiveToArtifacts(muzzleDirective, system, session).collect() { Artifact singleVersion ->
104104
runAfter = addMuzzleTask(muzzleDirective, singleVersion, project, runAfter, bootstrapProject, toolingProject)
105105
}
106+
if (muzzleDirective.assertInverse) {
107+
inverseOf(muzzleDirective, system, session).collect() { MuzzleDirective inverseDirective ->
108+
muzzleDirectiveToArtifacts(inverseDirective, system, session).collect() { Artifact singleVersion ->
109+
runAfter = addMuzzleTask(inverseDirective, singleVersion, project, runAfter, bootstrapProject, toolingProject)
110+
}
111+
}
112+
}
106113
}
107114
}
108115
}
@@ -179,6 +186,41 @@ class MuzzlePlugin implements Plugin<Project> {
179186
return allVersionArtifacts
180187
}
181188

189+
/**
190+
* Create a list of muzzle directives which assert the opposite of the given MuzzleDirective.
191+
*/
192+
private static List<MuzzleDirective> inverseOf(MuzzleDirective muzzleDirective, RepositorySystem system, RepositorySystemSession session) {
193+
List<MuzzleDirective> inverseDirectives = new ArrayList<>()
194+
195+
final Artifact allVerisonsArtifact = new DefaultArtifact(muzzleDirective.group, muzzleDirective.module, "jar", "[,)")
196+
final Artifact directiveArtifact = new DefaultArtifact(muzzleDirective.group, muzzleDirective.module, "jar", muzzleDirective.versions)
197+
198+
199+
final VersionRangeRequest allRangeRequest = new VersionRangeRequest()
200+
allRangeRequest.setRepositories(MUZZLE_REPOS)
201+
allRangeRequest.setArtifact(allVerisonsArtifact)
202+
final VersionRangeResult allRangeResult = system.resolveVersionRange(session, allRangeRequest)
203+
204+
final VersionRangeRequest rangeRequest = new VersionRangeRequest()
205+
rangeRequest.setRepositories(MUZZLE_REPOS)
206+
rangeRequest.setArtifact(directiveArtifact)
207+
final VersionRangeResult rangeResult = system.resolveVersionRange(session, rangeRequest)
208+
209+
filterVersion(allRangeResult.versions).collect { version ->
210+
if (!rangeResult.versions.contains(version)) {
211+
final MuzzleDirective inverseDirective = new MuzzleDirective()
212+
inverseDirective.group = muzzleDirective.group
213+
inverseDirective.module = muzzleDirective.module
214+
inverseDirective.versions = "$version"
215+
inverseDirective.assertPass = !muzzleDirective.assertPass
216+
inverseDirectives.add(inverseDirective)
217+
}
218+
}
219+
220+
return inverseDirectives
221+
}
222+
223+
182224
/**
183225
* Configure a muzzle task to pass or fail a given version.
184226
*
@@ -272,6 +314,7 @@ class MuzzleDirective {
272314
String versions
273315
List<String> additionalDependencies = new ArrayList<>()
274316
boolean assertPass
317+
boolean assertInverse = false
275318
void extraDependency(String compileString) {
276319
additionalDependencies.add(compileString)
277320
}

dd-java-agent/instrumentation/apache-httpclient-4.3/apache-httpclient-4.3.gradle

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
apply from: "${rootDir}/gradle/java.gradle"
22

33
muzzle {
4-
pass {
5-
group = "org.apache.httpcomponents"
6-
module = "httpclient"
7-
versions = "[4.3,)"
8-
}
9-
fail {
10-
group = "org.apache.httpcomponents"
11-
module = "httpclient"
12-
versions = "[,4.3)"
13-
}
144
fail {
155
group = "commons-httpclient"
166
module = "commons-httpclient"
177
versions = "[,4.3)"
188
}
9+
pass {
10+
group = "org.apache.httpcomponents"
11+
module = "httpclient"
12+
versions = "[4.3,)"
13+
assertInverse = true
14+
}
1915
}
2016

2117
apply plugin: 'org.unbroken-dome.test-sets'

0 commit comments

Comments
 (0)