Maor Lipchuk has uploaded a new change for review.

Change subject: restapi:Fix CRUD operations for iSCSI Storage connection.
......................................................................

restapi:Fix CRUD operations for iSCSI Storage connection.

1) renaming class BackendIscsiBondStorageServerConnection to
BackendIscsiBondStorageConnectionResource to be compatible with the
plural resource name
2) Fix remove and get operations for Storage Connection in IscsiBond
3) Adding appropriate tests for resource commands in REST.
Usages:
Get a list of Storage Connections contained in the iSCSI bond:
Get
/api/datacenters/{datacenter_id}/iscsibonds/{iscsibond_id}/storageconnections/
Get a specific Storage Connection in the iSCSI bond:
Get
/api/datacenters/{datacenter_id}/iscsibonds/{iscsibond_id}/storageconnections/{storage_id}/
Adding a new Storage Connection to an existing iSCSI Bond:
POST /api/datacenters/{datacenter_id}/iscsibonds HTTP/1.1
Accept: application/xml
<storage_connection id="{connection_id}"></storage_connection>
Remove a Storage Connection from the existing iSCSi Bond:
DELETE
/api/datacenters/{datacenter_id}/iscsibonds/{iscsibond_id}/storageconnections/{storage_id}/
HTTP/1.1

Change-Id: I2424067b4371b6a99f61ea687155c4082855aff5
Bug-Url: https://bugzilla.redhat.com/1133896
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResource.java
D 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageServerConnection.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResourceTest.java
5 files changed, 288 insertions(+), 30 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/32129/1

diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResource.java
new file mode 100644
index 0000000..cf4e562
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResource.java
@@ -0,0 +1,36 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.core.common.businessentities.IscsiBond;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import 
org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendIscsiBondStorageConnectionResource extends 
BackendStorageServerConnectionResource {
+
+    private BackendIscsiBondStorageConnectionsResource parent;
+
+    public BackendIscsiBondStorageConnectionResource(String id, 
BackendIscsiBondStorageConnectionsResource parent) {
+        super(id, parent);
+        this.parent = parent;
+    }
+
+    @Override
+    public StorageConnection get() {
+        IscsiBond iscsiBond = parent.getIscsiBond();
+        if (!iscsiBond.getStorageConnectionIds().contains(guid.toString())) {
+            return notFound();
+        }
+
+        StorageServerConnections entity =
+                
getEntity(org.ovirt.engine.core.common.businessentities.StorageServerConnections.class,
+                        VdcQueryType.GetStorageServerConnectionById,
+                        new StorageServerConnectionQueryParametersBase(guid),
+                        guid.toString());
+
+        if (entity == null) {
+            return notFound();
+        }
+        return addLinks(map(entity));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResource.java
index 11344ab..d1a2465 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResource.java
@@ -4,7 +4,6 @@
 
 import javax.ws.rs.core.Response;
 
-import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.StorageConnection;
 import org.ovirt.engine.api.model.StorageConnections;
 import org.ovirt.engine.api.resource.StorageServerConnectionResource;
@@ -43,18 +42,8 @@
     }
 
     @Override
-    public Response remove(String id, Host host) {
-        // TODO should return BadRequest error
-        return null;
-    }
-
-    public Response remove(String id) {
-        return performRemove(id);
-    }
-
-    @Override
     public StorageServerConnectionResource 
getStorageConnectionSubResource(String id) {
-        return inject(new BackendIscsiBondStorageServerConnection(id, this));
+        return inject(new BackendIscsiBondStorageConnectionResource(id, this));
     }
 
     @Override
@@ -64,7 +53,7 @@
         return performAction(VdcActionType.EditIscsiBond, new 
EditIscsiBondParameters(iscsiBond));
     }
 
-    private IscsiBond getIscsiBond() {
+    protected IscsiBond getIscsiBond() {
         return getEntity(IscsiBond.class, VdcQueryType.GetIscsiBondById, new 
IdQueryParameters(iscsiBondId), iscsiBondId.toString());
     }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageServerConnection.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageServerConnection.java
deleted file mode 100644
index a61c329..0000000
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageServerConnection.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.ovirt.engine.api.restapi.resource;
-
-import org.ovirt.engine.api.model.StorageConnection;
-import 
org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase;
-import org.ovirt.engine.core.common.queries.VdcQueryType;
-
-public class BackendIscsiBondStorageServerConnection extends 
BackendStorageServerConnectionResource {
-
-    public BackendIscsiBondStorageServerConnection(String id, 
BackendStorageServerConnectionsResource parent) {
-        super(id, parent);
-    }
-
-    @Override
-    public StorageConnection get() {
-        return 
performGet(VdcQueryType.GetStorageServerConnectionByIscsiBondId, new 
StorageServerConnectionQueryParametersBase(guid.toString()));
-    }
-}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResourceTest.java
new file mode 100644
index 0000000..519f54f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionResourceTest.java
@@ -0,0 +1,115 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.core.common.businessentities.IscsiBond;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import 
org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendIscsiBondStorageConnectionResourceTest extends 
AbstractBackendSubResourceTest<StorageConnection, StorageServerConnections, 
BackendIscsiBondStorageConnectionResource> {
+
+    protected static final Guid ISCSI_BOND_ID = GUIDS[1];
+    protected static final Guid STORAGE_CONNECTION_ID = GUIDS[2];
+
+    @Override
+    protected void init() {
+        super.init();
+        initResource(resource.getParent());
+    }
+
+    public BackendIscsiBondStorageConnectionResourceTest() {
+        super(new 
BackendIscsiBondStorageConnectionResource(STORAGE_CONNECTION_ID.toString(),
+                new 
BackendIscsiBondStorageConnectionsResource(ISCSI_BOND_ID.toString())));
+    }
+
+    @Test
+    public void testGet() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 
getIscsiBondContainingStorageConnection());
+
+        
setUpEntityQueryExpectations(VdcQueryType.GetStorageServerConnectionById,
+                StorageServerConnectionQueryParametersBase.class,
+                new String[] { "ServerConnectionId" },
+                new Object[] { STORAGE_CONNECTION_ID.toString() },
+                getEntity(0));
+
+        control.replay();
+
+        StorageConnection model = resource.get();
+        assertEquals(GUIDS[0].toString(), model.getId());
+        verifyLinks(model);
+    }
+
+    @Test
+    public void testGetWithInvalidStorageId() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, getIscsiBondWithNoMatchingStorages());
+        control.replay();
+
+        try {
+            resource.get();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testGetStorageConnectionNotFound() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 
getIscsiBondContainingStorageConnection());
+
+        
setUpEntityQueryExpectations(VdcQueryType.GetStorageServerConnectionById,
+                StorageServerConnectionQueryParametersBase.class,
+                new String[] { "ServerConnectionId" },
+                new Object[] { STORAGE_CONNECTION_ID.toString() },
+                null);
+        control.replay();
+
+        try {
+            resource.get();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    protected void setUpEntityQueryExpectations(int times, IscsiBond 
iscsiBond) throws Exception {
+        while (times-- > 0) {
+            setUpEntityQueryExpectations(VdcQueryType.GetIscsiBondById,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { ISCSI_BOND_ID },
+                    iscsiBond);
+        }
+    }
+
+    private org.ovirt.engine.core.common.businessentities.IscsiBond 
getIscsiBondContainingStorageConnection() {
+        org.ovirt.engine.core.common.businessentities.IscsiBond iscsiBond =
+                new org.ovirt.engine.core.common.businessentities.IscsiBond();
+        iscsiBond.setId(ISCSI_BOND_ID);
+        
iscsiBond.getStorageConnectionIds().add(STORAGE_CONNECTION_ID.toString());
+        return iscsiBond;
+    }
+
+    private org.ovirt.engine.core.common.businessentities.IscsiBond 
getIscsiBondWithNoMatchingStorages() {
+        org.ovirt.engine.core.common.businessentities.IscsiBond iscsiBond =
+                new org.ovirt.engine.core.common.businessentities.IscsiBond();
+        iscsiBond.setId(ISCSI_BOND_ID);
+        iscsiBond.getStorageConnectionIds().add(GUIDS[0].toString());
+        return iscsiBond;
+    }
+
+    @Override
+    protected StorageServerConnections getEntity(int index) {
+        StorageServerConnections cnx = new StorageServerConnections();
+        cnx.setid(GUIDS[index].toString());
+        cnx.setconnection("10.11.12.13" + ":" + "/1");
+        return cnx;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResourceTest.java
new file mode 100644
index 0000000..8acad7e
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendIscsiBondStorageConnectionsResourceTest.java
@@ -0,0 +1,135 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.core.common.action.EditIscsiBondParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+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 BackendIscsiBondStorageConnectionsResourceTest
+        extends AbstractBackendCollectionResourceTest<StorageConnection, 
org.ovirt.engine.core.common.businessentities.StorageServerConnections, 
BackendStorageServerConnectionsResource> {
+
+    protected static final Guid ISCSI_BOND_ID = GUIDS[1];
+    protected static final Guid STORAGE_CONNECTION_ID = GUIDS[2];
+
+    public BackendIscsiBondStorageConnectionsResourceTest() {
+        super(new 
BackendIscsiBondStorageConnectionsResource(ISCSI_BOND_ID.toString()), null, "");
+    }
+
+    @Override
+    protected List<StorageConnection> getCollection() {
+        return collection.list().getStorageConnections();
+    }
+
+    @Override
+    protected StorageServerConnections getEntity(int index) {
+        StorageServerConnections cnx = new StorageServerConnections();
+        cnx.setid(GUIDS[index].toString());
+        cnx.setconnection("10.11.12.13" + ":" + "/1");
+        return cnx;
+    }
+
+    protected StorageConnection getDummyStorageConnection() {
+        StorageConnection cnx = new StorageConnection();
+        cnx.setId(STORAGE_CONNECTION_ID.toString());
+        return cnx;
+    }
+
+    @Test
+    public void testAddStorageConnectionToIscsiBond() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+
+        setUpGetEntityExpectations(VdcQueryType.GetIscsiBondById,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { ISCSI_BOND_ID },
+                getIscsiBond());
+
+        setUpActionExpectations(VdcActionType.EditIscsiBond,
+                EditIscsiBondParameters.class,
+                new String[] { "IscsiBond" },
+                new Object[] { getIscsiBondContainingStorageConnection() },
+                true,
+                true,
+                null);
+
+        Response response = collection.add(getDummyStorageConnection());
+        assertEquals(200, response.getStatus());
+    }
+
+    @Test
+    public void testRemove() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        StorageConnection storageConnection = new StorageConnection();
+        storageConnection.setId(STORAGE_CONNECTION_ID.toString());
+
+        setUpGetEntityExpectations(VdcQueryType.GetIscsiBondById,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { ISCSI_BOND_ID },
+                getIscsiBondContainingStorageConnection());
+
+        setUpActionExpectations(VdcActionType.EditIscsiBond,
+                EditIscsiBondParameters.class,
+                new String[] { "IscsiBond" },
+                new Object[] { getIscsiBond() },
+                true,
+                true,
+                null);
+
+        Response response = 
collection.performRemove(storageConnection.getId());
+        assertEquals(200, response.getStatus());
+    }
+
+    @Override
+    protected void setUpQueryExpectations(String query, Object failure) throws 
Exception {
+        
setUpEntityQueryExpectations(VdcQueryType.GetStorageServerConnectionByIscsiBondId,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { ISCSI_BOND_ID },
+                setUpStorageConnections(),
+                failure);
+        control.replay();
+    }
+
+    protected List<StorageServerConnections> setUpStorageConnections() {
+        List<StorageServerConnections> storageConnections = new ArrayList<>();
+        for (int i = 0; i < NAMES.length; i++) {
+            storageConnections.add(getEntity(i));
+        }
+        return storageConnections;
+    }
+
+    /**
+     * There is no name and description in StorageConnection, that is why the 
method is overridden
+     */
+    @Override
+    protected void verifyModel(StorageConnection model, int index) {
+        assertEquals(GUIDS[index].toString(), model.getId());
+        verifyLinks(model);
+    }
+
+    private org.ovirt.engine.core.common.businessentities.IscsiBond 
getIscsiBond() {
+        org.ovirt.engine.core.common.businessentities.IscsiBond iscsiBond =
+                new org.ovirt.engine.core.common.businessentities.IscsiBond();
+        iscsiBond.setId(ISCSI_BOND_ID);
+        return iscsiBond;
+    }
+
+    private org.ovirt.engine.core.common.businessentities.IscsiBond 
getIscsiBondContainingStorageConnection() {
+        org.ovirt.engine.core.common.businessentities.IscsiBond iscsiBond =
+                new org.ovirt.engine.core.common.businessentities.IscsiBond();
+        iscsiBond.setId(ISCSI_BOND_ID);
+        
iscsiBond.getStorageConnectionIds().add(STORAGE_CONNECTION_ID.toString());
+        return iscsiBond;
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/32129
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2424067b4371b6a99f61ea687155c4082855aff5
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to