Merge pull request #461 from aledsage/issue-830-vapp-virtualHardwareSection

Issue 830 vapp virtual hardware section
This commit is contained in:
Adrian Cole 2012-03-16 11:47:13 -07:00
commit 6dc3f8e045
14 changed files with 255 additions and 276 deletions

View File

@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import com.google.common.base.Objects;
@ -31,6 +32,7 @@ import com.google.common.base.Objects;
*
* @author danikov
*/
@XmlType(name = "NetworkConfiguration")
@XmlRootElement(name = "NetworkConfiguration")
public class NetworkConfiguration {

View File

@ -24,6 +24,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.jclouds.vcloud.director.v1_5.domain.ovf.RASD;
@ -41,6 +42,7 @@ import com.google.common.collect.Lists;
*
* @author grkvlt@apache.org
*/
@XmlRootElement(name = "RasdItemsList")
@XmlType(name = "RasdItemsList")
public class RasdItemsList extends ResourceType {

View File

@ -248,9 +248,9 @@ public class CIMResourceAllocationSettingDataType {
private CimBoolean automaticAllocation;
@XmlElement(name = "AutomaticDeallocation", nillable = true)
private CimBoolean automaticDeallocation;
@XmlElementRef(name = "Caption", namespace = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData", type = ResourceAllocationCaption.class)
@XmlElement(name = "Caption", nillable = true, namespace = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
private ResourceAllocationCaption caption;
@XmlElementRef(name = "ChangeableType", namespace = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData", type = ResourceAllocationChangeableType.class)
@XmlElement(name = "ChangeableType", nillable = true, namespace = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
private ResourceAllocationChangeableType changeableType;
@XmlElement(name = "ConfigurationName", nillable = true)
private CimString configurationName;

View File

@ -1,28 +1,30 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.08 at 02:47:44 PM GMT
//
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.bind.annotation.XmlType;
public class ResourceAllocationCaption
extends JAXBElement<ResourceAllocationCaptionType>
{
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class ResourceAllocationCaption extends CimString {
protected final static QName NAME = new QName("http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData", "Caption");
public ResourceAllocationCaption(ResourceAllocationCaptionType value) {
super(NAME, ((Class) ResourceAllocationCaptionType.class), null, value);
}
public ResourceAllocationCaption() {
super(NAME, ((Class) ResourceAllocationCaptionType.class), null, null);
}
}

View File

@ -1,30 +0,0 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.annotation.XmlType;
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class ResourceAllocationCaptionType extends CimString {
}

View File

@ -1,28 +1,30 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.08 at 02:47:44 PM GMT
//
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.bind.annotation.XmlType;
public class ResourceAllocationChangeableType
extends JAXBElement<ResourceAllocationChangeableTypeType>
{
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class ResourceAllocationChangeableType extends CimUnsignedShort {
protected final static QName NAME = new QName("http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData", "ChangeableType");
public ResourceAllocationChangeableType(ResourceAllocationChangeableTypeType value) {
super(NAME, ((Class) ResourceAllocationChangeableTypeType.class), null, value);
}
public ResourceAllocationChangeableType() {
super(NAME, ((Class) ResourceAllocationChangeableTypeType.class), null, null);
}
}

View File

@ -1,30 +0,0 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.annotation.XmlType;
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class ResourceAllocationChangeableTypeType extends CimUnsignedShort {
}

View File

@ -1,28 +1,30 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.08 at 02:47:44 PM GMT
//
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.bind.annotation.XmlType;
public class VirtualSystemCaption
extends JAXBElement<VirtualSystemCaptionType>
{
/**
* <p>Java class for anonymous complex type.
*/
@XmlType(name = "")
public class VirtualSystemCaption extends CimString {
protected final static QName NAME = new QName("http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData", "Caption");
public VirtualSystemCaption(VirtualSystemCaptionType value) {
super(NAME, ((Class) VirtualSystemCaptionType.class), null, value);
}
public VirtualSystemCaption() {
super(NAME, ((Class) VirtualSystemCaptionType.class), null, null);
}
}

View File

@ -1,30 +0,0 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for anonymous complex type.
*/
@XmlType(name = "")
public class VirtualSystemCaptionType extends CimString {
}

View File

@ -1,28 +1,30 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.08 at 02:47:44 PM GMT
//
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.bind.annotation.XmlType;
public class VirtualSystemChangeableType
extends JAXBElement<VirtualSystemChangeableTypeType>
{
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class VirtualSystemChangeableType extends CimUnsignedShort {
protected final static QName NAME = new QName("http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData", "ChangeableType");
public VirtualSystemChangeableType(VirtualSystemChangeableTypeType value) {
super(NAME, ((Class) VirtualSystemChangeableTypeType.class), null, value);
}
public VirtualSystemChangeableType() {
super(NAME, ((Class) VirtualSystemChangeableTypeType.class), null, null);
}
}

View File

@ -1,30 +0,0 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.vcloud.director.v1_5.domain.cim;
import javax.xml.bind.annotation.XmlType;
/**
* Java class for anonymous complex type.
*/
@XmlType(name = "")
public class VirtualSystemChangeableTypeType extends CimUnsignedShort {
}

View File

@ -19,8 +19,10 @@
package org.jclouds.vcloud.director.v1_5.domain.ovf;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_OVF_NS;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.VCLOUD_1_5_NS;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.jclouds.vcloud.director.v1_5.domain.cim.CIMResourceAllocationSettingDataType;
@ -35,6 +37,7 @@ import org.jclouds.vcloud.director.v1_5.domain.cim.CIMResourceAllocationSettingD
* @author grkvlt@apache.org
*/
@XmlType(name = "RASD_Type")
@XmlRootElement(name = "Item", namespace = VCLOUD_1_5_NS)
public class RASD extends CIMResourceAllocationSettingDataType {
// TODO Add toString, hashCode and equals

View File

@ -134,6 +134,9 @@ public interface VdcClient {
* The status of vApp template will be NOT_READY(0) until the ovf and all disks are uploaded
* to the transfer site. After this a task will run on the vApp template uploading.
*
* Note that the empty vApp template's getFiles() returns a file of size -1 after step one above,
* because the descriptor.ovf does not yet exist.
*
* @return a VAppTemplate resource which will contain a task.
* The user should should wait for this task to finish to be able to use the VAppTemplate.
*/

View File

@ -91,6 +91,8 @@ import org.jclouds.vcloud.director.v1_5.domain.VAppNetworkConfiguration;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
import org.jclouds.vcloud.director.v1_5.domain.VmPendingQuestion;
import org.jclouds.vcloud.director.v1_5.domain.cim.CimString;
import org.jclouds.vcloud.director.v1_5.domain.cim.CimUnsignedInt;
import org.jclouds.vcloud.director.v1_5.domain.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.OperatingSystemSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.RASD;
@ -748,16 +750,17 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "PUT /vApp/{id}/productSections", dependsOnMethods = { "testGetProductSections" })
public void testModifyProductSections() {
ProductSectionList sectionList = vAppClient.getProductSections(vApp.getHref());
// sectionList.setX()
ProductSectionList origSections = vAppClient.getProductSections(vApp.getHref());
ProductSectionList newSections = origSections.toBuilder().build();
// The method under test
Task modifyProductSections = vAppClient.modifyProductSections(vApp.getHref(), sectionList);
Task modifyProductSections = vAppClient.modifyProductSections(vApp.getHref(), newSections);
assertTrue(retryTaskSuccess.apply(modifyProductSections), String.format(TASK_COMPLETE_TIMELY, "modifyProductSections"));
ProductSectionList modifiedList = vAppClient.getProductSections(vApp.getHref());
// assertEquals(modified.getX, "");
Checks.checkProductSectionList(modifiedList);
// TODO What to modify, to confirm that changes took effect?
}
@Test(testName = "GET /vApp/{id}/question", dependsOnMethods = { "testGetVApp" })
@ -884,31 +887,48 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/cpu", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionCpu() {
RASD rasd = vAppClient.getVirtualHardwareSectionCpu(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RASD rasd = vAppClient.getVirtualHardwareSectionCpu(vmURI);
checkRASD(rasd);
}
@Test(testName = "PUT /vApp/{id}/virtualHardwareSection/cpu", dependsOnMethods = { "testGetVirtualHardwareSectionCpu" })
public void testModifyVirtualHardwareSectionCpu() {
RASD rasd = vAppClient.getVirtualHardwareSectionCpu(vApp.getHref());
// rasd.setX("New Info");
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RASD origSection = vAppClient.getVirtualHardwareSectionCpu(vmURI);
RASD newSection = origSection.toBuilder().build();
// Method under test
Task modifyVirtualHardwareSectionCpu = vAppClient.modifyVirtualHardwareSectionCpu(vApp.getHref(), rasd);
Task modifyVirtualHardwareSectionCpu = vAppClient.modifyVirtualHardwareSectionCpu(vmURI, newSection);
assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionCpu), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionCpu"));
// Retrieve the modified section
RASD modified = vAppClient.getVirtualHardwareSectionCpu(vApp.getHref());
// Check the retrieved object is well formed
RASD modified = vAppClient.getVirtualHardwareSectionCpu(vmURI);
// Check the retrieved object
checkRASD(modified);
// assertEquals(modified.getInfo(), "New Info");
// TODO What is modifiable? What can we change, so we can assert the change took effect?
// I tried changing "weight", but it continued to have the value zero when looked up post-modify.
//
// long weight = random.nextInt(Integer.MAX_VALUE);
// RASD newSection = origSection.toBuilder()
// .weight(newCimUnsignedInt(weight))
// .build();
// ...
// assertEquals(modified.getWeight().getValue(), weight, String.format(OBJ_FIELD_EQ, VAPP, "virtualHardwareSection/cpu/weight", weight, ""+modified.getWeight()));
}
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/disks", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionDisks() {
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionDisks(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionDisks(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
@ -916,32 +936,49 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "PUT /vApp/{id}/virtualHardwareSection/disks", dependsOnMethods = { "testGetVirtualHardwareSectionDisks" })
public void testModifyVirtualHardwareSectionDisks() {
// Copy the existing items list and add a new item
RasdItemsList oldRasdItems = vAppClient.getVirtualHardwareSectionDisks(vApp.getHref());
RASD item = RASD.builder().build();
RasdItemsList newRasdItems = oldRasdItems.toBuilder()
.item(item)
.build();
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
// Copy the existing items list and modify the name of an item
RasdItemsList oldSection = vAppClient.getVirtualHardwareSectionDisks(vmURI);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
Task modifyVirtualHardwareSectionDisks = vAppClient.modifyVirtualHardwareSectionDisks(vApp.getHref(), newRasdItems);
Task modifyVirtualHardwareSectionDisks = vAppClient.modifyVirtualHardwareSectionDisks(vmURI, newSection);
assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionDisks), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionDisks"));
// Retrieve the modified section
RasdItemsList modified = vAppClient.getVirtualHardwareSectionDisks(vApp.getHref());
RasdItemsList modified = vAppClient.getVirtualHardwareSectionDisks(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
// Check the modified items list
// assertEquals(modified.getX(), "");
assertTrue(modified.getItems().contains(item));
assertEquals(modified, newRasdItems);
// TODO What is modifiable? What can we change, so we can assert the change took effect?
// I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
//
// List<RASD> newItems = new ArrayList<RASD>(oldSection.getItems());
// RASD item0 = newItems.get(0);
// String item0InstanceId = item0.getInstanceID().getValue();
// String item0ElementName = item0.getElementName().getValue()+"-"+random.nextInt(Integer.MAX_VALUE);
// newItems.set(0, item0.toBuilder().elementName(newCimString(item0ElementName)).build());
// RasdItemsList newSection = oldSection.toBuilder()
// .items(newItems)
// .build();
// ...
// long weight = random.nextInt(Integer.MAX_VALUE);
// RASD newSection = origSection.toBuilder()
// .weight(newCimUnsignedInt(weight))
// .build();
// ...
// checkHasMatchingItem("virtualHardwareSection/disk", modified, item0InstanceId, item0ElementName);
}
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/media", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionMedia() {
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionMedia(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionMedia(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
@ -949,7 +986,10 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/memory", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionMemory() {
RASD rasd = vAppClient.getVirtualHardwareSectionCpu(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RASD rasd = vAppClient.getVirtualHardwareSectionCpu(vmURI);
// Check the retrieved object is well formed
checkRASD(rasd);
@ -957,20 +997,33 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "PUT /vApp/{id}/virtualHardwareSection/memory", dependsOnMethods = { "testGetVirtualHardwareSectionMemory" })
public void testModifyVirtualHardwareSectionMemory() {
RASD rasd = vAppClient.getVirtualHardwareSectionMemory(vApp.getHref());
// rasd.setX("New Info");
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RASD origSection = vAppClient.getVirtualHardwareSectionMemory(vmURI);
RASD newSection = origSection.toBuilder().build();
// Method under test
Task modifyVirtualHardwareSectionMemory = vAppClient.modifyVirtualHardwareSectionMemory(vApp.getHref(), rasd);
Task modifyVirtualHardwareSectionMemory = vAppClient.modifyVirtualHardwareSectionMemory(vmURI, newSection);
assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionMemory), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionMemory"));
RASD modified = vAppClient.getVirtualHardwareSectionMemory(vApp.getHref());
// assertEquals(modified.getInfo(), "New Info");
// Retrieve the modified section
RASD modified = vAppClient.getVirtualHardwareSectionMemory(vmURI);
// Check the retrieved object
checkRASD(modified);
// TODO What is modifiable? What can we change, so we can assert the change took effect?
// I tried changing "weight", but it continued to have the value zero when looked up post-modify.
// See description under testModifyVirtualHardwareSectionMemoryCpu
}
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/networkCards", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionNetworkCards() {
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionNetworkCards(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionNetworkCards(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
@ -978,32 +1031,33 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "PUT /vApp/{id}/virtualHardwareSection/networkCards", dependsOnMethods = { "testGetVirtualHardwareSectionNetworkCards" })
public void testModifyVirtualHardwareSectionNetworkCards() {
// Copy the existing items list and add a new item
RasdItemsList oldRasdItems = vAppClient.getVirtualHardwareSectionNetworkCards(vApp.getHref());
RASD item = RASD.builder().build();
RasdItemsList newRasdItems = oldRasdItems.toBuilder()
.item(item)
.build();
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList oldSection = vAppClient.getVirtualHardwareSectionNetworkCards(vmURI);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
Task modifyVirtualHardwareSectionNetworkCards = vAppClient.modifyVirtualHardwareSectionNetworkCards(vApp.getHref(), newRasdItems);
Task modifyVirtualHardwareSectionNetworkCards = vAppClient.modifyVirtualHardwareSectionNetworkCards(vmURI, newSection);
assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionNetworkCards), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionNetworkCards"));
// Retrieve the modified section
RasdItemsList modified = vAppClient.getVirtualHardwareSectionNetworkCards(vApp.getHref());
RasdItemsList modified = vAppClient.getVirtualHardwareSectionNetworkCards(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
// Check the modified items list
// assertEquals(modified.getX(), "");
assertTrue(modified.getItems().contains(item));
assertEquals(modified, newRasdItems);
// TODO What is modifiable? What can we change, so we can assert the change took effect?
// I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
// See the description in testModifyVirtualHardwareSectionDisks
}
@Test(testName = "GET /vApp/{id}/virtualHardwareSection/serialPorts", dependsOnMethods = { "testGetVirtualHardwareSection" })
public void testGetVirtualHardwareSectionSerialPorts() {
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionSerialPorts(vApp.getHref());
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList rasdItems = vAppClient.getVirtualHardwareSectionSerialPorts(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(rasdItems);
@ -1011,27 +1065,25 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
@Test(testName = "PUT /vApp/{id}/virtualHardwareSection/serialPorts", dependsOnMethods = { "testGetVirtualHardwareSectionSerialPorts" })
public void testModifyVirtualHardwareSectionSerialPorts() {
// Copy the existing items list and add a new item
RasdItemsList oldRasdItems = vAppClient.getVirtualHardwareSectionSerialPorts(vApp.getHref());
RASD item = RASD.builder().build();
RasdItemsList newRasdItems = oldRasdItems.toBuilder()
.item(item)
.build();
// Get URI for child VM
URI vmURI = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
RasdItemsList oldSection = vAppClient.getVirtualHardwareSectionSerialPorts(vmURI);
RasdItemsList newSection = oldSection.toBuilder().build();
// Method under test
Task modifyVirtualHardwareSectionSerialPorts = vAppClient.modifyVirtualHardwareSectionSerialPorts(vApp.getHref(), newRasdItems);
Task modifyVirtualHardwareSectionSerialPorts = vAppClient.modifyVirtualHardwareSectionSerialPorts(vmURI, newSection);
assertTrue(retryTaskSuccess.apply(modifyVirtualHardwareSectionSerialPorts), String.format(TASK_COMPLETE_TIMELY, "modifyVirtualHardwareSectionSerialPorts"));
// Retrieve the modified section
RasdItemsList modified = vAppClient.getVirtualHardwareSectionSerialPorts(vApp.getHref());
RasdItemsList modified = vAppClient.getVirtualHardwareSectionSerialPorts(vmURI);
// Check the retrieved object is well formed
checkRasdItemsList(modified);
// Check the modified items list
// assertEquals(modified.getX(), "");
assertTrue(modified.getItems().contains(item));
assertEquals(modified, newRasdItems);
// TODO What is modifiable? What can we change, so we can assert the change took effect?
// I tried changing "elementName" of one of the items, but it continued to have the old value when looked up post-modify.
// See the description in testModifyVirtualHardwareSectionDisks
}
@Test(testName = "GET /vApp/{id}/metadata", dependsOnMethods = { "testGetVApp" })
@ -1245,4 +1297,33 @@ public class VAppClientLiveTest extends BaseVCloudDirectorClientLiveTest {
Throwables.propagate(ioe);
}
}
@SuppressWarnings("unused")
private CimUnsignedInt newCimUnsignedInt(long val) {
CimUnsignedInt result = new CimUnsignedInt();
result.setValue(val);
return result;
}
@SuppressWarnings("unused")
private CimString newCimString(String val) {
CimString result = new CimString();
result.setValue(val);
return result;
}
@SuppressWarnings("unused")
private void checkHasMatchingItem(String context, RasdItemsList items, String instanceId, String elementName) {
boolean found = false;
for (RASD item : items.getItems()) {
String itemInstanceId = item.getInstanceID().getValue();
if (itemInstanceId.equals(instanceId)) {
assertEquals(item.getElementName().getValue(), elementName,
String.format(OBJ_FIELD_EQ, VAPP, context+"/"+instanceId+"/elementName", elementName, ""+item.getElementName().getValue()));
found = true;
break;
}
}
assertTrue(found, "no "+context+" item found with id "+instanceId+"; only found "+items);
}
}