Updated Branches: refs/heads/scaleupvm 81cccde79 -> c2ea13dbf
Added test cases for CitrixResourceBase Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c2ea13db Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c2ea13db Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c2ea13db Branch: refs/heads/scaleupvm Commit: c2ea13dbfbd1daa622dcb466a11f0c08fac06b82 Parents: 81cccde Author: Nitin Mehta <[email protected]> Authored: Wed Mar 20 21:11:51 2013 +0530 Committer: Nitin Mehta <[email protected]> Committed: Wed Mar 20 21:11:51 2013 +0530 ---------------------------------------------------------------------- .../xen/resource/CitrixResourceBaseTest.java | 148 +++++++++++++++ 1 files changed, 148 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2ea13db/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java b/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java new file mode 100644 index 0000000..7392cb1 --- /dev/null +++ b/plugins/hypervisors/xen/test/com/cloud/hypervisor/xen/resource/CitrixResourceBaseTest.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 com.cloud.hypervisor.xen.resource; + +import org.junit.Test; +import org.junit.Before; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.MockitoAnnotations; +import static org.mockito.Mockito.*; + +import com.cloud.hypervisor.xen.resource.CitrixResourceBase.XsHost; +import com.cloud.agent.api.ScaleVmCommand; +import com.cloud.agent.api.to.VirtualMachineTO; +import com.cloud.agent.api.ScaleVmAnswer; +import com.xensource.xenapi.*; +import org.apache.xmlrpc.XmlRpcException; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.Iterator; + + + + +public class CitrixResourceBaseTest { + + @Spy CitrixResourceBase _resource = new CitrixResourceBase() { + + @Override + public ScaleVmAnswer execute(ScaleVmCommand cmd) { + return super.execute(cmd); + } + public String callHostPlugin(Connection conn, String plugin, String cmd, String... params) { + return "Success"; + } + @Override + protected void scaleVM(Connection conn, VM vm, VirtualMachineTO vmSpec, Host host) throws Types.XenAPIException, XmlRpcException { + _host.speed = 500; + super.scaleVM(conn, vm, vmSpec, host); + } + + + }; + @Mock XsHost _host; + @Mock Host host; + @Mock ScaleVmCommand cmd; + @Mock VirtualMachineTO vmSpec; + @Mock Connection conn; + @Mock VM vm; + + @Before + public void setup(){ + + MockitoAnnotations.initMocks(this); + + doReturn(vmSpec).when(cmd).getVirtualMachine(); + doReturn("i-2-3-VM").when(vmSpec).getName(); + + } + + + // Expecting XmlRpcException while trying to get the record of vm using connection + @Test(expected = XmlRpcException.class) + public void testScaleVMF1() throws + Types.BadServerResponse, + Types.XenAPIException, + XmlRpcException { + doReturn(conn).when(_resource).getConnection(); + Set<VM> vms = (Set<VM> )mock(Set.class); + + Iterator iter = mock(Iterator.class); + doReturn(iter).when(vms).iterator(); + when(iter.hasNext()).thenReturn(true).thenReturn(false); + doReturn(vm).when(iter).next(); + VM.Record vmr = mock(VM.Record.class); + when(vm.getRecord(conn)).thenThrow(new XmlRpcException("XmlRpcException")); + when(vm.getRecord(conn)).thenReturn(vmr); + vmr.powerState = Types.VmPowerState.RUNNING; + vmr.residentOn = mock(Host.class); + XenAPIObject object = mock(XenAPIObject.class); + doReturn(new String("OpaqueRef:NULL")).when(object).toWireString(); + doNothing().when(_resource).scaleVM(conn, vm, vmSpec, host); + + _resource.execute(cmd); + verify(iter, times(2)).hasNext(); + verify(iter, times(2)).next(); + + } + + // Test to scale vm "i-2-3-VM" cpu-cap disabled + @Test + public void testScaleVMF2() throws Types.XenAPIException, XmlRpcException { + + doReturn(null).when(vm).setMemoryDynamicRangeAsync(conn, 536870912L, 536870912L); + doReturn(1).when(vmSpec).getCpus(); + doNothing().when(vm).setVCPUsNumberLive(conn, 1L); + doReturn(500).when(vmSpec).getSpeed(); + doReturn(false).when(vmSpec).getLimitCpuUse(); + Map<String, String> args = (Map<String, String>)mock(HashMap.class); + when(host.callPlugin(conn, "vmops", "add_to_VCPUs_params_live", args)).thenReturn("Success"); + doReturn(null).when(_resource).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM"); + + _resource.scaleVM(conn, vm, vmSpec, host); + + verify(vmSpec, times(1)).getLimitCpuUse(); + verify(_resource, times(1)).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM"); + } + + // Test to scale vm "i-2-3-VM" cpu-cap enabled + @Test + public void testScaleVMF3() throws Types.XenAPIException, XmlRpcException { + + doReturn(null).when(vm).setMemoryDynamicRangeAsync(conn, 536870912L, 536870912L); + doReturn(1).when(vmSpec).getCpus(); + doNothing().when(vm).setVCPUsNumberLive(conn, 1L); + doReturn(500).when(vmSpec).getSpeed(); + doReturn(true).when(vmSpec).getLimitCpuUse(); + doNothing().when(vm).addToVCPUsParamsLive(conn, "cap", "100"); + Map<String, String> args = (Map<String, String>)mock(HashMap.class); + when(host.callPlugin(conn, "vmops", "add_to_VCPUs_params_live", args)).thenReturn("Success"); + doReturn(null).when(_resource).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM"); + + _resource.scaleVM(conn, vm, vmSpec, host); + + verify(vmSpec, times(1)).getLimitCpuUse(); + verify(_resource, times(1)).callHostPlugin(conn, "vmops", "add_to_VCPUs_params_live", "key", "weight", "value", "253", "vmname", "i-2-3-VM"); + verify(vm, times(1)).addToVCPUsParamsLive(conn, "cap", "100"); + } +} \ No newline at end of file
