Ravi Nori has uploaded a new change for review. Change subject: restapi : Add /networks sub-collection under /datacenters/xxx(#741111) ......................................................................
restapi : Add /networks sub-collection under /datacenters/xxx(#741111) Adds datacenters/networks links to see specific data center networks. Change-Id: Iacc4a480e3a1270cfcab022549e7f53cfc352c6e Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=741111 Signed-off-by: Ravi Nori <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetNetworksByStoragePoolIdQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResourceTest.java 8 files changed, 295 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/11707/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetNetworksByStoragePoolIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetNetworksByStoragePoolIdQuery.java new file mode 100644 index 0000000..82e742b --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetNetworksByStoragePoolIdQuery.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.StoragePoolQueryParametersBase; + +public class GetNetworksByStoragePoolIdQuery<P extends StoragePoolQueryParametersBase> + extends QueriesCommandBase<P> { + public GetNetworksByStoragePoolIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue( + getDbFacade().getNetworkDao().getAllForDataCenter( + getParameters().getStoragePoolId(), + getUserID(), + getParameters().isFiltered())); + } +} 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 261dea5..c3dec99 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 @@ -44,6 +44,7 @@ GetVdsFreeBondsByVdsId, GetAllNetworks(VdcQueryAuthType.User), GetAllNetworksByClusterId(VdcQueryAuthType.User), + GetNetworksByStoragePoolId(VdcQueryAuthType.User), GetNonOperationalVds, GetManagementInterfaceAddressByVmId(VdcQueryAuthType.User), // Vm Network diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java index c2ee5e1..0b4a56a 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java @@ -27,6 +27,9 @@ @Path("storagedomains") public AttachedStorageDomainsResource getAttachedStorageDomainsResource(); + @Path("networks") + public NetworksResource getNetworksResource(); + @Path("permissions") public AssignedPermissionsResource getPermissionsResource(); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResource.java new file mode 100644 index 0000000..442cf9b --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResource.java @@ -0,0 +1,58 @@ +package org.ovirt.engine.api.restapi.resource; + + +import javax.ws.rs.core.Response; +import org.ovirt.engine.api.model.DataCenter; + +import org.ovirt.engine.api.model.Network; +import org.ovirt.engine.api.model.Networks; +import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; +import org.ovirt.engine.core.common.queries.StoragePoolQueryParametersBase; +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 BackendDataCenterNetworksResource extends BackendNetworksResource { + + protected Guid dataCenterId; + + public BackendDataCenterNetworksResource(String dataCenterId) { + super(VdcQueryType.GetNetworksByStoragePoolId); + this.dataCenterId = asGuid(dataCenterId); + } + + @Override + public Response add(Network network) { + validateParameters(network, getRequiredAddFields()); + validateEnums(Network.class, network); + DataCenter dataCenter = new DataCenter(); + dataCenter.setId(dataCenterId.toString()); + network.setDataCenter(dataCenter); + org.ovirt.engine.core.common.businessentities.network.Network entity = map(network); + AddNetworkStoragePoolParameters params = getActionParameters(network, entity); + return performCreate(addAction, + params, + new DataCenterNetworkIdResolver(network.getName(), params.getStoragePoolId().toString())); + } + + @Override + public Networks list() { + Networks networks = mapCollection(getBackendCollection(VdcQueryType.GetNetworksByStoragePoolId, getQueryParameters())); + + for (Network network : networks.getNetworks()) { + network.setDisplay(null); + } + return networks; + } + + @Override + protected VdcQueryParametersBase getQueryParameters() { + return new StoragePoolQueryParametersBase(dataCenterId); + } + + @Override + protected String[] getRequiredAddFields() { + return new String[] { "name"}; + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java index 3d089ac..d7a0846 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java @@ -8,6 +8,7 @@ import org.ovirt.engine.api.resource.AssignedPermissionsResource; import org.ovirt.engine.api.resource.AttachedStorageDomainsResource; import org.ovirt.engine.api.resource.DataCenterResource; +import org.ovirt.engine.api.resource.NetworksResource; import org.ovirt.engine.api.resource.QuotasResource; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.StoragePoolManagementParameter; @@ -61,6 +62,10 @@ return inject(new BackendAttachedStorageDomainsResource(id)); } + public NetworksResource getNetworksResource() { + return inject(new BackendDataCenterNetworksResource(id)); + } + @Override public QuotasResource getQuotasResource() { return inject(new BackendQuotasResource(id)); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java index 130bc7e..8e77b6b 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java @@ -27,7 +27,7 @@ public class BackendDataCentersResource extends AbstractBackendCollectionResource<DataCenter, storage_pool> implements DataCentersResource { - static final String[] SUB_COLLECTIONS = {"storagedomains", "permissions", "quotas"}; + static final String[] SUB_COLLECTIONS = {"storagedomains", "networks", "permissions", "quotas"}; public BackendDataCentersResource() { super(DataCenter.class, storage_pool.class, SUB_COLLECTIONS); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java index 3d82f84..936da7d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java @@ -21,7 +21,11 @@ static final String[] SUB_COLLECTIONS = {"permissions"}; public BackendNetworksResource() { - super(VdcQueryType.GetAllNetworks, VdcActionType.AddNetwork, VdcActionType.RemoveNetwork, SUB_COLLECTIONS); + this(VdcQueryType.GetAllNetworks); + } + + public BackendNetworksResource(VdcQueryType queryType) { + super(queryType, VdcActionType.AddNetwork, VdcActionType.RemoveNetwork, SUB_COLLECTIONS); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResourceTest.java new file mode 100644 index 0000000..97ae111 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterNetworksResourceTest.java @@ -0,0 +1,203 @@ +package org.ovirt.engine.api.restapi.resource; + +import static org.easymock.EasyMock.expect; + +import java.util.ArrayList; +import java.util.LinkedList; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + +import org.junit.Test; +import org.ovirt.engine.api.model.DataCenter; +import org.ovirt.engine.api.model.Network; +import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.storage_pool; +import org.ovirt.engine.core.common.queries.StoragePoolQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; + +public class BackendDataCenterNetworksResourceTest + extends AbstractBackendNetworksResourceTest<BackendNetworksResource> { + + private static final Guid DATA_CENTER_ID = GUIDS[1]; + + public BackendDataCenterNetworksResourceTest() { + super(new BackendDataCenterNetworksResource(DATA_CENTER_ID.toString()), null, ""); + } + + @Test + public void testRemoveNotFound() throws Exception { + setUpEntityQueryExpectations(VdcQueryType.GetNetworksByStoragePoolId, + StoragePoolQueryParametersBase.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + new ArrayList<org.ovirt.engine.core.common.businessentities.network.Network>()); + control.replay(); + try { + collection.remove(GUIDS[0].toString()); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + verifyNotFoundException(wae); + } + } + + @Test + public void testRemove() throws Exception { + setUpEntityQueryExpectations(2); + setUriInfo(setUpActionExpectations(VdcActionType.RemoveNetwork, + AddNetworkStoragePoolParameters.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + true, + true)); + verifyRemove(collection.remove(GUIDS[0].toString())); + } + + @Test + public void testRemoveNonExistant() throws Exception{ + setUpEntityQueryExpectations(VdcQueryType.GetNetworksByStoragePoolId, + StoragePoolQueryParametersBase.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + new LinkedList<org.ovirt.engine.core.common.businessentities.network.Network>(), + null); + control.replay(); + try { + collection.remove(NON_EXISTANT_GUID.toString()); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + assertNotNull(wae.getResponse()); + assertEquals(404, wae.getResponse().getStatus()); + } + } + + @Test + public void testRemoveCantDo() throws Exception { + doTestBadRemove(false, true, CANT_DO); + } + + @Test + public void testRemoveFailed() throws Exception { + doTestBadRemove(true, false, FAILURE); + } + + protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception { + setUpEntityQueryExpectations(2); + + setUriInfo(setUpActionExpectations(VdcActionType.RemoveNetwork, + AddNetworkStoragePoolParameters.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + canDo, + success)); + try { + collection.remove(GUIDS[0].toString()); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + verifyFault(wae, detail); + } + } + + @Test + public void testAddNetwork() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpCreationExpectations(VdcActionType.AddNetwork, + AddNetworkStoragePoolParameters.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + true, + true, + null, //GUIDS[0], + VdcQueryType.GetNetworksByStoragePoolId, + StoragePoolQueryParametersBase.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + asList(getEntity(0))); + Network model = getModel(0); + model.setDataCenter(new DataCenter()); + model.getDataCenter().setId(DATA_CENTER_ID.toString()); + + Response response = collection.add(model); + assertEquals(201, response.getStatus()); + assertTrue(response.getEntity() instanceof Network); + verifyModel((Network) response.getEntity(), 0); + } + + @Test + public void testAddNetworkCantDo() throws Exception { + doTestBadAddNetwork(false, true, CANT_DO); + } + + @Test + public void testAddNetworkFailure() throws Exception { + doTestBadAddNetwork(true, false, FAILURE); + } + + private void doTestBadAddNetwork(boolean canDo, boolean success, String detail) throws Exception { + setUriInfo(setUpActionExpectations(VdcActionType.AddNetwork, + AddNetworkStoragePoolParameters.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + canDo, + success)); + Network model = getModel(0); + model.setDataCenter(new DataCenter()); + model.getDataCenter().setId(DATA_CENTER_ID.toString()); + + try { + collection.add(model); + fail("expected WebApplicationException"); + } catch (WebApplicationException wae) { + verifyFault(wae, detail); + } + } + + @Test + public void testAddIncompleteParameters() throws Exception { + Network model = new Network(); + setUriInfo(setUpBasicUriExpectations()); + control.replay(); + try { + collection.add(model); + fail("expected WebApplicationException on incomplete parameters"); + } catch (WebApplicationException wae) { + verifyIncompleteException(wae, "Network", "add", "name"); + } + } + + @Override + protected void setUpQueryExpectations(String query) throws Exception { + setUpQueryExpectations(query, null); + } + + @Override + protected void setUpQueryExpectations(String query, Object failure) throws Exception { + setUpEntityQueryExpectations(VdcQueryType.GetNetworksByStoragePoolId, + StoragePoolQueryParametersBase.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + getEntityList(), + failure); + control.replay(); + } + + @Override + protected void setUpEntityQueryExpectations(int times, Object failure) throws Exception { + while (times-- > 0) { + setUpEntityQueryExpectations(VdcQueryType.GetNetworksByStoragePoolId, + StoragePoolQueryParametersBase.class, + new String[] { "StoragePoolId" }, + new Object[] { DATA_CENTER_ID }, + getEntityList(), + failure); + } + } + + protected storage_pool setUpStoragePool(Guid id) { + storage_pool pool = control.createMock(storage_pool.class); + expect(pool.getId()).andReturn(id).anyTimes(); + return pool; + } +} -- To view, visit http://gerrit.ovirt.org/11707 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iacc4a480e3a1270cfcab022549e7f53cfc352c6e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
