Yevgeny Zaspitsky has uploaded a new change for review. Change subject: restapi: provide management network link upon cluster retrieval ......................................................................
restapi: provide management network link upon cluster retrieval Provide management network link upon cluster retrieval Change-Id: Iad3403dc1ece3d2973054f29f4c7dd2049d39878 Bug-Url: https://bugzilla.redhat.com/1200687 Signed-off-by: Yevgeny Zaspitsky <[email protected]> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClusterResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClustersResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClustersResourceTest.java 7 files changed, 177 insertions(+), 30 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/27/38627/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java index 4ad4677..b992b6d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java @@ -1,8 +1,6 @@ package org.ovirt.engine.api.restapi.resource; -import static org.ovirt.engine.api.restapi.resource.BackendClustersResource.SUB_COLLECTIONS; - import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.resource.AffinityGroupsResource; import org.ovirt.engine.api.resource.AssignedCpuProfilesResource; @@ -23,11 +21,16 @@ import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; -public class BackendClusterResource extends AbstractBackendSubResource<Cluster, VDSGroup> implements - ClusterResource { +import static org.ovirt.engine.api.restapi.resource.BackendClustersResource.SUB_COLLECTIONS; - public BackendClusterResource(String id) { +public class BackendClusterResource<P extends BackendClustersResource> + extends AbstractBackendSubResource<Cluster, VDSGroup> implements ClusterResource { + + protected final P parent; + + public BackendClusterResource(String id, P parent) { super(id, Cluster.class, VDSGroup.class, SUB_COLLECTIONS); + this.parent = parent; } @Override @@ -71,8 +74,8 @@ } @Override - protected Cluster doPopulate(Cluster model, VDSGroup entity) { - return model; + protected Cluster doPopulate(Cluster cluster, VDSGroup entity) { + return parent.doPopulate(cluster, entity); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java index 6629aea..43b6932 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java @@ -70,7 +70,7 @@ @Override @SingleEntityResource public ClusterResource getClusterSubResource(String id) { - return inject(new BackendClusterResource(id)); + return inject(new BackendClusterResource(id, this)); } @Override @@ -131,7 +131,7 @@ protected Clusters mapCollection(List<VDSGroup> entities) { Clusters collection = new Clusters(); for (org.ovirt.engine.core.common.businessentities.VDSGroup entity : entities) { - collection.getClusters().add(addLinks(map(entity))); + collection.getClusters().add(addLinks(populate(map(entity), entity))); } return collection; } @@ -153,7 +153,21 @@ } @Override - protected Cluster doPopulate(Cluster model, VDSGroup entity) { - return model; + protected Cluster doPopulate(Cluster cluster, VDSGroup entity) { + final Guid clusterId = entity.getId(); + final org.ovirt.engine.core.common.businessentities.network.Network network = + getOptionalEntity(org.ovirt.engine.core.common.businessentities.network.Network.class, + VdcQueryType.GetManagementNetwork, + new IdQueryParameters(clusterId), + clusterId.toString(), + false); + if (network != null) { + final Network managementNetwork = new org.ovirt.engine.api.model.Network(); + managementNetwork.setCluster(cluster); + managementNetwork.setId(network.getId().toString()); + cluster.setManagementNetwork(managementNetwork); + } + + return cluster; } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResource.java index 900434f..781cff4 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResource.java @@ -6,12 +6,10 @@ import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.core.common.businessentities.VDSGroup; -public class BackendDataCenterClusterResource extends BackendClusterResource { +public class BackendDataCenterClusterResource extends BackendClusterResource<BackendDataCenterClustersResource> { - private BackendDataCenterClustersResource parent; public BackendDataCenterClusterResource(BackendDataCenterClustersResource parent, String id) { - super(id); - this.parent = parent; + super(id, parent); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClusterResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClusterResourceTest.java index 88009dd..264e6f5 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClusterResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClusterResourceTest.java @@ -1,30 +1,45 @@ package org.ovirt.engine.api.restapi.resource; -import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.getModel; -import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.setUpEntityExpectations; +import java.util.Collections; import javax.ws.rs.WebApplicationException; +import org.junit.Before; import org.junit.Test; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; + +import static org.easymock.EasyMock.expect; +import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.getModel; +import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.setUpEntityExpectations; public class BackendClusterResourceTest - extends AbstractBackendSubResourceTest<Cluster, VDSGroup, BackendClusterResource> { + extends AbstractBackendSubResourceTest<Cluster, VDSGroup, BackendClusterResource<BackendClustersResource>> { + + private static final Guid MANAGEMENT_NETWORK_ID = Guid.newGuid(); + + private boolean isPopulateSet = false; public BackendClusterResourceTest() { - super(new BackendClusterResource(GUIDS[0].toString())); + super(new BackendClusterResource(GUIDS[0].toString(), new BackendClustersResource())); + } + + @Before + public void initParent() { + initResource(resource.parent); } @Test public void testBadGuid() throws Exception { control.replay(); try { - new BackendClusterResource("foo"); + new BackendClusterResource("foo", new BackendClustersResource()); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); @@ -48,9 +63,13 @@ public void testGet() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpGetEntityExpectations(1); + setUpManagementNetworkExpectation(); control.replay(); - verifyModel(resource.get(), 0); + final Cluster cluster = resource.get(); + verifyModel(cluster, 0); + + verifyManagementNetwork(cluster); } @Test @@ -69,6 +88,7 @@ @Test public void testUpdate() throws Exception { setUpGetEntityExpectations(2); + setUpManagementNetworkExpectation(); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVdsGroup, VdsGroupOperationParameters.class, @@ -77,7 +97,21 @@ true, true)); - verifyModel(resource.update(getModel(0)), 0); + final Cluster updatedCluster = resource.update(getModel(0)); + + verifyModel(updatedCluster, 0); + + verifyManagementNetwork(updatedCluster); + } + + private void verifyManagementNetwork(Cluster updatedCluster) { + assertEquals(String.format("%s/%s/%s/%s/%s", + BASE_PATH, + "clusters", + GUIDS[0], + "networks", + MANAGEMENT_NETWORK_ID), + updatedCluster.getManagementNetwork().getHref()); } @Test @@ -137,6 +171,26 @@ } } + private void setUpManagementNetworkExpectation() throws Exception { + setUpPopulateExpectation(); + final Network mockNetwork = control.createMock(Network.class); + expect(mockNetwork.getId()).andReturn(MANAGEMENT_NETWORK_ID); + + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + mockNetwork); + } + + private void setUpPopulateExpectation() { + if (!isPopulateSet) { + expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(Collections.singletonList("true")) + .anyTimes(); + isPopulateSet = true; + } + } + @Override protected VDSGroup getEntity(int index) { return setUpEntityExpectations(control.createMock(VDSGroup.class), index); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClustersResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClustersResourceTest.java index 31fc494..691223d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClustersResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendClustersResourceTest.java @@ -1,6 +1,7 @@ package org.ovirt.engine.api.restapi.resource; import java.util.List; + import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; @@ -102,6 +103,12 @@ new Object[] { GUIDS[1] }, setUpStoragePool(-1)); + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + null); + setUpCreationExpectations(VdcActionType.AddVdsGroup, AddClusterOperationParameters.class, new String[] { "VdsGroup.CompatibilityVersion" }, @@ -132,6 +139,12 @@ new String[] { "Id" }, new Object[] { GUIDS[1] }, setUpStoragePool(-1)); + + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + null); setUpCreationExpectations(VdcActionType.AddVdsGroup, AddClusterOperationParameters.class, @@ -203,6 +216,12 @@ new Object[] { NAMES[1] }, setUpStoragePool(1)); + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + null); + setUpCreationExpectations(VdcActionType.AddVdsGroup, AddClusterOperationParameters.class, new String[] {}, diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResourceTest.java index 8d84a0f..344420a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClusterResourceTest.java @@ -1,33 +1,45 @@ package org.ovirt.engine.api.restapi.resource; -import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.getModel; -import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.setUpEntityExpectations; - import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.UriInfo; +import org.junit.Before; import org.junit.Test; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.network.Network; 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 BackendDataCenterClusterResourceTest - extends AbstractBackendSubResourceTest<Cluster, VDSGroup, BackendClusterResource> { +import static org.easymock.EasyMock.expect; +import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.getModel; +import static org.ovirt.engine.api.restapi.resource.BackendClustersResourceTest.setUpEntityExpectations; - static Guid clusterId = GUIDS[0]; - static Guid dataCenterId = GUIDS[1]; +public class BackendDataCenterClusterResourceTest + extends AbstractBackendSubResourceTest<Cluster, VDSGroup, BackendClusterResource<BackendDataCenterClustersResource>> { + + private static final Guid MANAGEMENT_NETWORK_ID = Guid.newGuid(); + private static final Guid clusterId = GUIDS[0]; + private static final Guid dataCenterId = GUIDS[1]; + + private boolean isPopulateSet = false; public BackendDataCenterClusterResourceTest() { super(new BackendDataCenterClusterResource( new BackendDataCenterClustersResource(dataCenterId.toString()), clusterId.toString())); + } + + @Before + public void initParent() { + initResource(resource.parent); } @Override @@ -103,6 +115,7 @@ @Test public void testUpdate() throws Exception { setUpGetEntityExpectations(2); + setUpManagementNetworkExpectation(); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVdsGroup, VdsGroupOperationParameters.class, @@ -111,7 +124,41 @@ true, true)); - verifyModel(resource.update(getModel(0)), 0); + final Cluster updatedCluster = resource.update(getModel(0)); + + verifyModel(updatedCluster, 0); + + verifyManagementNetwork(updatedCluster); + } + + private void verifyManagementNetwork(Cluster updatedCluster) { + assertEquals(String.format("%s/%s/%s/%s/%s", + BASE_PATH, + "clusters", + GUIDS[0], + "networks", + MANAGEMENT_NETWORK_ID), + updatedCluster.getManagementNetwork().getHref()); + } + + private void setUpManagementNetworkExpectation() throws Exception { + setUpPopulateExpectation(); + final Network mockNetwork = control.createMock(Network.class); + expect(mockNetwork.getId()).andReturn(MANAGEMENT_NETWORK_ID); + + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + mockNetwork); + } + + private void setUpPopulateExpectation() { + if (!isPopulateSet) { + expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(Collections.singletonList("true")) + .anyTimes(); + isPopulateSet = true; + } } @Test diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClustersResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClustersResourceTest.java index 8f2757b..0dd1827 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClustersResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterClustersResourceTest.java @@ -112,6 +112,12 @@ new Object[] { GUIDS[1] }, setUpStoragePool(-1)); + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + null); + setUpCreationExpectations(VdcActionType.AddVdsGroup, AddClusterOperationParameters.class, new String[] { "VdsGroup.CompatibilityVersion" }, @@ -143,6 +149,12 @@ new Object[] { GUIDS[1] }, setUpStoragePool(-1)); + setUpGetEntityExpectations(VdcQueryType.GetManagementNetwork, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + null); + setUpCreationExpectations(VdcActionType.AddVdsGroup, AddClusterOperationParameters.class, new String[] { "VdsGroup.CompatibilityVersion" }, -- To view, visit https://gerrit.ovirt.org/38627 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iad3403dc1ece3d2973054f29f4c7dd2049d39878 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
