-
Notifications
You must be signed in to change notification settings - Fork 333
Expand file tree
/
Copy pathQuartzTest.groovy
More file actions
151 lines (126 loc) · 4.19 KB
/
QuartzTest.groovy
File metadata and controls
151 lines (126 loc) · 4.19 KB
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
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_GROUP
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_JOB_NAME
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_GROUP
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.QUARTZ_TRIGGER_NAME
import datadog.trace.agent.test.InstrumentationSpecification
import datadog.trace.agent.test.asserts.TraceAssert
import datadog.trace.bootstrap.instrumentation.api.Tags
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import org.quartz.CronScheduleBuilder
import org.quartz.JobBuilder
import org.quartz.JobDetail
import org.quartz.Scheduler
import org.quartz.Trigger
import org.quartz.TriggerBuilder
import org.quartz.impl.StdSchedulerFactory
import spock.lang.Shared
class QuartzTest extends InstrumentationSpecification {
public static final String JOB_NAME = "job"
public static final String GROUP_NAME = "group"
public static final String TRIGGER_NAME = "trigger"
@Shared
Scheduler scheduler
def "Test simple trigger scheduling" () {
setup:
scheduler = new StdSchedulerFactory().getScheduler()
def latch = new CountDownLatch(1)
scheduler.getContext().put("latch", latch)
JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob).withIdentity(JOB_NAME, GROUP_NAME).build()
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(TRIGGER_NAME, GROUP_NAME).startNow().build()
scheduler.scheduleJob(jobDetail, trigger)
when:
scheduler.start()
then:
latch.await(10L, TimeUnit.SECONDS)
assertTraces(1) {
trace(1) {
jobSpan(it)
}
}
cleanup:
scheduler.shutdown()
}
def "Test cron trigger scheduling"() {
setup:
scheduler = new StdSchedulerFactory().getScheduler()
def latch = new CountDownLatch(1)
scheduler.getContext().put("latch", latch)
JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob).withIdentity(JOB_NAME, GROUP_NAME).build()
Trigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity(TRIGGER_NAME, GROUP_NAME)
.forJob(jobDetail)
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * *")).build() // run every 5 seconds
scheduler.scheduleJob(jobDetail, cronTrigger)
when:
scheduler.start()
then:
latch.await(10L, TimeUnit.SECONDS)
assertTraces(1) {
trace(1) {
jobSpan(it)
}
}
cleanup:
scheduler.shutdown()
}
def "Test XML job and trigger configuration"() {
setup:
scheduler = new StdSchedulerFactory("testConfig.properties").getScheduler()
def latch = new CountDownLatch(1)
scheduler.getContext().put("latch", latch)
when:
scheduler.start()
then:
latch.await(10L, TimeUnit.SECONDS)
assertTraces(1) {
trace(1) {
jobSpan(it)
}
}
cleanup:
scheduler.shutdown()
}
def "Test creating a new trace when starting a job"() {
setup:
scheduler = new StdSchedulerFactory().getScheduler()
def latch = new CountDownLatch(1)
scheduler.getContext().put("latch", latch)
when:
runUnderTrace("root") {
JobDetail jobDetail = JobBuilder.newJob(QuartzTestJob).withIdentity(JOB_NAME, GROUP_NAME).build()
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(TRIGGER_NAME, GROUP_NAME).startNow().build()
scheduler.scheduleJob(jobDetail, trigger)
scheduler.start()
}
then:
latch.await(10L, TimeUnit.SECONDS)
assertTraces(2) {
trace(1) {
basicSpan(it, "root")
}
trace(1) {
jobSpan(it)
}
}
cleanup:
scheduler.shutdown()
}
void jobSpan(TraceAssert trace) {
trace.span {
operationName "scheduled.call"
resourceName QuartzTestJob.toString()
errored false
tags {
"$Tags.COMPONENT" "quartz"
"$QUARTZ_TRIGGER_NAME" TRIGGER_NAME
"$QUARTZ_TRIGGER_GROUP" GROUP_NAME
"$QUARTZ_JOB_NAME" JOB_NAME
"$QUARTZ_JOB_GROUP" GROUP_NAME
defaultTags()
}
}
}
}