package org.ovirt.engine.core.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.InterfaceStatus;
import org.ovirt.engine.core.common.businessentities.NetworkBootProtocol;
import org.ovirt.engine.core.common.businessentities.VdsNetworkInterface;
import org.ovirt.engine.core.common.businessentities.VdsNetworkStatistics;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.RandomUtils;
public class InterfaceDAOTest extends BaseDAOTestCase {
private static final Guid VDS_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
private static final Guid VDS_STATISTICS_ID = new Guid("ba31682e-6ae7-4f9d-8c6f-04c93acca9db");
private InterfaceDAO dao;
private VdsNetworkInterface newVdsInterface;
private VdsNetworkStatistics newVdsStatistics;
@Override
public void setUp() throws Exception {
super.setUp();
dao = prepareDAO(dbFacade.getInterfaceDAO());
newVdsInterface = new VdsNetworkInterface();
newVdsInterface.setStatistics(new VdsNetworkStatistics());
newVdsInterface.setId(Guid.NewGuid());
newVdsInterface.setName("eth77");
newVdsInterface.setNetworkName("enginet");
newVdsInterface.setAddress("192.168.122.177");
newVdsInterface.setSubnet("255.255.255.0");
newVdsInterface.setSpeed(1000);
newVdsInterface.setType(3);
newVdsInterface.setBootProtocol(NetworkBootProtocol.StaticIp);
newVdsInterface.setMacAddress("01:C0:81:21:71:17");
newVdsInterface.setGateway("192.168.122.1");
newVdsStatistics = newVdsInterface.getStatistics();
}
/**
* Ensures an empty collection is returned.
*/
@Test
public void testGetAllInterfacesForVdsWithInvalidVds() {
List<VdsNetworkInterface> result = dao.getAllInterfacesForVds(Guid.NewGuid());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures the right set of interfaces are returned.
*/
@Test
public void testGetAllInterfacesForVds() {
List<VdsNetworkInterface> result = dao.getAllInterfacesForVds(VDS_ID);
assertNotNull(result);
assertFalse(result.isEmpty());
for (VdsNetworkInterface iface : result) {
assertEquals(VDS_ID, iface.getVdsId());
}
}
/**
* Ensures that saving an interface for a VDS works as expected.
*/
@Test
public void testSaveInterfaceForVds() {
newVdsInterface.setVdsId(VDS_ID);
dao.saveInterfaceForVds(newVdsInterface);
dao.saveStatisticsForVds(newVdsStatistics);
List<VdsNetworkInterface> result = dao.getAllInterfacesForVds(VDS_ID);
boolean found = false;
for (VdsNetworkInterface iface : result) {
found |= iface.getName()
.equals(newVdsInterface.getName());
}
assertTrue(found);
}
/**
* Ensures that the specified VDS's interfaces are deleted.
*/
@Test
public void testRemoveInterfacesForVds() {
List<VdsNetworkInterface> before = dao.getAllInterfacesForVds(VDS_ID);
// ensure we have records before the test
boolean found = false;
for (VdsNetworkInterface iface : before) {
found |= (VDS_STATISTICS_ID.equals(iface.getId()));
}
assertTrue(found);
dao.removeInterfaceFromVds(VDS_STATISTICS_ID);
List<VdsNetworkInterface> after = dao.getAllInterfacesForVds(VDS_ID);
for (VdsNetworkInterface iface : after) {
assertNotSame(VDS_STATISTICS_ID, iface.getId());
}
}
/**
* Ensures that all statistics are removed for the specified VDS.
*/
@Test
public void testRemoveStatisticsForVds() {
List<VdsNetworkInterface> before = dao.getAllInterfacesForVds(VDS_ID);
for (VdsNetworkInterface iface : before) {
assertNotSame(0.0, iface.getStatistics().getTransmitRate());
assertNotSame(0.0, iface.getStatistics().getReceiveRate());
assertNotSame(0.0, iface.getStatistics().getReceiveDropRate());
assertNotSame(0.0, iface.getStatistics().getReceiveDropRate());
}
dao.removeStatisticsForVds(VDS_STATISTICS_ID);
List<VdsNetworkInterface> after = dao.getAllInterfacesForVds(VDS_ID);
for (VdsNetworkInterface iface : after) {
assertEquals(0.0, iface.getStatistics().getTransmitRate(), 0.0001);
assertEquals(0.0, iface.getStatistics().getReceiveRate(), 0.0001);
assertEquals(0.0, iface.getStatistics().getReceiveDropRate(), 0.0001);
assertEquals(0.0, iface.getStatistics().getReceiveDropRate(), 0.0001);
}
}
/**
* Ensures updating an interface works for VDS.
*/
@Test
public void testUpdateInterfaceForVds() {
List<VdsNetworkInterface> before = dao.getAllInterfacesForVds(VDS_ID);
VdsNetworkInterface iface = before.get(0);
iface.setName(iface.getName().toUpperCase());
dao.updateInterfaceForVds(iface);
List<VdsNetworkInterface> after = dao.getAllInterfacesForVds(VDS_ID);
boolean found = false;
for (VdsNetworkInterface ifaced : after) {
found |= ifaced.getName().equals(iface.getName());
}
assertTrue(found);
}
/**
* Ensures that updating statistics for an interface works as expected.
*/
@Test
public void testUpdateStatisticsForVds() {
List<VdsNetworkInterface> before = dao.getAllInterfacesForVds(VDS_ID);
VdsNetworkStatistics stats = before.get(0).getStatistics();
stats.setReceiveDropRate(999.0);
dao.updateStatisticsForVds(stats);
List<VdsNetworkInterface> after = dao.getAllInterfacesForVds(VDS_ID);
boolean found = false;
for (VdsNetworkInterface ifaced : after) {
if (ifaced.getStatistics().getId().equals(stats.getId())) {
found = true;
assertEquals(stats.getReceiveDropRate(), ifaced.getStatistics().getReceiveDropRate());
}
}
if (!found)
fail("Did not find statistics which is bad.");
}
@Test
public void testMasshUpdateStatisticsForVds() throws Exception {
List<VdsNetworkInterface> interfaces = dao.getAllInterfacesForVds(VDS_ID);
List<VdsNetworkStatistics> statistics = new ArrayList<VdsNetworkStatistics>(interfaces.size());
for (VdsNetworkInterface iface : interfaces) {
VdsNetworkStatistics stats = iface.getStatistics();
stats.setReceiveDropRate(RandomUtils.instance().nextInt() * 1.0);
stats.setStatus(RandomUtils.instance().nextEnum(InterfaceStatus.class));
statistics.add(stats);
}
dao.massUpdateStatisticsForVds(statistics);
List<VdsNetworkInterface> after = dao.getAllInterfacesForVds(VDS_ID);
for (VdsNetworkInterface iface : after) {
boolean found = false;
for (VdsNetworkStatistics stats : statistics) {
if (iface.getId().equals(stats.getId())) {
found = true;
assertEquals(stats.getReceiveDropRate(), iface.getStatistics().getReceiveDropRate());
assertEquals(stats.getStatus(), iface.getStatistics().getStatus());
}
}
assertTrue(found);
}
}
}