@Test
 public void testApply() {
   AllocateEvent na = new AllocateEvent(vms.get(0), "foo", 3);
   Model mo = new DefaultModel();
   Mapping map = mo.getMapping();
   map.addOnlineNode(ns.get(0));
   map.addRunningVM(vms.get(0), ns.get(0));
   Assert.assertFalse(na.apply(mo));
   ShareableResource rc = new ShareableResource("foo");
   mo.attach(rc);
   Assert.assertTrue(na.apply(mo));
   Assert.assertEquals(3, rc.getConsumption(vms.get(0)));
 }
 private boolean discreteCheck(Model mo) {
   Mapping map = mo.getMapping();
   for (VM vm : getVMs()) {
     if (map.isRunning(vm)) {
       Node host = map.getVMLocation(vm);
       Set<VM> on = map.getRunningVMs(host);
       // Check for other VMs on the node. If they are not in the constraint
       // it's a violation
       for (VM vm2 : on) {
         if (!vm2.equals(vm) && !getVMs().contains(vm2)) {
           return false;
         }
       }
     }
   }
   return true;
 }
 @Override
 public boolean startsWith(Model mo) {
   if (getConstraint().isContinuous()) {
     boolean ret = discreteCheck(mo);
     if (ret) {
       Mapping map = mo.getMapping();
       for (VM vm : getVMs()) {
         if (map.isRunning(vm)) {
           privateNodes.add(map.getVMLocation(vm));
         }
       }
       for (Node n : map.getOnlineNodes()) {
         if (map.getRunningVMs(n).isEmpty()) {
           idleNodes.add(n);
         }
       }
     }
     return ret;
   }
   return true;
 }
  @Test
  public void testContinuousIsSatisfied() {
    Model mo = new DefaultModel();
    List<VM> vms = Util.newVMs(mo, 5);
    List<Node> ns = Util.newNodes(mo, 5);
    Mapping map = mo.getMapping();
    map.addOnlineNode(ns.get(0));
    map.addOnlineNode(ns.get(1));
    map.addOnlineNode(ns.get(2));
    map.addRunningVM(vms.get(0), ns.get(0));
    map.addRunningVM(vms.get(1), ns.get(1));
    map.addReadyVM(vms.get(2));
    map.addRunningVM(vms.get(3), ns.get(2));

    Quarantine q = new Quarantine(ns.get(0));

    ReconfigurationPlan plan = new DefaultReconfigurationPlan(mo);
    Assert.assertEquals(q.isSatisfied(plan), true);
    plan.add(new ShutdownVM(vms.get(1), ns.get(1), 1, 2));
    Assert.assertEquals(q.isSatisfied(plan), true);

    plan.add(new BootVM(vms.get(2), ns.get(0), 0, 1));
    Assert.assertEquals(q.isSatisfied(plan), false);

    plan = new DefaultReconfigurationPlan(mo);
    plan.add(new BootVM(vms.get(2), ns.get(2), 0, 1));
    Assert.assertEquals(new Quarantine(ns.get(1)).isSatisfied(plan), true);
    plan.add(new MigrateVM(vms.get(3), ns.get(2), ns.get(1), 0, 1));
    Assert.assertEquals(new Quarantine(ns.get(1)).isSatisfied(plan), false);

    plan = new DefaultReconfigurationPlan(mo);
    plan.add(new MigrateVM(vms.get(1), ns.get(1), ns.get(0), 0, 1));
    Assert.assertEquals(q.isSatisfied(plan), false);
  }