/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.felix.http.base.internal.runtime.dto; //@RunWith(MockitoJUnitRunner.class) public class RuntimeDTOBuilderTest { /* @Rule public ExpectedException expectedException = ExpectedException.none(); private static final Long ID_0 = -ID_COUNTER.incrementAndGet(); private static final Long ID_A = ID_COUNTER.incrementAndGet(); private static final Long ID_B = ID_COUNTER.incrementAndGet(); private static final Long ID_C = ID_COUNTER.incrementAndGet(); private static final Long ID_D = ID_COUNTER.incrementAndGet(); private static final Long ID_LISTENER_1 = ID_COUNTER.incrementAndGet(); private static final Long ID_LISTENER_2 = ID_COUNTER.incrementAndGet(); private static final List<String> CONTEXT_NAMES = Arrays.asList("0", "A", "B"); @SuppressWarnings("serial") private static final Map<String, List<String>> CONTEXT_ENTITY_NAMES = new HashMap<String, List<String>>() { { put("0", Arrays.asList("1")); put("A", Arrays.asList("A_1")); put("B", Arrays.asList("B_1", "B_2")); } }; @SuppressWarnings("serial") private static final Map<String, Object> RUNTIME_ATTRIBUTES = new HashMap<String, Object>() { { put("attr_1", "val_1"); put("attr_2", "val_2"); } }; @Mock private Bundle bundle; @Mock private DTO testDTO; @Mock private ExtServletContext context_0; @Mock private ExtServletContext context_A; @Mock private ExtServletContext context_B; @Mock private ExtServletContext context_C; @Mock private ExtServletContext context_D; @Mock private ServiceReference<?> listener_1; @Mock private ServiceReference<?> listener_2; @Mock private ServiceReference<Object> resource; @Mock private ServiceReference<HttpServiceRuntime> runtimeReference; private RegistryRuntime registry; private Map<String, Object> runtimeAttributes; @Before public void setUp() { registry = null; runtimeAttributes = RUNTIME_ATTRIBUTES; when(bundle.getBundleId()).thenReturn(47L); when(runtimeReference.getBundle()).thenReturn(bundle); when(runtimeReference.getUsingBundles()).thenReturn(null); when(runtimeReference.getPropertyKeys()).thenReturn(runtimeAttributes.keySet().toArray(new String[5])); for(final String key : runtimeAttributes.keySet()) { when(runtimeReference.getProperty(key)).thenReturn(runtimeAttributes.get(key)); } when(runtimeReference.getProperty(Constants.SERVICE_ID)).thenReturn(39L); } public ServletContextHelperRuntime setupContext(ServletContext context, String name, long serviceId) { when(context.getServletContextName()).thenReturn(name); String path = "/" + name; when(context.getContextPath()).thenReturn(path); List<String> initParameterNames = asList("param_1", "param_2"); when(context.getInitParameterNames()).thenReturn(Collections.enumeration(initParameterNames)); when(context.getInitParameter("param_1")).thenReturn("init_val_1"); when(context.getInitParameter("param_2")).thenReturn("init_val_2"); Map<String, String> initParameters = createInitParameterMap(); ServletContextHelperInfo contextInfo = createContextInfo(0, serviceId, name, path, initParameters); ContextHandler contextHandler = new ContextHandler(contextInfo, context, bundle); PerContextEventListener eventListener = contextHandler.getListenerRegistry(); ServletContext sharedContext = contextHandler.getSharedContext(); sharedContext.setAttribute("intAttr", 1); sharedContext.setAttribute("dateAttr", new Date()); sharedContext.setAttribute("stringAttr", "one"); sharedContext.setAttribute("dtoAttr", testDTO); // TODO return null; // return contextHandler; } private Map<String, String> createInitParameterMap() { Map<String, String> initParameters = new HashMap<String, String>(); initParameters.put("param_1", "init_val_1"); initParameters.put("param_2", "init_val_2"); return initParameters; } @SuppressWarnings("unchecked") public Map<Long, Collection<ServiceReference<?>>> setupListeners() { Map<Long, Collection<ServiceReference<?>>> listenerRuntimes = new HashMap<Long, Collection<ServiceReference<?>>>(); listenerRuntimes.put(ID_0, asList(listener_1, listener_2)); listenerRuntimes.put(ID_A, Arrays.<ServiceReference<?>>asList(listener_1)); listenerRuntimes.put(ID_B, asList(listener_1, listener_2)); when(listener_1.getProperty(Constants.SERVICE_ID)).thenReturn(ID_LISTENER_1); when(listener_1.getProperty(Constants.OBJECTCLASS)) .thenReturn(new String[] { "org.test.interface_1" }); when(listener_2.getProperty(Constants.SERVICE_ID)).thenReturn(ID_LISTENER_2); when(listener_2.getProperty(Constants.OBJECTCLASS)) .thenReturn(new String[] { "org.test.interface_1", "org.test.interface_2" }); return listenerRuntimes; } public void setupResource() { when(resource.getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN)).thenReturn(new String[] { "/" }); when(resource.getProperty(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX)).thenReturn("prefix"); } @Test public void buildRuntimeDTO() { ServletContextHelperRuntime contextHelper_0 = setupContext(context_0, "0", ID_0); ServletContextHelperRuntime contextHelper_A = setupContext(context_A, "A", ID_A); ServletContextHelperRuntime contextHelper_B = setupContext(context_B, "B", ID_B); List<ServletHandler> servlets = new ArrayList<ServletHandler>(); List<ServletHandler> resources = new ArrayList<ServletHandler>(); servlets.add(createTestServlet("1", context_0, ID_0)); resources.add(createTestServlet("1", context_0, ID_0)); List<FilterHandler> filters_0 = asList(createTestFilter("1", context_0)); List<ServletState> errorPages_0 = asList(createErrorPage("E_1", context_0, ID_0)); ContextRuntime contextRuntime_0 = new ContextRuntime(null, errorPages_0, null, null); servlets.add(createTestServlet("A_1", context_A, ID_A)); resources.add(createTestServlet("A_1", context_A, ID_A)); List<FilterHandler> filters_A = asList(createTestFilter("A_1", context_A)); List<ServletState> errorPages_A = asList(createErrorPage("E_A_1", context_A, ID_A)); ContextRuntime contextRuntime_A = new ContextRuntime(null, errorPages_A, null, null); servlets.addAll(asList(createTestServletWithServiceId("B_1", context_B, ID_B), createTestServletWithServiceId("B_2", context_B, ID_B))); resources.addAll(asList(createTestServletWithServiceId("B_1", context_B, ID_B), createTestServletWithServiceId("B_2", context_B, ID_B))); List<FilterHandler> filters_B = asList(createTestFilterWithServiceId("B_1", context_B), createTestFilterWithServiceId("B_2", context_B)); List<ServletState> errorPages_B = asList(createErrorPageWithServiceId("E_B_1", context_B, ID_B), createErrorPageWithServiceId("E_B_2", context_B, ID_B)); ContextRuntime contextRuntime_B = new ContextRuntime(null, errorPages_B, null, null); Map<Long, Collection<ServiceReference<?>>> listenerRuntimes = setupListeners(); setupRegistry(asList(contextHelper_0, contextHelper_A, contextHelper_B), asList(contextRuntime_0, contextRuntime_A, contextRuntime_B), // new ServletRegistryRuntime(servlets, resources), listenerRuntimes, null); RuntimeDTO runtimeDTO = new RuntimeDTOBuilder(registry, runtimeReference).build(); assertEquals(0, runtimeDTO.failedErrorPageDTOs.length); assertEquals(0, runtimeDTO.failedFilterDTOs.length); assertEquals(0, runtimeDTO.failedListenerDTOs.length); assertEquals(0, runtimeDTO.failedResourceDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs.length); assertEquals(0, runtimeDTO.failedServletDTOs.length); assertServletContextDTOs(runtimeDTO); } private void assertServletContextDTOs(RuntimeDTO runtimeDTO) { SortedSet<Long> seenServiceIds = new TreeSet<Long>(); assertEquals(3, runtimeDTO.servletContextDTOs.length); for (ServletContextDTO servletContextDTO : runtimeDTO.servletContextDTOs) { String contextName = servletContextDTO.name; assertTrue(CONTEXT_NAMES.contains(contextName)); if (contextName.equals("0")) { assertTrue(contextName, servletContextDTO.serviceId < 0); assertEquals(contextName, 1, servletContextDTO.servletDTOs.length); assertEquals(contextName, 1, servletContextDTO.filterDTOs.length); assertEquals(contextName, 1, servletContextDTO.resourceDTOs.length); assertEquals(contextName, 1, servletContextDTO.errorPageDTOs.length); assertEquals(contextName, 2, servletContextDTO.listenerDTOs.length); } else { int expectedId = CONTEXT_NAMES.indexOf(contextName) + 1; assertEquals(contextName, expectedId, servletContextDTO.serviceId); int expectedChildren = CONTEXT_NAMES.indexOf(contextName); assertEquals(contextName, expectedChildren, servletContextDTO.servletDTOs.length); assertEquals(contextName, expectedChildren, servletContextDTO.filterDTOs.length); assertEquals(contextName, expectedChildren, servletContextDTO.resourceDTOs.length); assertEquals(contextName, expectedChildren, servletContextDTO.errorPageDTOs.length); assertEquals(contextName, expectedChildren, servletContextDTO.listenerDTOs.length); } seenServiceIds.add(servletContextDTO.serviceId); assertEquals(contextName, 3, servletContextDTO.attributes.size()); assertEquals(contextName, 1, servletContextDTO.attributes.get("intAttr")); assertEquals(contextName, "one", servletContextDTO.attributes.get("stringAttr")); assertEquals(contextName, testDTO, servletContextDTO.attributes.get("dtoAttr")); assertEquals(contextName, 2, servletContextDTO.initParams.size()); assertEquals(contextName, "init_val_1", servletContextDTO.initParams.get("param_1")); assertEquals(contextName, "init_val_2", servletContextDTO.initParams.get("param_2")); assertEquals(contextName, "/" + contextName + "/" + contextName, servletContextDTO.contextPath); Collection<Long> serviceIds = assertServletDTOs(contextName, servletContextDTO.serviceId, servletContextDTO.servletDTOs); seenServiceIds.addAll(serviceIds); serviceIds = assertFilterDTOs(contextName, servletContextDTO.serviceId, servletContextDTO.filterDTOs); seenServiceIds.addAll(serviceIds); serviceIds = assertResourceDTOs(contextName, servletContextDTO.serviceId, servletContextDTO.resourceDTOs); seenServiceIds.addAll(serviceIds); serviceIds = assertErrorPageDTOs(contextName, servletContextDTO.serviceId, servletContextDTO.errorPageDTOs); seenServiceIds.addAll(serviceIds); serviceIds = assertListenerDTOs(contextName, servletContextDTO.serviceId, servletContextDTO.listenerDTOs); seenServiceIds.addAll(serviceIds); } assertEquals(12, seenServiceIds.tailSet(0L).size()); assertEquals(9, seenServiceIds.headSet(0L).size()); } private Collection<Long> assertServletDTOs(String contextName, long contextId, ServletDTO[] dtos) { List<Long> serviceIds = new ArrayList<Long>(); for (ServletDTO servletDTO : dtos) { String name = servletDTO.name; assertTrue(CONTEXT_ENTITY_NAMES.get(contextName).contains(name)); if (contextId != ID_B) { assertTrue(name, servletDTO.serviceId < 0); } else { assertTrue(name, servletDTO.serviceId > 0); } serviceIds.add(servletDTO.serviceId); assertEquals(name, contextId, servletDTO.servletContextId); assertTrue(name, servletDTO.asyncSupported); assertEquals(name, 2, servletDTO.initParams.size()); assertEquals(name, "valOne_" + name, servletDTO.initParams.get("paramOne_" + name)); assertEquals(name, "valTwo_" + name, servletDTO.initParams.get("paramTwo_" + name)); assertEquals(name, 1, servletDTO.patterns.length); assertEquals(name, "/" + name, servletDTO.patterns[0]); assertEquals(name, "info_" + name, servletDTO.servletInfo); } return serviceIds; } private Collection<Long> assertFilterDTOs(String contextName, long contextId, FilterDTO[] dtos) { List<Long> serviceIds = new ArrayList<Long>(); for (FilterDTO filterDTO : dtos) { String name = filterDTO.name; assertTrue(CONTEXT_ENTITY_NAMES.get(contextName).contains(name)); if (contextId != ID_B) { assertTrue(name, filterDTO.serviceId < 0); } else { assertTrue(name, filterDTO.serviceId > 0); } serviceIds.add(filterDTO.serviceId); assertEquals(name, contextId, filterDTO.servletContextId); assertTrue(name, filterDTO.asyncSupported); assertEquals(name, 2, filterDTO.initParams.size()); assertEquals(name, "valOne_" + name, filterDTO.initParams.get("paramOne_" + name)); assertEquals(name, "valTwo_" + name, filterDTO.initParams.get("paramTwo_" + name)); assertEquals(name, 1, filterDTO.patterns.length); assertEquals(name, "/" + name, filterDTO.patterns[0]); assertEquals(name, 1, filterDTO.regexs.length); assertEquals(name, "." + name, filterDTO.regexs[0]); assertEquals(name, 2, filterDTO.dispatcher.length); assertEquals(name, "ASYNC", filterDTO.dispatcher[0]); assertEquals(name, "REQUEST", filterDTO.dispatcher[1]); } return serviceIds; } private Collection<Long> assertResourceDTOs(String contextName, long contextId, ResourceDTO[] dtos) { List<Long> serviceIds = new ArrayList<Long>(); for (ResourceDTO resourceDTO : dtos) { if (contextId != ID_B) { assertTrue(contextId + " " + contextName, resourceDTO.serviceId < 0); } else { assertTrue(contextId + " " + contextName, resourceDTO.serviceId > 0); } serviceIds.add(resourceDTO.serviceId); assertEquals(contextId + " " + contextName, contextId, resourceDTO.servletContextId); assertEquals(contextId + " " + contextName, 1, resourceDTO.patterns.length); assertTrue(contextId + " " + contextName, resourceDTO.patterns[0].startsWith("/")); } return serviceIds; } private Collection<Long> assertErrorPageDTOs(String contextName, long contextId, ErrorPageDTO[] dtos) { List<Long> serviceIds = new ArrayList<Long>(); for (ErrorPageDTO errorPageDTO : dtos) { String name = errorPageDTO.name; assertTrue(CONTEXT_ENTITY_NAMES.get(contextName).contains(name.substring(2))); if (contextId != ID_B) { assertTrue(name, errorPageDTO.serviceId < 0); } else { assertTrue(name, errorPageDTO.serviceId > 0); } serviceIds.add(errorPageDTO.serviceId); assertEquals(name, contextId, errorPageDTO.servletContextId); assertTrue(name, errorPageDTO.asyncSupported); assertEquals(name, 2, errorPageDTO.initParams.size()); assertEquals(name, "valOne_" + name, errorPageDTO.initParams.get("paramOne_" + name)); assertEquals(name, "valTwo_" + name, errorPageDTO.initParams.get("paramTwo_" + name)); assertEquals(name, "info_" + name, errorPageDTO.servletInfo); assertEquals(name, 2, errorPageDTO.errorCodes.length); long[] errorCodes = copyOf(errorPageDTO.errorCodes, 2); sort(errorCodes); assertEquals(name, 400, errorCodes[0]); assertEquals(name, 500, errorCodes[1]); assertEquals(name, 2, errorPageDTO.exceptions.length); String[] exceptions = copyOf(errorPageDTO.exceptions, 2); sort(exceptions); assertEquals(name, "Bad request", exceptions[0]); assertEquals(name, "Error", exceptions[1]); } return serviceIds; } private Collection<Long> assertListenerDTOs(String contextName, long contextId, ListenerDTO[] dtos) { Set<Long> serviceIds = new HashSet<Long>(); for (ListenerDTO listenerDTO : dtos) { assertEquals(contextId, listenerDTO.servletContextId); serviceIds.add(listenerDTO.serviceId); } assertEquals(ID_LISTENER_1.longValue(), dtos[0].serviceId); assertArrayEquals(new String[] { "org.test.interface_1" }, dtos[0].types); if (dtos.length > 1) { assertEquals(ID_LISTENER_2.longValue(), dtos[1].serviceId); assertArrayEquals(new String[] { "org.test.interface_1", "org.test.interface_2" }, dtos[1].types); } return serviceIds; } @Test public void nullValuesInEntities() { ServletContextHelperRuntime contextHandler = setupContext(context_0, "0", ID_0); ServletInfo servletInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "1", new String[] { "/*" }, null, true, Collections.<String, String>emptyMap()); Servlet servlet = mock(Servlet.class); ServletHandler servletHandler = new HttpServiceServletHandler(0, context_0, servletInfo, servlet); when(servlet.getServletInfo()).thenReturn("info_0"); FilterInfo filterInfo = createFilterInfo(0, ID_COUNTER.incrementAndGet(), "1", null, null, null, true, null, Collections.<String, String>emptyMap()); FilterHandler filterHandler = new HttpServiceFilterHandler(0, context_0, filterInfo, mock(Filter.class)); ServletInfo resourceInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "1", new String[] { "/*" }, null, true, Collections.<String, String>emptyMap()); Servlet resource = mock(Servlet.class); ServletHandler resourceHandler = new HttpServiceServletHandler(ID_0, context_0, resourceInfo, resource); ContextRuntime contextRuntime = new ContextRuntime(null, Collections.<ServletState>emptyList(), null, null); setupRegistry(asList(contextHandler), asList(contextRuntime), // new ServletRegistryRuntime(asList(resourceHandler), asList(servletHandler)), Collections.<Long, Collection<ServiceReference<?>>>emptyMap(), null); RuntimeDTO runtimeDTO = new RuntimeDTOBuilder(registry, runtimeReference).build(); assertEquals(1, runtimeDTO.servletContextDTOs.length); assertEquals(1, runtimeDTO.servletContextDTOs[0].servletDTOs.length); assertEquals(1, runtimeDTO.servletContextDTOs[0].filterDTOs.length); assertEquals(emptyMap(), runtimeDTO.servletContextDTOs[0].servletDTOs[0].initParams); assertEquals(emptyMap(), runtimeDTO.servletContextDTOs[0].filterDTOs[0].initParams); assertEquals(0, runtimeDTO.servletContextDTOs[0].filterDTOs[0].patterns.length); assertEquals(0, runtimeDTO.servletContextDTOs[0].filterDTOs[0].regexs.length); } @Test public void contextWithNoEntities() { ServletContextHelperRuntime contextHandler_0 = setupContext(context_0, "0", ID_0); ServletContextHelperRuntime contextHandler_A = setupContext(context_A, "A", ID_A); // TODO setupRegistry(asList(contextHandler_0, contextHandler_A), null, // asList(ContextRuntime.empty(ID_0), ContextRuntime.empty(ID_A)), Collections.<Long, Collection<ServiceReference<?>>>emptyMap(), null); RuntimeDTO runtimeDTO = new RuntimeDTOBuilder(registry, runtimeReference).build(); assertEquals(2, runtimeDTO.servletContextDTOs.length); assertEquals(0, runtimeDTO.servletContextDTOs[0].servletDTOs.length); assertEquals(0, runtimeDTO.servletContextDTOs[0].filterDTOs.length); assertEquals(0, runtimeDTO.servletContextDTOs[1].servletDTOs.length); assertEquals(0, runtimeDTO.servletContextDTOs[1].filterDTOs.length); } @Test public void missingPatternInServletThrowsException() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("patterns"); ServletContextHelperRuntime contextHandler = setupContext(context_0, "0", ID_0); ServletInfo servletInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "1", null, null, true, Collections.<String, String>emptyMap()); Servlet servlet = mock(Servlet.class); ServletHandler servletHandler = new HttpServiceServletHandler(ID_0, context_0, servletInfo, servlet); when(servlet.getServletInfo()).thenReturn("info_0"); ContextRuntime contextRuntime = new ContextRuntime(Collections.<FilterState>emptyList(), Collections.<ServletState>emptyList(), null, null); setupRegistry(asList(contextHandler), asList(contextRuntime), // new ServletRegistryRuntime(asList(servletHandler), Collections.<ServletRuntime>emptyList()), Collections.<Long, Collection<ServiceReference<?>>>emptyMap(), null); new RuntimeDTOBuilder(registry, runtimeReference).build(); } public FailureRuntime setupFailures() { Map<AbstractInfo<?>, Integer> serviceFailures = new HashMap<AbstractInfo<?>, Integer>(); ServletContextHelperInfo contextInfo = createContextInfo(0, ID_C, "context_failure_1", "/", createInitParameterMap()); serviceFailures.put(contextInfo, 1); contextInfo = createContextInfo(0, ID_D, "context_failure_2", "/", createInitParameterMap()); serviceFailures.put(contextInfo, 2); ServletInfo servletInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "servlet_failure_1", new String[] {"/"}, null, false, createInitParameterMap()); serviceFailures.put(servletInfo, 3); servletInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "servlet_failure_2", new String[] {"/"}, null, false, createInitParameterMap()); serviceFailures.put(servletInfo, 4); FilterInfo filterInfo = createFilterInfo(0, ID_COUNTER.incrementAndGet(), "filter_failure_1", new String[] {"/"}, null, null, false, null, createInitParameterMap()); serviceFailures.put(filterInfo, 5); ServletInfo errorPageInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "error_failure_1", null, new String[] { "405", "TestException" }, false, createInitParameterMap()); serviceFailures.put(errorPageInfo, 6); ServletInfo invalidErrorPageInfo = createServletInfo(0, ID_COUNTER.incrementAndGet(), "error_failure_2", new String[] { "/" }, new String[] { "405", "TestException" }, false, createInitParameterMap()); serviceFailures.put(invalidErrorPageInfo, 7); return FailureRuntime.builder().add(serviceFailures).build(); } @Test public void testFailureDTOs() { setupRegistry(Collections.<ServletContextHelperRuntime>emptyList(), Collections.<ContextRuntime>emptyList(), Collections.<Long, Collection<ServiceReference<?>>>emptyMap(), setupFailures()); RuntimeDTO runtimeDTO = new RuntimeDTOBuilder(registry, runtimeReference).build(); assertEquals(0, runtimeDTO.servletContextDTOs.length); assertEquals(2, runtimeDTO.failedErrorPageDTOs.length); assertEquals(1, runtimeDTO.failedFilterDTOs.length); // ListenerInfo is hard to setup assertEquals(0, runtimeDTO.failedListenerDTOs.length); // ResourceInfo is hard to setup assertEquals(0, runtimeDTO.failedResourceDTOs.length); assertEquals(2, runtimeDTO.failedServletContextDTOs.length); assertEquals(2, runtimeDTO.failedServletDTOs.length); assertEquals(1, runtimeDTO.failedServletContextDTOs[0].failureReason); assertEquals(2, runtimeDTO.failedServletContextDTOs[1].failureReason); assertEquals(3, runtimeDTO.failedServletDTOs[0].failureReason); assertEquals(4, runtimeDTO.failedServletDTOs[1].failureReason); assertEquals(5, runtimeDTO.failedFilterDTOs[0].failureReason); assertEquals(6, runtimeDTO.failedErrorPageDTOs[0].failureReason); assertEquals(7, runtimeDTO.failedErrorPageDTOs[1].failureReason); assertEquals("context_failure_1", runtimeDTO.failedServletContextDTOs[0].name); assertEquals("context_failure_2", runtimeDTO.failedServletContextDTOs[1].name); assertEquals("servlet_failure_1", runtimeDTO.failedServletDTOs[0].name); assertEquals("servlet_failure_2", runtimeDTO.failedServletDTOs[1].name); assertEquals("filter_failure_1", runtimeDTO.failedFilterDTOs[0].name); assertEquals("error_failure_1", runtimeDTO.failedErrorPageDTOs[0].name); assertEquals("error_failure_2", runtimeDTO.failedErrorPageDTOs[1].name); assertEquals(ID_C.longValue(), runtimeDTO.failedServletContextDTOs[0].serviceId); assertEquals(ID_D.longValue(), runtimeDTO.failedServletContextDTOs[1].serviceId); assertEquals(0, runtimeDTO.failedServletDTOs[0].servletContextId); assertEquals(0, runtimeDTO.failedServletDTOs[1].servletContextId); assertEquals(0, runtimeDTO.failedFilterDTOs[0].servletContextId); assertEquals(0, runtimeDTO.failedErrorPageDTOs[0].servletContextId); assertEquals(0, runtimeDTO.failedErrorPageDTOs[1].servletContextId); assertEquals(0, runtimeDTO.failedServletContextDTOs[0].errorPageDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[0].filterDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[0].listenerDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[0].resourceDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[0].servletDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[1].errorPageDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[1].filterDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[1].listenerDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[1].resourceDTOs.length); assertEquals(0, runtimeDTO.failedServletContextDTOs[1].servletDTOs.length); assertTrue(runtimeDTO.failedServletContextDTOs[0].attributes.isEmpty()); assertTrue(runtimeDTO.failedServletContextDTOs[1].attributes.isEmpty()); } */ }