@Test public void testDestroyConcurrentModRegression() { ServletContext context = mock(ServletContext.class); ServletContextEvent destroyed = mock(ServletContextEvent.class); when(destroyed.getServletContext()).thenReturn(context); ServletContextListener listener = new IIOProviderContextListener(); listener.contextInitialized(mock(ServletContextEvent.class)); ImageReaderSpi provider1 = new MockImageReaderSpiOne(); ImageReaderSpi provider2 = new MockImageReaderSpiToo(); // NOTE: Fake registering for simplicity, but it still exposes the original problem with de-registering IIORegistry registry = IIORegistry.getDefaultInstance(); registry.registerServiceProvider(provider1); registry.registerServiceProvider(provider2); assertTrue(registry.contains(provider1)); assertTrue(registry.contains(provider2)); listener.contextDestroyed(destroyed); assertFalse(registry.contains(provider1)); assertFalse(registry.contains(provider2)); }
@Test public void testDestroyConcurrentModRegression() { ServletContext context = mock(ServletContext.class); ServletContextEvent destroyed = mock(ServletContextEvent.class); when(destroyed.getServletContext()).thenReturn(context); ServletContextListener listener = new IIOProviderContextListener(); listener.contextInitialized(mock(ServletContextEvent.class)); ImageReaderSpi provider1 = new MockImageReaderSpiOne(); ImageReaderSpi provider2 = new MockImageReaderSpiToo(); // NOTE: Fake registering for simplicity, but it still exposes the original problem with de-registering IIORegistry registry = IIORegistry.getDefaultInstance(); registry.registerServiceProvider(provider1); registry.registerServiceProvider(provider2); assertTrue(registry.contains(provider1)); assertTrue(registry.contains(provider2)); listener.contextDestroyed(destroyed); assertFalse(registry.contains(provider1)); assertFalse(registry.contains(provider2)); }