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
