Esempio n. 1
0
int main_int(int argc, char** argv)
{
   SessionManager* smgr;
   Tester engine;
   Object::Vector list;
   Object::AttributeMap args;
//   ClassKey ckey;
   MethodResponse result;
   std::string id;
   const char* host = argc>1 ? argv[1] : "127.0.0.1";
   int port = argc>2 ? atoi(argv[2]) : 5672;
   uint32_t trigger_id;
   int32_t interval;
   time_t first_event, second_event;

   engine.init(host, port);
   smgr = engine.GetSessionManager();

   smgr->getObjects(list, "agent");
   smgr->getObjects(list, "condortrigger");
   cout << "Currently installed triggers:" << endl;
   for (Object::Vector::iterator iter = list.begin(); iter != list.end(); iter++)
   {
      cout << "Trigger ID: " << atoll(iter->getIndex().c_str()) << endl;
      iter->invokeMethod("GetTriggerName", args, result);
      cout << "Trigger Name: " << result.arguments.begin()->second->str() << endl;
      iter->invokeMethod("GetTriggerQuery", args, result);
      cout << "Trigger Query: " << result.arguments.begin()->second->str() << endl;
      iter->invokeMethod("GetTriggerText", args, result);
      cout << "Trigger Text: " << result.arguments.begin()->second->str() << endl << endl;
   }

   // Set the evaluation interval to 5 seconds
   engine.SetInterval(5);
   interval = engine.GetInterval();

   if (interval != 5)
   {
      cout << "Error: Interval was not to 5 seconds" << endl;
   }

   // Add a trigger and verify an event is received
   engine.AddTrigger("TestTrigger", "(SlotID == 1)", "$(Machine) has a slot 1");

   while (false == engine.GetEventReceived())
   {
      sleep(1);
   }
   first_event = time(NULL);
   engine.ResetEventReceived();

   while (false == engine.GetEventReceived())
   {
      sleep(1);
   }
   second_event = time(NULL);
   engine.ResetEventReceived();

   if ((second_event - first_event) > 6)
   {
      cout << "Error: Trigger evaluations occurring greater than evey 5 seconds" << endl;
   }
   else
   {
      cout << "Trigger evaluations occurring every 5 seconds" << endl;
   }

   // Retrieve the ID of the trigger added
   smgr->getObjects(list, "agent");
   smgr->getObjects(list, "condortrigger");
   for (Object::Vector::iterator iter = list.begin(); iter != list.end(); iter++)
   {
      iter->invokeMethod("GetTriggerName", args, result);
      if (result.arguments.begin()->second->str() == "TestTrigger")
      {
         cout << "Getting trigger id" << endl;
         trigger_id = atoll(iter->getIndex().c_str());
         break;
      }
   }

   // Change the trigger Name and verify an event is received
   engine.ChangeTriggerName(trigger_id, "Changed Test Trigger");
   while (false == engine.GetEventReceived())
   {
      sleep(1);
   }
   engine.ResetEventReceived();

   // Change the trigger query and text and verify an event is received
   engine.ChangeTriggerQuery(trigger_id, "(SlotID > 0)");
   engine.ChangeTriggerText(trigger_id, "$(Machine) has a slot $(SlotID)");
   while (false == engine.GetEventReceived())
   {
      sleep(1);
   }
   engine.ResetEventReceived();

   // Remove the trigger
   engine.RemoveTrigger(trigger_id);

   return 0;
}