[JCLOUDS-1141] azurecompute - fix XML generated by updateRole REST call
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/4e37f701 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/4e37f701 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/4e37f701 Branch: refs/heads/master Commit: 4e37f701f6864439ff7c5a5480012903a0c97f73 Parents: 913e4be Author: Josef Cacek <[email protected]> Authored: Sat Jul 16 12:50:42 2016 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Sun Jul 17 23:30:03 2016 +0200 ---------------------------------------------------------------------- .../jclouds/azurecompute/binders/RoleToXML.java | 17 +++++---- .../features/VirtualMachineApiMockTest.java | 14 +++++++- .../src/test/resources/role-update-body.xml | 36 ++++++++++++++++++++ 3 files changed, 59 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4e37f701/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java index e5f1b26..7c8d529 100644 --- a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java +++ b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java @@ -24,6 +24,9 @@ import org.jclouds.rest.Binder; import com.jamesmurty.utils.XMLBuilder; +/** + * Generates XML request body for the <a href="https://msdn.microsoft.com/en-us/library/azure/jj157187.aspx">UpdateRole REST request</a>. + */ public class RoleToXML implements Binder { @Override @@ -32,14 +35,13 @@ public class RoleToXML implements Binder { Role role = Role.class.cast(input); try { - XMLBuilder builder = XMLBuilder.create("PersistentVMRole", "http://schemas.microsoft.com/windowsazure") - .e("RoleName").t(role.roleName()).up() - .e("RoleType").t(role.roleType()).up() - .e("ConfigurationSets"); - + XMLBuilder builder = XMLBuilder.create("PersistentVMRole", "http://schemas.microsoft.com/windowsazure"); + builder.e("RoleName").t(role.roleName()).up() + .e("RoleType").t(role.roleType()).up(); + XMLBuilder configSetsBuilder = builder.e("ConfigurationSets"); if (!role.configurationSets().isEmpty()) { for (Role.ConfigurationSet configurationSet : role.configurationSets()) { - XMLBuilder configBuilder = builder.e("ConfigurationSet"); // Network + XMLBuilder configBuilder = configSetsBuilder.e("ConfigurationSet"); // Network configBuilder.e("ConfigurationSetType").t(configurationSet.configurationSetType()).up(); XMLBuilder inputEndpoints = configBuilder.e("InputEndpoints"); @@ -63,6 +65,7 @@ public class RoleToXML implements Binder { } } } + builder.e("DataVirtualHardDisks").up() .e("OSVirtualHardDisk") .e("HostCaching").t(role.osVirtualHardDisk().hostCaching()).up() @@ -70,7 +73,7 @@ public class RoleToXML implements Binder { .e("MediaLink").t(role.osVirtualHardDisk().mediaLink().toString()).up() .e("SourceImageName").t(role.osVirtualHardDisk().sourceImageName()).up() .e("OS").t(role.osVirtualHardDisk().os().toString()).up() - .up() // DataVirtualHardDisks + .up() // OSVirtualHardDisk .e("RoleSize").t(role.roleSize().getText()); return (R) request.toBuilder().payload(builder.asString()).build(); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4e37f701/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java index 5bdd3a8..2272c70 100644 --- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java +++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/VirtualMachineApiMockTest.java @@ -18,12 +18,17 @@ package org.jclouds.azurecompute.features; import static org.assertj.core.api.Assertions.assertThat; +import java.io.InputStream; +import java.nio.charset.Charset; + import org.jclouds.azurecompute.domain.Role; import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest; import org.jclouds.azurecompute.xml.RoleHandlerTest; import org.testng.annotations.Test; +import com.google.common.io.ByteStreams; import com.squareup.okhttp.mockwebserver.MockWebServer; +import com.squareup.okhttp.mockwebserver.RecordedRequest; /* * Note: Mock test for CaptureVMImage method is in VMImageApiMockTest class @@ -109,7 +114,14 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { Role role = RoleHandlerTest.expected(); assertThat(api.updateRole("testvnetsg02", role)).isEqualTo("request-1"); - assertSent(server, "PUT", "/services/hostedservices/my-service/deployments/mydeployment/roles/testvnetsg02"); + RecordedRequest request = assertSent(server, "PUT", "/services/hostedservices/my-service/deployments/mydeployment/roles/testvnetsg02"); + + final InputStream is = getClass().getResourceAsStream("/role-update-body.xml"); + try { + assertThat(request.getUtf8Body()).isXmlEqualTo(new String(ByteStreams.toByteArray(is), Charset.forName("UTF-8"))); + } finally { + is.close(); + } } finally { server.shutdown(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4e37f701/azurecompute/src/test/resources/role-update-body.xml ---------------------------------------------------------------------- diff --git a/azurecompute/src/test/resources/role-update-body.xml b/azurecompute/src/test/resources/role-update-body.xml new file mode 100644 index 0000000..c095352 --- /dev/null +++ b/azurecompute/src/test/resources/role-update-body.xml @@ -0,0 +1,36 @@ +<PersistentVMRole xmlns="http://schemas.microsoft.com/windowsazure"> + <RoleName>testvnetsg02</RoleName> + <RoleType>PersistentVMRole</RoleType> + <ConfigurationSets> + <ConfigurationSet> + <ConfigurationSetType>NetworkConfiguration</ConfigurationSetType> + <InputEndpoints> + <InputEndpoint> + <LocalPort>5986</LocalPort> + <Name>PowerShell</Name> + <Port>5986</Port> + <Protocol>tcp</Protocol> + </InputEndpoint> + <InputEndpoint> + <LocalPort>3389</LocalPort> + <Name>Remote Desktop</Name> + <Port>59440</Port> + <Protocol>tcp</Protocol> + </InputEndpoint> + </InputEndpoints> + <SubnetNames> + <SubnetName>Subnet-1</SubnetName> + </SubnetNames> + <NetworkSecurityGroup>vnetnsgsg01</NetworkSecurityGroup> + </ConfigurationSet> + </ConfigurationSets> + <DataVirtualHardDisks /> + <OSVirtualHardDisk> + <HostCaching>ReadWrite</HostCaching> + <DiskName>testvnetsg02-testvnetsg02-0-201502180825130518</DiskName> + <MediaLink>https://portalvhdsxz8nc6chc32j1.blob.core.windows.net/vhds/testvnetsg02-testvnetsg02-2015-02-18.vhd</MediaLink> + <SourceImageName>a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201412.01-en.us-127GB.vhd</SourceImageName> + <OS>WINDOWS</OS> + </OSVirtualHardDisk> + <RoleSize>Small</RoleSize> +</PersistentVMRole>
