final String id = createId(SAMPLE_CONTEXT_ID);
hcm.addHttpContext(null, SAMPLE_CONTEXT_ID, sampleContext);
// Servlet 1 gets the context
final ServletMapping bundle1Servlet = new ServletMapping(bundle1, null, BUNDLE_1_ALIAS);
HttpContext ctx1 = hcm.getHttpContext(bundle1, SAMPLE_CONTEXT_ID, bundle1Servlet);
TestCase.assertNotNull(ctx1);
TestCase.assertSame(ctx1, bundle1Servlet.getContext());
TestCase.assertSame(sampleContext, ctx1);
TestCase.assertEquals(1, hcm.getHttpContexts().get(id).getMappings().size());
TestCase.assertTrue(hcm.getHttpContexts().get(id).getMappings().contains(bundle1Servlet));
Map<String, Set<AbstractMapping>> orphans1 = hcm.getOrphanMappings();
TestCase.assertTrue(orphans1.isEmpty());
// unregister serlvet 1 --> all references clear
hcm.ungetHttpContext(bundle1, SAMPLE_CONTEXT_ID, bundle1Servlet);
TestCase.assertNull(bundle1Servlet.getContext());
TestCase.assertTrue(hcm.getHttpContexts().get(id).getMappings().isEmpty());
TestCase.assertTrue(hcm.getOrphanMappings().isEmpty());
// Servlet 2 gets the context
final ServletMapping bundle2Servlet = new ServletMapping(bundle2, null, BUNDLE_2_ALIAS);
HttpContext ctx2 = hcm.getHttpContext(bundle2, SAMPLE_CONTEXT_ID, bundle2Servlet);
TestCase.assertNotNull(ctx2);
TestCase.assertSame(ctx2, bundle2Servlet.getContext());
TestCase.assertSame(sampleContext, ctx2);
TestCase.assertEquals(1, hcm.getHttpContexts().get(id).getMappings().size());
TestCase.assertTrue(hcm.getHttpContexts().get(id).getMappings().contains(bundle2Servlet));
TestCase.assertTrue(hcm.getOrphanMappings().isEmpty());
// register Servlet 1 again --> gets context
hcm.getHttpContext(bundle1, SAMPLE_CONTEXT_ID, bundle1Servlet);
HttpContext ctx3 = hcm.getHttpContext(bundle1, SAMPLE_CONTEXT_ID, bundle1Servlet);
TestCase.assertNotNull(ctx3);
TestCase.assertSame(ctx3, bundle1Servlet.getContext());
TestCase.assertSame(sampleContext, ctx3);
TestCase.assertEquals(2, hcm.getHttpContexts().get(id).getMappings().size());
TestCase.assertTrue(hcm.getHttpContexts().get(id).getMappings().contains(bundle1Servlet));