private Uid doAuthenticate() { final ConnectorObject authnObject = getObjectToAuthenticate(); if (authnObject != null) { final String entryDN = authnObject.getName().getNameValue(); try { freeIPAConnection.login(entryDN, password); } catch (final FreeIPAException e) { throw e; } } return authnObject.getUid(); }
static { boolean enabled = true; for (int i = 0; i < 100; i++) { ConnectorObjectBuilder builder = new ConnectorObjectBuilder(); builder.setUid(String.valueOf(i)); builder.setName(String.format("user%03d", i)); builder.addAttribute(AttributeBuilder.buildEnabled(enabled)); Map<String, Object> mapAttribute = new HashMap<String, Object>(); mapAttribute.put("email", "*****@*****.**"); mapAttribute.put("primary", true); mapAttribute.put("usage", Arrays.asList("home", "work")); builder.addAttribute(AttributeBuilder.build("emails", mapAttribute)); ConnectorObject co = builder.build(); collection.put(co.getName().getNameValue(), co); enabled = !enabled; } }
@Test public void testAllBlocksReturnedFromSingleSyncCall() throws NamingException { LdapConfiguration config = newConfiguration(); // Set a small block size so connector would have to do // a couple of searches to return all deltas. config.setChangeLogBlockSize(2); LdapConnection conn = newConnection(config); String baseContext = conn.getConfiguration().getBaseContexts()[0]; int COUNT = 10; StringBuilder ldif = new StringBuilder(); for (int i = 0; i < COUNT; i++) { String name = "user." + i; String entryDN = "uid=" + name + "," + baseContext; ldif.append( MessageFormat.format( "dn: {0}\n" + "changetype: add\n" + "objectClass: inetOrgPerson\n" + "objectClass: organizationalPerson\n" + "objectClass: person\n" + "objectClass: top\n" + "uid: {1}\n" + "cn: {1}\n" + "sn: {1}\n" + "\n", entryDN, name)); } List<SyncDelta> result = doTest(conn, ldif.toString(), COUNT); assertEquals(10, result.size()); for (int i = 0; i < COUNT; i++) { String name = "user." + i; String entryDN = "uid=" + name + "," + baseContext; ConnectorObject object = result.get(i).getObject(); assertEquals(new Uid(entryDN), object.getUid()); assertEquals(new Name(entryDN), object.getName()); } }
@Test // @Ignore public void testSearchSpecifiedUser() throws Exception { SpmlConfiguration config = createConfiguration(); SpmlConnector info = createConnector(config); try { Set<Attribute> attrs = fillInSampleUser(TEST_USER); deleteUser(TEST_USER, info); Uid createdUserUid = info.create(ObjectClass.ACCOUNT, attrs, null); // Simple test of EqualsFilter // TestHandler handler = new TestHandler(); TestHelpers.search( info, ObjectClass.ACCOUNT, new EqualsFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), handler, null); boolean found = false; int count = 0; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; count++; } Assert.assertTrue(count == 1); Assert.assertTrue(found); // Simple test of StartsWithFilter // handler = new TestHandler(); TestHelpers.search( info, ObjectClass.ACCOUNT, new StartsWithFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), handler, null); found = false; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; Assert.assertTrue( AttributeUtil.getStringValue(user.getAttributeByName(ATTR_LASTNAME)) .startsWith("User")); } Assert.assertTrue(found); // Simple test of EndsWithFilter // handler = new TestHandler(); TestHelpers.search( info, ObjectClass.ACCOUNT, new EndsWithFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), handler, null); found = false; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; Assert.assertTrue( AttributeUtil.getStringValue(user.getAttributeByName(ATTR_LASTNAME)).endsWith("User")); } Assert.assertTrue(found); // Simple test of ContainsFilter // handler = new TestHandler(); TestHelpers.search( info, ObjectClass.ACCOUNT, new ContainsFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), handler, null); found = false; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; Assert.assertTrue( AttributeUtil.getStringValue(user.getAttributeByName(ATTR_LASTNAME)).contains("User")); } Assert.assertTrue(found); // Simple test of EqualsFilter // { handler = new TestHandler(); TestHelpers.search( info, ObjectClass.ACCOUNT, new EqualsFilter(createdUserUid), handler, null); found = false; count = 0; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; count++; } Assert.assertTrue(count == 1); Assert.assertTrue(found); } // Test of And // handler = new TestHandler(); Filter filter = new AndFilter( new EqualsFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), new EqualsFilter(AttributeBuilder.build(ATTR_FIRSTNAME, "SPML"))); TestHelpers.search(info, ObjectClass.ACCOUNT, filter, handler, null); found = false; count = 0; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; count++; } Assert.assertTrue(count == 1); Assert.assertTrue(found); // Change the first name // ConnectorObject updateUser = getUser(TEST_USER); Set<Attribute> changed = new HashSet<Attribute>(); changed.add(AttributeBuilder.build(ATTR_FIRSTNAME, "abel")); changed.add(updateUser.getUid()); info.update(ObjectClass.ACCOUNT, changed, null); // Test of And, which should fail, since firstname has changed // handler = new TestHandler(); filter = new AndFilter( new EqualsFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), new EqualsFilter(AttributeBuilder.build(ATTR_FIRSTNAME, "SPML"))); TestHelpers.search(info, ObjectClass.ACCOUNT, filter, handler, null); found = false; count = 0; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; count++; } Assert.assertTrue(count == 0); Assert.assertTrue(!found); // Test of Or, which should succeed, since lastname has not changed // handler = new TestHandler(); filter = new OrFilter( new EqualsFilter(AttributeBuilder.build(ATTR_LASTNAME, "User")), new EqualsFilter(AttributeBuilder.build(ATTR_FIRSTNAME, "SPML"))); TestHelpers.search(info, ObjectClass.ACCOUNT, filter, handler, null); found = false; count = 0; for (ConnectorObject user : handler) { if (TEST_USER.equals(user.getName().getNameValue())) found = true; count++; } Assert.assertTrue(count > 0); Assert.assertTrue(found); } finally { info.dispose(); } }
@Test public void testSimple() throws Exception { LdapConnection conn = newConnection(newConfiguration()); String baseContext = conn.getConfiguration().getBaseContexts()[0]; String entryDN = "uid=foobar," + baseContext; List<SyncDelta> result = doTest( conn, "dn: " + entryDN + "\n" + "changetype: add\n" + "objectClass: inetOrgPerson\n" + "objectClass: organizationalPerson\n" + "objectClass: person\n" + "objectClass: top\n" + "uid: foobar\n" + "cn: Foo Bar\n" + "sn: Bar\n", 1); assertEquals(1, result.size()); SyncDelta delta = result.get(0); assertEquals(SyncDeltaType.CREATE_OR_UPDATE, delta.getDeltaType()); ConnectorObject object = delta.getObject(); assertEquals(new Uid(entryDN), object.getUid()); assertEquals(new Name(entryDN), object.getName()); assertEquals(AttributeBuilder.build("uid", "foobar"), object.getAttributeByName("uid")); assertEquals(AttributeBuilder.build("cn", "Foo Bar"), object.getAttributeByName("cn")); assertEquals(AttributeBuilder.build("sn", "Bar"), object.getAttributeByName("sn")); result = doTest(conn, "dn: " + entryDN + "\n" + "changeType: modrdn\n" + "newRdn: cn=Foo Bar", 1); entryDN = "cn=Foo Bar," + baseContext; assertEquals(1, result.size()); delta = result.get(0); assertEquals(SyncDeltaType.CREATE_OR_UPDATE, delta.getDeltaType()); object = delta.getObject(); assertEquals(new Uid(entryDN), object.getUid()); assertEquals(new Name(entryDN), object.getName()); assertEquals(AttributeBuilder.build("uid", emptyList()), object.getAttributeByName("uid")); assertEquals(AttributeBuilder.build("cn", "Foo Bar"), object.getAttributeByName("cn")); assertEquals(AttributeBuilder.build("sn", "Bar"), object.getAttributeByName("sn")); result = doTest( conn, "dn: " + entryDN + "\n" + "changeType: modify\n" + "add: cn\n" + "cn: Dummy User", 1); assertEquals(1, result.size()); delta = result.get(0); assertEquals(SyncDeltaType.CREATE_OR_UPDATE, delta.getDeltaType()); object = delta.getObject(); assertEquals( AttributeBuilder.build("cn", "Foo Bar", "Dummy User"), object.getAttributeByName("cn")); result = doTest( conn, "dn: " + entryDN + "\n" + "changeType: modrdn\n" + "newRdn: cn=Dummy User\n" + "deleteOldRdn: FALSE", 1); entryDN = "cn=Dummy User," + baseContext; assertEquals(1, result.size()); delta = result.get(0); assertEquals(SyncDeltaType.CREATE_OR_UPDATE, delta.getDeltaType()); object = delta.getObject(); assertEquals(new Uid(entryDN), object.getUid()); assertEquals(new Name(entryDN), object.getName()); assertEquals( AttributeBuilder.build("cn", "Foo Bar", "Dummy User"), object.getAttributeByName("cn")); result = doTest( conn, "dn: " + entryDN + "\n" + "changeType: modify\n" + "delete: cn\n" + "cn: Foo Bar", 1); assertEquals(1, result.size()); delta = result.get(0); assertEquals(SyncDeltaType.CREATE_OR_UPDATE, delta.getDeltaType()); object = delta.getObject(); assertEquals(AttributeBuilder.build("cn", "Dummy User"), object.getAttributeByName("cn")); result = doTest(conn, "dn: " + entryDN + "\n" + "changeType: delete", 1); assertEquals(1, result.size()); delta = result.get(0); assertEquals(SyncDeltaType.DELETE, delta.getDeltaType()); assertEquals(new Uid(entryDN), delta.getUid()); }
public void executeQuery( ObjectClass objectClass, Filter query, ResultsHandler handler, OperationOptions options) { SortKey[] sortKeys = options.getSortKeys(); if (null == sortKeys) { sortKeys = new SortKey[] {new SortKey(Name.NAME, true)}; } // Rebuild the full result set. TreeSet<ConnectorObject> resultSet = new TreeSet<ConnectorObject>(new ResourceComparator(sortKeys)); if (null != query) { for (ConnectorObject co : collection.values()) { if (query.accept(co)) { resultSet.add(co); } } } else { resultSet.addAll(collection.values()); } // Handle the results if (null != options.getPageSize()) { // Paged Search final String pagedResultsCookie = options.getPagedResultsCookie(); String currentPagedResultsCookie = options.getPagedResultsCookie(); final Integer pagedResultsOffset = null != options.getPagedResultsOffset() ? Math.max(0, options.getPagedResultsOffset()) : 0; final Integer pageSize = options.getPageSize(); int index = 0; int pageStartIndex = null == pagedResultsCookie ? 0 : -1; int handled = 0; for (ConnectorObject entry : resultSet) { if (pageStartIndex < 0 && pagedResultsCookie.equals(entry.getName().getNameValue())) { pageStartIndex = index + 1; } if (pageStartIndex < 0 || index < pageStartIndex) { index++; continue; } if (handled >= pageSize) { break; } if (index >= pagedResultsOffset + pageStartIndex) { if (handler.handle(entry)) { handled++; currentPagedResultsCookie = entry.getName().getNameValue(); } else { break; } } index++; } if (index == resultSet.size()) { currentPagedResultsCookie = null; } if (handler instanceof SearchResultsHandler) { ((SearchResultsHandler) handler) .handleResult(new SearchResult(currentPagedResultsCookie, resultSet.size() - index)); } } else { // Normal Search for (ConnectorObject entry : resultSet) { if (!handler.handle(entry)) { break; } } if (handler instanceof SearchResultsHandler) { ((SearchResultsHandler) handler).handleResult(new SearchResult()); } } }