/
InstrumentationModuleTest.groovy
153 lines (126 loc) · 4.07 KB
/
InstrumentationModuleTest.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.tooling
import io.opentelemetry.instrumentation.api.config.Config
import io.opentelemetry.instrumentation.api.config.ConfigBuilder
import net.bytebuddy.agent.builder.AgentBuilder
import org.junit.Rule
import org.junit.contrib.java.lang.system.EnvironmentVariables
import org.junit.contrib.java.lang.system.RestoreSystemProperties
import spock.lang.Specification
class InstrumentationModuleTest extends Specification {
@Rule
public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties()
@Rule
public final EnvironmentVariables environmentVariables = new EnvironmentVariables()
def setup() {
assert System.getenv().findAll { it.key.startsWith("OTEL_") }.isEmpty()
assert System.getProperties().findAll { it.key.toString().startsWith("otel.") }.isEmpty()
}
def "default enabled"() {
setup:
def target = new TestInstrumentationModule(["test"])
target.instrument(new AgentBuilder.Default())
expect:
target.enabled
target.applyCalled
}
def "default enabled override"() {
setup:
target.instrument(new AgentBuilder.Default())
expect:
target.enabled == enabled
target.applyCalled == enabled
where:
enabled | target
true | new TestInstrumentationModule(["test"]) {
@Override
protected boolean defaultEnabled() {
return true
}
}
false | new TestInstrumentationModule(["test"]) {
@Override
protected boolean defaultEnabled() {
return false
}
}
}
def "default disabled can override to enabled #enabled"() {
setup:
Config.INSTANCE = new ConfigBuilder().readProperties([
"otel.instrumentation.test.enabled": Boolean.toString(enabled)
]).build()
def target = new TestInstrumentationModule(["test"]) {
@Override
protected boolean defaultEnabled() {
return false
}
}
target.instrument(new AgentBuilder.Default())
expect:
target.enabled == enabled
target.applyCalled == enabled
cleanup:
Config.INSTANCE = null
where:
enabled << [true, false]
}
def "configure default sys prop as #value"() {
setup:
Config.INSTANCE = new ConfigBuilder().readProperties([
"otel.instrumentation.common.default-enabled": String.valueOf(value)
]).build()
def target = new TestInstrumentationModule(["test"])
target.instrument(new AgentBuilder.Default())
expect:
target.enabled == enabled
target.applyCalled == enabled
cleanup:
Config.INSTANCE = null
where:
value | enabled
"true" | true
"false" | false
"asdf" | false
}
def "configure sys prop enabled for #value when default is disabled"() {
setup:
Config.INSTANCE = new ConfigBuilder().readProperties([
"otel.instrumentation.common.default-enabled" : "false",
("otel.instrumentation." + value + ".enabled"): "true"
]).build()
def target = new TestInstrumentationModule([name, altName])
target.instrument(new AgentBuilder.Default())
expect:
target.enabled == enabled
target.applyCalled == enabled
cleanup:
Config.INSTANCE = null
where:
value | enabled | name | altName
"test" | true | "test" | "asdf"
"duplicate" | true | "duplicate" | "duplicate"
"bad" | false | "not" | "valid"
"altTest" | true | "asdf" | "altTest"
"dash-test" | true | "dash-test" | "asdf"
"underscore_test" | true | "asdf" | "underscore_test"
"period.test" | true | "period.test" | "asdf"
}
static class TestInstrumentationModule extends InstrumentationModule {
boolean applyCalled = false
TestInstrumentationModule(List<String> instrumentationNames) {
super(instrumentationNames)
}
def getEnabled() {
return super.enabled
}
@Override
List<TypeInstrumentation> typeInstrumentations() {
applyCalled = true
return []
}
}
}