From 26705142bb2510104a9b2cf76837af417b8a291c Mon Sep 17 00:00:00 2001 From: Andrew Kent Date: Mon, 20 Aug 2018 20:03:23 -0700 Subject: [PATCH] Muzzle pass and fail directives in the same collection --- buildSrc/src/main/groovy/MuzzlePlugin.groovy | 44 +++++++------------ .../apache-httpclient-4.3.gradle | 10 ++--- 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/buildSrc/src/main/groovy/MuzzlePlugin.groovy b/buildSrc/src/main/groovy/MuzzlePlugin.groovy index 11d1a0ec03..3c8507f1ac 100644 --- a/buildSrc/src/main/groovy/MuzzlePlugin.groovy +++ b/buildSrc/src/main/groovy/MuzzlePlugin.groovy @@ -48,7 +48,7 @@ class MuzzlePlugin implements Plugin { group = 'Muzzle' description = "Run instrumentation muzzle on compile time dependencies" doLast { - if (project.muzzle.passDirectives.size() == 0) { + if (!project.muzzle.directives.any { it.assertPass }) { project.getLogger().info('No muzzle pass directives configured. Asserting pass against instrumentation compile-time dependencies') final ClassLoader userCL = createCompileDepsClassLoader(project, bootstrapProject) final ClassLoader agentCL = createDDClassloader(project, toolingProject) @@ -72,14 +72,10 @@ class MuzzlePlugin implements Plugin { project.tasks.compileMuzzle.dependsOn(toolingProject.tasks.compileJava) project.afterEvaluate { project.tasks.compileMuzzle.dependsOn(project.tasks.compileJava) - if (project.tasks.getNames().contains("compileScala")) { + if (project.tasks.getNames().contains('compileScala')) { project.tasks.compileMuzzle.dependsOn(project.tasks.compileScala) } } - // TODO: consider: - // project.tasks.withType(ScalaCompile) { Task scalaTask -> - // project.tasks.compileMuzzle.dependsOn(scalaTask) - // } project.tasks.muzzle.dependsOn(project.tasks.compileMuzzle) project.tasks.printReferences.dependsOn(project.tasks.compileMuzzle) @@ -101,18 +97,11 @@ class MuzzlePlugin implements Plugin { // use runAfter to set up task finalizers in version order Task runAfter = project.tasks.muzzle - for (MuzzleDirective pass : project.muzzle.passDirectives) { - project.getLogger().info("configured pass directive: ${pass.group}:${pass.module}:${pass.versions}") + for (MuzzleDirective muzzleDirective : project.muzzle.directives) { + project.getLogger().info("configured ${muzzleDirective.assertPass ? 'pass' : 'fail'} directive: ${muzzleDirective.group}:${muzzleDirective.module}:${muzzleDirective.versions}") - muzzleDirectiveToArtifacts(pass, system, session).collect() { Artifact singleVersion -> - runAfter = addMuzzleTask(pass, true, singleVersion, project, runAfter, bootstrapProject, toolingProject) - } - } - for (MuzzleDirective fail : project.muzzle.failDirectives) { - project.getLogger().info("configured fail directive: ${fail.group}:${fail.module}:${fail.versions}") - - muzzleDirectiveToArtifacts(fail, system, session).collect() { Artifact singleVersion -> - runAfter = addMuzzleTask(fail, false, singleVersion, project, runAfter, bootstrapProject, toolingProject) + muzzleDirectiveToArtifacts(muzzleDirective, system, session).collect() { Artifact singleVersion -> + runAfter = addMuzzleTask(muzzleDirective, singleVersion, project, runAfter, bootstrapProject, toolingProject) } } } @@ -202,13 +191,13 @@ class MuzzlePlugin implements Plugin { * * @return The created muzzle task. */ - private static Task addMuzzleTask(MuzzleDirective directive, boolean assertPass, Artifact versionArtifact, Project instrumentationProject, Task runAfter, Project bootstrapProject, Project toolingProject) { - def taskName = "muzzle-Assert${assertPass ? "Pass" : "Fail"}-$versionArtifact.groupId-$versionArtifact.artifactId-$versionArtifact.version" + private static Task addMuzzleTask(MuzzleDirective muzzleDirective, Artifact versionArtifact, Project instrumentationProject, Task runAfter, Project bootstrapProject, Project toolingProject) { + def taskName = "muzzle-Assert${muzzleDirective.assertPass ? "Pass" : "Fail"}-$versionArtifact.groupId-$versionArtifact.artifactId-$versionArtifact.version" def config = instrumentationProject.configurations.create(taskName) config.dependencies.add(instrumentationProject.dependencies.create("$versionArtifact.groupId:$versionArtifact.artifactId:$versionArtifact.version") { transitive = true }) - for (String additionalDependency : directive.additionalDependencies) { + for (String additionalDependency : muzzleDirective.additionalDependencies) { config.dependencies.add(instrumentationProject.dependencies.create(additionalDependency) { transitive = true }) @@ -221,7 +210,7 @@ class MuzzlePlugin implements Plugin { // find all instrumenters, get muzzle, and assert Method assertionMethod = agentCL.loadClass('datadog.trace.agent.tooling.muzzle.MuzzleVersionScanPlugin') .getMethod('assertInstrumentationMuzzled', ClassLoader.class, boolean.class) - assertionMethod.invoke(null, userCL, assertPass) + assertionMethod.invoke(null, userCL, muzzleDirective.assertPass) } } runAfter.finalizedBy(muzzleTask) @@ -282,6 +271,7 @@ class MuzzleDirective { String module String versions List additionalDependencies = new ArrayList<>() + boolean assertPass void extraDependency(String compileString) { additionalDependencies.add(compileString) } @@ -291,27 +281,25 @@ class MuzzleDirective { * Muzzle extension containing all pass and fail directives. */ class MuzzleExtension { - // TODO: merge pass and fail directives into single collection - final List passDirectives - final List failDirectives + final List directives = new ArrayList<>() private final ObjectFactory objectFactory @javax.inject.Inject MuzzleExtension(final ObjectFactory objectFactory) { this.objectFactory = objectFactory - passDirectives = new ArrayList<>() - failDirectives = new ArrayList<>() } void pass(Action action) { final MuzzleDirective pass = objectFactory.newInstance(MuzzleDirective) action.execute(pass) - passDirectives.add(pass) + pass.assertPass = true + directives.add(pass) } void fail(Action action) { final MuzzleDirective fail = objectFactory.newInstance(MuzzleDirective) action.execute(fail) - failDirectives.add(fail) + fail.assertPass = false + directives.add(fail) } } diff --git a/dd-java-agent/instrumentation/apache-httpclient-4.3/apache-httpclient-4.3.gradle b/dd-java-agent/instrumentation/apache-httpclient-4.3/apache-httpclient-4.3.gradle index 57014820f5..bed8c30d1f 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4.3/apache-httpclient-4.3.gradle +++ b/dd-java-agent/instrumentation/apache-httpclient-4.3/apache-httpclient-4.3.gradle @@ -6,16 +6,16 @@ muzzle { module = "httpclient" versions = "[4.3,)" } - pass { - group = "commons-httpclient" - module = "commons-httpclient" - versions = "[4.3,)" - } fail { group = "org.apache.httpcomponents" module = "httpclient" versions = "[,4.3)" } + fail { + group = "commons-httpclient" + module = "commons-httpclient" + versions = "[,4.3)" + } } apply plugin: 'org.unbroken-dome.test-sets'