use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpcTest method testInvokeServiceClassLogsAndThrowsIfRPCThrowsSerializationException.
@Test
public void testInvokeServiceClassLogsAndThrowsIfRPCThrowsSerializationException() throws NoSuchMethodException {
ServiceClassWhichDoesNotImplementInterface target = new ServiceClassWhichDoesNotImplementInterface();
Method targetMethod = target.getClass().getMethod("method", String.class);
ClassLoader targetClassLoader = mock(ClassLoader.class);
Method serviceSpecialMethod = ServiceInterface.class.getMethod("method", String.class);
Object[] rpcParameters = new Object[] { "id1" };
SerializationPolicy policy = mock(SerializationPolicy.class);
RPCRequest rpcRequest = new RPCRequest(serviceSpecialMethod, rpcParameters, policy, 0);
HttpServletRequest httpRequestMock = mock(HttpServletRequest.class);
TestGwtRpc gwtRpcSpy = spy(new TestGwtRpc(httpRequestMock));
doReturn(target).when(gwtRpcSpy).getTarget();
doReturn(targetClassLoader).when(gwtRpcSpy).getTargetClassLoader();
doReturn(rpcRequest).when(gwtRpcSpy).getRequest();
SerializationException error = new SerializationException();
try (MockedStatic<RPC> rpc = Mockito.mockStatic(RPC.class)) {
rpc.when(() -> RPC.invokeAndEncodeResponse(target, targetMethod, rpcParameters, policy)).thenThrow(error);
try {
gwtRpcSpy.invoke();
fail();
} catch (GwtRpcProxyException ex) {
assertEquals(error, ex.getCause());
verify(loggerMock).error(nullable(String.class), eq(error));
}
}
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpcTest method testInvokeRunsInTargetClassLoader.
@Test
public void testInvokeRunsInTargetClassLoader() throws NoSuchMethodException, SerializationException {
ServiceClassWhichDoesNotImplementInterface target = new ServiceClassWhichDoesNotImplementInterface();
Method targetMethod = target.getClass().getMethod("method", String.class);
ClassLoader targetClassLoader = mock(ClassLoader.class);
Method serviceMethod = ServiceInterface.class.getMethod("method", String.class);
Object[] rpcParameters = new Object[] { "id1" };
SerializationPolicy policy = mock(SerializationPolicy.class);
RPCRequest rpcRequest = new RPCRequest(serviceMethod, rpcParameters, policy, 0);
HttpServletRequest httpRequestMock = mock(HttpServletRequest.class);
String response = "rpc response";
TestGwtRpc gwtRpcSpy = spy(new TestGwtRpc(httpRequestMock));
doReturn(target).when(gwtRpcSpy).getTarget();
doReturn(targetMethod).when(gwtRpcSpy).getTargetMethod(target.getClass(), rpcRequest);
doReturn(targetClassLoader).when(gwtRpcSpy).getTargetClassLoader();
doReturn(rpcRequest).when(gwtRpcSpy).getRequest();
// Stub invokeCore with:
doAnswer((Answer<String>) invocationOnMock -> {
ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
assertEquals(targetClassLoader, currentClassLoader);
return response;
}).when(gwtRpcSpy).invokeCore(target, targetMethod, rpcRequest);
gwtRpcSpy.invoke();
verify(gwtRpcSpy).invokeCore(target, targetMethod, rpcRequest);
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpcTest method testGetSerializationPolicyCallsLoadSerializationPolicyWithModulePathAndStrongName.
@Test
public void testGetSerializationPolicyCallsLoadSerializationPolicyWithModulePathAndStrongName() {
String moduleBaseURL = "http://localhost:8080/pentaho/content/data-access/resources/gwt/";
String appContextPath = "/pentaho";
String moduleContextPath = "/content/data-access/resources/gwt/";
String strongName = "ABCDF12345";
HttpServletRequest httpRequestMock = mock(HttpServletRequest.class);
SerializationPolicy policyMock = mock(SerializationPolicy.class);
TestGwtRpc gwtRpcSpy = spy(new TestGwtRpc(httpRequestMock));
doReturn(appContextPath).when(gwtRpcSpy).getAppContextPath();
doReturn(policyMock).when(gwtRpcSpy).loadSerializationPolicy(moduleContextPath, strongName);
SerializationPolicy result = gwtRpcSpy.getSerializationPolicy(moduleBaseURL, strongName);
assertEquals(policyMock, result);
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class GwtRpcSerializationPolicyCacheTest method testGetSerializationPolicyWithNormalKeyIsSupported.
@Test
public void testGetSerializationPolicyWithNormalKeyIsSupported() {
GwtRpcSerializationPolicyCache cache = new GwtRpcSerializationPolicyCache();
SerializationPolicy policy = mock(SerializationPolicy.class);
testSerializationPolicyIsNewAndCreated(cache, "url", "abc", policy);
testSerializationPolicyIsInCache(cache, "url", "abc", policy);
}
use of com.google.gwt.user.server.rpc.SerializationPolicy in project pentaho-platform by pentaho.
the class AbstractGwtRpc method getSerializationPolicyCore.
@NonNull
private SerializationPolicy getSerializationPolicyCore(@Nullable String moduleBaseURL, @Nullable String strongName) {
if (moduleBaseURL == null) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0004_MALFORMED_URL", ""));
return getDefaultSerializationPolicy();
}
String modulePath;
try {
modulePath = new URL(moduleBaseURL).getPath();
} catch (MalformedURLException ex) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0004_MALFORMED_URL", moduleBaseURL), ex);
return getDefaultSerializationPolicy();
}
String appContextPath = getAppContextPath();
modulePath = GwtRpcUtil.scrubWebAppRoot(modulePath, appContextPath);
if (!modulePath.startsWith(appContextPath)) {
logger.error(Messages.getInstance().getErrorString("GwtRpcPluginProxyServlet.ERROR_0004_MALFORMED_URL", moduleBaseURL));
return getDefaultSerializationPolicy();
}
String moduleContextPath = modulePath.substring(appContextPath.length());
SerializationPolicy serializationPolicy = loadSerializationPolicy(moduleContextPath, strongName);
return serializationPolicy != null ? serializationPolicy : getDefaultSerializationPolicy();
}
Aggregations