MuzzleDirective.kt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * Copyright The OpenTelemetry Authors
  3. * SPDX-License-Identifier: Apache-2.0
  4. */
  5. package io.opentelemetry.javaagent.muzzle
  6. import org.gradle.api.provider.ListProperty
  7. import org.gradle.api.provider.Property
  8. import org.gradle.api.provider.SetProperty
  9. import java.util.stream.Collectors
  10. abstract class MuzzleDirective {
  11. abstract val name: Property<String>
  12. abstract val group: Property<String>
  13. abstract val module: Property<String>
  14. abstract val classifier: Property<String>
  15. abstract val versions: Property<String>
  16. abstract val skipVersions: SetProperty<String>
  17. abstract val additionalDependencies: ListProperty<Any>
  18. abstract val excludedDependencies: ListProperty<String>
  19. abstract val excludedInstrumentationNames: SetProperty<String>
  20. abstract val assertPass: Property<Boolean>
  21. abstract val assertInverse: Property<Boolean>
  22. internal abstract val coreJdk: Property<Boolean> // use coreJdk() function below to enable
  23. init {
  24. name.convention("")
  25. classifier.convention("")
  26. skipVersions.convention(emptySet())
  27. additionalDependencies.convention(listOf())
  28. excludedDependencies.convention(listOf())
  29. excludedInstrumentationNames.convention(listOf())
  30. assertPass.convention(false)
  31. assertInverse.convention(false)
  32. coreJdk.convention(false)
  33. }
  34. fun coreJdk() {
  35. coreJdk.set(true)
  36. }
  37. /**
  38. * Adds extra dependencies to the current muzzle test.
  39. *
  40. * @param dependencyNotation An extra dependency in the gradle canonical form:
  41. * '<group_id>:<artifact_id>:<version_id>' or a project dependency project(':some-project').
  42. */
  43. fun extraDependency(dependencyNotation: Any) {
  44. additionalDependencies.add(dependencyNotation)
  45. }
  46. /**
  47. * Adds transitive dependencies to exclude from the current muzzle test.
  48. *
  49. * @param excludeString A dependency in the gradle canonical form: '<group_id>:<artifact_id>'
  50. */
  51. fun excludeDependency(excludeString: String?) {
  52. excludedDependencies.add(excludeString!!)
  53. }
  54. /**
  55. * Excludes an instrumentation module from the current muzzle test.
  56. *
  57. * @param excludeString An instrumentation module class name to exclude
  58. */
  59. fun excludeInstrumentationName(excludeString: String) {
  60. excludedInstrumentationNames.add(excludeString)
  61. }
  62. fun skip(vararg version: String?) {
  63. skipVersions.addAll(*version)
  64. }
  65. internal val nameSlug: String
  66. get() = NORMALIZE_NAME_SLUG.replace(name.get().trim(), "-")
  67. internal val normalizedSkipVersions: Set<String>
  68. get() = skipVersions.getOrElse(setOf()).stream()
  69. .map(String::lowercase)
  70. .collect(Collectors.toSet())
  71. override fun toString(): String {
  72. val sb = StringBuilder()
  73. if (coreJdk.getOrElse(false)) {
  74. if (assertPass.getOrElse(false)) {
  75. sb.append("Pass")
  76. } else {
  77. sb.append("Fail")
  78. }
  79. sb.append("-core-jdk")
  80. } else {
  81. if (assertPass.getOrElse(false)) {
  82. sb.append("pass")
  83. } else {
  84. sb.append("fail")
  85. }
  86. sb.append(group.get())
  87. .append(':')
  88. .append(module.get())
  89. .append(':')
  90. .append(versions.get())
  91. if (classifier.isPresent) {
  92. sb.append(':').append(classifier.get())
  93. }
  94. }
  95. return sb.toString()
  96. }
  97. companion object {
  98. private val NORMALIZE_NAME_SLUG = Regex("[^a-zA-Z0-9]+")
  99. }
  100. }