/**
  * @test
  */
 public function prepareDB()
 {
     global $DB;
     $DB->connect();
     $pfDeployPackage = new PluginFusioninventoryDeployPackage();
     $pfDeployGroup = new PluginFusioninventoryDeployGroup();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTaskjobState = new PluginFusioninventoryTaskjobstate();
     $pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
     $pfDeployGroup_Dynamicdata = new PluginFusioninventoryDeployGroup_Dynamicdata();
     // Create package
     $input = array('entities_id' => 0, 'name' => 'package');
     $packages_id = $pfDeployPackage->add($input);
     // Create fusioninventory dynamic group
     $input = array('name' => 'all computers have name computer', 'type' => 'DYNAMIC');
     $groups_id = $pfDeployGroup->add($input);
     $input = array('plugin_fusioninventory_deploygroups_id' => $groups_id, 'fields_array' => 'a:2:{s:8:"criteria";a:1:{i:0;a:3:{s:5:"field";s:1:"1";s:10:"searchtype";s:8:"contains";s:5:"value";s:8:"computer";}}s:12:"metacriteria";s:0:"";}');
     $pfDeployGroup_Dynamicdata->add($input);
     // create task
     $input = array('entities_id' => 0, 'name' => 'deploy', 'is_active' => 1);
     self::$tasks_id = $pfTask->add($input);
     // create taskjob
     $input = array('plugin_fusioninventory_tasks_id' => self::$tasks_id, 'entities_id' => 0, 'name' => 'deploy', 'method' => 'deployinstall', 'targets' => '[{"PluginFusioninventoryDeployPackage":"' . $packages_id . '"}]', 'actors' => '[{"PluginFusioninventoryDeployGroup":"' . self::$tasks_id . '"}]');
     self::$taskjobs_id = $pfTaskjob->add($input);
     //create taskjobstate
     $input = array('plugin_fusioninventory_taskjobs_id' => self::$taskjobs_id, 'items_id' => 0, 'itemtype' => 'Computer', 'state' => PluginFusioninventoryTaskjobstate::FINISHED, 'plugin_fusioninventory_agents_id' => 0, 'specificity' => 0, 'uniqid' => 0);
     self::$taskjobstates_id = $pfTaskjobState->add($input);
     //crfeate taskjoblogR
     $input = array('plugin_fusioninventory_taskjobstates_id' => self::$taskjobstates_id, 'date ' => date('Y-m-d H:i:s'), 'items_id' => 0, 'itemtype' => 'Computer', 'state' => PluginFusioninventoryTaskjoblog::TASK_RUNNING, 'comment' => "1 ==devicesfound==");
     self::$taskjoblogs_id = $pfTaskjoblog->add($input);
 }
 /**
  * @test
  */
 public function prepareDB()
 {
     global $DB;
     $DB->connect();
     $computer = new Computer();
     $pfAgent = new PluginFusioninventoryAgent();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfIPRange = new PluginFusioninventoryIPRange();
     // Create computers + agents
     $input = array('entities_id' => 0, 'name' => 'computer1');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer1', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer1', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer2');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer2', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer2', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer3');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer3', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer3', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     // Add IPRange
     $input = array('entities_id' => 0, 'name' => 'Office', 'ip_start' => '10.0.0.1', 'ip_end' => '10.0.0.254');
     $ipranges_id = $pfIPRange->add($input);
     $input = array('entities_id' => 0, 'name' => 'Office2', 'ip_start' => '10.0.2.1', 'ip_end' => '10.0.2.254');
     $ipranges_id2 = $pfIPRange->add($input);
     // Allow all agents to do network discovery
     $query = "UPDATE `glpi_plugin_fusioninventory_agentmodules` " . " SET `is_active`='1' " . " WHERE `modulename`='NETWORKDISCOVERY'";
     $DB->query($query);
     // create task
     $input = array('entities_id' => 0, 'name' => 'network discovery', 'is_active' => 1);
     $tasks_id = $pfTask->add($input);
     // create taskjob
     $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'discovery', 'method' => 'networkdiscovery', 'targets' => '[{"PluginFusioninventoryIPRange":"' . $ipranges_id . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"2"}]');
     $pfTaskjob->add($input);
     // create task
     $input = array('entities_id' => 0, 'name' => 'network discovery2', 'is_active' => 1);
     $tasks2_id = $pfTask->add($input);
     // create taskjob
     $input = array('plugin_fusioninventory_tasks_id' => $tasks2_id, 'entities_id' => 0, 'name' => 'discovery', 'method' => 'networkdiscovery', 'targets' => '[{"PluginFusioninventoryIPRange":"' . $ipranges_id2 . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"3"}]');
     $pfTaskjob->add($input);
 }
 /**
  * @test
  */
 public function GetTaskWithoutJobs()
 {
     global $DB;
     // Verify prepare a deploy task
     $DB->connect();
     $pfTask = new PluginFusioninventoryTask();
     // create task
     $input = array('entities_id' => 0, 'name' => 'deploy', 'is_active' => 1);
     $pfTask->add($input);
     $running_tasks = $pfTask->getItemsFromDB(array('is_running' => TRUE, 'is_active' => TRUE));
     $this->assertEquals(array(), $running_tasks, 'Not find task because not have job');
 }
 /**
  * @test
  */
 public function prepareDB()
 {
     global $DB;
     $DB->connect();
     $computer = new Computer();
     $pfAgent = new PluginFusioninventoryAgent();
     $pfDeployPackage = new PluginFusioninventoryDeployPackage();
     $pfDeployGroup = new PluginFusioninventoryDeployGroup();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfDeployGroup_Dynamicdata = new PluginFusioninventoryDeployGroup_Dynamicdata();
     // Create package
     $input = array('entities_id' => 0, 'name' => 'package');
     $packages_id = $pfDeployPackage->add($input);
     // Create fusioninventory dynamic group
     $input = array('name' => 'all computers have name computer', 'type' => 'DYNAMIC');
     $groups_id = $pfDeployGroup->add($input);
     $input = array('plugin_fusioninventory_deploygroups_id' => $groups_id, 'fields_array' => 'a:2:{s:8:"criteria";a:1:{i:0;a:3:{s:5:"field";s:1:"1";s:10:"searchtype";s:8:"contains";s:5:"value";s:8:"computer";}}s:12:"metacriteria";s:0:"";}');
     $pfDeployGroup_Dynamicdata->add($input);
     // create task
     $input = array('entities_id' => 0, 'name' => 'deploy', 'is_active' => 1);
     $tasks_id = $pfTask->add($input);
     // create takjob
     $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'deploy', 'method' => 'deployinstall', 'targets' => '[{"PluginFusioninventoryDeployPackage":"' . $packages_id . '"}]', 'actors' => '[{"PluginFusioninventoryDeployGroup":"' . $tasks_id . '"}]');
     $pfTaskjob->add($input);
     // Create computers + agents
     $input = array('entities_id' => 0, 'name' => 'computer1');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'portdavid', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'portdavid', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer2');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer2', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer2', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer3');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer3', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer3', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
 }
 /**
  * @test
  */
 public function PrinterToInventoryWithoutIP()
 {
     self::restore_database();
     $printer = new Printer();
     $networkport = new NetworkPort();
     $networkName = new NetworkName();
     $pfPrinter = new PluginFusioninventoryPrinter();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $computer = new Computer();
     $pfAgent = new PluginFusioninventoryAgent();
     $communication = new PluginFusioninventoryCommunication();
     // Create computers + agents
     $input = array('entities_id' => 0, 'name' => 'computer1');
     $computers_id = $computer->add($input);
     $input = array('entities_id' => 0, 'name' => 'computer1', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer1', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id);
     $pfAgent->add($input);
     // Create printer
     $input = array('name' => 'printer 001', 'entities_id' => 0);
     $printers_id = $printer->add($input);
     // Add port
     $networkports_id = $networkport->add(array('itemtype' => 'Printer', 'instantiation_type' => 'NetworkPortEthernet', 'items_id' => $printers_id, 'entities_id' => 0));
     $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_id));
     $input = array('printers_id' => 1, 'plugin_fusioninventory_configsecurities_id' => 2);
     $pfPrinter->add($input);
     // Add task
     // create task
     $input = array('entities_id' => 0, 'name' => 'network inventory', 'is_active' => 1);
     $tasks_id = $pfTask->add($input);
     // create taskjob
     $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'inventory', 'method' => 'networkinventory', 'targets' => '[{"Printer":"' . $printers_id . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"1"}]');
     $pfTaskjob->add($input);
     PluginFusioninventoryTask::cronTaskscheduler();
     $data = $pfTask->getJoblogs(array(1));
     // Task is prepared
     // Agent will get data
     $communication->getTaskAgent(1);
     $message = $communication->getMessage();
     $json = json_encode($message);
     $array = json_decode($json, TRUE);
     $ref = array();
     $this->assertEquals($ref, $array, 'XML of SNMP inventory task');
 }
 /**
  * Submit Form values
  */
 public function submitForm($postvars)
 {
     if (isset($postvars['definition_add'])) {
         // * Add a definition
         $mytaskjob->getFromDB($postvars['id']);
         $a_listdef = importArrayFromDB($mytaskjob->fields['definition']);
         $add = 1;
         foreach ($a_listdef as $dataDB) {
             if (isset($dataDB[$postvars['DefinitionType']]) and $dataDB[$postvars['DefinitionType']] == $postvars['definitionselectiontoadd']) {
                 $add = 0;
                 break;
             }
         }
         if ($add == '1') {
             if (isset($postvars['DefinitionType']) and $postvars['DefinitionType'] != '') {
                 $a_listdef[] = array($postvars['DefinitionType'] => $postvars['definitionselectiontoadd']);
             }
         }
         $input = array();
         $input['id'] = $postvars['id'];
         $input['definition'] = exportArrayToDB($a_listdef);
         $mytaskjob->update($input);
         Html::back();
     } else {
         if (isset($postvars['action_add'])) {
             // * Add an action
             $mytaskjob->getFromDB($postvars['id']);
             $a_listact = importArrayFromDB($mytaskjob->fields['action']);
             $add = 1;
             foreach ($a_listact as $dataDB) {
                 if (isset($dataDB[$postvars['ActionType']]) and $dataDB[$postvars['ActionType']] == $postvars['actionselectiontoadd']) {
                     $add = 0;
                     break;
                 }
             }
             if ($add == '1') {
                 if (isset($postvars['ActionType']) and $postvars['ActionType'] != '') {
                     $a_listact[] = array($postvars['ActionType'] => $postvars['actionselectiontoadd']);
                 }
             }
             $input = array();
             $input['id'] = $postvars['id'];
             $input['action'] = exportArrayToDB($a_listact);
             $mytaskjob->update($input);
             Html::back();
         } else {
             if (isset($postvars['definition_delete'])) {
                 // * Delete definition
                 $mytaskjob->getFromDB($postvars['id']);
                 $a_listdef = importArrayFromDB($mytaskjob->fields['definition']);
                 foreach ($postvars['definition_to_delete'] as $itemdelete) {
                     $datadel = explode('-', $itemdelete);
                     foreach ($a_listdef as $num => $dataDB) {
                         if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) {
                             unset($a_listdef[$num]);
                         }
                     }
                 }
                 $input = array();
                 $input['id'] = $postvars['id'];
                 $input['definition'] = exportArrayToDB($a_listdef);
                 $mytaskjob->update($input);
                 Html::back();
             } else {
                 if (isset($postvars['action_delete'])) {
                     // * Delete action
                     $mytaskjob->getFromDB($postvars['id']);
                     $a_listact = importArrayFromDB($mytaskjob->fields['action']);
                     foreach ($postvars['action_to_delete'] as $itemdelete) {
                         $datadel = explode('-', $itemdelete);
                         foreach ($a_listact as $num => $dataDB) {
                             if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) {
                                 unset($a_listact[$num]);
                             }
                         }
                     }
                     $input = array();
                     $input['id'] = $postvars['id'];
                     $input['action'] = exportArrayToDB($a_listact);
                     $mytaskjob->update($input);
                     Html::back();
                     /**
                      * Wizard related method disabled for 0.85
                      * TODO: cf. TaskJob::showQuickForm()
                      */
                     //} else if (isset($postvars['quickform'])) {
                     //   $pfTask = new PluginFusioninventoryTask();
                     //   if (isset($postvars['update'])) {
                     //      $mytaskjob->getFromDB($postvars['id']);
                     //      $pfTask->getFromDB($mytaskjob->fields['plugin_fusioninventory_tasks_id']);
                     //   }
                     //   $inputtaskjob = array();
                     //   $inputtask = array();
                     //   if (isset($postvars['update'])) {
                     //      $inputtaskjob['id'] = $postvars['id'];
                     //      $inputtask['id'] = $mytaskjob->fields['plugin_fusioninventory_tasks_id'];
                     //   }
                     //   $inputtaskjob['name'] = $postvars['name'];
                     //   if (isset($postvars['add']) OR $pfTask->fields['name'] == '') {
                     //      $inputtask['name'] = $postvars['name'];
                     //   }
                     //   $inputtask['is_active'] = $postvars['is_active'];
                     //   $inputtaskjob['method'] = $postvars['method'];
                     //   $inputtask['communication'] = $postvars['communication'];
                     //   $inputtask['periodicity_count'] = $postvars['periodicity_count'];
                     //   $inputtask['periodicity_type'] = $postvars['periodicity_type'];
                     //   $inputtask['entities_id'] = $_SESSION['glpiactive_entity'];
                     //   $inputtaskjob['entities_id'] = $_SESSION['glpiactive_entity'];
                     //   if (isset($postvars['update'])) {
                     //      $mytaskjob->update($inputtaskjob);
                     //      $pfTask->update($inputtask);
                     //      Html::back();
                     //   } else if (isset($postvars['add'])) {
                     //      if (!isset($postvars['entities_id'])) {
                     //         $postvars['entities_id'] = $_SESSION['glpidefault_entity'];
                     //      }
                     //      // Get entity of task
                     //      if (isset($postvars['plugin_fusioninventory_tasks_id'])) {
                     //         $pfTask = new PluginFusioninventoryTask();
                     //         $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']);
                     //         $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']);
                     //         if (!in_array($postvars['entities_id'], $entities_list)) {
                     //            $postvars['entities_id'] = $pfTask->fields['entities_id'];
                     //         }
                     //      } else {
                     //         $inputtask['date_scheduled'] = date("Y-m-d H:i:s");
                     //         $task_id = $pfTask->add($inputtask);
                     //         $inputtaskjob['plugin_fusioninventory_tasks_id'] = $task_id;
                     //      }
                     //      if (isset($postvars['method_id'])) {
                     //         $postvars['method']  = $postvars['method_id'];
                     //      }
                     //      $inputtaskjob['plugins_id'] = $postvars['method-'.$postvars['method']];
                     //      $taskjobs_id = $mytaskjob->add($inputtaskjob);
                     //      $redirect = $_SERVER['HTTP_REFERER'];
                     //      $redirect = str_replace('&id=0', '&id='.$taskjobs_id, $redirect);
                     //      Html::redirect($redirect);
                     //   }
                 } else {
                     if (isset($postvars['taskjobstoforcerun'])) {
                         // * Force running many tasks (wizard)
                         Session::checkRight('plugin_fusioninventory_task', UPDATE);
                         $pfTaskjob = new PluginFusioninventoryTaskjob();
                         $_SESSION["plugin_fusioninventory_forcerun"] = array();
                         foreach ($postvars['taskjobstoforcerun'] as $taskjobs_id) {
                             $pfTaskjob->getFromDB($taskjobs_id);
                             $uniqid = $pfTaskjob->forceRunningTask($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
                             $_SESSION["plugin_fusioninventory_forcerun"][$taskjobs_id] = $uniqid;
                         }
                         unset($_SESSION["MESSAGE_AFTER_REDIRECT"]);
                     } else {
                         if (isset($postvars['add']) || isset($postvars['update'])) {
                             // * Add and update taskjob
                             Session::checkRight('plugin_fusioninventory_task', CREATE);
                             if (isset($postvars['add'])) {
                                 if (!isset($postvars['entities_id'])) {
                                     $postvars['entities_id'] = $_SESSION['glpidefault_entity'];
                                 }
                                 // Get entity of task
                                 $pfTask = new PluginFusioninventoryTask();
                                 $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']);
                                 $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']);
                                 if (!in_array($postvars['entities_id'], $entities_list)) {
                                     $postvars['entities_id'] = $pfTask->fields['entities_id'];
                                 }
                                 //$postvars['execution_id'] = $pfTask->fields['execution_id'];
                                 $this->add($postvars);
                             } else {
                                 if (isset($postvars['method_id'])) {
                                     $postvars['method'] = $postvars['method_id'];
                                 }
                                 $targets = array();
                                 if (array_key_exists('targets', $postvars) and is_array($postvars['targets']) and count($postvars['targets']) > 0) {
                                     foreach ($postvars['targets'] as $target) {
                                         list($itemtype, $itemid) = explode('-', $target);
                                         $targets[] = array($itemtype => $itemid);
                                     }
                                 }
                                 $postvars['targets'] = exportArrayToDB($targets);
                                 $actors = array();
                                 if (array_key_exists('actors', $postvars) and is_array($postvars['actors']) and count($postvars['actors']) > 0) {
                                     foreach ($postvars['actors'] as $actor) {
                                         list($itemtype, $itemid) = explode('-', $actor);
                                         $actors[] = array($itemtype => $itemid);
                                     }
                                 }
                                 $postvars['actors'] = exportArrayToDB($actors);
                                 //TODO: get rid of plugins_id and just use method
                                 //$postvars['plugins_id'] = $postvars['method-'.$postvars['method']];
                                 $this->update($postvars);
                             }
                         } else {
                             if (isset($postvars["delete"])) {
                                 // * delete taskjob
                                 Session::checkRight('plugin_fusioninventory_task', PURGE);
                                 $this->delete($postvars);
                             } elseif (isset($postvars['itemaddaction'])) {
                                 $array = explode("||", $postvars['methodaction']);
                                 $module = $array[0];
                                 $method = $array[1];
                                 // Add task
                                 $mytask = new PluginFusioninventoryTask();
                                 $input = array();
                                 $input['name'] = $method;
                                 $task_id = $mytask->add($input);
                                 // Add job with this device
                                 $input = array();
                                 $input['plugin_fusioninventory_tasks_id'] = $task_id;
                                 $input['name'] = $method;
                                 $input['datetime_start'] = $postvars['datetime_start'];
                                 $input['plugins_id'] = PluginFusioninventoryModule::getModuleId($module);
                                 $input['method'] = $method;
                                 $a_selectionDB = array();
                                 $a_selectionDB[][$postvars['itemtype']] = $postvars['items_id'];
                                 $input['definition'] = exportArrayToDB($a_selectionDB);
                                 $taskname = "plugin_" . $module . "_task_selection_type_" . $method;
                                 if (is_callable($taskname)) {
                                     $input['selection_type'] = call_user_func($taskname, $postvars['itemtype']);
                                 }
                                 $mytaskjob->add($input);
                                 // Upsate task to activate it
                                 $mytask->getFromDB($task_id);
                                 $mytask->fields['is_active'] = "1";
                                 $mytask->update($mytask->fields);
                                 // force running this job (?)
                             } elseif (isset($postvars['forceend'])) {
                                 $taskjobstate = new PluginFusioninventoryTaskjobstate();
                                 $pfTaskjob = new PluginFusioninventoryTaskjob();
                                 $mytaskjobstate->getFromDB($postvars['taskjobstates_id']);
                                 $jobstate = $mytaskjobstate->fields;
                                 $a_taskjobstates = $mytaskjobstate->find("`uniqid`='" . $mytaskjobstate->fields['uniqid'] . "'");
                                 foreach ($a_taskjobstates as $data) {
                                     if ($data['state'] != PluginFusioninventoryTaskjobstate::FINISHED) {
                                         $mytaskjobstate->changeStatusFinish($data['id'], 0, '', 1, "Action cancelled by user", 0, 0);
                                     }
                                 }
                                 $pfTaskjob->getFromDB($jobstate['plugin_fusioninventory_taskjobs_id']);
                                 $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']);
                             } elseif (isset($postvars['delete_taskjobs'])) {
                                 foreach ($postvars['taskjobs'] as $taskjob_id) {
                                     $input = array('id' => $taskjob_id);
                                     $this->delete($input, true);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
 /**
  * @test
  */
 public function TaskWithPC()
 {
     $this->mark_incomplete();
     global $DB;
     $_SESSION['glpiactiveentities_string'] = 0;
     $pfDeployGroup = new PluginFusioninventoryDeployGroup();
     $pfDeployGroup_Dynamicdata = new PluginFusioninventoryDeployGroup_Dynamicdata();
     $pfDeployPackage = new PluginFusioninventoryDeployPackage();
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskJob = new PluginFusioninventoryTaskjob();
     $input = array('name' => 'test', 'type' => 'DYNAMIC');
     $pfDeployGroup->add($input);
     $input = array('groups_id' => 1, 'fields_array' => '{"entities_id":"0","name":"","field":["1"],"searchtype":["contains"],"contains":["^pc"],"plugin_fusioninventory_deploygroup_dynamicdatas_id":"1","id":"1","updaterule":"Update this rule","itemtype":"Computer"}');
     $pfDeployGroup_Dynamicdata->add($input);
     $input = array('name' => 'ls', 'entities_id' => 0);
     $pfDeployPackage->add($input);
     $input = array('name' => 'deploy', 'is_active' => 1, 'communication' => 'pull');
     $pfTask->add($input);
     $a_plugins = current(getAllDatasFromTable('glpi_plugins', '`directory`="fusioninventory"'));
     $input = array('plugin_fusioninventory_tasks_id' => 1, 'name' => 'deploy', 'plugins_id' => $a_plugins['id'], 'method' => 'deployinstall', 'action' => '[{"PluginFusioninventoryDeployGroup":"1"}]');
     $pfTaskJob->add($input);
     $DB->query('UPDATE `glpi_plugin_fusioninventory_taskjobs`
      SET `definition`=\'[{"PluginFusioninventoryDeployPackage":"1"}]\'
      WHERE `id`="1"');
     // Force task prepation
     $pfTaskJob->forceRunningTask(1);
     $a_jobstates = getAllDatasFromTable("glpi_plugin_fusioninventory_taskjobstates");
     foreach ($a_jobstates as $num => $data) {
         unset($data['uniqid']);
         $a_jobstates[$num] = $data;
     }
     $a_reference = array(1 => array('id' => 1, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 1, 'specificity' => '', 'execution_id' => '0'), 2 => array('id' => 2, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 2, 'specificity' => '', 'execution_id' => '0'), 3 => array('id' => 3, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 3, 'specificity' => '', 'execution_id' => '0'), 4 => array('id' => 4, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 4, 'specificity' => '', 'execution_id' => '0'), 5 => array('id' => 5, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 5, 'specificity' => '', 'execution_id' => '0'), 6 => array('id' => 6, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 6, 'specificity' => '', 'execution_id' => '0'), 7 => array('id' => 7, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 7, 'specificity' => '', 'execution_id' => '0'), 8 => array('id' => 8, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 8, 'specificity' => '', 'execution_id' => '0'), 9 => array('id' => 9, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 9, 'specificity' => '', 'execution_id' => '0'), 10 => array('id' => 10, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 10, 'specificity' => '', 'execution_id' => '0'), 11 => array('id' => 11, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 11, 'specificity' => '', 'execution_id' => '0'), 12 => array('id' => 12, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 12, 'specificity' => '', 'execution_id' => '0'), 13 => array('id' => 13, 'plugin_fusioninventory_taskjobs_id' => 1, 'items_id' => 1, 'itemtype' => "PluginFusioninventoryDeployPackage", 'state' => 0, 'plugin_fusioninventory_agents_id' => 13, 'specificity' => '', 'execution_id' => '0'));
     $this->assertEquals($a_reference, $a_jobstates);
 }