/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.server.core.scheduler;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.server.core.common.persistence.DefaultJpaDataAccessTestBase;
import com.abiquo.server.core.enterprise.EnterpriseGenerator;
import com.abiquo.server.core.infrastructure.Datacenter;
import com.abiquo.server.core.infrastructure.DatacenterGenerator;
import com.abiquo.server.core.infrastructure.Machine;
import com.abiquo.server.core.infrastructure.MachineGenerator;
import com.abiquo.server.core.infrastructure.Rack;
import com.abiquo.server.core.infrastructure.RackGenerator;
import com.softwarementors.bzngine.engines.jpa.EntityManagerHelper;
public class RulesRepTest extends DefaultJpaDataAccessTestBase
{
FitPolicyRuleGenerator fitPolicyRuleGenerator;
MachineLoadRuleGenerator machineLoadRuleGenerator;
EnterpriseExclusionRuleGenerator enterpriseExclusionRuleGenerator;
DatacenterGenerator datacenterGenerator;
RackGenerator rackGenerator;
MachineGenerator machineGenerator;
EnterpriseGenerator enterpriseGenerator;
@Override
@BeforeMethod
public void methodSetUp()
{
super.methodSetUp();
this.fitPolicyRuleGenerator = new FitPolicyRuleGenerator(getSeed());
this.machineLoadRuleGenerator = new MachineLoadRuleGenerator(getSeed());
this.enterpriseExclusionRuleGenerator = new EnterpriseExclusionRuleGenerator(getSeed());
this.datacenterGenerator = new DatacenterGenerator(getSeed());
this.rackGenerator = new RackGenerator(getSeed());
this.machineGenerator = new MachineGenerator(getSeed());
this.enterpriseGenerator = new EnterpriseGenerator(getSeed());
}
@Test
public void test_findAllMachineLoadRules() throws IllegalAccessException,
InvocationTargetException, NoSuchMethodException
{
Datacenter dt = datacenterGenerator.createUniqueInstance();
Rack rack = rackGenerator.createInstance(dt);
Machine machine = machineGenerator.createMachine(dt, rack);
MachineLoadRule dcRule = machineLoadRuleGenerator.createInstance(dt);
MachineLoadRule rackrule = machineLoadRuleGenerator.createInstance(rack);
MachineLoadRule machineRule = machineLoadRuleGenerator.createInstance(machine);
ds().persistAll(dt, rack, machine, dcRule, rackrule, machineRule);
RulesRep rep = new RulesRep(ds().createEntityManagerAndBeginRollbackTransaction());
List<MachineLoadRule> result = rep.findAllMachineLoadRules();
assertNotNull(result);
assertEquals(result.size(), 3);
}
@Test
public void test_deleteMachineLoadRule()
{
Datacenter dt = datacenterGenerator.createUniqueInstance();
Rack rack = rackGenerator.createInstance(dt);
Machine machine = machineGenerator.createMachine(dt, rack);
MachineLoadRule dcRule = machineLoadRuleGenerator.createInstance(dt);
MachineLoadRule rackrule = machineLoadRuleGenerator.createInstance(rack);
MachineLoadRule machineRule = machineLoadRuleGenerator.createInstance(machine);
ds().persistAll(dt, rack, machine, dcRule, rackrule, machineRule);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
MachineLoadRule mlr1 = rep.findMachineLoadRuleById(machineRule.getId());
MachineLoadRule mlr2 = rep.findMachineLoadRuleById(rackrule.getId());
try
{
rep.deleteMachineLoadRule(mlr1);
rep.deleteMachineLoadRule(mlr2);
List<MachineLoadRule> result = rep.findAllMachineLoadRules();
assertNotNull(result);
assertEquals(result.size(), 1);
EntityManagerHelper.commitAndClose(em);
}
catch (Exception e)
{
e.printStackTrace();
fail();
}
}
@Test
public void test_findAllEnterpriseExclusionRules() throws IllegalAccessException,
InvocationTargetException, NoSuchMethodException
{
EnterpriseExclusionRule eeRule1 = enterpriseExclusionRuleGenerator.createUniqueInstance();
EnterpriseExclusionRule eeRule2 = enterpriseExclusionRuleGenerator.createUniqueInstance();
EnterpriseExclusionRule eeRule3 = enterpriseExclusionRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule1, allToPersist);
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule2, allToPersist);
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule3, allToPersist);
persistAll(ds(), allToPersist, eeRule1, eeRule2, eeRule3);
RulesRep rep = new RulesRep(ds().createEntityManagerAndBeginRollbackTransaction());
List<EnterpriseExclusionRule> result = rep.findAllEnterpriseExclusionRules();
assertNotNull(result);
assertEquals(result.size(), 3);
}
@Test
public void test_deleteEnterpriseExclusionRule()
{
EnterpriseExclusionRule eeRule1 = enterpriseExclusionRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule1, allToPersist);
persistAll(ds(), allToPersist, eeRule1);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
EnterpriseExclusionRule eeRule = rep.findEnterpriseExclusionRuleById(eeRule1.getId());
try
{
rep.deleteEnterpriseExclusionRule(eeRule);
List<EnterpriseExclusionRule> result = rep.findAllEnterpriseExclusionRules();
assertNotNull(result);
assertEquals(result.size(), 0);
EntityManagerHelper.commitAndClose(em);
}
catch (Exception e)
{
e.printStackTrace();
fail();
}
}
@Test
public void test_findAllFitPolicyRules() throws IllegalAccessException,
InvocationTargetException, NoSuchMethodException
{
FitPolicyRule fpr1 = fitPolicyRuleGenerator.createUniqueInstance();
FitPolicyRule fpr2 = fitPolicyRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
fitPolicyRuleGenerator.addAuxiliaryEntitiesToPersist(fpr1, allToPersist);
fitPolicyRuleGenerator.addAuxiliaryEntitiesToPersist(fpr2, allToPersist);
persistAll(ds(), allToPersist, fpr1, fpr2);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(ds().createEntityManagerAndBeginRollbackTransaction());
List<FitPolicyRule> result = rep.findAllFitPolicyRules();
assertNotNull(result);
assertEquals(result.size(), 2);
}
@Test
public void test_deleteFitPolicyRule()
{
FitPolicyRule fpr1 = fitPolicyRuleGenerator.createUniqueInstance();
FitPolicyRule fpr2 = fitPolicyRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
fitPolicyRuleGenerator.addAuxiliaryEntitiesToPersist(fpr1, allToPersist);
fitPolicyRuleGenerator.addAuxiliaryEntitiesToPersist(fpr2, allToPersist);
persistAll(ds(), allToPersist, fpr1, fpr2);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
FitPolicyRule fitPolicyRule = rep.findFitPolicyRuleById(fpr1.getId());
try
{
rep.deleteFitPolicyRule(fitPolicyRule);
List<FitPolicyRule> result = rep.findAllFitPolicyRules();
assertNotNull(result);
assertEquals(result.size(), 1);
EntityManagerHelper.commitAndClose(em);
}
catch (Exception e)
{
e.printStackTrace();
fail();
}
}
@Test
public void test_getMachineLoadForDatacenter()
{
Datacenter dt = datacenterGenerator.createUniqueInstance();
MachineLoadRule mlr1 = machineLoadRuleGenerator.createInstance(dt);
MachineLoadRule mlr2 = machineLoadRuleGenerator.createInstance(dt);
ds().persistAll(dt, mlr1, mlr2);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
List<MachineLoadRule> result = rep.getMachineLoadForDatacenter(dt.getId());
assertNotNull(result);
assertEquals(result.size(), 2);
}
@Test
public void test_getFitPolicyForDatacenter()
{
FitPolicyRule fpr = fitPolicyRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
fitPolicyRuleGenerator.addAuxiliaryEntitiesToPersist(fpr, allToPersist);
persistAll(ds(), allToPersist, fpr);
Integer datacenterId = fpr.getDatacenter().getId();
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
FitPolicyRule result = rep.getFitPolicyForDatacenter(datacenterId);
assertNotNull(result);
assertEquals(result.getDatacenter().getId(), fpr.getDatacenter().getId());
}
@Test
public void test_getGlobalRules()
{
FitPolicyRule fpr = fitPolicyRuleGenerator.createUniqueInstance();
fpr.setDatacenter(null);
// FitPolicyRule fpr = fitPolicyRuleGenerator.createGlobalFitPolicyInstance();
EnterpriseExclusionRule eeRule1 = enterpriseExclusionRuleGenerator.createUniqueInstance();
EnterpriseExclusionRule eeRule2 = enterpriseExclusionRuleGenerator.createUniqueInstance();
List<Object> allToPersist = new ArrayList<Object>();
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule1, allToPersist);
enterpriseExclusionRuleGenerator.addAuxiliaryEntitiesToPersist(eeRule2, allToPersist);
persistAll(ds(), allToPersist, eeRule1, eeRule2, fpr);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
List<PersistentRule> result = rep.getGlobalRules();
assertNotNull(result);
assertEquals(result.size(), 3);
}
@Test
public void test_getGlobalFitPolicy()
{
FitPolicyRule fpr = fitPolicyRuleGenerator.createUniqueInstance();
fpr.setDatacenter(null);
List<Object> allToPersist = new ArrayList<Object>();
//FitPolicyRule fpr = fitPolicyRuleGenerator.createGlobalFitPolicyInstance();
//List<Object> allToPersist = new ArrayList<Object>();
persistAll(ds(), allToPersist, fpr);
EntityManager em = ds().createEntityManagerAndBeginReadWriteTransaction();
RulesRep rep = new RulesRep(em);
FitPolicyRule result = rep.getGlobalFitPolicy();
assertNotNull(result);
}
}