package jadex.bdi.testcases.planlib;
import jadex.base.test.TestReport;
import jadex.bdi.planlib.protocols.AuctionDescription;
import jadex.bdi.planlib.protocols.ExponentialPriceCalculator;
import jadex.bdi.runtime.GoalFailureException;
import jadex.bdi.runtime.IGoal;
import jadex.bdi.testcases.AbstractMultipleAgentsPlan;
import jadex.bridge.IComponentIdentifier;
import jadex.commons.SUtil;
import jadex.commons.collection.SCollection;
import java.util.List;
import java.util.Map;
/**
* Tests the english auction protocol with one initiator and four bidders with
* different price-strategies.
*/
public class EATestPlan extends AbstractMultipleAgentsPlan
{
/**
* The body method is called on the instatiated plan instance from the
* scheduler.
*/
public void body()
{
// The round timeout, if the testcase fails, adjust it according to the
// speed of your pc.
long roundtimeout = 1000;
// Create 4 bidders
Map[] args = new Map[4];
//Map[] args = new Map[1];
for(int i=0; i<args.length; i++)
{
args[i] = SCollection.createHashMap();
args[i].put("max_price", new Double(115+i*5));
//args[i].put("participate", new Boolean(i!=2));
args[i].put("participate", Boolean.TRUE);
}
List agents = createAgents("/jadex/bdi/testcases/planlib/EAReceiver.agent.xml", args);
TestReport tr = new TestReport("#1", "Test with four bidders. " +
"Should terminate with a winner.");
if(assureTest(tr))
{
try
{
IGoal ea = createGoal("eacap.ea_initiate");
ea.getParameterSet("receivers").addValues(agents.toArray(new IComponentIdentifier[agents.size()]));
ea.getParameter("cfp").setValue(new Double(110));
ea.getParameter("auction_description").setValue(new AuctionDescription(getTime()+1000,
roundtimeout, "Test auction 1"));
ea.getParameter("limit").setValue(new Double(120));
dispatchSubgoalAndWait(ea);
Object[] res = (Object[])ea.getParameter("result").getValue();
getLogger().info("Auction result: "+SUtil.arrayToString(res));
if(ea.getParameter("result").getValue() != null)
{
tr.setSucceeded(true);
}
else
{
tr.setFailed("No winner determined though this testcase should terminate with a winner.");
}
}
catch(GoalFailureException e)
{
tr.setFailed("Exception occurred: " + e);
}
}
getBeliefbase().getBeliefSet("testcap.reports").addFact(tr);
tr = new TestReport("#2", "Test with four bidders and offer generator. " +
"Should terminate with a winner.");
if(assureTest(tr))
{
try
{
IGoal ea = createGoal("eacap.ea_initiate");
ea.getParameterSet("receivers").addValues(agents.toArray(new IComponentIdentifier[agents.size()]));
ExponentialPriceCalculator pc = new ExponentialPriceCalculator(100, 10000, 1.1);
ea.getParameter("cfp").setValue(pc.getCurrentOffer());
ea.getParameter("cfp_info").setValue(pc);
ea.getParameter("auction_description").setValue(new AuctionDescription(getTime()+1000,
roundtimeout, "Test auction 1"));
dispatchSubgoalAndWait(ea);
Object[] res = (Object[])ea.getParameter("result").getValue();
getLogger().info("Auction result: "+SUtil.arrayToString(res));
if(ea.getParameter("result").getValue() != null)
{
tr.setSucceeded(true);
}
else
{
tr.setFailed("No winner determined though this testcase should terminate with a winner.");
}
}
catch(GoalFailureException e)
{
tr.setFailed("Exception occurred: " + e);
}
}
getBeliefbase().getBeliefSet("testcap.reports").addFact(tr);
tr = new TestReport("#3", "Test if acceptance plan was invoked once.");
int ac = ((Integer)getBeliefbase().getBelief("acceptplan_invoked").getFact()).intValue();
if(ac==1)
tr.setSucceeded(true);
else
tr.setReason("Acceptance plan was invoked: "+ac);
// Add the last report, so that the testcase can terminate.
getBeliefbase().getBeliefSet("testcap.reports").addFact(tr);
}
}