/** * @param filterConfig The {@link FilterConfig} for initializing this Servlet filter. * @return The {@link HttpTagAndSpanNamingAdapter} that should be used by this instance. Delegates to * {@link #getTagAdapterFromName(String)}, and uses {@link #getDefaultTagAdapter()} as a last resort if * {@link #getTagAdapterFromName(String)} throws an exception. */ protected HttpTagAndSpanNamingAdapter<HttpServletRequest, HttpServletResponse> initializeTagAndNamingAdapter( FilterConfig filterConfig ) { String tagAdapterString = filterConfig.getInitParameter(TAG_AND_SPAN_NAMING_ADAPTER_INIT_PARAM_NAME); try { return getTagAdapterFromName(tagAdapterString); } catch(Throwable t) { logger.warn( "Unable to match tagging adapter " + tagAdapterString + ". Using default ServletRequestTagAdapter", t ); return getDefaultTagAdapter(); } }
doThrow(new RuntimeException("intentional exception")).when(filterSpy).getTagAdapterFromName(anyString()); doReturn(adapterFromDesiredMethodMock).when(filterSpy).getTagAdapterFromName(anyString()); verify(filterSpy).getTagAdapterFromName(tagAdapterFromFilterConfig);
@DataProvider(value = { "true", "false" }) @Test public void getTagAdapterFromName_returns_expected_strategy_for_fully_qualified_classname( boolean useClassThatExists ) { // given RequestTracingFilter filter = new RequestTracingFilter(); String classname = (useClassThatExists) ? TagAdapterExtension.class.getName() : "foo.doesnotexist.BlahAdapter" + UUID.randomUUID().toString(); AtomicReference<HttpTagAndSpanNamingAdapter<HttpServletRequest, HttpServletResponse>> resultHolder = new AtomicReference<>(); // when Throwable ex = catchThrowable(() -> resultHolder.set(filter.getTagAdapterFromName(classname))); // then if (useClassThatExists) { assertThat(ex).isNull(); assertThat(resultHolder.get()) .isNotNull() .isInstanceOf(TagAdapterExtension.class); } else { assertThat(ex).isInstanceOf(ClassNotFoundException.class); assertThat(resultHolder.get()).isNull(); } }
@DataProvider(value = { "null", "", " ", " \t\r\n " }) @Test public void getTagAdapterFromName_returns_default_adapter_if_passed_null_or_blank_string( String adapterName ) throws IllegalAccessException, InstantiationException, ClassNotFoundException { // given RequestTracingFilter filterSpy = spy(new RequestTracingFilter()); HttpTagAndSpanNamingAdapter<HttpServletRequest, HttpServletResponse> defaultAdapterMock = mock(HttpTagAndSpanNamingAdapter.class); doReturn(defaultAdapterMock).when(filterSpy).getDefaultTagAdapter(); // when HttpTagAndSpanNamingAdapter<HttpServletRequest, HttpServletResponse> result = filterSpy.getTagAdapterFromName(adapterName); // then assertThat(result).isSameAs(defaultAdapterMock); verify(filterSpy).getDefaultTagAdapter(); }