package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.junit.Test; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Role; import org.ovirt.engine.api.model.User; import org.ovirt.engine.core.common.action.PermissionsOperationsParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendEntityAssignedPermissionsResourceTest extends AbstractBackendAssignedPermissionsResourceTest { private Guid targetId; /** * This constructor is intended for tests that check permissions assigned to a generic type of entity, thus it * needs the type and identifier of one of those entities. For example, a test intended to check permissions on * the {@code System} entity will pass {@code Guid.SYSTEM} as identifier and {@code BaseResource.class} as type. * * @param targetId the identifier of the entity * @param targetType the type of the entity */ protected BackendEntityAssignedPermissionsResourceTest(Guid targetId, Class<? extends BaseResource> targetType) { super( targetId, VdcQueryType.GetPermissionsForObject, new GetPermissionsForObjectParameters(GUIDS[1]), targetType, "User.Id", "ObjectId" ); this.targetId = targetId; } public BackendEntityAssignedPermissionsResourceTest() { // The concrete tests in this class always use a fixed data center as the entity: this(GUIDS[2], DataCenter.class); } @Test public void testAddIncompletePermission() throws Exception { Permission model = new Permission(); model.setDataCenter(new DataCenter()); model.getDataCenter().setId(GUIDS[2].toString()); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); setUriInfo(setUpBasicUriExpectations()); try { collection.add(model); } catch (WebApplicationException wae) { verifyIncompleteException(wae, "Permission", "add", "user|group.id"); } } @Test public void testAddGroupPermission() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpCreationExpectations(VdcActionType.AddPermission, PermissionsOperationsParameters.class, new String[] { "Group.Id", "Permission.AdElementId", "Permission.ObjectId", "Permission.RoleId" }, new Object[] { GUIDS[1], GUIDS[1], targetId, GUIDS[3] }, true, true, GUIDS[0], VdcQueryType.GetPermissionById, IdQueryParameters.class, new String[] { "Id" }, new Object[] { GUIDS[0] }, getEntity(0)); Permission model = new Permission(); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); model.setGroup(new Group()); model.getGroup().setId(GUIDS[1].toString()); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Permission); verifyModel((Permission) response.getEntity(), 0); } @Test @Override public void testList() throws Exception { UriInfo uriInfo = setUpUriExpectations(null); setUpGetEntityExpectations(VdcQueryType.GetDbUserByUserId, IdQueryParameters.class, new String[] {"Id"}, new Object[] {GUIDS[1]}, getUserByIdx(1), true); setUpQueryExpectations(""); collection.setUriInfo(uriInfo); verifyCollection(getCollection()); } @Override protected Permission getModel() { Permission model = new Permission(); model.setUser(new User()); model.getUser().setId(GUIDS[1].toString()); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); return model; } @Override protected void verifyModel(Permission model, int index) { super.verifyModel(model, index); if (index == 0) { assertTrue(model.isSetUser()); assertEquals(GUIDS[1].toString(), model.getUser().getId()); } else { assertTrue(model.isSetGroup()); assertEquals(GUIDS[1].toString(), model.getGroup().getId()); } } }