Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit eeab93c

Browse files
author
Dennis Labordus
authoredNov 10, 2022
Merge pull request #189 from com-pas/develop
New release
2 parents 31f5182 + 89d00c5 commit eeab93c

File tree

5 files changed

+128
-21
lines changed

5 files changed

+128
-21
lines changed
 

‎pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SPDX-License-Identifier: Apache-2.0
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2121

2222
<compas.scl.xsd.version>0.0.4</compas.scl.xsd.version>
23-
<quarkus.platform.version>2.13.3.Final</quarkus.platform.version>
23+
<quarkus.platform.version>2.14.0.Final</quarkus.platform.version>
2424
<slf4j.version>2.0.3</slf4j.version>
2525
<jaxb.bind.version>2.3.7</jaxb.bind.version>
2626
<openpojo.version>0.9.1</openpojo.version>

‎websocket-commons/src/main/java/org/lfenergy/compas/core/websocket/WebsocketHandler.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.core.websocket;
55

6-
import org.lfenergy.compas.core.commons.exception.CompasException;
76
import org.lfenergy.compas.core.commons.model.ErrorResponse;
87
import org.slf4j.Logger;
98
import org.slf4j.LoggerFactory;
109

1110
import javax.websocket.Session;
1211

13-
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.WEBSOCKET_GENERAL_ERROR_CODE;
12+
import static org.lfenergy.compas.core.websocket.WebsocketSupport.handleException;
1413

1514
/**
1615
* Simple Websocket Handler to handle the result from an executor being called and send this result to the Websocket
@@ -26,23 +25,12 @@ public void execute(Session session, EventExecutor<T> executor) {
2625
LOGGER.debug("Executing executor to retrieve response");
2726
var result = executor.execute();
2827
session.getAsyncRemote().sendObject(result);
29-
} catch (RuntimeException re) {
30-
handleException(session, re);
28+
} catch (RuntimeException exp) {
29+
LOGGER.info("Exception occurred during handling the websocket request", exp);
30+
handleException(session, exp);
3131
}
3232
}
3333

34-
private void handleException(Session session, RuntimeException re) {
35-
var response = new ErrorResponse();
36-
if (re instanceof CompasException) {
37-
LOGGER.info("Handling CompasException thrown by Executor!", re);
38-
response.addErrorMessage(((CompasException) re).getErrorCode(), re.getMessage());
39-
} else {
40-
LOGGER.info("Handling RuntimeException thrown by Executor!", re);
41-
response.addErrorMessage(WEBSOCKET_GENERAL_ERROR_CODE, re.getMessage());
42-
}
43-
session.getAsyncRemote().sendObject(response);
44-
}
45-
4634
@FunctionalInterface
4735
public interface EventExecutor<T> {
4836
T execute();

‎websocket-commons/src/main/java/org/lfenergy/compas/core/websocket/WebsocketSupport.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
package org.lfenergy.compas.core.websocket;
55

66
import org.lfenergy.compas.core.commons.exception.CompasException;
7+
import org.lfenergy.compas.core.commons.model.ErrorResponse;
78

9+
import javax.websocket.Session;
810
import javax.xml.bind.JAXBContext;
911
import java.io.StringReader;
1012
import java.io.StringWriter;
1113

12-
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.WEBSOCKET_DECODER_ERROR_CODE;
13-
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.WEBSOCKET_ENCODER_ERROR_CODE;
14+
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.*;
1415

1516
public final class WebsocketSupport {
1617
WebsocketSupport() {
@@ -45,4 +46,13 @@ public static <T> T decode(String message, Class<T> jaxbClass) {
4546
}
4647
}
4748

49+
public static void handleException(Session session, Throwable throwable) {
50+
var response = new ErrorResponse();
51+
if (throwable instanceof CompasException) {
52+
response.addErrorMessage(((CompasException) throwable).getErrorCode(), throwable.getMessage());
53+
} else {
54+
response.addErrorMessage(WEBSOCKET_GENERAL_ERROR_CODE, throwable.getMessage());
55+
}
56+
session.getAsyncRemote().sendObject(response);
57+
}
4858
}

‎websocket-commons/src/test/java/org/lfenergy/compas/core/websocket/WebsocketHandlerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
@ExtendWith(MockitoExtension.class)
2222
class WebsocketHandlerTest {
23-
2423
@Test
2524
void execute_WhenCalledSuccessful_ThenResponseSendToWebsocket() {
2625
var message = "Some message";

‎websocket-commons/src/test/java/org/lfenergy/compas/core/websocket/WebsocketSupportTest.java

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,122 @@
44
package org.lfenergy.compas.core.websocket;
55

66
import org.junit.jupiter.api.Test;
7+
import org.lfenergy.compas.core.commons.exception.CompasException;
8+
import org.lfenergy.compas.core.commons.model.ErrorResponse;
9+
import org.mockito.ArgumentCaptor;
10+
import org.mockito.Mockito;
711

8-
import static org.junit.jupiter.api.Assertions.assertThrows;
12+
import javax.websocket.RemoteEndpoint;
13+
import javax.websocket.Session;
14+
15+
import static org.junit.jupiter.api.Assertions.*;
16+
import static org.lfenergy.compas.core.commons.CommonConstants.COMPAS_COMMONS_V1_NS_URI;
17+
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.*;
18+
import static org.lfenergy.compas.core.websocket.WebsocketSupport.*;
19+
import static org.mockito.Mockito.*;
920

1021
class WebsocketSupportTest {
1122
@Test
1223
void constructor_WhenConstructorCalled_ThenShouldThrowExceptionCauseForbidden() {
1324
assertThrows(UnsupportedOperationException.class, WebsocketSupport::new);
1425
}
26+
27+
@Test
28+
void encode_WhenCalledWithErrorResponse_ThenXMLStringReturned() {
29+
var errorCode = "ERR-0001";
30+
var errorMessage = "Error Message";
31+
var errorResponse = new ErrorResponse();
32+
errorResponse.addErrorMessage(errorCode, errorMessage);
33+
34+
var result = encode(errorResponse, ErrorResponse.class);
35+
36+
var expectedResult = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
37+
"<compas-commons:ErrorResponse xmlns:compas-commons=\"" + COMPAS_COMMONS_V1_NS_URI + "\">" +
38+
"<compas-commons:ErrorMessage>" +
39+
"<compas-commons:Code>" + errorCode + "</compas-commons:Code>" +
40+
"<compas-commons:Message>" + errorMessage + "</compas-commons:Message>" +
41+
"</compas-commons:ErrorMessage>" +
42+
"</compas-commons:ErrorResponse>";
43+
assertEquals(expectedResult, result);
44+
}
45+
46+
@Test
47+
void encode_WhenCalledWithNoJaxbObject_ThenExceptionThrown() {
48+
var exception = assertThrows(CompasException.class, () -> encode("Some Non JAXB String", String.class));
49+
assertEquals(WEBSOCKET_ENCODER_ERROR_CODE, exception.getErrorCode());
50+
assertEquals(CompasException.class, exception.getClass());
51+
}
52+
53+
@Test
54+
void decode_WhenCalledWithCorrectXML_ThenObjectReturned() {
55+
var errorCode = "ERR-0001";
56+
var errorMessage = "Error Message";
57+
58+
var xmlMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
59+
"<compas-commons:ErrorResponse xmlns:compas-commons=\"" + COMPAS_COMMONS_V1_NS_URI + "\">" +
60+
"<compas-commons:ErrorMessage>" +
61+
"<compas-commons:Code>" + errorCode + "</compas-commons:Code>" +
62+
"<compas-commons:Message>" + errorMessage + "</compas-commons:Message>" +
63+
"</compas-commons:ErrorMessage>" +
64+
"</compas-commons:ErrorResponse>";
65+
66+
var result = decode(xmlMessage, ErrorResponse.class);
67+
68+
assertNotNull(result);
69+
assertEquals(1, result.getErrorMessages().size());
70+
var message = result.getErrorMessages().get(0);
71+
assertEquals(errorCode, message.getCode());
72+
assertEquals(errorMessage, message.getMessage());
73+
}
74+
75+
76+
@Test
77+
void decode_WhenCalledWithInvalidXML_ThenExceptionThrown() {
78+
var xmlMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
79+
"<compas-commons:InvalidResponse xmlns:compas-commons=\"" + COMPAS_COMMONS_V1_NS_URI + "\">" +
80+
"</compas-commons:InvalidResponse>";
81+
82+
var exception = assertThrows(CompasException.class, () -> decode(xmlMessage, ErrorResponse.class));
83+
assertEquals(WEBSOCKET_DECODER_ERROR_CODE, exception.getErrorCode());
84+
assertEquals(CompasException.class, exception.getClass());
85+
}
86+
87+
@Test
88+
void handleException_WhenCalledWithCompasException_ThenErrorResponseSendToSession() {
89+
var errorCode = "ERR-0001";
90+
var errorMessage = "Error Message";
91+
var session = mockSession();
92+
93+
handleException(session, new CompasException(errorCode, errorMessage));
94+
95+
verifyErrorResponse(session, errorCode, errorMessage);
96+
}
97+
98+
@Test
99+
void handleException_WhenCalledWithRuntimeException_ThenErrorResponseSendToSession() {
100+
var errorMessage = "Error Message";
101+
var session = mockSession();
102+
103+
handleException(session, new RuntimeException(errorMessage));
104+
105+
verifyErrorResponse(session, WEBSOCKET_GENERAL_ERROR_CODE, errorMessage);
106+
}
107+
108+
private Session mockSession() {
109+
var session = Mockito.mock(Session.class);
110+
var async = Mockito.mock(RemoteEndpoint.Async.class);
111+
when(session.getAsyncRemote()).thenReturn(async);
112+
return session;
113+
}
114+
115+
private void verifyErrorResponse(Session session, String errorCode, String errorMessage) {
116+
verify(session, times(1)).getAsyncRemote();
117+
ArgumentCaptor<ErrorResponse> captor = ArgumentCaptor.forClass(ErrorResponse.class);
118+
verify(session.getAsyncRemote(), times(1)).sendObject(captor.capture());
119+
var response = captor.getValue();
120+
assertEquals(1, response.getErrorMessages().size());
121+
var message = response.getErrorMessages().get(0);
122+
assertEquals(errorCode, message.getCode());
123+
assertEquals(errorMessage, message.getMessage());
124+
}
15125
}

0 commit comments

Comments
 (0)