/*
* Title: CloudSim Toolkit
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2009-2012, The University of Melbourne, Australia
*/
package org.cloudbus.cloudsim.lists;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Vm;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.junit.Before;
import org.junit.Test;
/**
* @author Anton Beloglazov
* @since CloudSim Toolkit 2.0
*/
public class PeListTest {
private static final double MIPS = 1000;
private List<Pe> peList;
@Before
public void setUp() throws Exception {
peList = new ArrayList<Pe>();
peList.add(new Pe(0, new PeProvisionerSimple(MIPS)));
peList.add(new Pe(1, new PeProvisionerSimple(MIPS)));
}
@Test
public void testGetMips() {
assertEquals(MIPS, PeList.getMips(peList, 0), 0);
assertEquals(MIPS, PeList.getMips(peList, 1), 0);
assertEquals(-1, PeList.getMips(peList, 2));
}
@Test
public void testGetTotalMips() {
assertEquals(MIPS * peList.size(), PeList.getTotalMips(peList), 0);
}
@Test
public void testSetPeStatus() {
assertEquals(2, PeList.getNumberOfFreePes(peList));
assertEquals(0, PeList.getNumberOfBusyPes(peList));
assertTrue(PeList.setPeStatus(peList, 0, Pe.BUSY));
assertEquals(Pe.BUSY, PeList.getById(peList, 0).getStatus());
assertEquals(1, PeList.getNumberOfFreePes(peList));
assertEquals(1, PeList.getNumberOfBusyPes(peList));
assertTrue(PeList.setPeStatus(peList, 1, Pe.BUSY));
assertEquals(Pe.BUSY, PeList.getById(peList, 1).getStatus());
assertEquals(0, PeList.getNumberOfFreePes(peList));
assertEquals(2, PeList.getNumberOfBusyPes(peList));
assertFalse(PeList.setPeStatus(peList, 2, Pe.BUSY));
assertEquals(0, PeList.getNumberOfFreePes(peList));
assertEquals(2, PeList.getNumberOfBusyPes(peList));
}
@Test
public void testSetStatusFailed() {
assertEquals(Pe.FREE, PeList.getById(peList, 0).getStatus());
assertEquals(Pe.FREE, PeList.getById(peList, 1).getStatus());
PeList.setStatusFailed(peList, true);
assertEquals(Pe.FAILED, PeList.getById(peList, 0).getStatus());
assertEquals(Pe.FAILED, PeList.getById(peList, 1).getStatus());
PeList.setStatusFailed(peList, false);
assertEquals(Pe.FREE, PeList.getById(peList, 0).getStatus());
assertEquals(Pe.FREE, PeList.getById(peList, 1).getStatus());
PeList.setStatusFailed(peList, "test", 0, true);
assertEquals(Pe.FAILED, PeList.getById(peList, 0).getStatus());
assertEquals(Pe.FAILED, PeList.getById(peList, 1).getStatus());
PeList.setStatusFailed(peList, "test", 0, false);
assertEquals(Pe.FREE, PeList.getById(peList, 0).getStatus());
assertEquals(Pe.FREE, PeList.getById(peList, 1).getStatus());
}
@Test
public void testFreePe() {
assertSame(peList.get(0), PeList.getFreePe(peList));
PeList.setPeStatus(peList, 0, Pe.BUSY);
assertSame(peList.get(1), PeList.getFreePe(peList));
PeList.setPeStatus(peList, 1, Pe.BUSY);
assertNull(PeList.getFreePe(peList));
}
@Test
public void testGetMaxUtilization() {
Vm vm0 = new Vm(0, 0, MIPS / 2, 1, 0, 0, 0, "", null);
Vm vm1 = new Vm(1, 0, MIPS / 2, 1, 0, 0, 0, "", null);
assertTrue(peList.get(0).getPeProvisioner().allocateMipsForVm(vm0, MIPS / 3));
assertTrue(peList.get(1).getPeProvisioner().allocateMipsForVm(vm1, MIPS / 5));
assertEquals((MIPS / 3) / MIPS, PeList.getMaxUtilization(peList), 0.001);
}
@Test
public void testGetMaxUtilizationAmongVmsPes() {
Vm vm0 = new Vm(0, 0, MIPS / 2, 1, 0, 0, 0, "", null);
Vm vm1 = new Vm(1, 0, MIPS / 2, 1, 0, 0, 0, "", null);
assertTrue(peList.get(0).getPeProvisioner().allocateMipsForVm(vm0, MIPS / 3));
assertTrue(peList.get(1).getPeProvisioner().allocateMipsForVm(vm1, MIPS / 5));
assertEquals((MIPS / 3) / MIPS, PeList.getMaxUtilizationAmongVmsPes(peList, vm0), 0.001);
assertEquals((MIPS / 5) / MIPS, PeList.getMaxUtilizationAmongVmsPes(peList, vm1), 0.001);
}
}