Return-Path: X-Original-To: apmail-syncope-commits-archive@www.apache.org Delivered-To: apmail-syncope-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1AAC5EE29 for ; Wed, 2 Jan 2013 15:38:03 +0000 (UTC) Received: (qmail 26293 invoked by uid 500); 2 Jan 2013 15:38:02 -0000 Delivered-To: apmail-syncope-commits-archive@syncope.apache.org Received: (qmail 26263 invoked by uid 500); 2 Jan 2013 15:38:02 -0000 Mailing-List: contact commits-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list commits@syncope.apache.org Received: (qmail 26245 invoked by uid 99); 2 Jan 2013 15:38:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Jan 2013 15:38:02 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Jan 2013 15:38:00 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8920423888CD; Wed, 2 Jan 2013 15:37:38 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1427826 - in /syncope/trunk: client/src/main/java/org/apache/syncope/client/mod/ client/src/main/java/org/apache/syncope/services/ core/src/test/java/org/apache/syncope/core/rest/ Date: Wed, 02 Jan 2013 15:37:38 -0000 To: commits@syncope.apache.org From: jbernhardt@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130102153738.8920423888CD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jbernhardt Date: Wed Jan 2 15:37:37 2013 New Revision: 1427826 URL: http://svn.apache.org/viewvc?rev=1427826&view=rev Log: [SYNCOPE-259] Introduces RoleService Interface and RoleServiceProxy which is used for Integration-Tests Added: syncope/trunk/client/src/main/java/org/apache/syncope/client/mod/StatusMod.java syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleService.java syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleServiceProxy.java Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/RoleTestITCase.java syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java Added: syncope/trunk/client/src/main/java/org/apache/syncope/client/mod/StatusMod.java URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/client/mod/StatusMod.java?rev=1427826&view=auto ============================================================================== --- syncope/trunk/client/src/main/java/org/apache/syncope/client/mod/StatusMod.java (added) +++ syncope/trunk/client/src/main/java/org/apache/syncope/client/mod/StatusMod.java Wed Jan 2 15:37:37 2013 @@ -0,0 +1,121 @@ +/* + * 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.client.mod; + +import java.util.HashSet; +import java.util.Set; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +import org.apache.syncope.client.AbstractBaseBean; + +@XmlType +@XmlRootElement +public class StatusMod extends AbstractBaseBean { + + public enum Status { + ACTIVATE, REACTIVATE, SUSPEND; + } + + public StatusMod(long id, Status status) { + this.id = id; + this.status = status; + } + + public StatusMod() { + } + + private Status status; + + private String token; + + private static final long serialVersionUID = 1338094801957616986L; + + private long id; + + private boolean updateInternal = true; + + private boolean updateRemote = true; + + private final Set excludeResources = new HashSet(); + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public boolean isUpdateInternal() { + return updateInternal; + } + + public void setUpdateInternal(boolean updateInternal) { + this.updateInternal = updateInternal; + } + + public boolean isUpdateRemote() { + return updateRemote; + } + + public void setUpdateRemote(boolean updateRemote) { + this.updateRemote = updateRemote; + } + + @XmlElementWrapper(name = "excludeResources") + @XmlElement(name = "resource") + public Set getExcludeResources() { + return excludeResources; + } + + /** + * @return the status + */ + public Status getStatus() { + return status; + } + + /** + * @param status + * the status to set + */ + public void setStatus(Status status) { + this.status = status; + } + + /** + * @return the token + */ + public String getToken() { + return token; + } + + /** + * @param token + * the token to set + */ + public void setToken(String token) { + this.token = token; + } + +} Added: syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleService.java URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleService.java?rev=1427826&view=auto ============================================================================== --- syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleService.java (added) +++ syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleService.java Wed Jan 2 15:37:37 2013 @@ -0,0 +1,93 @@ +/* + * 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.services; + +import java.util.List; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + +import org.apache.syncope.client.mod.RoleMod; +import org.apache.syncope.client.search.NodeCond; +import org.apache.syncope.client.to.RoleTO; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Path("/role") +@RequestMapping("/role") +public interface RoleService { + + @GET + @Path("/{roleId}/children") + @RequestMapping(method = RequestMethod.GET, value = "/children/{roleId}") + List children(@PathParam("roleId") @PathVariable("roleId") final Long roleId); + + @POST + @Path("/") + @RequestMapping(method = RequestMethod.POST, value = "/create") + RoleTO create(@RequestBody final RoleTO roleTO); + + @DELETE + @Path("/{roleId}") + @RequestMapping(method = RequestMethod.GET, value = "/delete/{roleId}") + RoleTO delete(@PathParam("roleId") @PathVariable("roleId") final Long roleId); + + @GET + @RequestMapping(method = RequestMethod.GET, value = "/list") + List list(); + + @GET + @Path("/{roleId}/parent") + @RequestMapping(method = RequestMethod.GET, value = "/parent/{roleId}") + RoleTO parent(@PathParam("roleId") @PathVariable("roleId") final Long roleId); + + @GET + @Path("/{roleId}") + @RequestMapping(method = RequestMethod.GET, value = "/read/{roleId}") + RoleTO read(@PathParam("roleId") @PathVariable("roleId") final Long roleId); + + + @RequestMapping(method = RequestMethod.POST, value = "/search") + List search(@RequestBody final NodeCond searchCondition); + + @RequestMapping(method = RequestMethod.POST, value = "/search/{page}/{size}") + List search(@RequestBody final NodeCond searchCondition, + @PathVariable("page") final int page, + @PathVariable("size") final int size); + + @RequestMapping(method = RequestMethod.POST, value = "/search/count") + int searchCount(@RequestBody final NodeCond searchCondition); + + /** + * @deprecated Authentication checks should not depend on the method called + */ + @Deprecated + @RequestMapping(method = RequestMethod.GET, value = "/selfRead/{roleId}") + RoleTO selfRead(@PathVariable("roleId") final Long roleId); + + @POST + @Path("/{roleId}") + @RequestMapping(method = RequestMethod.POST, value = "/update") + RoleTO update(@PathParam("roleId") final Long roleId, @RequestBody final RoleMod roleMod); +} \ No newline at end of file Added: syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleServiceProxy.java URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleServiceProxy.java?rev=1427826&view=auto ============================================================================== --- syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleServiceProxy.java (added) +++ syncope/trunk/client/src/main/java/org/apache/syncope/services/RoleServiceProxy.java Wed Jan 2 15:37:37 2013 @@ -0,0 +1,105 @@ +/* + * 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.services; + +import java.util.Arrays; +import java.util.List; + +import org.apache.syncope.client.mod.RoleMod; +import org.apache.syncope.client.search.NodeCond; +import org.apache.syncope.client.to.RoleTO; +import org.springframework.web.client.RestTemplate; + +public class RoleServiceProxy implements RoleService { + + RestTemplate restTemplate; + private String baseUrl; + + public RoleServiceProxy(String baseUrl, RestTemplate restTemplate) { + this.baseUrl = baseUrl; + this.restTemplate = restTemplate; + } + + @Override + public List children(Long roleId) { + return Arrays.asList(restTemplate.getForObject(baseUrl + + "role/children/{roleId}.json", RoleTO[].class, roleId)); + } + + @Override + public RoleTO create(RoleTO roleTO) { + return restTemplate.postForObject(baseUrl + "role/create", roleTO, + RoleTO.class); + } + + @Override + public RoleTO delete(Long roleId) { + return restTemplate.getForObject(baseUrl + "role/delete/{roleId}", + RoleTO.class, roleId); + } + + @Override + public List list() { + return Arrays.asList(restTemplate.getForObject(baseUrl + + "role/list.json", RoleTO[].class)); + } + + @Override + public RoleTO parent(Long roleId) { + return restTemplate.getForObject(baseUrl + "role/parent/{roleId}.json", + RoleTO.class, roleId); + } + + @Override + public RoleTO read(Long roleId) { + return restTemplate.getForObject(baseUrl + "role/read/{roleId}.json", + RoleTO.class, roleId); + } + + @Override + public List search(NodeCond searchCondition) { + return Arrays.asList(restTemplate.postForObject( + baseUrl + "role/search", searchCondition, RoleTO[].class)); + } + + @Override + public List search(NodeCond searchCondition, int page, int size) { + return Arrays.asList(restTemplate.postForObject( + baseUrl + "role/search/{page}/{size}", searchCondition, RoleTO[].class, page, size)); + } + + @Override + public int searchCount(NodeCond searchCondition) { + return restTemplate.postForObject(baseUrl + "role/search/count.json", + searchCondition, Integer.class); + } + + @Override + public RoleTO selfRead(Long roleId) { + return restTemplate.getForObject(baseUrl + "role/selfRead/{roleId}", + RoleTO.class, roleId); + } + + @Override + public RoleTO update(Long roleId, RoleMod roleMod) { + return restTemplate.postForObject(baseUrl + "role/update", roleMod, + RoleTO.class); + } + +} Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java?rev=1427826&r1=1427825&r2=1427826&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/AbstractTest.java Wed Jan 2 15:37:37 2013 @@ -19,11 +19,13 @@ package org.apache.syncope.core.rest; import javax.sql.DataSource; + import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.syncope.client.http.PreemptiveAuthHttpRequestFactory; import org.apache.syncope.client.mod.AttributeMod; import org.apache.syncope.client.to.AttributeTO; +import org.apache.syncope.services.RoleServiceProxy; import org.apache.syncope.services.UserService; import org.apache.syncope.services.UserServiceProxy; import org.junit.Before; @@ -36,57 +38,66 @@ import org.springframework.test.context. import org.springframework.web.client.RestTemplate; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = {"classpath:restClientContext.xml", "classpath:testJDBCContext.xml"}) +@ContextConfiguration(locations = { "classpath:restClientContext.xml", + "classpath:testJDBCContext.xml" }) public abstract class AbstractTest { - protected static AttributeTO attributeTO(final String schema, final String value) { - AttributeTO attr = new AttributeTO(); - attr.setSchema(schema); - attr.addValue(value); - return attr; - } - - protected static AttributeMod attributeMod(final String schema, final String valueToBeAdded) { - AttributeMod attr = new AttributeMod(); - attr.setSchema(schema); - attr.addValueToBeAdded(valueToBeAdded); - return attr; - } - - /** - * Logger. - */ - protected static final Logger LOG = LoggerFactory.getLogger(AbstractTest.class); + protected static AttributeTO attributeTO(final String schema, + final String value) { + AttributeTO attr = new AttributeTO(); + attr.setSchema(schema); + attr.addValue(value); + return attr; + } + + protected static AttributeMod attributeMod(final String schema, + final String valueToBeAdded) { + AttributeMod attr = new AttributeMod(); + attr.setSchema(schema); + attr.addValueToBeAdded(valueToBeAdded); + return attr; + } + + /** + * Logger. + */ + protected static final Logger LOG = LoggerFactory + .getLogger(AbstractTest.class); - protected static final String BASE_URL = "http://localhost:9080/syncope/rest/"; + protected static final String BASE_URL = "http://localhost:9080/syncope/rest/"; - public static final String ADMIN_UID = "admin"; + public static final String ADMIN_UID = "admin"; - public static final String ADMIN_PWD = "password"; + public static final String ADMIN_PWD = "password"; - @Autowired - protected RestTemplate restTemplate; + @Autowired + protected RestTemplate restTemplate; protected UserService userService; - - @Autowired - protected DataSource testDataSource; - - protected RestTemplate anonymousRestTemplate() { - return new RestTemplate(); - } - - public void setupRestTemplate(final String uid, final String pwd) { - PreemptiveAuthHttpRequestFactory requestFactory = - ((PreemptiveAuthHttpRequestFactory) restTemplate.getRequestFactory()); - - ((DefaultHttpClient) requestFactory.getHttpClient()).getCredentialsProvider().setCredentials( - requestFactory.getAuthScope(), new UsernamePasswordCredentials(uid, pwd)); - } - - @Before - public void resetRestTemplate() { - setupRestTemplate(ADMIN_UID, ADMIN_PWD); - userService = new UserServiceProxy(BASE_URL, restTemplate); - } + + protected RoleServiceProxy roleService; + + @Autowired + protected DataSource testDataSource; + + protected RestTemplate anonymousRestTemplate() { + return new RestTemplate(); + } + + public void setupRestTemplate(final String uid, final String pwd) { + PreemptiveAuthHttpRequestFactory requestFactory = ((PreemptiveAuthHttpRequestFactory) restTemplate + .getRequestFactory()); + + ((DefaultHttpClient) requestFactory.getHttpClient()) + .getCredentialsProvider().setCredentials( + requestFactory.getAuthScope(), + new UsernamePasswordCredentials(uid, pwd)); + } + + @Before + public void resetRestTemplate() { + setupRestTemplate(ADMIN_UID, ADMIN_PWD); + userService = new UserServiceProxy(BASE_URL, restTemplate); + roleService = new RoleServiceProxy(BASE_URL, restTemplate); + } } Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/RoleTestITCase.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/RoleTestITCase.java?rev=1427826&r1=1427825&r2=1427826&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/RoleTestITCase.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/RoleTestITCase.java Wed Jan 2 15:37:37 2013 @@ -18,11 +18,16 @@ */ package org.apache.syncope.core.rest; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; + import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.syncope.client.http.PreemptiveAuthHttpRequestFactory; @@ -42,358 +47,372 @@ import org.springframework.web.client.Ht @FixMethodOrder(MethodSorters.JVM) public class RoleTestITCase extends AbstractTest { - @Test - public void createWithException() { - RoleTO newRoleTO = new RoleTO(); - newRoleTO.addAttribute(attributeTO("attr1", "value1")); - - Throwable t = null; - try { - restTemplate.postForObject(BASE_URL + "role/create", newRoleTO, RoleTO.class); - fail(); - } catch (SyncopeClientCompositeErrorException sccee) { - t = sccee.getException(SyncopeClientExceptionType.InvalidSyncopeRole); - } - assertNotNull(t); - } - - @Test - public void create() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("lastRole"); - roleTO.setParent(8L); - - // verify inheritance password and account policies - roleTO.setInheritAccountPolicy(false); - // not inherited so setter execution shouldn't be ignored - roleTO.setAccountPolicy(6L); - - roleTO.setInheritPasswordPolicy(true); - // inherited so setter execution should be ignored - roleTO.setPasswordPolicy(2L); - - roleTO.addAttribute(attributeTO("icon", "anIcon")); - - roleTO.addDerivedAttribute(attributeTO("ownerDN", null)); - - roleTO.addVirtualAttribute(attributeTO("rvirtualdata", "rvirtualvalue")); - - roleTO.setRoleOwner(8L); - - roleTO.addResource("resource-ldap"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - assertNotNull(roleTO); - - assertNotNull(roleTO.getVirtualAttributeMap()); - assertNotNull(roleTO.getVirtualAttributeMap().get("rvirtualdata").getValues()); - assertFalse(roleTO.getVirtualAttributeMap().get("rvirtualdata").getValues().isEmpty()); - assertEquals("rvirtualvalue", roleTO.getVirtualAttributeMap().get("rvirtualdata").getValues().get(0)); - - assertNotNull(roleTO.getAccountPolicy()); - assertEquals(6L, (long) roleTO.getAccountPolicy()); - - assertNotNull(roleTO.getPasswordPolicy()); - assertEquals(4L, (long) roleTO.getPasswordPolicy()); - - assertTrue(roleTO.getResources().contains("resource-ldap")); - - ConnObjectTO connObjectTO = restTemplate.getForObject(BASE_URL - + "/resource/resource-ldap/read/ROLE/lastRole.json", ConnObjectTO.class); - assertNotNull(connObjectTO); - assertNotNull(connObjectTO.getAttributeMap().get("owner")); - } - - @Test - public void createWithPasswordPolicy() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("roleWithPassword"); - roleTO.setParent(8L); - roleTO.setPasswordPolicy(4L); - - RoleTO actual = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - assertNotNull(actual); - - actual = restTemplate.getForObject(BASE_URL + "role/read/{roleId}.json", RoleTO.class, actual.getId()); - assertNotNull(actual); - assertNotNull(actual.getPasswordPolicy()); - assertEquals(4L, (long) actual.getPasswordPolicy()); - } - - @Test - public void delete() { - try { - restTemplate.getForObject(BASE_URL + "role/delete/{roleId}", RoleTO.class, 0); - } catch (HttpStatusCodeException e) { - assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode()); - } - - RoleTO roleTO = new RoleTO(); - roleTO.setName("toBeDeleted"); - roleTO.setParent(8L); - - roleTO.addResource("resource-ldap"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - assertNotNull(roleTO); - - RoleTO deletedRole = restTemplate.getForObject(BASE_URL + "role/delete/{roleId}", RoleTO.class, roleTO.getId()); - assertNotNull(deletedRole); - - try { - restTemplate.getForObject(BASE_URL + "role/read/{roleId}.json", RoleTO.class, deletedRole.getId()); - } catch (HttpStatusCodeException e) { - assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode()); - } - } - - @Test - public void list() { - List roleTOs = Arrays.asList(restTemplate.getForObject(BASE_URL + "role/list.json", RoleTO[].class)); - assertNotNull(roleTOs); - assertTrue(roleTOs.size() >= 8); - for (RoleTO roleTO : roleTOs) { - assertNotNull(roleTO); - } - } - - @Test - public void parent() { - RoleTO roleTO = restTemplate.getForObject(BASE_URL + "role/parent/{roleId}.json", RoleTO.class, 7); - - assertNotNull(roleTO); - assertEquals(roleTO.getId(), 6L); - } - - @Test - public void read() { - RoleTO roleTO = restTemplate.getForObject(BASE_URL + "role/read/{roleId}.json", RoleTO.class, 1); - - assertNotNull(roleTO); - assertNotNull(roleTO.getAttributes()); - assertFalse(roleTO.getAttributes().isEmpty()); - } - - @Test - public void selfRead() { - UserTO userTO = restTemplate.getForObject(BASE_URL + "user/read/{userId}", UserTO.class, 1); - assertNotNull(userTO); - - assertTrue(userTO.getMembershipMap().containsKey(1L)); - assertFalse(userTO.getMembershipMap().containsKey(3L)); - - PreemptiveAuthHttpRequestFactory requestFactory = - (PreemptiveAuthHttpRequestFactory) restTemplate.getRequestFactory(); - ((DefaultHttpClient) requestFactory.getHttpClient()).getCredentialsProvider().setCredentials( - requestFactory.getAuthScope(), new UsernamePasswordCredentials("user1", "password")); - - SyncopeClientException exception = null; - try { - restTemplate.getForObject(BASE_URL + "role/selfRead/{roleId}", RoleTO.class, 3); - fail(); - } catch (SyncopeClientCompositeErrorException e) { - exception = e.getException(SyncopeClientExceptionType.UnauthorizedRole); - } - assertNotNull(exception); - - RoleTO roleTO = restTemplate.getForObject(BASE_URL + "role/selfRead/{roleId}", RoleTO.class, 1); - assertNotNull(roleTO); - assertNotNull(roleTO.getAttributes()); - assertFalse(roleTO.getAttributes().isEmpty()); - - // restore admin authentication - super.resetRestTemplate(); - } - - @Test - public void update() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("latestRole"); - roleTO.setParent(8L); - - // verify inheritance password and account policies - roleTO.setInheritAccountPolicy(false); - // not inherited so setter execution shouldn't be ignored - roleTO.setAccountPolicy(6L); - - roleTO.setInheritPasswordPolicy(true); - // inherited so setter execution should be ignored - roleTO.setPasswordPolicy(2L); - - roleTO.addAttribute(attributeTO("icon", "anIcon")); - - roleTO.addResource("resource-ldap"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - - assertEquals(1, roleTO.getAttributes().size()); - - assertNotNull(roleTO.getAccountPolicy()); - assertEquals(Long.valueOf(6), roleTO.getAccountPolicy()); - - assertNotNull(roleTO.getPasswordPolicy()); - assertEquals(Long.valueOf(4), roleTO.getPasswordPolicy()); - - RoleMod roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.setName("finalRole"); - roleMod.addAttributeToBeUpdated(attributeMod("show", "FALSE")); - - // change password policy inheritance - roleMod.setInheritPasswordPolicy(Boolean.FALSE); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - - assertEquals("finalRole", roleTO.getName()); - assertEquals(2, roleTO.getAttributes().size()); - - // changes ignored because not requested (null ReferenceMod) - assertNotNull(roleTO.getAccountPolicy()); - assertEquals(6L, (long) roleTO.getAccountPolicy()); - - // password policy null because not inherited - assertNull(roleTO.getPasswordPolicy()); - } - - @Test - public void updateRemovingVirAttribute() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("withvirtual"); - roleTO.setParent(8L); - roleTO.addVirtualAttribute(attributeTO("rvirtualdata", null)); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - - assertNotNull(roleTO); - assertEquals(1, roleTO.getVirtualAttributes().size()); - - final RoleMod roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.addVirtualAttributeToBeRemoved("rvirtualdata"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - - assertNotNull(roleTO); - assertTrue(roleTO.getVirtualAttributes().isEmpty()); - } - - @Test - public void updateRemovingDerAttribute() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("withderived"); - roleTO.setParent(8L); - roleTO.addDerivedAttribute(attributeTO("rderivedschema", null)); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - - assertNotNull(roleTO); - assertEquals(1, roleTO.getDerivedAttributes().size()); - - final RoleMod roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.addDerivedAttributeToBeRemoved("rderivedschema"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - - assertNotNull(roleTO); - assertTrue(roleTO.getDerivedAttributes().isEmpty()); - } - - @Test - public void updateAsRoleOwner() { - // 1. read role as admin - RoleTO roleTO = restTemplate.getForObject(BASE_URL + "role/read/{roleId}.json", RoleTO.class, 7); - - // 2. prepare update - RoleMod roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.setName("Managing Director"); - - // 3. try to update as user3, not owner of role 7 - fail - PreemptiveAuthHttpRequestFactory requestFactory = - (PreemptiveAuthHttpRequestFactory) restTemplate.getRequestFactory(); - ((DefaultHttpClient) requestFactory.getHttpClient()).getCredentialsProvider().setCredentials( - requestFactory.getAuthScope(), new UsernamePasswordCredentials("user2", "password")); - - try { - restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - fail(); - } catch (HttpStatusCodeException e) { - assertEquals(HttpStatus.FORBIDDEN, e.getStatusCode()); - } - - // 4. update as user5, owner of role 7 because owner of role 6 with inheritance - success - ((DefaultHttpClient) requestFactory.getHttpClient()).getCredentialsProvider().setCredentials( - requestFactory.getAuthScope(), new UsernamePasswordCredentials("user5", "password")); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - assertEquals("Managing Director", roleTO.getName()); - - // restore admin authentication - super.resetRestTemplate(); - } - - /** - * Role rename used to fail in case of parent null. - * - * http://code.google.com/p/syncope/issues/detail?id=178 - */ - @Test - public void issue178() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("torename"); - - RoleTO actual = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - - assertNotNull(actual); - assertEquals("torename", actual.getName()); - assertEquals(0L, actual.getParent()); - - RoleMod roleMod = new RoleMod(); - roleMod.setId(actual.getId()); - roleMod.setName("renamed"); - - actual = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - - assertNotNull(actual); - assertEquals("renamed", actual.getName()); - assertEquals(0L, actual.getParent()); - } - - @Test - public void issueSYNCOPE228() { - RoleTO roleTO = new RoleTO(); - roleTO.setName("issueSYNCOPE228"); - roleTO.setParent(8L); - roleTO.setInheritAccountPolicy(false); - roleTO.setAccountPolicy(6L); - roleTO.setInheritPasswordPolicy(true); - roleTO.setPasswordPolicy(2L); - roleTO.addAttribute(attributeTO("icon", "anIcon")); - roleTO.addEntitlement("USER_READ"); - roleTO.addEntitlement("SCHEMA_READ"); - - roleTO = restTemplate.postForObject(BASE_URL + "role/create", roleTO, RoleTO.class); - assertNotNull(roleTO); - assertNotNull(roleTO.getEntitlements()); - assertFalse(roleTO.getEntitlements().isEmpty()); - - List entitlements = roleTO.getEntitlements(); - - RoleMod roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.setInheritDerivedAttributes(Boolean.TRUE); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - assertNotNull(roleTO); - assertEquals(entitlements, roleTO.getEntitlements()); - - roleMod = new RoleMod(); - roleMod.setId(roleTO.getId()); - roleMod.setEntitlements(new ArrayList()); - - roleTO = restTemplate.postForObject(BASE_URL + "role/update", roleMod, RoleTO.class); - assertNotNull(roleTO); - assertTrue(roleTO.getEntitlements().isEmpty()); - } + @Test + public void createWithException() { + RoleTO newRoleTO = new RoleTO(); + newRoleTO.addAttribute(attributeTO("attr1", "value1")); + + Throwable t = null; + try { + roleService.create(newRoleTO); + fail(); + } catch (SyncopeClientCompositeErrorException sccee) { + t = sccee + .getException(SyncopeClientExceptionType.InvalidSyncopeRole); + } + assertNotNull(t); + } + + @Test + public void create() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("lastRole"); + roleTO.setParent(8L); + + // verify inheritance password and account policies + roleTO.setInheritAccountPolicy(false); + // not inherited so setter execution shouldn't be ignored + roleTO.setAccountPolicy(6L); + + roleTO.setInheritPasswordPolicy(true); + // inherited so setter execution should be ignored + roleTO.setPasswordPolicy(2L); + + roleTO.addAttribute(attributeTO("icon", "anIcon")); + + roleTO.addDerivedAttribute(attributeTO("ownerDN", null)); + + roleTO.addVirtualAttribute(attributeTO("rvirtualdata", "rvirtualvalue")); + + roleTO.setRoleOwner(8L); + + roleTO.addResource("resource-ldap"); + + roleTO = roleService.create(roleTO); + assertNotNull(roleTO); + + assertNotNull(roleTO.getVirtualAttributeMap()); + assertNotNull(roleTO.getVirtualAttributeMap().get("rvirtualdata") + .getValues()); + assertFalse(roleTO.getVirtualAttributeMap().get("rvirtualdata") + .getValues().isEmpty()); + assertEquals("rvirtualvalue", + roleTO.getVirtualAttributeMap().get("rvirtualdata").getValues() + .get(0)); + + assertNotNull(roleTO.getAccountPolicy()); + assertEquals(6L, (long) roleTO.getAccountPolicy()); + + assertNotNull(roleTO.getPasswordPolicy()); + assertEquals(4L, (long) roleTO.getPasswordPolicy()); + + assertTrue(roleTO.getResources().contains("resource-ldap")); + + ConnObjectTO connObjectTO = restTemplate.getForObject(BASE_URL + + "/resource/resource-ldap/read/ROLE/lastRole.json", + ConnObjectTO.class); + assertNotNull(connObjectTO); + assertNotNull(connObjectTO.getAttributeMap().get("owner")); + } + + @Test + public void createWithPasswordPolicy() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("roleWithPassword"); + roleTO.setParent(8L); + roleTO.setPasswordPolicy(4L); + + RoleTO actual = roleService.create(roleTO); + assertNotNull(actual); + + actual = roleService.read(actual.getId()); + assertNotNull(actual); + assertNotNull(actual.getPasswordPolicy()); + assertEquals(4L, (long) actual.getPasswordPolicy()); + } + + @Test + public void delete() { + try { + roleService.delete(0L); + } catch (HttpStatusCodeException e) { + assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode()); + } + + RoleTO roleTO = new RoleTO(); + roleTO.setName("toBeDeleted"); + roleTO.setParent(8L); + + roleTO.addResource("resource-ldap"); + + roleTO = roleService.create(roleTO); + assertNotNull(roleTO); + + RoleTO deletedRole = roleService.delete(roleTO.getId()); + assertNotNull(deletedRole); + + try { + roleService.read(deletedRole.getId()); + } catch (HttpStatusCodeException e) { + assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode()); + } + } + + @Test + public void list() { + List roleTOs = roleService.list(); + assertNotNull(roleTOs); + assertTrue(roleTOs.size() >= 8); + for (RoleTO roleTO : roleTOs) { + assertNotNull(roleTO); + } + } + + @Test + public void parent() { + RoleTO roleTO = roleService.parent(7L); + + assertNotNull(roleTO); + assertEquals(roleTO.getId(), 6L); + } + + @Test + public void read() { + RoleTO roleTO = roleService.read(1L); + + assertNotNull(roleTO); + assertNotNull(roleTO.getAttributes()); + assertFalse(roleTO.getAttributes().isEmpty()); + } + + @Test + public void selfRead() { + UserTO userTO = userService.read(1L); + assertNotNull(userTO); + + assertTrue(userTO.getMembershipMap().containsKey(1L)); + assertFalse(userTO.getMembershipMap().containsKey(3L)); + + PreemptiveAuthHttpRequestFactory requestFactory = (PreemptiveAuthHttpRequestFactory) restTemplate + .getRequestFactory(); + ((DefaultHttpClient) requestFactory.getHttpClient()) + .getCredentialsProvider().setCredentials( + requestFactory.getAuthScope(), + new UsernamePasswordCredentials("user1", "password")); + + SyncopeClientException exception = null; + try { + roleService.selfRead(3L); + fail(); + } catch (SyncopeClientCompositeErrorException e) { + exception = e + .getException(SyncopeClientExceptionType.UnauthorizedRole); + } + assertNotNull(exception); + + RoleTO roleTO = roleService.selfRead(1L); + assertNotNull(roleTO); + assertNotNull(roleTO.getAttributes()); + assertFalse(roleTO.getAttributes().isEmpty()); + + // restore admin authentication + super.resetRestTemplate(); + } + + @Test + public void update() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("latestRole"); + roleTO.setParent(8L); + + // verify inheritance password and account policies + roleTO.setInheritAccountPolicy(false); + // not inherited so setter execution shouldn't be ignored + roleTO.setAccountPolicy(6L); + + roleTO.setInheritPasswordPolicy(true); + // inherited so setter execution should be ignored + roleTO.setPasswordPolicy(2L); + + roleTO.addAttribute(attributeTO("icon", "anIcon")); + + roleTO.addResource("resource-ldap"); + + roleTO = roleService.create(roleTO); + + assertEquals(1, roleTO.getAttributes().size()); + + assertNotNull(roleTO.getAccountPolicy()); + assertEquals(Long.valueOf(6), roleTO.getAccountPolicy()); + + assertNotNull(roleTO.getPasswordPolicy()); + assertEquals(Long.valueOf(4), roleTO.getPasswordPolicy()); + + RoleMod roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.setName("finalRole"); + roleMod.addAttributeToBeUpdated(attributeMod("show", "FALSE")); + + // change password policy inheritance + roleMod.setInheritPasswordPolicy(Boolean.FALSE); + + roleTO = roleService.update(roleMod.getId(), roleMod); + + assertEquals("finalRole", roleTO.getName()); + assertEquals(2, roleTO.getAttributes().size()); + + // changes ignored because not requested (null ReferenceMod) + assertNotNull(roleTO.getAccountPolicy()); + assertEquals(6L, (long) roleTO.getAccountPolicy()); + + // password policy null because not inherited + assertNull(roleTO.getPasswordPolicy()); + } + + @Test + public void updateRemovingVirAttribute() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("withvirtual"); + roleTO.setParent(8L); + roleTO.addVirtualAttribute(attributeTO("rvirtualdata", null)); + + roleTO = roleService.create(roleTO); + + assertNotNull(roleTO); + assertEquals(1, roleTO.getVirtualAttributes().size()); + + final RoleMod roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.addVirtualAttributeToBeRemoved("rvirtualdata"); + + roleTO = roleService.update(roleMod.getId(), roleMod); + + assertNotNull(roleTO); + assertTrue(roleTO.getVirtualAttributes().isEmpty()); + } + + @Test + public void updateRemovingDerAttribute() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("withderived"); + roleTO.setParent(8L); + roleTO.addDerivedAttribute(attributeTO("rderivedschema", null)); + + roleTO = roleService.create(roleTO); + + assertNotNull(roleTO); + assertEquals(1, roleTO.getDerivedAttributes().size()); + + final RoleMod roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.addDerivedAttributeToBeRemoved("rderivedschema"); + + roleTO = roleService.update(roleMod.getId(), roleMod); + + assertNotNull(roleTO); + assertTrue(roleTO.getDerivedAttributes().isEmpty()); + } + + @Test + public void updateAsRoleOwner() { + // 1. read role as admin + RoleTO roleTO = roleService.read(7L); + + // 2. prepare update + RoleMod roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.setName("Managing Director"); + + // 3. try to update as user3, not owner of role 7 - fail + PreemptiveAuthHttpRequestFactory requestFactory = (PreemptiveAuthHttpRequestFactory) restTemplate + .getRequestFactory(); + ((DefaultHttpClient) requestFactory.getHttpClient()) + .getCredentialsProvider().setCredentials( + requestFactory.getAuthScope(), + new UsernamePasswordCredentials("user2", "password")); + + try { + roleService.update(roleMod.getId(), roleMod); + fail(); + } catch (HttpStatusCodeException e) { + assertEquals(HttpStatus.FORBIDDEN, e.getStatusCode()); + } + + // 4. update as user5, owner of role 7 because owner of role 6 with + // inheritance - success + ((DefaultHttpClient) requestFactory.getHttpClient()) + .getCredentialsProvider().setCredentials( + requestFactory.getAuthScope(), + new UsernamePasswordCredentials("user5", "password")); + + roleTO = roleService.update(roleMod.getId(), roleMod); + assertEquals("Managing Director", roleTO.getName()); + + // restore admin authentication + super.resetRestTemplate(); + } + + /** + * Role rename used to fail in case of parent null. + * + * http://code.google.com/p/syncope/issues/detail?id=178 + */ + @Test + public void issue178() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("torename"); + + RoleTO actual = roleService.create(roleTO); + + assertNotNull(actual); + assertEquals("torename", actual.getName()); + assertEquals(0L, actual.getParent()); + + RoleMod roleMod = new RoleMod(); + roleMod.setId(actual.getId()); + roleMod.setName("renamed"); + + actual = roleService.update(roleMod.getId(), roleMod);; + + assertNotNull(actual); + assertEquals("renamed", actual.getName()); + assertEquals(0L, actual.getParent()); + } + + @Test + public void issueSYNCOPE228() { + RoleTO roleTO = new RoleTO(); + roleTO.setName("issueSYNCOPE228"); + roleTO.setParent(8L); + roleTO.setInheritAccountPolicy(false); + roleTO.setAccountPolicy(6L); + roleTO.setInheritPasswordPolicy(true); + roleTO.setPasswordPolicy(2L); + roleTO.addAttribute(attributeTO("icon", "anIcon")); + roleTO.addEntitlement("USER_READ"); + roleTO.addEntitlement("SCHEMA_READ"); + + roleTO = roleService.create(roleTO); + assertNotNull(roleTO); + assertNotNull(roleTO.getEntitlements()); + assertFalse(roleTO.getEntitlements().isEmpty()); + + List entitlements = roleTO.getEntitlements(); + + RoleMod roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.setInheritDerivedAttributes(Boolean.TRUE); + + roleTO = roleService.update(roleMod.getId(), roleMod); + assertNotNull(roleTO); + assertEquals(entitlements, roleTO.getEntitlements()); + + roleMod = new RoleMod(); + roleMod.setId(roleTO.getId()); + roleMod.setEntitlements(new ArrayList()); + + roleTO = roleService.update(roleMod.getId(), roleMod); + assertNotNull(roleTO); + assertTrue(roleTO.getEntitlements().isEmpty()); + } } Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java?rev=1427826&r1=1427825&r2=1427826&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/SearchTestITCase.java Wed Jan 2 15:37:37 2013 @@ -18,12 +18,15 @@ */ package org.apache.syncope.core.rest; -import static org.junit.Assert.*; +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 java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; + import org.apache.syncope.client.search.AttributableCond; import org.apache.syncope.client.search.AttributeCond; import org.apache.syncope.client.search.EntitlementCond; @@ -117,8 +120,7 @@ public class SearchTestITCase extends Ab assertTrue(searchCondition.isValid()); - final List matchingRoles = Arrays.asList(restTemplate.postForObject(BASE_URL + "role/search", - searchCondition, RoleTO[].class)); + final List matchingRoles = roleService.search(searchCondition); assertNotNull(matchingRoles); assertEquals(1, matchingRoles.size()); @@ -210,8 +212,7 @@ public class SearchTestITCase extends Ab final NodeCond searchCondition = NodeCond.getLeafCond(cond); - final List matchingRoles = Arrays.asList(restTemplate.postForObject(BASE_URL + "role/search", - searchCondition, RoleTO[].class)); + final List matchingRoles = roleService.search(searchCondition); assertNotNull(matchingRoles); assertFalse(matchingRoles.isEmpty()); } @@ -228,8 +229,7 @@ public class SearchTestITCase extends Ab NodeCond.getLeafCond(userReadcond)); assertTrue(searchCondition.isValid()); - final List matchingRoles = Arrays.asList(restTemplate.postForObject(BASE_URL + "role/search", - searchCondition, RoleTO[].class)); + final List matchingRoles = roleService.search(searchCondition); assertNotNull(matchingRoles); assertFalse(matchingRoles.isEmpty()); } @@ -248,8 +248,7 @@ public class SearchTestITCase extends Ab assertTrue(searchCondition.isValid()); - final List matchingRoles = Arrays.asList(restTemplate.postForObject(BASE_URL + "role/search", - searchCondition, RoleTO[].class)); + final List matchingRoles = roleService.search(searchCondition); assertNotNull(matchingRoles); assertEquals(1, matchingRoles.size());