/** * {@inheritDoc} */ @Override protected void initHook(Map<String, Object> parameters) { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); }
@Test public void testInvalidParamTypesHandling() throws IOException, StorageException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object invalidResponseObject = new Object(); Object[] params = new Object[] { invalidResponseObject, invalidResponseObject }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); Object response = params[1]; assertThat(intercepted, equalTo(false)); assertThat(response, equalTo(invalidResponseObject)); }
@Test public void testInstrumentation() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); Object response = params[1]; assertThat(intercepted, equalTo(false)); assertThat(response, instanceOf(FakeWrapper.class)); } @SuppressWarnings("unchecked")
@Test public void testPreventCookieOverwriting() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); String sessionId = "234587"; when(dummyRequest.getCookies()).thenReturn(new Cookie[] { new Cookie(JSAgentBuilder.SESSION_ID_COOKIE_NAME, sessionId) }); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); respWrapper.getWriter(); assertThat(intercepted, equalTo(false)); verify(dummyResponse, never()).addCookie(any(Cookie.class)); }
@Test public void testOtherRequestsInterception() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); String requestUrl = eumConfig.getScriptBaseUrl() + "dontinterceptme"; when(dummyRequest.getRequestURI()).thenReturn(requestUrl); boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, new Object[] { dummyRequest, dummyResponse }, ssc); assertThat(intercepted, equalTo(false)); verify(dummyResponse, never()).getWriter(); verify(dummyResponse, never()).getOutputStream(); }
@Test public void testScriptInterception() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); String scriptUrl = eumConfig.getScriptBaseUrl() + JSAgentModule.JAVASCRIPT_URL_PREFIX + "32488_" + eumConfig.getActiveModules() + ".JS"; when(dummyRequest.getRequestURI()).thenReturn(scriptUrl); StringWriter response = new StringWriter(); PrintWriter pw = new PrintWriter(response); when(dummyResponse.getWriter()).thenReturn(pw); boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, new Object[] { dummyRequest, dummyResponse }, ssc); assertThat(intercepted, equalTo(true)); assertThat(response.toString(), equalTo(AGENT_CODE)); }
@SuppressWarnings("unchecked") @Test public void testInvalidConfigInterception() throws IOException, StorageException { when(config.getEndUserMonitoringConfig()).thenThrow(StorageException.class); hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); Object response = params[1]; assertThat(intercepted, equalTo(false)); assertThat(response, equalTo((Object) dummyResponse)); }
@Test public void testBeaconInterception() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); String beaconUrl = eumConfig.getScriptBaseUrl() + JSAgentModule.BEACON_SUB_PATH; when(dummyRequest.getRequestURI()).thenReturn(beaconUrl); when(dummyRequest.getReader()).thenReturn(new BufferedReader(new StringReader(FAKE_BEACON))); boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, new Object[] { dummyRequest, dummyResponse }, ssc); assertThat(intercepted, equalTo(true)); verify(this.dataHandler).insertBeacon(FAKE_BEACON); }
@SuppressWarnings("unchecked") @Test public void testInvalidConfigHandling() throws IOException, StorageException { when(config.getEndUserMonitoringConfig()).thenThrow(StorageException.class); hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); Object response = params[1]; assertThat(intercepted, equalTo(false)); assertThat(response, equalTo((Object) dummyResponse)); }
@Test public void testCookieGeneration() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); respWrapper.getWriter(); assertThat(intercepted, equalTo(false)); verify(dummyResponse, times(1)).addCookie(any(Cookie.class)); }
@SuppressWarnings("unchecked") @Test public void testPreventDoubleInstrumentation() throws IOException { hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, new FakeWrapper(dummyResponse) }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); assertThat(intercepted, equalTo(false)); verify(linker, never()).createProxy(any(Class.class), any(IProxySubject.class), any(ClassLoader.class)); }
@SuppressWarnings("unchecked") @Test public void testLinkerErrorHandling() throws IOException { when(linker.createProxy(any(Class.class), any(TagInjectionResponseWrapper.class), any(ClassLoader.class))).then(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { return null; } }); hook = new EUMInstrumentationHook(linker, tracer, dataHandler, config, agentBuilder); Object[] params = new Object[] { dummyRequest, dummyResponse }; boolean intercepted = null != hook.beforeBody(METHOD_ID, dummyServlet, params, ssc); Object response = params[1]; assertThat(intercepted, equalTo(false)); verify(linker, times(1)).createProxy(any(Class.class), any(IProxySubject.class), any(ClassLoader.class)); assertThat(response, equalTo((Object) dummyResponse)); assertThat(intercepted, equalTo(false)); }