public void testTwoDistinctAndTwoRelatedMapping() {
IdentityMapper mapper = new CacheIdentityMapper();
Bus bus = BusFactory.getDefaultBus();
EHCacheIdentityCache cache = new EHCacheIdentityCache(mapper, bus);
cache.mapPrincipal("REALM_A", new CustomTokenPrincipal("user_aaa"), "REALM_B");
cache.mapPrincipal("REALM_D", new CustomTokenPrincipal("user_ddd"), "REALM_E");
assertEquals(4, cache.size());
//No Mapping occured between A,B and D,E (C not involved at all)
assertEquals(2, cache.get("user_aaa", "REALM_A").size());
assertEquals(2, cache.get("user_bbb", "REALM_B").size());
assertEquals(2, cache.get("user_ddd", "REALM_D").size());
assertEquals(2, cache.get("user_eee", "REALM_E").size());
cache.mapPrincipal("REALM_B", new CustomTokenPrincipal("user_bbb"), "REALM_C");
assertEquals(5, cache.size());
assertNotNull(cache.get("user_aaa", "REALM_A"));
assertNotNull(cache.get("user_bbb", "REALM_B"));
assertNotNull(cache.get("user_ccc", "REALM_C"));
assertNotNull(cache.get("user_ddd", "REALM_D"));
assertNotNull(cache.get("user_eee", "REALM_E"));
assertEquals(3, cache.get("user_aaa", "REALM_A").size());
assertEquals(3, cache.get("user_bbb", "REALM_B").size());
assertEquals(3, cache.get("user_ccc", "REALM_C").size());
//No mapping occurred between A,B,C and D,E -> distinct
assertEquals(2, cache.get("user_ddd", "REALM_D").size());
assertEquals(2, cache.get("user_eee", "REALM_E").size());
cache.mapPrincipal("REALM_C", new CustomTokenPrincipal("user_ccc"), "REALM_E");
//All mappings are known now
assertEquals(5, cache.size());
assertNotNull(cache.get("user_aaa", "REALM_A"));
assertNotNull(cache.get("user_bbb", "REALM_B"));
assertNotNull(cache.get("user_ccc", "REALM_C"));