private FilterAndTelemetryClientMock createInitializedFilterWithExposedTelemetryClient() throws Exception { Filter filter = createInitializedFilter(); Field field = WebRequestTrackingFilter.class.getDeclaredField("telemetryClient"); field.setAccessible(true); return new FilterAndTelemetryClientMock(filter, (TelemetryClient) field.get(filter)); } // endregion Private methods
private FilterAndTelemetryClientMock createInitializedFilterWithMockTelemetryClient(boolean withTelemetryClient, boolean clientThrows) throws ServletException, NoSuchFieldException, IllegalAccessException { Filter filter = createInitializedFilter(); Field field = WebRequestTrackingFilter.class.getDeclaredField("telemetryClient"); field.setAccessible(true); TelemetryClient mockTelemetryClient = null; if (withTelemetryClient) { mockTelemetryClient = spy(new TelemetryClient()); if (clientThrows) { doThrow(new RuntimeException()).when(mockTelemetryClient).trackException(any(Exception.class)); } } field.set(filter, mockTelemetryClient); return new FilterAndTelemetryClientMock(filter, mockTelemetryClient); }
@Test public void testFiltersChainWhenExceptionIsThrownOnModulesInvocation() throws Exception { Filter filter = createInitializedFilter(); // mocking WebModulesContainer containerMock = ServletUtils.setMockWebModulesContainer(filter); Mockito.doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { throw new Exception("FATAL!"); } }).when(containerMock).invokeOnBeginRequest(any(ServletRequest.class), any(ServletResponse.class)); FilterChain chain = mock(FilterChain.class); ServletRequest request = ServletUtils.generateDummyServletRequest(); // execute filter.doFilter(request, ServletUtils.generateDummyServletResponse(), chain); // validate verify(chain).doFilter(any(ServletRequest.class), any(ServletResponse.class)); }
@Test public void testFilterInitializedSuccessfullyFromConfiguration() throws ServletException { Filter filter = createInitializedFilter(); WebModulesContainer container = ServletUtils.getWebModuleContainer(filter); assertNotNull("Container shouldn't be null", container); Assert.assertTrue("Modules container shouldn't be empty", container.getModulesCount() > 0); }