Eli Mesika has uploaded a new change for review. Change subject: [WIP] API: Adding BackendJobResource... ......................................................................
[WIP] API: Adding BackendJobResource... API: Adding BackendJobResource and BackendJobsResource Change-Id: I7474b82ecea8bd4ac34ea24fdfd1b159ef8c881f Signed-off-by: Eli Mesika <[email protected]> Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=872719 --- A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java 5 files changed, 342 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/16166/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java new file mode 100644 index 0000000..79f8b2b --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java @@ -0,0 +1,74 @@ +package org.ovirt.engine.api.restapi.resource; + +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +import org.ovirt.engine.api.model.Action; +import org.ovirt.engine.api.model.Job; +import org.ovirt.engine.api.resource.ActionResource; +import org.ovirt.engine.api.resource.JobResource; +import org.ovirt.engine.api.resource.StepsResource; +import org.ovirt.engine.api.restapi.types.JobMapper; +import org.ovirt.engine.core.common.action.EndExternalJobParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class BackendJobResource extends AbstractBackendActionableResource<org.ovirt.engine.api.model.Job, org.ovirt.engine.core.common.job.Job> implements JobResource{ + + private BackendJobsResource parent; + protected BackendJobResource(String id, + Class<Job> modelType, + Class<org.ovirt.engine.core.common.job.Job> entityType) { + super(id, modelType, entityType); + } + + public BackendJobResource(String id, BackendJobsResource parent) { + super(id, org.ovirt.engine.api.model.Job.class, org.ovirt.engine.core.common.job.Job.class); + this.setParent(parent); + } + + @Override + public ActionResource getActionSubresource(@PathParam("action") String action, @PathParam("oid") String oid) { + return inject(new BackendActionResource(action, oid)); + } + + @Override + public Response end(Action action) { + return doAction(VdcActionType.EndExternalJob, + new EndExternalJobParameters(guid, JobMapper.map(action.getStatus()), action.isForce()), action); + } + + @Override + public Response clear(Action action) { + VdcActionParametersBase params = new VdcActionParametersBase(); + params.setJobId(guid); + return doAction(VdcActionType.ClearExternalJob,params, action); + } + + @Override + public Job get() { + IdQueryParameters params = new IdQueryParameters(guid); + return performGet(VdcQueryType.GetJobByJobId, params); + } + + @Override + public StepsResource getStepsResource() { + return inject(new BackendStepsResource(guid)); + } + + @Override + protected Job doPopulate(Job model, org.ovirt.engine.core.common.job.Job entity) { + return model; + } + + public BackendJobsResource getParent() { + return parent; + } + + public void setParent(BackendJobsResource parent) { + this.parent = parent; + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java new file mode 100644 index 0000000..a2642c7 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java @@ -0,0 +1,65 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.List; + +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +import org.apache.commons.lang.NotImplementedException; +import org.ovirt.engine.api.model.Job; +import org.ovirt.engine.api.model.Jobs; +import org.ovirt.engine.api.resource.JobResource; +import org.ovirt.engine.api.resource.JobsResource; +import org.ovirt.engine.core.common.action.AddExternalJobParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +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 BackendJobsResource extends AbstractBackendCollectionResource<org.ovirt.engine.api.model.Job, org.ovirt.engine.core.common.job.Job> implements JobsResource { + + static final String[] SUB_COLLECTIONS = { "steps" }; + + public BackendJobsResource() { + super(org.ovirt.engine.api.model.Job.class, org.ovirt.engine.core.common.job.Job.class, SUB_COLLECTIONS); + } + + @Override + public Jobs list() { + List<org.ovirt.engine.core.common.job.Job> jobs = getBackendCollection(VdcQueryType.GetAllJobs,new VdcQueryParametersBase()); + return mapCollection(jobs); + } + + @Override + public Response add(Job job) { + validateParameters(job, "description"); + return performCreate(VdcActionType.AddExternalJob, + new AddExternalJobParameters(job.getDescription(), job.isAutoCleared()), + new QueryIdResolver<Guid>(VdcQueryType.GetJobByJobId, IdQueryParameters.class)); + } + + @Override + public JobResource getJobSubResource(@PathParam("id") String id) { + return inject(new BackendJobResource(id, this)); + } + + @Override + protected Response performRemove(String id) { + throw new NotImplementedException(); + } + + @Override + protected Job doPopulate(Job model, org.ovirt.engine.core.common.job.Job entity) { + return model; + } + + protected Jobs mapCollection(List<org.ovirt.engine.core.common.job.Job> entities) { + Jobs collection = new Jobs(); + for (org.ovirt.engine.core.common.job.Job entity : entities) { + collection.getJobs().add(addLinks(map(entity))); + } + return collection; + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java new file mode 100644 index 0000000..e0ef89d --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java @@ -0,0 +1,79 @@ +package org.ovirt.engine.api.restapi.resource; + +import javax.ws.rs.WebApplicationException; + +import org.junit.Test; +import org.ovirt.engine.api.model.Job; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public abstract class AbstractBackendJobResourceTest + extends AbstractBackendSubResourceTest<Job, org.ovirt.engine.core.common.job.Job, BackendJobResource> { + + public AbstractBackendJobResourceTest(BackendJobResource jobResource) { + super(jobResource); + } + + @Test + public void testBadGuid() throws Exception { + control.replay(); + try { + new BackendJobResource(null, null); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + verifyNotFoundException(wae); + } + } + + @Test + public void testGetNotFound() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpGetEntityExpectations(true); + control.replay(); + try { + resource.get(); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + verifyNotFoundException(wae); + } + } + + @Test + public void testGet() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpGetEntityExpectations(); + control.replay(); + + verifyModel(resource.get(), 0); + } + + protected void setUpGetEntityExpectations() throws Exception { + setUpGetEntityExpectations(false); + } + + protected void setUpGetEntityExpectations(boolean notFound) throws Exception { + setUpGetEntityExpectations(VdcQueryType.GetJobByJobId, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + notFound ? null : getEntity(0)); + } + + @Override + protected org.ovirt.engine.core.common.job.Job getEntity(int index) { + org.ovirt.engine.core.common.job.Job job = new org.ovirt.engine.core.common.job.Job(); + job.setId(GUIDS[index]); + job.setDescription(DESCRIPTIONS[index]); + job.setExternal(true); + job.setAutoCleared(true); + return job; + } + + @Override + protected void verifyModel(Job model, int index) { + super.verifyModel(model, index); + assertTrue(model.isExternal()); + assertTrue(model.isAutoCleared()); + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java new file mode 100644 index 0000000..08ecf20 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java @@ -0,0 +1,10 @@ +package org.ovirt.engine.api.restapi.resource; + + +public class BackendJobResourceTest extends AbstractBackendJobResourceTest { + + public BackendJobResourceTest() { + super(new BackendJobResource(GUIDS[0].toString(), new BackendJobsResource())); + } +} + diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java new file mode 100644 index 0000000..a62e89b --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java @@ -0,0 +1,114 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + +import org.junit.Ignore; +import org.junit.Test; +import org.ovirt.engine.api.model.Job; +import org.ovirt.engine.core.common.action.AddExternalJobParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class BackendJobsResourceTest extends AbstractBackendCollectionResourceTest<Job, org.ovirt.engine.core.common.job.Job, BackendJobsResource> { + + public BackendJobsResourceTest() { + super(new BackendJobsResource(), null, ""); + } + @Override + protected List<Job> getCollection() { + return collection.list().getJobs(); + } + @Override + protected org.ovirt.engine.core.common.job.Job getEntity(int index) { + org.ovirt.engine.core.common.job.Job job = new org.ovirt.engine.core.common.job.Job(); + job.setId(GUIDS[index]); + job.setDescription(DESCRIPTIONS[index]); + job.setExternal(true); + job.setAutoCleared(true); + return job; + } + + @Override + protected void setUpQueryExpectations(String query, Object failure) throws Exception { + assert(query.equals("")); + + setUpEntityQueryExpectations(VdcQueryType.GetAllJobs, + VdcQueryParametersBase.class, + new String[] { }, + new Object[] { }, + setUpJobs(), + failure); + + control.replay(); + } + + @Override + protected void verifyModel(Job model, int index) { + super.verifyModel(model, index); + assertTrue(model.isExternal()); + } + + protected List<org.ovirt.engine.core.common.job.Job> setUpJobs() { + List<org.ovirt.engine.core.common.job.Job> jobs = new ArrayList<org.ovirt.engine.core.common.job.Job>(); + for (int i = 0; i < NAMES.length; i++) { + jobs.add(getEntity(i)); + } + return jobs; + } + + private void setUpGetEntityExpectations() throws Exception { + setUpGetEntityExpectations(VdcQueryType.GetJobByJobId, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + getEntity(0)); + } + + @Test + @Ignore + @Override + public void testQuery() throws Exception { + } + + @Test + public void testAddJob() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpCreationExpectations(VdcActionType.AddExternalJob, + AddExternalJobParameters.class, + new String[] { "Job.Description"}, + new Object[] { DESCRIPTIONS[0] }, + true, + true, + GUIDS[0], + VdcQueryType.GetJobByJobId, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + getEntity(0)); + Job model = new Job(); + model.setDescription(DESCRIPTIONS[0].toString()); + Response response = collection.add(model); + assertEquals(201, response.getStatus()); + assertTrue(response.getEntity() instanceof Job); + verifyModel((Job) response.getEntity(), 0); + } + + @Test + public void testAddIncompleteParametersNoDescription() throws Exception { + Job model = new Job(); + setUriInfo(setUpBasicUriExpectations()); + control.replay(); + try { + collection.add(model); + fail("expected WebApplicationException on incomplete parameters"); + } catch (WebApplicationException wae) { + verifyIncompleteException(wae, "Job", "add", "description"); + } + } +} -- To view, visit http://gerrit.ovirt.org/16166 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7474b82ecea8bd4ac34ea24fdfd1b159ef8c881f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
