http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java new file mode 100644 index 0000000..e2b339a --- /dev/null +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java @@ -0,0 +1,126 @@ +/* + * 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.syncope.fit.core.reference; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import javax.ws.rs.core.Response; +import org.apache.syncope.client.lib.SyncopeClient; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.SyncopeConstants; +import org.apache.syncope.common.lib.mod.AnyObjectMod; +import org.apache.syncope.common.lib.to.ConnObjectTO; +import org.apache.syncope.common.lib.to.AnyObjectTO; +import org.apache.syncope.common.lib.to.PagedResult; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.JVM) +public class AnyObjectITCase extends AbstractITCase { + + public static AnyObjectTO getSampleTO(final String location) { + AnyObjectTO anyObjectTO = new AnyObjectTO(); + anyObjectTO.setRealm(SyncopeConstants.ROOT_REALM); + anyObjectTO.setType("PRINTER"); + anyObjectTO.getPlainAttrs().add(attrTO("location", location + getUUIDString())); + + anyObjectTO.getResources().add(RESOURCE_NAME_DBSCRIPTED); + return anyObjectTO; + } + + @Test + public void create() { + AnyObjectTO anyObjectTO = getSampleTO("create"); + + anyObjectTO = createAnyObject(anyObjectTO); + assertNotNull(anyObjectTO); + + ConnObjectTO connObjectTO = + resourceService.readConnObject(RESOURCE_NAME_DBSCRIPTED, anyObjectTO.getType(), anyObjectTO.getKey()); + assertNotNull(connObjectTO); + assertNotNull(connObjectTO.getPlainAttrMap().get("location")); + assertEquals(anyObjectTO.getPlainAttrMap().get("location"), connObjectTO.getPlainAttrMap().get("location")); + } + + @Test + public void delete() { + try { + anyObjectService.delete(0L); + } catch (SyncopeClientException e) { + assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus()); + } + + AnyObjectTO anyObjectTO = getSampleTO("deletable"); + anyObjectTO.setRealm("/even"); + + anyObjectTO = createAnyObject(anyObjectTO); + assertNotNull(anyObjectTO); + + AnyObjectTO deletedAnyObject = deleteAnyObject(anyObjectTO.getKey()); + assertNotNull(deletedAnyObject); + + try { + anyObjectService.read(deletedAnyObject.getKey()); + } catch (SyncopeClientException e) { + assertEquals(Response.Status.NOT_FOUND, e.getType().getResponseStatus()); + } + } + + @Test + public void list() { + PagedResult<AnyObjectTO> anyObjectTOs = anyObjectService.list("PRINTER", SyncopeClient.getAnyListQueryBuilder(). + realm(SyncopeConstants.ROOT_REALM).build()); + assertNotNull(anyObjectTOs); + assertTrue(anyObjectTOs.getResult().size() >= 2); + for (AnyObjectTO anyObjectTO : anyObjectTOs.getResult()) { + assertNotNull(anyObjectTO); + } + } + + @Test + public void read() { + AnyObjectTO anyObjectTO = anyObjectService.read(1L); + + assertNotNull(anyObjectTO); + assertNotNull(anyObjectTO.getPlainAttrs()); + assertFalse(anyObjectTO.getPlainAttrs().isEmpty()); + } + + @Test + public void update() { + AnyObjectTO anyObjectTO = getSampleTO("update"); + anyObjectTO = createAnyObject(anyObjectTO); + + assertEquals(1, anyObjectTO.getPlainAttrs().size()); + + AnyObjectMod anyObjectMod = new AnyObjectMod(); + anyObjectMod.setKey(anyObjectTO.getKey()); + String newLocation = "new" + getUUIDString(); + anyObjectMod.getPlainAttrsToUpdate().add(attrMod("location", newLocation)); + + anyObjectTO = updateAnyObject(anyObjectMod); + + assertEquals(newLocation, anyObjectTO.getPlainAttrMap().get("location").getValues().get(0)); + } + +}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java new file mode 100644 index 0000000..4dbb796 --- /dev/null +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java @@ -0,0 +1,117 @@ +/* + * 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.syncope.fit.core.reference; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.List; +import javax.ws.rs.core.Response; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.AnyTypeClassTO; +import org.apache.syncope.common.lib.to.PlainSchemaTO; +import org.apache.syncope.common.lib.types.AttrSchemaType; +import org.apache.syncope.common.lib.types.ClientExceptionType; +import org.apache.syncope.common.lib.types.SchemaType; +import org.apache.syncope.common.rest.api.service.AnyTypeClassService; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.JVM) +public class AnyTypeClassITCase extends AbstractITCase { + + @Test + public void read() { + AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group"); + assertNotNull(minimalGroup); + + assertFalse(minimalGroup.getPlainSchemas().isEmpty()); + assertFalse(minimalGroup.getDerSchemas().isEmpty()); + assertFalse(minimalGroup.getVirSchemas().isEmpty()); + } + + @Test + public void list() { + List<AnyTypeClassTO> list = anyTypeClassService.list(); + assertFalse(list.isEmpty()); + } + + @Test + public void crud() { + AnyTypeClassTO newClass = new AnyTypeClassTO(); + newClass.setKey("new class" + getUUIDString()); + newClass.getPlainSchemas().add("firstname"); + + Response response = anyTypeClassService.create(newClass); + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode()); + + newClass = getObject(response.getLocation(), AnyTypeClassService.class, AnyTypeClassTO.class); + assertNotNull(newClass); + assertFalse(newClass.getPlainSchemas().isEmpty()); + assertTrue(newClass.getDerSchemas().isEmpty()); + assertTrue(newClass.getVirSchemas().isEmpty()); + + newClass.getDerSchemas().add("cn"); + anyTypeClassService.update(newClass.getKey(), newClass); + + newClass = anyTypeClassService.read(newClass.getKey()); + assertNotNull(newClass); + assertFalse(newClass.getPlainSchemas().isEmpty()); + assertFalse(newClass.getDerSchemas().isEmpty()); + assertTrue(newClass.getVirSchemas().isEmpty()); + + anyTypeClassService.delete(newClass.getKey()); + + try { + anyTypeClassService.read(newClass.getKey()); + fail(); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.NotFound, e.getType()); + } + } + + @Test + public void deleteSchema() { + PlainSchemaTO newSchema = new PlainSchemaTO(); + newSchema.setKey("newSchema" + getUUIDString()); + newSchema.setType(AttrSchemaType.Date); + createSchema(SchemaType.PLAIN, newSchema); + + AnyTypeClassTO newClass = new AnyTypeClassTO(); + newClass.setKey("new class" + getUUIDString()); + newClass.getPlainSchemas().add(newSchema.getKey()); + + Response response = anyTypeClassService.create(newClass); + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode()); + + newClass = getObject(response.getLocation(), AnyTypeClassService.class, AnyTypeClassTO.class); + assertNotNull(newClass); + assertTrue(newClass.getPlainSchemas().contains(newSchema.getKey())); + + schemaService.delete(SchemaType.PLAIN, newSchema.getKey()); + + newClass = anyTypeClassService.read(newClass.getKey()); + assertNotNull(newClass); + assertFalse(newClass.getPlainSchemas().contains(newSchema.getKey())); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java new file mode 100644 index 0000000..01da6f8 --- /dev/null +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java @@ -0,0 +1,169 @@ +/* + * 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.syncope.fit.core.reference; + +import static org.apache.syncope.fit.core.reference.AbstractITCase.getUUIDString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.List; +import javax.ws.rs.core.Response; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.AnyTypeClassTO; +import org.apache.syncope.common.lib.to.AnyTypeTO; +import org.apache.syncope.common.lib.types.AnyTypeKind; +import org.apache.syncope.common.lib.types.ClientExceptionType; +import org.apache.syncope.common.rest.api.service.AnyTypeClassService; +import org.apache.syncope.common.rest.api.service.AnyTypeService; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.JVM) +public class AnyTypeITCase extends AbstractITCase { + + @Test + public void read() { + AnyTypeTO userType = anyTypeService.read(AnyTypeKind.USER.name()); + assertNotNull(userType); + assertEquals(AnyTypeKind.USER, userType.getKind()); + assertEquals(AnyTypeKind.USER.name(), userType.getKey()); + assertFalse(userType.getClasses().isEmpty()); + + AnyTypeTO groupType = anyTypeService.read(AnyTypeKind.GROUP.name()); + assertNotNull(groupType); + assertEquals(AnyTypeKind.GROUP, groupType.getKind()); + assertEquals(AnyTypeKind.GROUP.name(), groupType.getKey()); + assertFalse(groupType.getClasses().isEmpty()); + + AnyTypeTO otherType = anyTypeService.read("PRINTER"); + assertNotNull(otherType); + assertEquals(AnyTypeKind.ANY_OBJECT, otherType.getKind()); + assertEquals("PRINTER", otherType.getKey()); + } + + @Test + public void list() { + List<AnyTypeTO> list = anyTypeService.list(); + assertFalse(list.isEmpty()); + } + + @Test + public void crud() { + AnyTypeTO newType = new AnyTypeTO(); + newType.setKey("new type"); + newType.setKind(AnyTypeKind.ANY_OBJECT); + newType.getClasses().add("generic membership"); + newType.getClasses().add("csv"); + + Response response = anyTypeService.create(newType); + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode()); + + newType = getObject(response.getLocation(), AnyTypeService.class, AnyTypeTO.class); + assertNotNull(newType); + assertEquals(2, newType.getClasses().size()); + assertTrue(newType.getClasses().contains("generic membership")); + assertTrue(newType.getClasses().contains("csv")); + + newType.getClasses().remove("generic membership"); + anyTypeService.update(newType.getKey(), newType); + + newType = anyTypeService.read(newType.getKey()); + assertNotNull(newType); + assertEquals(1, newType.getClasses().size()); + assertTrue(newType.getClasses().contains("csv")); + + anyTypeService.delete(newType.getKey()); + + try { + anyTypeService.read(newType.getKey()); + fail(); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.NotFound, e.getType()); + } + } + + @Test + public void createInvalidKind() { + AnyTypeTO newType = new AnyTypeTO(); + newType.setKey("new type"); + newType.setKind(AnyTypeKind.USER); + try { + anyTypeService.create(newType); + fail(); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.InvalidAnyType, e.getType()); + } + } + + @Test + public void createInvalidName() { + AnyTypeTO newType = new AnyTypeTO(); + newType.setKey("group"); + newType.setKind(AnyTypeKind.ANY_OBJECT); + try { + anyTypeService.create(newType); + fail(); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.InvalidAnyType, e.getType()); + } + } + + @Test + public void deleteInvalid() { + try { + anyTypeService.delete(AnyTypeKind.USER.name()); + fail(); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.InvalidAnyType, e.getType()); + } + } + + @Test + public void deleteTypeClass() { + AnyTypeClassTO newClass = new AnyTypeClassTO(); + newClass.setKey("new class" + getUUIDString()); + newClass.getDerSchemas().add("cn"); + + Response response = anyTypeClassService.create(newClass); + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode()); + + newClass = getObject(response.getLocation(), AnyTypeClassService.class, AnyTypeClassTO.class); + assertNotNull(newClass); + + AnyTypeTO other = anyTypeService.read("PRINTER"); + assertNotNull(other); + + other.getClasses().add(newClass.getKey()); + anyTypeService.update(other.getKey(), other); + + other = anyTypeService.read(other.getKey()); + assertNotNull(other); + assertTrue(other.getClasses().contains(newClass.getKey())); + + anyTypeClassService.delete(newClass.getKey()); + + other = anyTypeService.read(other.getKey()); + assertNotNull(other); + assertFalse(other.getClasses().contains(newClass.getKey())); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java index 1136f02..2616d4a 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConnectorITCase.java @@ -40,7 +40,6 @@ import org.apache.commons.io.IOUtils; import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.to.BulkAction; import org.apache.syncope.common.lib.to.ConnBundleTO; -import org.apache.syncope.common.lib.to.ConnIdObjectClassTO; import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.to.ConnPoolConfTO; import org.apache.syncope.common.lib.to.MappingItemTO; @@ -53,6 +52,7 @@ import org.apache.syncope.common.lib.types.ConnConfPropSchema; import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.common.lib.types.ConnectorCapability; import org.apache.syncope.common.lib.types.IntMappingType; +import org.apache.syncope.common.lib.wrap.ConnIdObjectClass; import org.apache.syncope.common.rest.api.service.ConnectorService; import org.apache.syncope.common.rest.api.service.ResourceService; import org.identityconnectors.common.security.GuardedString; @@ -88,7 +88,7 @@ public class ConnectorITCase extends AbstractITCase { } connidSoapVersion = props.getProperty("connid.soap.version"); - connidDbTableVersion = props.getProperty("connid.db.table.version"); + connidDbTableVersion = props.getProperty("connid.database.version"); testJDBCURL = props.getProperty("testdb.url"); } catch (Exception e) { @@ -557,11 +557,13 @@ public class ConnectorITCase extends AbstractITCase { ConnInstanceTO ldap = connectorService.read(105L); assertNotNull(ldap); - List<ConnIdObjectClassTO> objectClasses = connectorService.getSupportedObjectClasses(ldap.getKey(), ldap); + List<ConnIdObjectClass> objectClasses = connectorService.getSupportedObjectClasses(ldap.getKey(), ldap); assertNotNull(objectClasses); assertEquals(2, objectClasses.size()); - assertTrue(objectClasses.contains(ConnIdObjectClassTO.ACCOUNT)); - assertTrue(objectClasses.contains(ConnIdObjectClassTO.GROUP)); + assertTrue(objectClasses.contains( + ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.ACCOUNT_NAME))); + assertTrue(objectClasses.contains( + ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.GROUP_NAME))); ConnInstanceTO csv = connectorService.read(104L); assertNotNull(csv); @@ -569,7 +571,8 @@ public class ConnectorITCase extends AbstractITCase { objectClasses = connectorService.getSupportedObjectClasses(csv.getKey(), csv); assertNotNull(objectClasses); assertEquals(1, objectClasses.size()); - assertTrue(objectClasses.contains(ConnIdObjectClassTO.ACCOUNT)); + assertTrue(objectClasses.contains( + ConnIdObjectClass.getInstance(ConnIdObjectClass.class, ObjectClass.ACCOUNT_NAME))); } @Test http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java index 017f802..f16ee21 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java @@ -44,6 +44,7 @@ import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.mod.ReferenceMod; import org.apache.syncope.common.lib.mod.GroupMod; +import org.apache.syncope.common.lib.mod.ResourceAssociationMod; import org.apache.syncope.common.lib.to.AnyTypeClassTO; import org.apache.syncope.common.lib.to.AnyTypeTO; import org.apache.syncope.common.lib.to.BulkActionResult; @@ -68,7 +69,6 @@ import org.apache.syncope.common.rest.api.Preference; import org.apache.syncope.common.rest.api.RESTHeaders; import org.apache.syncope.common.rest.api.service.GroupService; import org.junit.FixMethodOrder; -import org.junit.Ignore; import org.junit.Test; import org.junit.runners.MethodSorters; @@ -92,7 +92,6 @@ public class GroupITCase extends AbstractITCase { } @Test - @Ignore public void create() { GroupTO groupTO = getSampleTO("lastGroup"); groupTO.getVirAttrs().add(attrTO("rvirtualdata", "rvirtualvalue")); @@ -351,9 +350,9 @@ public class GroupITCase extends AbstractITCase { assertNotNull(e); } - assertNotNull(groupService.bulkAssociation(actual.getKey(), - ResourceAssociationActionType.LINK, - CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)). + ResourceAssociationMod associationMod = new ResourceAssociationMod(); + associationMod.getTargetResources().addAll(CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)); + assertNotNull(groupService.bulkAssociation(actual.getKey(), ResourceAssociationActionType.LINK, associationMod). readEntity(BulkActionResult.class)); actual = groupService.read(actual.getKey()); @@ -406,9 +405,10 @@ public class GroupITCase extends AbstractITCase { assertNotNull(e); } + ResourceAssociationMod associationMod = new ResourceAssociationMod(); + associationMod.getTargetResources().addAll(CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)); assertNotNull(groupService.bulkAssociation(actual.getKey(), - ResourceAssociationActionType.ASSIGN, - CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)). + ResourceAssociationActionType.ASSIGN, associationMod). readEntity(BulkActionResult.class)); actual = groupService.read(actual.getKey()); @@ -456,9 +456,10 @@ public class GroupITCase extends AbstractITCase { assertNotNull(e); } + ResourceAssociationMod associationMod = new ResourceAssociationMod(); + associationMod.getTargetResources().addAll(CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)); assertNotNull(groupService.bulkAssociation(actual.getKey(), - ResourceAssociationActionType.PROVISION, - CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)). + ResourceAssociationActionType.PROVISION, associationMod). readEntity(BulkActionResult.class)); actual = groupService.read(actual.getKey()); @@ -482,9 +483,10 @@ public class GroupITCase extends AbstractITCase { assertNotNull(e); } + ResourceAssociationMod associationMod = new ResourceAssociationMod(); + associationMod.getTargetResources().addAll(CollectionWrapper.wrap(RESOURCE_NAME_LDAP, ResourceKey.class)); assertNotNull(groupService.bulkAssociation(actual.getKey(), - ResourceAssociationActionType.PROVISION, - CollectionWrapper.wrap("resource-ldap", ResourceKey.class)). + ResourceAssociationActionType.PROVISION, associationMod). readEntity(BulkActionResult.class)); actual = groupService.read(actual.getKey()); http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SearchITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SearchITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SearchITCase.java index 3f1eb0a..6011c93 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SearchITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SearchITCase.java @@ -29,6 +29,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.syncope.client.lib.SyncopeClient; import org.apache.syncope.common.lib.SyncopeConstants; +import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.to.PagedResult; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.RoleTO; @@ -44,25 +45,25 @@ public class SearchITCase extends AbstractITCase { @Test public void searchUser() { // LIKE - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder(). is("fullname").equalTo("*o*").and("fullname").equalTo("*i*").query()).build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - for (UserTO user : matchedUsers.getResult()) { + for (UserTO user : matchingUsers.getResult()) { assertNotNull(user); } // ISNULL - matchedUsers = userService.search( + matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().isNull("loginDate").query()).build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - Collection<UserTO> found = CollectionUtils.select(matchedUsers.getResult(), new Predicate<UserTO>() { + Collection<UserTO> found = CollectionUtils.select(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -98,14 +99,14 @@ public class SearchITCase extends AbstractITCase { @Test public void searchByGroup() { - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().inGroups(1L).query()). build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - assertTrue(CollectionUtils.exists(matchedUsers.getResult(), new Predicate<UserTO>() { + assertTrue(CollectionUtils.exists(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -121,14 +122,14 @@ public class SearchITCase extends AbstractITCase { group = createGroup(group); assertNotNull(group); - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().inGroups(group.getKey()).query()). build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - assertTrue(CollectionUtils.exists(matchedUsers.getResult(), new Predicate<UserTO>() { + assertTrue(CollectionUtils.exists(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -139,14 +140,14 @@ public class SearchITCase extends AbstractITCase { @Test public void searchByRole() { - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().inRoles(3L).query()). build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - assertTrue(CollectionUtils.exists(matchedUsers.getResult(), new Predicate<UserTO>() { + assertTrue(CollectionUtils.exists(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -163,14 +164,14 @@ public class SearchITCase extends AbstractITCase { role = getObject(response.getLocation(), RoleService.class, RoleTO.class); assertNotNull(role); - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().inRoles(role.getKey()).query()). build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - assertTrue(CollectionUtils.exists(matchedUsers.getResult(), new Predicate<UserTO>() { + assertTrue(CollectionUtils.exists(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -181,14 +182,14 @@ public class SearchITCase extends AbstractITCase { @Test public void searchUserByResourceName() { - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().hasResources(RESOURCE_NAME_MAPPINGS2).query()). build()); - assertNotNull(matchedUsers); - assertFalse(matchedUsers.getResult().isEmpty()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); - assertTrue(CollectionUtils.exists(matchedUsers.getResult(), new Predicate<UserTO>() { + assertTrue(CollectionUtils.exists(matchingUsers.getResult(), new Predicate<UserTO>() { @Override public boolean evaluate(final UserTO user) { @@ -242,27 +243,47 @@ public class SearchITCase extends AbstractITCase { @Test public void nested() { - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql("((fullname==*o*,fullname==*i*);$resources!=ws-target-resource-1)").page(1).size(2).build()); - assertNotNull(matchedUsers); + assertNotNull(matchingUsers); - assertFalse(matchedUsers.getResult().isEmpty()); - for (UserTO user : matchedUsers.getResult()) { + assertFalse(matchingUsers.getResult().isEmpty()); + for (UserTO user : matchingUsers.getResult()) { assertNotNull(user); } } @Test + public void searchByType() { + PagedResult<AnyObjectTO> matching = anyObjectService.search( + SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). + fiql(SyncopeClient.getAnyObjectSearchConditionBuilder().type("PRINTER").query()).build()); + assertNotNull(matching); + + assertFalse(matching.getResult().isEmpty()); + for (AnyObjectTO printer : matching.getResult()) { + assertNotNull(printer); + } + + matching = anyObjectService.search( + SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). + fiql(SyncopeClient.getAnyObjectSearchConditionBuilder().type("UNEXISTING").query()).build()); + assertNotNull(matching); + + assertTrue(matching.getResult().isEmpty()); + } + + @Test public void orderBy() { - PagedResult<UserTO> matchedUsers = userService.search( + PagedResult<UserTO> matchingUsers = userService.search( SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder().is("userId").equalTo("*@apache.org").query()). orderBy(SyncopeClient.getOrderByClauseBuilder().asc("status").desc("firstname").build()).build()); - assertNotNull(matchedUsers); + assertNotNull(matchingUsers); - assertFalse(matchedUsers.getResult().isEmpty()); - for (UserTO user : matchedUsers.getResult()) { + assertFalse(matchingUsers.getResult().isEmpty()); + for (UserTO user : matchingUsers.getResult()) { assertNotNull(user); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java index ee02b26..939919f 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/SyncTaskITCase.java @@ -37,6 +37,7 @@ import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.mod.StatusMod; import org.apache.syncope.common.lib.mod.UserMod; import org.apache.syncope.common.lib.to.AbstractTaskTO; +import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.to.AttrTO; import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.to.ConnObjectTO; @@ -44,6 +45,7 @@ import org.apache.syncope.common.lib.to.MembershipTO; import org.apache.syncope.common.lib.to.PagedResult; import org.apache.syncope.common.lib.to.ResourceTO; import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.ProvisionTO; import org.apache.syncope.common.lib.to.SyncPolicyTO; import org.apache.syncope.common.lib.to.SyncTaskTO; import org.apache.syncope.common.lib.to.TaskExecTO; @@ -353,6 +355,49 @@ public class SyncTaskITCase extends AbstractTaskITCase { } @Test + public void reconcileFromScriptedSQL() { + // 0. reset sync token + ResourceTO resource = resourceService.read(RESOURCE_NAME_DBSCRIPTED); + ProvisionTO provision = resource.getProvision("PRINTER"); + assertNotNull(provision); + + provision.setSyncToken(null); + resourceService.update(resource.getKey(), resource); + + // 1. create printer on external resource + AnyObjectTO anyObjectTO = AnyObjectITCase.getSampleTO("sync"); + anyObjectTO = createAnyObject(anyObjectTO); + assertNotNull(anyObjectTO); + + // 2. unlink any existing printer and delete from Syncope (printer is now only on external resource) + PagedResult<AnyObjectTO> matchingPrinters = anyObjectService.search( + SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). + fiql(SyncopeClient.getAnyObjectSearchConditionBuilder().type("PRINTER").and(). + is("location").equalTo("sync*").query()).build()); + assertTrue(matchingPrinters.getSize() > 0); + for (AnyObjectTO printer : matchingPrinters.getResult()) { + anyObjectService.bulkDeassociation(printer.getKey(), + ResourceDeassociationActionType.UNLINK, + CollectionWrapper.wrap(RESOURCE_NAME_DBSCRIPTED, ResourceKey.class)); + anyObjectService.delete(printer.getKey()); + } + + // 3. synchronize + execProvisioningTask(28L, 50, false); + + // 4. verify that printer was re-created in Syncope + matchingPrinters = anyObjectService.search( + SyncopeClient.getAnySearchQueryBuilder().realm(SyncopeConstants.ROOT_REALM). + fiql(SyncopeClient.getAnyObjectSearchConditionBuilder().type("PRINTER").and(). + is("location").equalTo("sync*").query()).build()); + assertTrue(matchingPrinters.getSize() > 0); + + // 5. verify that synctoken was updated + assertNotNull( + resourceService.read(RESOURCE_NAME_DBSCRIPTED).getProvision(anyObjectTO.getType()).getSyncToken()); + } + + @Test public void issueSYNCOPE68() { //----------------------------- // Create a new user ... it should be updated applying sync policy http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java index c0ab43d..bd6b4aa 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/UserITCase.java @@ -1909,8 +1909,8 @@ public class UserITCase extends AbstractITCase { try { resourceService.readConnObject(RESOURCE_NAME_CSV, AnyTypeKind.USER.name(), actual.getKey()); fail(); - } catch (Exception e) { - assertNotNull(e); + } catch (SyncopeClientException e) { + assertEquals(ClientExceptionType.NotFound, e.getType()); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 9011e8d..f8506d6 100644 --- a/pom.xml +++ b/pom.xml @@ -321,12 +321,12 @@ under the License. <connid.version>1.4.1.0</connid.version> <connid.soap.version>1.3.0</connid.soap.version> - <connid.db.table.version>2.2.2</connid.db.table.version> + <connid.database.version>2.2.2</connid.database.version> <connid.csvdir.version>0.8.2</connid.csvdir.version> <connid.ldap.version>1.4.0</connid.ldap.version> <connid.ad.version>1.2.3</connid.ad.version> - <cxf.version>3.1.0</cxf.version> + <cxf.version>3.1.2-SNAPSHOT</cxf.version> <camel.version>2.15.2</camel.version> @@ -1126,8 +1126,13 @@ under the License. <dependency> <groupId>net.tirasa.connid.bundles.db</groupId> <artifactId>net.tirasa.connid.bundles.db.table</artifactId> - <version>${connid.db.table.version}</version> + <version>${connid.database.version}</version> </dependency> + <dependency> + <groupId>net.tirasa.connid.bundles.db</groupId> + <artifactId>net.tirasa.connid.bundles.db.scriptedsql</artifactId> + <version>${connid.database.version}</version> + </dependency> <artifactItem> <groupId>net.tirasa.connid.bundles</groupId> <artifactId>net.tirasa.connid.bundles.ldap</artifactId>
