Skip to content

Commit f026b2c

Browse files
Synchronization for Java eventing unit tests (#697)
Eventing request messages are sometimes not captured correctly. The suspicion is that this is caused by the multi-threaded nature of the eventing flow. Explicit synchronization to the unit test stubs at the point of service invocation and when capturing invocation arguments, in an attempt to ensure consistency. Signed-off-by: Mark S. Lewis <[email protected]>
1 parent b80daf1 commit f026b2c

File tree

4 files changed

+55
-23
lines changed

4 files changed

+55
-23
lines changed

java/pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<dependency>
4848
<groupId>io.cucumber</groupId>
4949
<artifactId>cucumber-bom</artifactId>
50-
<version>7.15.0</version>
50+
<version>7.16.1</version>
5151
<type>pom</type>
5252
<scope>import</scope>
5353
</dependency>
@@ -189,7 +189,7 @@
189189
</plugin>
190190
<plugin>
191191
<artifactId>maven-compiler-plugin</artifactId>
192-
<version>3.12.1</version>
192+
<version>3.13.0</version>
193193
<configuration>
194194
<source>${javaVersion}</source>
195195
<target>${javaVersion}</target>
@@ -373,7 +373,7 @@
373373
<dependency>
374374
<groupId>com.puppycrawl.tools</groupId>
375375
<artifactId>checkstyle</artifactId>
376-
<version>10.14.0</version>
376+
<version>10.14.2</version>
377377
</dependency>
378378
</dependencies>
379379
</plugin>
@@ -387,7 +387,7 @@
387387
<plugin>
388388
<groupId>org.owasp</groupId>
389389
<artifactId>dependency-check-maven</artifactId>
390-
<version>9.0.9</version>
390+
<version>9.0.10</version>
391391
<configuration>
392392
<skipProvidedScope>true</skipProvidedScope>
393393
<skipTestScope>true</skipTestScope>
@@ -416,7 +416,7 @@
416416
<plugin>
417417
<groupId>org.cyclonedx</groupId>
418418
<artifactId>cyclonedx-maven-plugin</artifactId>
419-
<version>2.7.11</version>
419+
<version>2.8.0</version>
420420
<configuration>
421421
<includeCompileScope>true</includeCompileScope>
422422
<includeProvidedScope>false</includeProvidedScope>
@@ -442,7 +442,7 @@
442442
<plugins>
443443
<plugin>
444444
<artifactId>maven-assembly-plugin</artifactId>
445-
<version>3.6.0</version>
445+
<version>3.7.1</version>
446446
<configuration>
447447
<descriptorRefs>
448448
<descriptorRef>jar-with-dependencies</descriptorRef>
@@ -460,7 +460,7 @@
460460
<plugin>
461461
<groupId>org.apache.maven.plugins</groupId>
462462
<artifactId>maven-gpg-plugin</artifactId>
463-
<version>3.1.0</version>
463+
<version>3.2.2</version>
464464
<executions>
465465
<execution>
466466
<id>sign-artifacts</id>

java/src/test/java/org/hyperledger/fabric/client/GatewayMocker.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,42 +104,58 @@ public Gateway.Builder getGatewayBuilder() {
104104
}
105105

106106
public EndorseRequest captureEndorse() {
107-
Mockito.verify(gatewaySpy).endorse(endorseRequestCaptor.capture());
107+
synchronized (gatewaySpy) {
108+
Mockito.verify(gatewaySpy).endorse(endorseRequestCaptor.capture());
109+
}
108110
return endorseRequestCaptor.getValue();
109111
}
110112

111113
public EvaluateRequest captureEvaluate() {
112-
Mockito.verify(gatewaySpy).evaluate(evaluateRequestCaptor.capture());
114+
synchronized (gatewaySpy) {
115+
Mockito.verify(gatewaySpy).evaluate(evaluateRequestCaptor.capture());
116+
}
113117
return evaluateRequestCaptor.getValue();
114118
}
115119

116120
public SubmitRequest captureSubmit() {
117-
Mockito.verify(gatewaySpy).submit(submitRequestCaptor.capture());
121+
synchronized (gatewaySpy) {
122+
Mockito.verify(gatewaySpy).submit(submitRequestCaptor.capture());
123+
}
118124
return submitRequestCaptor.getValue();
119125
}
120126

121127
public SignedCommitStatusRequest captureCommitStatus() {
122-
Mockito.verify(gatewaySpy).commitStatus(commitStatusRequestCaptor.capture());
128+
synchronized (gatewaySpy) {
129+
Mockito.verify(gatewaySpy).commitStatus(commitStatusRequestCaptor.capture());
130+
}
123131
return commitStatusRequestCaptor.getValue();
124132
}
125133

126134
public SignedChaincodeEventsRequest captureChaincodeEvents() {
127-
Mockito.verify(gatewaySpy).chaincodeEvents(chaincodeEventsRequestCaptor.capture());
135+
synchronized (gatewaySpy) {
136+
Mockito.verify(gatewaySpy).chaincodeEvents(chaincodeEventsRequestCaptor.capture());
137+
}
128138
return chaincodeEventsRequestCaptor.getValue();
129139
}
130140

131141
public Stream<Envelope> captureBlockEvents() {
132-
Mockito.verify(deliverSpy).blockEvents(deliverRequestCaptor.capture());
142+
synchronized (deliverSpy) {
143+
Mockito.verify(deliverSpy).blockEvents(deliverRequestCaptor.capture());
144+
}
133145
return deliverRequestCaptor.getValue();
134146
}
135147

136148
public Stream<Envelope> captureFilteredBlockEvents() {
137-
Mockito.verify(deliverSpy).filteredBlockEvents(deliverFilteredRequestCaptor.capture());
149+
synchronized (deliverSpy) {
150+
Mockito.verify(deliverSpy).filteredBlockEvents(deliverFilteredRequestCaptor.capture());
151+
}
138152
return deliverFilteredRequestCaptor.getValue();
139153
}
140154

141155
public Stream<Envelope> captureBlockAndPrivateDataEvents() {
142-
Mockito.verify(deliverSpy).blockAndPrivateDataEvents(deliverWithPrivateDataRequestCaptor.capture());
156+
synchronized (deliverSpy) {
157+
Mockito.verify(deliverSpy).blockAndPrivateDataEvents(deliverWithPrivateDataRequestCaptor.capture());
158+
}
143159
return deliverWithPrivateDataRequestCaptor.getValue();
144160
}
145161

java/src/test/java/org/hyperledger/fabric/client/MockDeliverService.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,22 @@ public MockDeliverService(final DeliverServiceStub stub) {
2626

2727
@Override
2828
public StreamObserver<Envelope> deliver(final StreamObserver<DeliverResponse> responseObserver) {
29-
return testUtils.invokeStubDuplexCall(stub::blockEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
29+
synchronized (stub) {
30+
return testUtils.invokeStubDuplexCall(stub::blockEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
31+
}
3032
}
3133

3234
@Override
3335
public StreamObserver<Envelope> deliverFiltered(final StreamObserver<DeliverResponse> responseObserver) {
34-
return testUtils.invokeStubDuplexCall(stub::filteredBlockEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
36+
synchronized (stub) {
37+
return testUtils.invokeStubDuplexCall(stub::filteredBlockEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
38+
}
3539
}
3640

3741
@Override
3842
public StreamObserver<Envelope> deliverWithPrivateData(final StreamObserver<DeliverResponse> responseObserver) {
39-
return testUtils.invokeStubDuplexCall(stub::blockAndPrivateDataEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
43+
synchronized (stub) {
44+
return testUtils.invokeStubDuplexCall(stub::blockAndPrivateDataEvents, (ServerCallStreamObserver<DeliverResponse>) responseObserver, 1);
45+
}
4046
}
4147
}

java/src/test/java/org/hyperledger/fabric/client/MockGatewayService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,37 @@ public MockGatewayService(final GatewayServiceStub stub) {
3333

3434
@Override
3535
public void endorse(final EndorseRequest request, final StreamObserver<EndorseResponse> responseObserver) {
36-
testUtils.invokeStubUnaryCall(stub::endorse, request, responseObserver);
36+
synchronized (stub) {
37+
testUtils.invokeStubUnaryCall(stub::endorse, request, responseObserver);
38+
}
3739
}
3840

3941
@Override
4042
public void submit(final SubmitRequest request, final StreamObserver<SubmitResponse> responseObserver) {
41-
testUtils.invokeStubUnaryCall(stub::submit, request, responseObserver);
43+
synchronized (stub) {
44+
testUtils.invokeStubUnaryCall(stub::submit, request, responseObserver);
45+
}
4246
}
4347

4448
@Override
4549
public void evaluate(final EvaluateRequest request, final StreamObserver<EvaluateResponse> responseObserver) {
46-
testUtils.invokeStubUnaryCall(stub::evaluate, request, responseObserver);
50+
synchronized (stub) {
51+
testUtils.invokeStubUnaryCall(stub::evaluate, request, responseObserver);
52+
}
4753
}
4854

4955
@Override
5056
public void commitStatus(final SignedCommitStatusRequest request, final StreamObserver<CommitStatusResponse> responseObserver) {
51-
testUtils.invokeStubUnaryCall(stub::commitStatus, request, responseObserver);
57+
synchronized (stub) {
58+
testUtils.invokeStubUnaryCall(stub::commitStatus, request, responseObserver);
59+
}
5260
}
5361

5462
@Override
5563
public void chaincodeEvents(final SignedChaincodeEventsRequest request, final StreamObserver<ChaincodeEventsResponse> responseObserver) {
56-
testUtils.invokeStubServerStreamingCall(stub::chaincodeEvents, request, responseObserver);
64+
synchronized (stub) {
65+
testUtils.invokeStubServerStreamingCall(stub::chaincodeEvents, request, responseObserver);
66+
}
5767
}
5868

5969
}

0 commit comments

Comments
 (0)