Piotr Kliczewski has uploaded a new change for review.

Change subject: json-rpc: fix the Host.getVMList return value
......................................................................

json-rpc: fix the Host.getVMList return value

Hack response type processing to accept both map with status and vmid
and an array of vmids.

Bug-Url: https://bugzilla.redhat.com/1196327
Change-Id: Iade8c1d5954eaae4339e95d9d5031a7b98cf831b
Signed-off-by: pkliczewski <[email protected]>
Related-To: https://gerrit.ovirt.org/#/c/38172
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VMListReturnForXmlRpc.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/jsonrpc/MarshallingTestCase.java
3 files changed, 39 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/38321/1

diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
index 03fa424..4a3fab7 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
@@ -162,9 +162,7 @@
                         new ArrayList<String>(Arrays.asList(new String[] 
{}))).build();
         Map<String, Object> response =
                 new FutureMap(this.client, request).withResponseKey("vmList")
-                        .withResponseType(Object[].class)
-                        .withSubTypeClazz(new HashMap<String, 
Object>().getClass())
-                        .withSubtypeKey("vmId");
+                        .withResponseType(Object[].class);
         return new VMListReturnForXmlRpc(response);
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VMListReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VMListReturnForXmlRpc.java
index 85d8050..fbbc3da 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VMListReturnForXmlRpc.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VMListReturnForXmlRpc.java
@@ -26,7 +26,16 @@
         if (temp != null) {
             mVmList = new HashMap[temp.length];
             for (int i = 0; i < temp.length; i++) {
-                mVmList[i] = (Map<String, Object>) temp[i];
+                // 1196327: we need to process both types of list message
+                // when temp[i] is a String we process array of vmids
+                // when temp[i] is a Map we process a map with status to vmid 
mapping
+                if (String.class.isInstance(temp[i])) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("vmId", temp[i]);
+                    mVmList[i] = map;
+                } else {
+                    mVmList[i] = (Map<String, Object>) temp[i];
+                }
             }
         }
     }
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/jsonrpc/MarshallingTestCase.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/jsonrpc/MarshallingTestCase.java
index 97c6533..d96467a 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/jsonrpc/MarshallingTestCase.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/jsonrpc/MarshallingTestCase.java
@@ -294,6 +294,34 @@
 
     @SuppressWarnings("unchecked")
     @Test
+    public void testGetVMListIdsOnly() throws JsonProcessingException, 
IOException, InterruptedException,
+            ExecutionException,
+            TimeoutException, ClientConnectionException {
+        // Given
+        String json =
+                "{\"jsonrpc\": \"2.0\", \"id\": 
\"e9968b53-7450-4059-83e6-d3569f7024ec\", \"result\": 
[\"1397d80b-1c48-4d4a-acf9-ebd669bf3b25\"]}";
+        ObjectMapper mapper = new ObjectMapper();
+        JsonRpcResponse response = 
JsonRpcResponse.fromJsonNode(mapper.readTree(json));
+        Future<JsonRpcResponse> future = mock(Future.class);
+        when(future.get()).thenReturn(response);
+        JsonRpcClient client = mock(JsonRpcClient.class);
+        JsonRpcRequest request = mock(JsonRpcRequest.class);
+        when(client.call(request)).thenReturn(future);
+
+        // When
+        Map<String, Object> map = new FutureMap(client, 
request).withResponseKey("vmList")
+                .withResponseType(Object[].class);
+
+        // Then
+        VMListReturnForXmlRpc vmList = new VMListReturnForXmlRpc(map);
+        assertEquals("Done", vmList.mStatus.mMessage);
+        assertEquals(0, vmList.mStatus.mCode);
+        assertEquals(1, vmList.mVmList.length);
+        assertEquals("1397d80b-1c48-4d4a-acf9-ebd669bf3b25", (String) 
vmList.mVmList[0].get("vmId"));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
     public void testStoragePoolInfo() throws JsonProcessingException, 
IOException, InterruptedException,
             ExecutionException, TimeoutException, ClientConnectionException {
         // Given


-- 
To view, visit https://gerrit.ovirt.org/38321
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iade8c1d5954eaae4339e95d9d5031a7b98cf831b
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Piotr Kliczewski <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to