Juan Hernandez has uploaded a new change for review. Change subject: restapi: Separate User and DomainUser user resources ......................................................................
restapi: Separate User and DomainUser user resources Currently we have two conceptual resources to represent users: UserResource and DomainUserResource. These are separated interfaces, the first representing an user that has been added to the database of the engine and the second representing an user that exists in an external directory and that may or may not have been added to the database. These two different conceptual resources are implemented then using a base class AbstractBackendUserResource. The problem is that due to the generic nature of this base class both implementations are forced to specify DbUser as its type, instead of DbUser for the first concept and LdapUser for the second concept. This complicates changes to DbUser and LdapUser. To make that easier this patch removes the abstract base class and makes both implementations use the generic type that is natural for them. Change-Id: I428f98772ac57cd7825781fb3cf282b2ac56e995 Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDirectoryUserByIdQuery.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java D backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResource.java D backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUsersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUserResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResource.java D backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResourceTest.java D backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java 14 files changed, 407 insertions(+), 243 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/17684/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDirectoryUserByIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDirectoryUserByIdQuery.java new file mode 100644 index 0000000..8546a4b --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDirectoryUserByIdQuery.java @@ -0,0 +1,29 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.bll.adbroker.AdActionType; +import org.ovirt.engine.core.bll.adbroker.LdapBroker; +import org.ovirt.engine.core.bll.adbroker.LdapFactory; +import org.ovirt.engine.core.bll.adbroker.LdapSearchByIdParameters; +import org.ovirt.engine.core.common.businessentities.LdapUser; +import org.ovirt.engine.core.common.queries.DirectoryIdQueryParameters; +import org.ovirt.engine.core.compat.Guid; + +public class GetDirectoryUserByIdQuery<P extends DirectoryIdQueryParameters> extends QueriesCommandBase<P> { + + public GetDirectoryUserByIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + String domain = getParameters().getDomain(); + Guid id = getParameters().getId(); + LdapBroker broker = LdapFactory.getInstance(domain); + LdapUser user = (LdapUser) broker.RunAdAction( + AdActionType.GetAdUserByUserId, + new LdapSearchByIdParameters(domain, id) + ).getReturnValue(); + getQueryReturnValue().setReturnValue(user); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java new file mode 100644 index 0000000..d8d3af8 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java @@ -0,0 +1,40 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +/** + * Parameter class for queries that need a domain name and an identifier. + */ +public class DirectoryIdQueryParameters extends VdcQueryParametersBase { + private static final long serialVersionUID = -4231839007150359638L; + + private String domain; + private Guid id; + + public DirectoryIdQueryParameters() { + // Nothing. + } + + public DirectoryIdQueryParameters(String domain, Guid id) { + this.domain = domain; + this.id = id; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getDomain() { + return domain; + } + + public void setId(Guid id) { + this.id = id; + } + + public Guid getId() { + return id; + } + + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 98c9718..7a61a0a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -102,6 +102,9 @@ GetDbUserByUserId(VdcQueryAuthType.User), GetUserBySessionId(VdcQueryAuthType.User), + // Directory users queries: + GetDirectoryUserById(VdcQueryAuthType.User), + // AdGroups queries GetAllAdGroups, GetAdGroupById, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResource.java deleted file mode 100644 index f8054ca..0000000 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResource.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.ovirt.engine.api.restapi.resource; - -import org.ovirt.engine.api.model.User; -import org.ovirt.engine.core.common.businessentities.DbUser; - -public class AbstractBackendUserResource - extends AbstractBackendSubResource<User, DbUser> { - - protected AbstractBackendUsersResource parent; - - public AbstractBackendUserResource(String id, AbstractBackendUsersResource parent) { - super(id, User.class, DbUser.class); - this.parent = parent; - } - - public User get() { - User entity = parent.lookupUser(guid); - if (entity == null) { - return notFound(); - } - return addLinks(entity); - } - - AbstractBackendUsersResource getParent() { - return parent; - } - - @Override - protected User doPopulate(User model, DbUser entity) { - return model; - } -} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResource.java deleted file mode 100644 index 6775062..0000000 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResource.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.ovirt.engine.api.restapi.resource; - -import org.ovirt.engine.api.model.User; -import org.ovirt.engine.core.common.businessentities.LdapUser; -import org.ovirt.engine.core.compat.Guid; - -public abstract class AbstractBackendUsersResource extends BackendUsersResourceBase -{ - public AbstractBackendUsersResource(String id, BackendDomainResource parent) { - super(id,parent); - } - - User lookupUser(Guid guid){ - String id = guid.toString(); - for(LdapUser user: getUsersFromDomain()){ - if(user.getUserId().toString().equals(id)) return mapAdUser(user); - } - return notFound(); - } -} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResource.java index e817176..f46ecb4 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResource.java @@ -1,18 +1,63 @@ package org.ovirt.engine.api.restapi.resource; +import org.ovirt.engine.api.model.BaseResource; +import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.User; import org.ovirt.engine.api.resource.DomainUserResource; +import org.ovirt.engine.core.common.businessentities.LdapUser; +import org.ovirt.engine.core.common.queries.DirectoryIdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; +/** + * This resource corresponds to an user that exists in some directory + * accessible by the engine, and that may or may not have been added to + * the engine and stored in the database. This resource doesn't provide + * information about the permissions, roles or tags of the user, even if + * those have been already assigned and stored in the database. + */ public class BackendDomainUserResource - extends AbstractBackendUserResource - implements DomainUserResource { + extends AbstractBackendSubResource<User, LdapUser> + implements DomainUserResource { + + private BackendDomainUsersResource parent; public BackendDomainUserResource(String id, BackendDomainUsersResource parent) { - super(id, parent); + super(id, User.class, LdapUser.class); + this.parent = parent; + } + + public BackendDomainUsersResource getParent() { + return parent; + } + + public void setParent(BackendDomainUsersResource parent) { + this.parent = parent; } @Override - public User addParents(User user) { - return parent.addParents(user); + public User get() { + DirectoryIdQueryParameters queryParameters = new DirectoryIdQueryParameters( + parent.getDirectory().getName(), + guid + ); + User user = performGet(VdcQueryType.GetDirectoryUserById, queryParameters, BaseResource.class); + user = modifyDomain(user); + return user; } + + private User modifyDomain(User user) { + // We need to remove the name of the domain because we want to display + // only the reference: + Domain domain = user.getDomain(); + if (domain != null) { + domain.setName(null); + } + return user; + } + + @Override + protected User doPopulate(User model, LdapUser entity) { + return model; + } + } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUsersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUsersResource.java index cac6af1..fb84a07 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUsersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainUsersResource.java @@ -1,18 +1,48 @@ package org.ovirt.engine.api.restapi.resource; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.api.common.util.QueryHelper; import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.User; import org.ovirt.engine.api.model.Users; import org.ovirt.engine.api.resource.DomainUserResource; import org.ovirt.engine.api.resource.DomainUsersResource; +import org.ovirt.engine.core.common.businessentities.LdapUser; +import org.ovirt.engine.core.common.interfaces.SearchType; -public class BackendDomainUsersResource extends AbstractBackendUsersResource implements DomainUsersResource { +/** + * This resource corresponds to the users that exist in a directory accessible + * to the engine. Those users may or may not have been added to the engine + * database and the engine can't modify them, and thus the resource doesn't + * provide any method to modify the collection. + */ +public class BackendDomainUsersResource + extends AbstractBackendSubResource<User, LdapUser> + implements DomainUsersResource { - private String directoryId; + private static final String SEARCH_TEMPLATE = "ADUSER@{0}: "; + + private BackendDomainResource parent; public BackendDomainUsersResource(String id, BackendDomainResource parent) { - super(id, parent); - this.directoryId = id; + super(id, User.class, LdapUser.class); + this.parent = parent; + } + + public void setParent(BackendDomainResource parent) { + this.parent = parent; + } + + public BackendDomainResource getParent() { + return parent; + } + + public Domain getDirectory() { + return parent.getDirectory(); } @Override @@ -21,16 +51,50 @@ return inject(new BackendDomainUserResource(id, this)); } - @Override - public Users list() { - return mapDomainUserCollection(getUsersFromDomain()); + private String getSearchPattern() { + String constraint = QueryHelper.getConstraint(getUriInfo(), LdapUser.class, false); + StringBuilder sb = new StringBuilder(128); + sb.append(MessageFormat.format(SEARCH_TEMPLATE, parent.getDirectory().getName())); + sb.append(StringUtils.isEmpty(constraint)? "allnames=*": constraint); + return sb.toString(); + } + + private List<LdapUser> getDomainUsers() { + return asCollection(LdapUser.class, + getEntity(ArrayList.class, + SearchType.AdUser, + getSearchPattern())); + } + + private Users mapUsers(List<LdapUser> entities) { + Users collection = new Users(); + for (LdapUser entity : entities) { + User user = map(entity); + user = addLinks(user, true); + user = modifyDomain(user); + collection.getUsers().add(user); + } + return collection; + } + + private User modifyDomain(User user) { + // We need to remove the name of the domain because we want to display + // only the reference: + Domain domain = user.getDomain(); + if (domain != null) { + domain.setName(null); + } + return user; } @Override - public User addParents(User user) { - user.setDomain(new Domain()); - user.getDomain().setId(directoryId); - return user; + public Users list() { + return mapUsers(getDomainUsers()); + } + + @Override + protected User doPopulate(User model, LdapUser entity) { + return model; } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUserResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUserResource.java index ca68300..ceb9fe4 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUserResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUserResource.java @@ -1,6 +1,6 @@ package org.ovirt.engine.api.restapi.resource; -import static org.ovirt.engine.api.restapi.resource.BackendUsersResourceBase.SUB_COLLECTIONS; +import static org.ovirt.engine.api.restapi.resource.BackendUsersResource.SUB_COLLECTIONS; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.User; @@ -12,6 +12,10 @@ import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; +/** + * This resource corresponds to an user that has been added to the engine and + * stored in the database. + */ public class BackendUserResource extends AbstractBackendSubResource<User, DbUser> implements UserResource { @@ -21,6 +25,14 @@ public BackendUserResource(String id, BackendUsersResource parent) { super(id, User.class, DbUser.class, SUB_COLLECTIONS); this.parent = parent; + } + + public void setParent(BackendUsersResource parent) { + this.parent = parent; + } + + public BackendUsersResource getParent() { + return parent; } @Override @@ -44,10 +56,6 @@ VdcQueryType.GetPermissionsByAdElementId, new IdQueryParameters(guid), User.class)); - } - - public BackendUsersResource getParent() { - return parent; } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResource.java index 2d50b17..45a89d1 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResource.java @@ -1,39 +1,186 @@ package org.ovirt.engine.api.restapi.resource; +import static org.ovirt.engine.api.common.util.ReflectionHelper.assignChildModel; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; + import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.api.common.security.auth.Principal; +import org.ovirt.engine.api.common.util.QueryHelper; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.User; import org.ovirt.engine.api.model.Users; import org.ovirt.engine.api.resource.UserResource; import org.ovirt.engine.api.resource.UsersResource; -import org.ovirt.engine.api.restapi.resource.BackendUsersResourceBase.UserIdResolver; +import org.ovirt.engine.core.common.action.AdElementParametersBase; import org.ovirt.engine.core.common.action.AddUserParameters; import org.ovirt.engine.core.common.action.VdcActionType; -import org.ovirt.engine.core.common.businessentities.LdapUser; import org.ovirt.engine.core.common.businessentities.DbUser; +import org.ovirt.engine.core.common.businessentities.LdapUser; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; -public class BackendUsersResource extends BackendUsersResourceBase implements UsersResource { +/** + * This resource corresponds to users that have been looked up in some directory + * accessible to the engine and then added to the engine database. Users can + * be added and removed from the collection, and this will add or remove them + * from the database (not from the underlying directory). + */ +public class BackendUsersResource + extends AbstractBackendCollectionResource<User, DbUser> + implements UsersResource { + + static final String[] SUB_COLLECTIONS = { "permissions", "roles", "tags" }; + protected static final String SEARCH_TEMPLATE = "ADUSER@{0}: "; + private static final String USERS_SEARCH_PATTERN = "usrname != \"\""; + private static final String AND_SEARCH_PATTERN = " and "; + + private BackendDomainResource parent; public BackendUsersResource() { super(User.class, DbUser.class, SUB_COLLECTIONS); } public BackendUsersResource(String id, BackendDomainResource parent) { - super(id, parent); + super(User.class, DbUser.class, SUB_COLLECTIONS); + this.parent = parent; + } + + public BackendUsersResource(Class<User> class1, Class<DbUser> class2, String[] subCollections) { + super(class1, class2, subCollections); + } + + protected String getSearchPattern() { + String user_defined_pattern = QueryHelper.getConstraint(getUriInfo(), "", modelType); + return user_defined_pattern.equals("Users : ") ? + user_defined_pattern + USERS_SEARCH_PATTERN + : + user_defined_pattern + AND_SEARCH_PATTERN + USERS_SEARCH_PATTERN; + } + + protected String getDomain(User user) { + if (user.isSetDomain() && user.getDomain().isSetName()) { + return user.getDomain().getName(); + } + else if (user.isSetDomain() && user.getDomain().isSetId()) { + List<String> domains = getBackendCollection( + String.class, + VdcQueryType.GetDomainList, + new VdcQueryParametersBase()); + for (String domain :domains) { + Guid domainId = new Guid(domain.getBytes(), true); + if (domainId.toString().equals(user.getDomain().getId())) { + return domain; + } + } + throw new WebFaultException(null, "Domain: '" + user.getDomain().getId().toString() + "' does not exist.", Response.Status.BAD_REQUEST); + } + else if (user.isSetUserName() && user.getUserName().contains("@")) { + return user.getUserName().substring(user.getUserName().indexOf("@")+1); + } + return null; + } + + protected String getCurrentDomain() { + return getCurrent().get(Principal.class).getDomain(); + } + + protected String getSearchPattern(String username, String domain) { + String constraint = QueryHelper.getConstraint(getUriInfo(), DbUser.class, false); + final StringBuilder sb = new StringBuilder(128); + + sb.append(MessageFormat.format(SEARCH_TEMPLATE, + parent!=null? + parent.getDirectory().getName() + : + domain)); + + sb.append(StringUtils.isEmpty(constraint) ? + "allnames=" + username + : + constraint); + + return sb.toString(); + } + + protected List<DbUser> getDbUsersForDomain() { + return asCollection(DbUser.class, + getEntity(ArrayList.class, + SearchType.DBUser, + getSearchPattern("*", getCurrentDomain()))); } @Override + public Response performRemove(String id) { + return performAction(VdcActionType.RemoveUser, new AdElementParametersBase(asGuid(id))); + } + + protected Users mapDbUserCollection(List<DbUser> entities) { + Users collection = new Users(); + for (DbUser entity : entities) { + collection.getUsers().add(addLinks(modifyDomain(map(entity)), + BaseResource.class)); + } + return collection; + } + + @Override + protected User addParents(User user) { + if(parent!=null){ + assignChildModel(user, User.class).setId(parent.get().getId()); + } + return user; + } + + protected User modifyDomain(User user) { + if(user.getDomain()!=null) + user.getDomain().setName(null); + return user; + } + + protected User mapUser(DbUser dbUser) { + return getMapper(DbUser.class, User.class).map(dbUser, null); + } + + public DbUser lookupUserById(Guid id) { + return getEntity(DbUser.class, + VdcQueryType.GetDbUserByUserId, + new IdQueryParameters(id), + id.toString()); + } + + protected class UserIdResolver extends EntityIdResolver<Guid> { + + private Guid id; + + UserIdResolver(Guid id) { + this.id = id; + } + + @Override + public DbUser lookupEntity(Guid id) throws BackendFailureException { + return lookupUserById(this.id); + } + } + + @Override + protected User doPopulate(User model, DbUser entity) { + return model; + } + @SingleEntityResource public UserResource getUserSubResource(String id) { return inject(new BackendUserResource(id, this)); } - @Override public Users list() { if (isFiltered()) { return mapDbUserCollection(getBackendCollection(VdcQueryType.GetAllDbUsers, new VdcQueryParametersBase())); @@ -45,7 +192,7 @@ @Override public Response add(User user) { validateParameters(user, "userName"); - if (!isNameConatinsDomain(user)) {// user-name may contain the domain (e.g: ol...@xxx.yyy) + if (!isNameContainsDomain(user)) {// user-name may contain the domain (e.g: ol...@xxx.yyy) validateParameters(user, "domain.id|name"); } String domain = getDomain(user); @@ -58,11 +205,11 @@ .build(); } AddUserParameters newUser = new AddUserParameters(); - newUser.setVdcUser(map(adUser)); + newUser.setAdUser(adUser); return performCreate(VdcActionType.AddUser, newUser, new UserIdResolver(adUser.getUserId()), BaseResource.class); } - private boolean isNameConatinsDomain(User user) { + private boolean isNameContainsDomain(User user) { return ((user.getUserName().contains("@")) && (user.getUserName().indexOf('@') != user.getUserName().length() - 1)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResourceTest.java deleted file mode 100644 index d386340..0000000 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUserResourceTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.ovirt.engine.api.restapi.resource; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Ignore; - -import org.ovirt.engine.api.model.User; -import org.ovirt.engine.core.common.businessentities.DbUser; - -import static org.ovirt.engine.api.restapi.resource.AbstractBackendUsersResourceTest.setUpEntityExpectations; - -@Ignore -public class AbstractBackendUserResourceTest<N extends AbstractBackendUserResource> extends - AbstractBackendSubResourceTest<User, DbUser, N> { - - public AbstractBackendUserResourceTest(N resource) { - super(resource); - } - - protected void init() { - super.init(); - initResource(resource.getParent()); - } - - @Override - protected DbUser getEntity(int index) { - return setUpEntityExpectations(control.createMock(DbUser.class), index); - } - - protected List<DbUser> getEntityList() { - List<DbUser> entities = new ArrayList<DbUser>(); - for (int i = 0; i < NAMES.length; i++) { - entities.add(getEntity(i)); - } - return entities; - } -} - diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResourceTest.java deleted file mode 100644 index d134e1e..0000000 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendUsersResourceTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.ovirt.engine.api.restapi.resource; - -import java.util.List; -import java.util.ArrayList; -import javax.ws.rs.WebApplicationException; - -import org.junit.Ignore; -import org.junit.Test; - -import org.ovirt.engine.api.model.User; -import org.ovirt.engine.core.common.businessentities.DbUser; - -import static org.easymock.classextension.EasyMock.expect; - -public abstract class AbstractBackendUsersResourceTest - extends AbstractBackendCollectionResourceTest<User, DbUser, BackendDomainUsersResource> { - - public AbstractBackendUsersResourceTest(BackendDomainUsersResource collection) { - super(collection, null, ""); - } - - @Test - @Ignore - public void testQuery() throws Exception { - // skip test inherited from base class - } - - @Test - public void testRemoveBadGuid() throws Exception { - control.replay(); - try { - collection.remove("foo"); - fail("expected WebApplicationException"); - } catch (WebApplicationException wae) { - verifyNotFoundException(wae); - } - } - - protected void setUpQueryExpectations(String query) throws Exception { - setUpEntityQueryExpectations(1); - control.replay(); - } - - protected void setUpQueryExpectations(String query, Object failure) throws Exception { - setUpEntityQueryExpectations(1, failure); - control.replay(); - } - - protected void setUpEntityQueryExpectations(int times) throws Exception { - setUpEntityQueryExpectations(times, null); - } - - protected abstract void setUpEntityQueryExpectations(int times, Object failure) throws Exception; - - protected List<DbUser> getEntityList() { - List<DbUser> entities = new ArrayList<DbUser>(); - for (int i = 0; i < NAMES.length; i++) { - entities.add(getEntity(i)); - } - return entities; - } - - protected DbUser getEntity(int index) { - return setUpEntityExpectations(control.createMock(DbUser.class), index); - } - - static DbUser setUpEntityExpectations(DbUser entity, int index) { - expect(entity.getId()).andReturn(GUIDS[index]).anyTimes(); - expect(entity.getFirstName()).andReturn(NAMES[index]).anyTimes(); - return entity; - } - - protected List<User> getCollection() { - return collection.list().getUsers(); - } - - static User getModel(int index) { - User model = new User(); - model.setName(NAMES[index]); - return model; - } - - protected void verifyModel(User model, int index) { - super.verifyModel(model, index); - } -} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResourceTest.java index f57c9f0..86e8a02 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDomainUserResourceTest.java @@ -1,25 +1,28 @@ package org.ovirt.engine.api.restapi.resource; +import static org.easymock.EasyMock.expect; + import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.UriInfo; import org.junit.Test; - +import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.User; import org.ovirt.engine.core.common.businessentities.LdapUser; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.common.queries.DirectoryIdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; public class BackendDomainUserResourceTest - extends AbstractBackendUserResourceTest<BackendDomainUserResource> { - - static final Guid USER_ID = GUIDS[1]; - static final Guid DOMAIN_ID = GUIDS[2]; + extends AbstractBackendSubResourceTest<User, LdapUser, BackendDomainUserResource> { public BackendDomainUserResourceTest() { - super(new BackendDomainUserResource(USER_ID.toString(), - new BackendDomainUsersResource(DOMAIN_ID.toString(),null))); + super(new BackendDomainUserResource(GUIDS[1].toString(), null)); + } + @Override + protected void init () { + super.init(); + setUpParentExpectations(); } @Test @@ -33,12 +36,11 @@ } } - @Test + @Test public void testGet() throws Exception { UriInfo uriInfo = setUpBasicUriExpectations(); setUriInfo(uriInfo); - setUpEntityQueryExpectations(1); - initParetResource(resource.parent, uriInfo); + setUpEntityQueryExpectations(1, false); control.replay(); @@ -55,8 +57,7 @@ public void testGetNotFound() throws Exception { UriInfo uriInfo = setUpBasicUriExpectations(); setUriInfo(uriInfo); - setUpEntityQueryExpectations(2); - initParetResource(resource.parent, uriInfo); + setUpEntityQueryExpectations(1, true); control.replay(); try { @@ -67,16 +68,31 @@ } } - private void initParetResource(AbstractBackendUsersResource resource, UriInfo uriInfo) { - initResource(resource); - resource.setUriInfo(uriInfo); + private void setUpParentExpectations() { + BackendDomainUsersResource parent = control.createMock(BackendDomainUsersResource.class); + Domain domain = new Domain(); + domain.setName(DOMAIN); + expect(parent.getDirectory()).andReturn(domain).anyTimes(); + resource.setParent(parent); } - protected void setUpEntityQueryExpectations(int index) throws Exception { - LdapUser user = BackendUsersResourceTest.setUpEntityExpectations(control.createMock(LdapUser.class),index); - setUpGetEntityExpectations("ADUSER@"+DOMAIN+": allnames=*", - SearchType.AdUser, - user); + private void setUpEntityQueryExpectations(int index, boolean notFound) throws Exception { + setUpGetEntityExpectations( + VdcQueryType.GetDirectoryUserById, + DirectoryIdQueryParameters.class, + new String[] { "Domain", "Id" }, + new Object[] { DOMAIN, GUIDS[index] }, + notFound? null: getEntity(index) + ); + } + + @Override + protected LdapUser getEntity(int index) { + LdapUser entity = new LdapUser(); + entity.setUserId(GUIDS[index]); + entity.setName(NAMES[index]); + entity.setDepartment(DOMAIN); + return entity; } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java index 8fc209b..55eda4c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java @@ -168,7 +168,7 @@ getAdUser(0)); setUpCreationExpectations(VdcActionType.AddUser, AddUserParameters.class, - new String[] { "VdcUser.UserId" }, + new String[] { "AdUser.UserId" }, new Object[] { GUIDS[0] }, true, true, diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java index a6aa3a5..e96d8b6 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java @@ -6,9 +6,7 @@ import org.ovirt.engine.api.model.Groups; import org.ovirt.engine.api.model.User; import org.ovirt.engine.core.common.businessentities.DbUser; -import org.ovirt.engine.core.common.businessentities.LdapGroup; import org.ovirt.engine.core.common.businessentities.LdapUser; -import org.ovirt.engine.core.common.users.VdcUser; import org.ovirt.engine.core.compat.Guid; public class UserMapper { @@ -39,16 +37,6 @@ return model; } - @Mapping(from = LdapUser.class, to = VdcUser.class) - public static VdcUser map(LdapUser adUser, VdcUser template) { - VdcUser vdcUser = template != null ? template : new VdcUser(); - vdcUser.setUserId(adUser.getUserId()); - vdcUser.setUserName(adUser.getUserName()); - vdcUser.setSurName(adUser.getSurName()); - vdcUser.setDomainControler(adUser.getDomainControler()); - return vdcUser; - } - @Mapping(from = LdapUser.class, to = User.class) public static User map(LdapUser entity, User template) { User model = template != null ? template : new User(); @@ -60,9 +48,9 @@ model.setDepartment(entity.getDepartment()); if (entity.getGroups() != null) { model.setGroups(new Groups()); - for (LdapGroup adgroup : entity.getGroups().values()) { + for (String name : entity.getGroups().keySet()) { Group group = new Group(); - group.setName(adgroup.getname()); + group.setName(name); model.getGroups().getGroups().add(group); } } @@ -74,4 +62,5 @@ } return model; } + } -- To view, visit http://gerrit.ovirt.org/17684 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I428f98772ac57cd7825781fb3cf282b2ac56e995 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches