-
Notifications
You must be signed in to change notification settings - Fork 333
Expand file tree
/
Copy pathSignalServerTest.groovy
More file actions
155 lines (125 loc) · 4.7 KB
/
SignalServerTest.groovy
File metadata and controls
155 lines (125 loc) · 4.7 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
152
153
154
155
package datadog.trace.civisibility.ipc
import datadog.trace.api.DDTraceId
import spock.lang.Specification
import java.util.concurrent.atomic.AtomicBoolean
class SignalServerTest extends Specification {
def signalClientTimeoutMillis = 10_000
def "test message send and receive"() {
given:
def signalProcessed = new AtomicBoolean(false)
def signal = new ModuleExecutionResult(DDTraceId.from(123), 456, true, true, false, false, false, true, 1, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def server = new SignalServer()
def received = new ArrayList()
expect:
server.registerSignalHandler(SignalType.MODULE_EXECUTION_RESULT, {
received.add(it)
signalProcessed.set(true)
return AckResponse.INSTANCE
})
server.start()
def address = server.getAddress()
try (def client = new SignalClient(address, signalClientTimeoutMillis)) {
client.send(signal)
// verify that the signal was processed by the server by the time send() method returns
// (we want the send() method to be truly synchronous in that regard)
signalProcessed.get()
}
received.size() == 1
received[0] == signal
cleanup:
server.stop()
}
def "test multiple messages send and receive"() {
given:
def signalA = new ModuleExecutionResult(DDTraceId.from(123), 456, false, false, false, false, false, false, 0, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def signalB = new ModuleExecutionResult(DDTraceId.from(234), 567, true, true, false, false, true, false, 1, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def server = new SignalServer()
def received = new ArrayList()
when:
server.registerSignalHandler(SignalType.MODULE_EXECUTION_RESULT, {
received.add(it)
return AckResponse.INSTANCE
})
server.start()
def address = server.getAddress()
try (def client = new SignalClient(address, signalClientTimeoutMillis)) {
client.send(signalA)
client.send(signalB)
}
then:
received.size() == 2
received[0] == signalA
received[1] == signalB
cleanup:
server.stop()
}
def "test multiple clients send and receive"() {
given:
def signalA = new ModuleExecutionResult(DDTraceId.from(123), 456, true, false, true, false, true, false, 1, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def signalB = new ModuleExecutionResult(DDTraceId.from(234), 567, false, true, false, true, false, false, 0, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def server = new SignalServer()
def received = new ArrayList()
when:
server.registerSignalHandler(SignalType.MODULE_EXECUTION_RESULT, {
received.add(it)
return AckResponse.INSTANCE
})
server.start()
def address = server.getAddress()
try (def client = new SignalClient(address, signalClientTimeoutMillis)) {
client.send(signalA)
}
try (def client = new SignalClient(address, signalClientTimeoutMillis)) {
client.send(signalB)
}
then:
received.size() == 2
received[0] == signalA
received[1] == signalB
cleanup:
server.stop()
}
def "test client socket timeout"() {
given:
def clientTimeoutMillis = 500
def server = new SignalServer()
server.registerSignalHandler(SignalType.MODULE_EXECUTION_RESULT, {
try {
Thread.sleep(clientTimeoutMillis * 2)
} catch (InterruptedException e) {
Thread.currentThread().interrupt()
}
return AckResponse.INSTANCE
})
server.start()
when:
def address = server.getAddress()
try (def client = new SignalClient(address, clientTimeoutMillis)) {
client.send(new ModuleExecutionResult(DDTraceId.from(123), 456, false, false, false, false, false, false, 0, Collections.singletonList(new TestFramework("junit", "4.13.2"))))
}
then:
thrown SocketTimeoutException
cleanup:
server.stop()
}
def "test error response receipt"() {
given:
def signal = new ModuleExecutionResult(DDTraceId.from(123), 456, true, true, false, false, true, false, 1, Collections.singletonList(new TestFramework("junit", "4.13.2")))
def server = new SignalServer()
def errorResponse = new ErrorResponse("An error occurred while processing the signal")
server.registerSignalHandler(SignalType.MODULE_EXECUTION_RESULT, {
return errorResponse
})
server.start()
when:
def address = server.getAddress()
try (def client = new SignalClient(address, signalClientTimeoutMillis)) {
client.send(signal)
}
then:
def e = thrown(IOException)
e.message == SignalClient.getErrorMessage(errorResponse)
cleanup:
server.stop()
}
}