Package com.vmware.bdd.utils

Source Code of com.vmware.bdd.utils.TestVcVmUtil

/***************************************************************************
* Copyright (c) 2014 VMware, Inc. All Rights Reserved.
* Licensed 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.vmware.bdd.utils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;

import com.vmware.aurora.composition.DiskSchema;
import com.vmware.bdd.entity.DiskEntity;
import com.vmware.bdd.service.MockVcVmUtil;
import mockit.Mockit;

import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.vmware.aurora.composition.DiskSchema.Disk;
import com.vmware.aurora.composition.IPrePostPowerOn;
import com.vmware.aurora.composition.VmSchema;
import com.vmware.aurora.vc.VcHost;
import com.vmware.aurora.vc.VcResourcePool;
import com.vmware.aurora.vc.VcVirtualMachine;
import com.vmware.bdd.apitypes.ClusterCreate;
import com.vmware.bdd.apitypes.NetworkAdd;
import com.vmware.bdd.apitypes.NodeGroupCreate;
import com.vmware.bdd.apitypes.StorageRead.DiskType;
import com.vmware.bdd.entity.NodeEntity;
import com.vmware.bdd.entity.VcResourcePoolEntity;
import com.vmware.bdd.exception.BddException;
import com.vmware.bdd.exception.ClusteringServiceException;
import com.vmware.bdd.service.MockTmScheduler;
import com.vmware.bdd.service.MockTmScheduler.VmOperation;
import com.vmware.bdd.service.MockVcCache;
import com.vmware.bdd.service.MockVcResourceUtils;
import com.vmware.bdd.service.sp.StartVmSP;
import com.vmware.bdd.spectypes.DiskSpec;
import com.vmware.vim.binding.vim.vm.device.VirtualDiskOption.DiskMode;

public class TestVcVmUtil {
   @BeforeMethod(groups = { "TestVcVmUtil" }, dependsOnGroups = { "TestClusterManager" })
   public void setMockup() {
      Mockit.setUpMock(MockVcResourceUtils.class);
      Mockit.setUpMock(MockTmScheduler.class);
      Mockit.setUpMock(MockVcCache.class);
   }

   @AfterMethod
   public void cleanFlag() {
      MockVcResourceUtils.cleanFlag();
      MockVcCache.setGetFlag(false);
      MockTmScheduler.cleanFlag();
      Mockit.tearDownMocks();
   }

   private ClusterCreate getClusterSpec() {
      ClusterCreate spec = new ClusterCreate();
      spec.setName("test");
      NodeGroupCreate[] nodeGroups = new NodeGroupCreate[1];
      NodeGroupCreate group = new NodeGroupCreate();
      group.setVmFolderPath("root/test/master");
      group.setName("master");
      group.setCpuNum(2);
      nodeGroups[0] = group;
      spec.setNodeGroups(nodeGroups);
      List<NetworkAdd> networkAdds = new ArrayList<NetworkAdd>();
      NetworkAdd network = new NetworkAdd();
      network.setDhcp(true);
      network.setPortGroup("test-portgroup");
      networkAdds.add(network);
      spec.setNetworkings(networkAdds);
      return spec;
   }

   @Test
   public void testGetVmSchema() {
      ClusterCreate spec = getClusterSpec();
      List<DiskSpec> diskSet = getDiskSpec();
      VmSchema schema =
            VcVmUtil.getVmSchema(spec, "master", diskSet, "vm-101", "snap-102");
      Assert.assertTrue(schema.resourceSchema.numCPUs == 2,
            "Excepted cpu number is 2, but got "
                  + schema.resourceSchema.numCPUs);
      List<Disk> disks = schema.diskSchema.getDisks();
      Assert.assertTrue(disks != null && disks.size() == 1,
            "Excepted one disk, but got " + schema.diskSchema.getDisks());
      Assert.assertTrue(disks.get(0).name.equals("OS"),
            "Excepted name is OS, but got " + schema.diskSchema.getName());
   }

   @Test
   public void testGetTargetRp() {
      NodeEntity node = new NodeEntity();
      VcResourcePoolEntity rpEntity = new VcResourcePoolEntity();
      rpEntity.setVcCluster("test-cluster");
      rpEntity.setVcResourcePool("test-rp");
      node.setVcRp(rpEntity);
      VcVmUtil.getTargetRp("test-cluster", "test-group", node);
   }

   @Test
   public void testGetTargetRpException() {
      NodeEntity node = new NodeEntity();
      VcResourcePoolEntity rpEntity = new VcResourcePoolEntity();
      rpEntity.setVcCluster("test-cluster");
      rpEntity.setVcResourcePool("test-rp");
      node.setVcRp(rpEntity);
      MockVcResourceUtils.setFlag(false);
      try {
         VcVmUtil.getTargetRp("test-cluster", "test-group", node);
         Assert.assertTrue(false,
               "Should get exception for cannot get resource pool.");
      } catch (ClusteringServiceException e) {
         // expected result
      }
   }

   @Test
   public void testGetTargetRpDisabledDRS() {
      NodeEntity node = new NodeEntity();
      VcResourcePoolEntity rpEntity = new VcResourcePoolEntity();
      rpEntity.setVcCluster("test-cluster");
      rpEntity.setVcResourcePool("test-rp");
      node.setVcRp(rpEntity);
      MockVcResourceUtils.setDisableDRS(true);
      VcResourcePool rp =
            VcVmUtil.getTargetRp("test-cluster", "test-group", node);
      Assert.assertTrue(rp.getName() != null, "Should get root rp, but got "
            + rp.getName());
      Assert.assertTrue(rp.getName().equals("root"),
            "Should get root rp, but got " + rp.getName());
   }

   @Test(enabled = false)
   public void testRunSPOnSingleVMNoVM() {
      NodeEntity node = new NodeEntity();
      Callable<Void> callable = getCallable();
      boolean result = VcVmUtil.runSPOnSingleVM(node, callable);
      Assert.assertTrue(result == false, "Should get false, but got " + result);

      node.setMoId("vm-001");
      result = VcVmUtil.runSPOnSingleVM(node, callable);
      Assert.assertTrue(result == false, "Should get false, but got " + result);

      MockVcCache.setGetFlag(true);
      MockTmScheduler.setResultIsNull(true);
      result = VcVmUtil.runSPOnSingleVM(node, callable);
      Assert.assertTrue(result == false, "Should get false, but got " + result);
   }

   private Callable<Void> getCallable() {
      Callable<Void> callable =
            new StartVmSP(Mockito.mock(VcVirtualMachine.class), null,
                  Mockito.mock(IPrePostPowerOn.class),
                  Mockito.mock(VcHost.class));
      return callable;
   }

   @Test
   public void testRunSPOnSingleVMException() {
      NodeEntity node = new NodeEntity();
      node.setMoId("vm-001");

      MockVcCache.setGetFlag(true);
      MockTmScheduler.setResultIsNull(false);
      MockTmScheduler.setFlag(VmOperation.START_VM, false);
      Callable<Void> callable = getCallable();
      try {
         VcVmUtil.runSPOnSingleVM(node, callable);
         Assert.assertTrue(false, "Should get exception, but not.");
      } catch (BddException e) {

      }
   }

   @Test
   public void testRunSPOnSingleVMPositive() {
      NodeEntity node = new NodeEntity();
      node.setMoId("vm-001");
      MockVcCache.setGetFlag(true);
      MockTmScheduler.setResultIsNull(false);
      MockTmScheduler.setFlag(VmOperation.START_VM, true);
      Callable<Void> callable = getCallable();
      boolean result = VcVmUtil.runSPOnSingleVM(node, callable);
      Assert.assertTrue(result, "Should get true, but got " + result);
   }

   private List<DiskSpec> getDiskSpec() {
      DiskSpec disk = new DiskSpec();
      disk.setName("OS");
      disk.setDiskType(DiskType.SYSTEM_DISK);
      disk.setSize(20);
      disk.setAllocType("THIN");
      disk.setVmdkPath("[ds]");
      disk.setDiskMode(DiskMode.nonpersistent.name());
      List<DiskSpec> diskSet = new ArrayList<DiskSpec>();
      diskSet.add(disk);
      return diskSet;
   }

   @Test
   public void testGetVolumesByDiskSchema() {
      DiskSchema.Disk sysDisk = new Disk();
      sysDisk.type = "OS";
      sysDisk.externalAddress = "LSI0:0";
      DiskSchema.Disk swapDisk = new Disk();
      swapDisk.type = "SWAP";
      swapDisk.externalAddress = "LSI0:1";
      DiskSchema.Disk dataDisk0 = new Disk();
      dataDisk0.type = "DATA";
      dataDisk0.externalAddress = "PARA0:0";
      DiskSchema.Disk dataDisk1 = new Disk();
      dataDisk1.type = "DATA";
      dataDisk1.externalAddress = "PARA1:0";
      List<Disk> disks = new ArrayList<Disk>();
      disks.add(sysDisk);
      disks.add(swapDisk);
      disks.add(dataDisk0);
      disks.add(dataDisk1);
      Mockit.setUpMock(MockVcVmUtil.class);
      String volumes = VcVmUtil.getVolumes("vm-01", disks);
      System.out.println(volumes);
   }

   @Test
   public void testGetVolumesByDiskEntities() {
      DiskEntity sysDisk = new DiskEntity();
      sysDisk.setName("sys.vmdk");
      sysDisk.setExternalAddress("LSI0:0");
      sysDisk.setDiskType("OS");
      DiskEntity swapDisk = new DiskEntity();
      swapDisk.setName("swap.vmdk");
      swapDisk.setExternalAddress("LSI0:1");
      swapDisk.setDiskType("SWAP");
      DiskEntity dataDisk0 = new DiskEntity();
      dataDisk0.setName("data0.vmdk");
      dataDisk0.setExternalAddress("PARA0:0");
      dataDisk0.setDiskType("DATA");
      DiskEntity dataDisk1 = new DiskEntity();
      dataDisk1.setName("data1.vmdk");
      dataDisk1.setExternalAddress("PARA1:0");
      dataDisk1.setDiskType("DATA");
      Set<DiskEntity> disks = new HashSet<DiskEntity>();
      disks.add(sysDisk);
      disks.add(swapDisk);
      disks.add(dataDisk0);
      disks.add(dataDisk1);
      Mockit.setUpMock(MockVcVmUtil.class);
      String volumes = VcVmUtil.getVolumes("vm-01", disks);
      System.out.println(volumes);
   }
}
TOP

Related Classes of com.vmware.bdd.utils.TestVcVmUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.