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

Reply via email to