/[openfoncier]/trunk/tests/testREST.php
ViewVC logotype

Contents of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4708 - (show annotations)
Fri Jul 1 16:59:15 2016 UTC (8 years, 7 months ago) by fmichon
File size: 15546 byte(s)
* Évolution - Suppression du composant de gestion de file d'attente RabbitMQ.
  La gestion de file d'attente entre les applicatifs est une question
  d'exploitation propre au SI. C'est une application à part entière. openADS
  n'a pas à gérer cette partie.
* Amélioration - Refonte de l'interface avec le référentiel ERP :
 - Ajout de logs dédiés aux services.
 - Transformation de tests PHPUnit en RobotFramework.
 - Ajout d'un champ connecté au référentiel ERP sur le dossier.
 - Possibilité de récupérer les informations sur les demandeurs.
 - Renommage de l'option option_erp en option_referentiel_erp.
 - Ajout d'une interface de controlpanel.

1 <?php
2 /**
3 * Ce fichier regroupe les tests concernant le REST
4 *
5 * @package openads
6 * @version SVN : $Id: testREST.php 6132 2016-03-09 09:18:18Z stimezouaght $:
7 */
8
9 // Fichier nécessaire
10 require_once "../obj/utils.class.php";
11 require_once "../services/outgoing/MessageSenderRest.class.php";
12
13 /**
14 * Cette classe permet de faire des tests sur les requêtes REST
15 *
16 * Données utilisées :
17 *
18 * Fichiers dans binary_files/test_digitalizedDocument/Transfert_GED
19 *
20 * Les consultations 1 et 2
21 *
22 * Le dossier d'autorisation PC0130551200001
23 *
24 * Le dossier d'instruction PC0130551200001P0
25 */
26 class RESTTest extends PHPUnit_Framework_TestCase {
27
28 var $base_url = '';
29 var $f;
30
31 /**
32 * Méthode lancée en début de traitement
33 */
34 public function setUp() {
35 $this->base_url = 'http://localhost/'.BASE_PATH_URL;
36 // Instancie la timezone
37 date_default_timezone_set('Europe/Paris');
38 echo ' = '.get_class().'.'.str_replace('test_', '', $this->getName())."\r\n";
39 // Instance de la classe Utils
40 require_once '../obj/utils.class.php';
41 @session_start();
42 $_SESSION['collectivite'] = 2;
43 $_SESSION['login'] = 'admin';
44 $_SERVER['REQUEST_URI'] = '';
45 if($this->f === null) {
46 $this->f = new utils('nohtml');
47 }
48
49 // Activation du paramètre d'activation du sig
50 $this->f->db->autoExecute(
51 DB_PREFIXE."om_parametre",
52 array('valeur' => 'sig_externe'),
53 DB_AUTOQUERY_UPDATE,
54 "libelle = 'option_sig' AND om_collectivite IN (1, 2)"
55 );
56 }
57
58 public function onNotSuccessfulTest(Exception $e){
59 echo 'Line '.$e->getLine().' : '.$e->getMessage()."\r\n";
60 parent::onNotSuccessfulTest($e);
61 }
62
63 /**
64 * Méthode lancée en fin de traitement
65 */
66 public function tearDown() {
67
68 // Désactivation du paramètre d'activation du sig
69 $this->f->db->autoExecute(
70 DB_PREFIXE."om_parametre",
71 array('valeur' => 'aucun'),
72 DB_AUTOQUERY_UPDATE,
73 "libelle = 'option_sig' AND om_collectivite IN (1, 2)"
74 );
75 }
76
77 /**
78 * Initialisation pour session cURL
79 * @param string $url Lien
80 * @param string $request Mode de requête
81 * @param array $postfields Données à envoyer
82 * @return mixed Session cURL
83 */
84 private function init_cURL($url, $request, $postfields) {
85
86 // Initialisation session cURL
87 $curl = curl_init();
88 // Url de la page à récupérer
89 curl_setopt($curl, CURLOPT_URL, $url);
90 // Permet de récupérer le résultat au lieu de l'afficher
91 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
92 // Démarrer un nouveau cookie de session
93 curl_setopt($curl, CURLOPT_COOKIESESSION, true);
94 // Requête REST à envoyer (par défaut à GET)
95 switch ($request) {
96 case 'POST':
97 curl_setopt($curl, CURLOPT_POST, true);
98 break;
99 case 'PUT':
100 curl_setopt($curl, CURLOPT_PUT, true);
101 break;
102 }
103
104 // Si il y a des paramètres à envoyer
105 if ($postfields != '') {
106
107 // Informations à envoyer
108 $postfields = $this->preparePostFields($curl, $postfields, $request);
109 }
110
111 // Retour de la session cURL
112 $return = curl_exec($curl);
113 // Ferme la session cURL
114 curl_close($curl);
115
116 // Message retourné par REST
117 $message = $this->getReturnMessage($return, $request);
118
119 // Retourne le message
120 return $message;
121 }
122
123 /**
124 * Prépare les paramètres à envoyer en cURL
125 * @param mixed $curl Session cURL
126 * @param array $array Tableau des paramètres
127 * @param string $request Méthode utilisée (POST/PUT)
128 */
129 private function preparePostFields($curl, $array, $request) {
130
131 // Si c'est une requête POST
132 if ($request == 'POST') {
133
134 // Génère une chaîne de requête en encodage URL
135 $return = http_build_query($array);
136
137 // Données passées en POST
138 curl_setopt($curl, CURLOPT_POSTFIELDS, $return);
139
140 // Sinon c'est une requête PUT
141 } else {
142
143 // Encode le tableau en json
144 $return = json_encode($array);
145
146 // Crée un fichier temporaire
147 $putData = tmpfile();
148 // Ecrit la chaîne dans le fichier temporaire
149 fwrite($putData, $return);
150 // Place le curseur au début du fichier
151 fseek($putData, 0);
152 // Permet de retourner des données binaires
153 curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
154 // Le fichier lu par le transfert lors du chargement
155 curl_setopt($curl, CURLOPT_INFILE, $putData);
156 // Taille du fichier en octet attendue
157 curl_setopt($curl, CURLOPT_INFILESIZE, strlen($return));
158
159 }
160
161 }
162
163 /**
164 * Retourne seulement le message du retour REST
165 * @param string $return Retour du REST
166 * @return string Message du retour
167 */
168 private function getReturnMessage($return, $request) {
169
170 // Si c'est une requête GET
171 if ($request == 'GET') {
172
173 // Retraite la chaîne
174 $return = substr($return,1,-1);
175 $return = trim($return);
176 $return = preg_replace("(\r\n|\n|\r)",'',$return);
177
178 // On retourne directement le return
179 return $return;
180 }
181
182 // Decode du json et crée un objet
183 $return = json_decode($return);
184
185 // Retourne le message du retour REST
186 return $return->message;
187
188 }
189
190 /**
191 * Test le module consultation de maintenance
192 */
193 public function testMaintenanceConsultation() {
194
195 // Lien à envoyer
196 $url = $this->base_url.'services/rest_entry.php/maintenance';
197 // Mode de la requête
198 $request = 'POST';
199 // Données à envoyer
200 $postfields = array(
201 'module' => 'consultation',
202 'data' => 'NA',
203 );
204
205 // Initialisation cURL
206 $message = $this->init_cURL($url, $request, $postfields);
207
208 // On vérifie le retour de la session cURL
209 $this->assertEquals($message, '2 consultations mise(s) à jour.');
210
211 //Deuxième jet pour autre message
212
213 // Initialisation cURL
214 $message = $this->init_cURL($url, $request, $postfields);
215
216 // On vérifie le retour de la session cURL
217 $this->assertEquals($message, 'Aucune mise a jour.');
218 }
219
220 /**
221 * Test le module instruction de maintenance
222 */
223 public function testMaintenanceInstruction() {
224
225 // Lien à envoyer
226 $url = $this->base_url.'services/rest_entry.php/maintenance';
227 // Mode de la requête
228 $request = 'POST';
229 // Données à envoyer
230 $postfields = array(
231 'module' => 'instruction',
232 'data' => 'NA',
233 );
234
235 // Initialisation cURL
236 $message = $this->init_cURL($url, $request, $postfields);
237
238 // On vérifie le retour de la session cURL
239 $this->assertEquals($message, '1 dossier(s) mis à jour.');
240 }
241
242
243 /**
244 * Test le module d'import sans l'option de numérisation activée.
245 *
246 * @return void
247 */
248 public function test_maintenance_import_without_option_activated() {
249
250 // Lien à envoyer
251 $url = $this->base_url.'services/rest_entry.php/maintenance';
252 // Mode de la requête
253 $request = 'POST';
254 // Données à envoyer
255 $postfields = array(
256 'module' => 'import',
257 'data' => array(
258 'Todo' => '../var/digitalization/Todo',
259 'Done' => '../var/digitalization/Done'
260 ),
261 );
262
263 // Initialisation cURL
264 $message = $this->init_cURL($url, $request, $postfields);
265
266 // On vérifie le retour de la session cURL
267 $this->assertEquals($message, 'L\'option de numérisation des dossiers n\'est pas activée');
268 }
269
270
271 /**
272 * Test le module de purge sans l'option de numérisation activée.
273 *
274 * @return void
275 */
276 public function test_maintenance_purge_without_option_activated() {
277
278 // Lien à envoyer
279 $url = $this->base_url.'services/rest_entry.php/maintenance';
280 // Mode de la requête
281 $request = 'POST';
282 // Données à envoyer
283 $postfields = array(
284 'module' => 'purge',
285 'data' => array(
286 'dossier' => '../var/digitalization/Done',
287 'nombre_de_jour' => "20"
288 ),
289 );
290
291 // Initialisation cURL
292 $message = $this->init_cURL($url, $request, $postfields);
293
294 // On vérifie le retour de la session cURL
295 $this->assertEquals($message, 'L\'option de numérisation des dossiers n\'est pas activée');
296 }
297
298
299 /**
300 * Active l'option de numérisation.
301 *
302 * @return void
303 */
304 public function test_activate_option_digitalization_folder() {
305
306 // Ajoute les options nécessaires à la numérisation
307 chmod('../dyn/config.inc.php', 0777);
308 $config = file_get_contents('../dyn/config.inc.php');
309 $pattern = '\?>';
310 $replace = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>';
311 $output = preg_replace("/".$pattern."/", $replace, $config);
312 $new_config = file_put_contents('../dyn/config.inc.php', $output);
313
314 //
315 $this->assertNotEquals(false, $new_config);
316 }
317
318
319 /**
320 * Test de non régression concernant une sur consomation de mémoire lors de
321 * l'import des documents numérisés.
322 *
323 * XXX Si ce test sort avec erreur : Trying to get property of non-object
324 * c'est la consomation de mémoire qui explose
325 */
326 public function test_tnr_run_import_out_of_memory() {
327 // Nom de dossier
328 $pathSrc = "../var/digitalization/Todo/PA0130551200001";
329 //Nom dossier destination
330 $pathDes = "../var/digitalization/Done/PA0130551200001";
331 exec("(dd if=/dev/zero of=binary_files/20101106AUTPCP.pdf bs=15485760 count=1) > /dev/null 2>&1");
332 mkdir($pathSrc);
333 chmod($pathSrc, 0777);
334
335 mkdir($pathDes);
336 chmod($pathDes, 0777);
337
338 // Récupération du document
339 for ($i=0; $i < 100; $i++) {
340 copy(
341 'binary_files/20101106AUTPCP.pdf',
342 $pathSrc.'/20101106AUTPCP-'.$i.'.pdf'
343 );
344 }
345
346 // Lien à envoyer
347 $url = $this->base_url.'services/rest_entry.php/maintenance';
348 // Mode de la requête
349 $request = 'POST';
350 // Données à envoyer
351 $postfields = array(
352 'module' => 'import',
353 'data' => array(
354 'Todo' => '../var/digitalization/Todo',
355 'Done' => '../var/digitalization/Done'
356 ),
357 );
358
359 // Initialisation cURL
360 $message = $this->init_cURL($url, $request, $postfields);
361
362 // On vérifie le retour de la session cURL
363 $this->assertEquals($message, 'Tous les documents ont été traités');
364
365 //Deuxième jet pour autre message
366
367 // Initialisation cURL
368 $message = $this->init_cURL($url, $request, $postfields);
369
370 // On vérifie le retour de la session cURL
371 $this->assertEquals($message, 'Aucun document à traiter');
372 // Suppression des fichiers importés
373 for ($i=0; $i < 100; $i++) {
374 // Suppression des documents créé
375 unlink($pathDes.'/20101106AUTPCP-'.$i.'.pdf');
376 }
377 // Suppression du dossier PC0130551200005.P0
378 rmdir($pathSrc);
379 rmdir($pathDes);
380 }
381
382
383 /**
384 * Test le module import de maintenance
385 */
386 public function testMaintenanceImport() {
387
388 // Création du dossier PC0130551200001.P0 dans le dossier de
389 // numérisation
390 mkdir('../var/digitalization/Todo/PC0130551200001.P0/');
391 chmod('../var/digitalization/Todo/PC0130551200001.P0/', 0777);
392 // Récupération du document
393 copy('binary_files/20091106AUTPCP.pdf', '../var/digitalization/Todo/PC0130551200001.P0/20091106AUTPCP.pdf');
394
395 // Lien à envoyer
396 $url = $this->base_url.'services/rest_entry.php/maintenance';
397 // Mode de la requête
398 $request = 'POST';
399 // Données à envoyer
400 $postfields = array(
401 'module' => 'import',
402 'data' => array(
403 'Todo' => '../var/digitalization/Todo',
404 'Done' => '../var/digitalization/Done'
405 ),
406 );
407
408 // Initialisation cURL
409 $message = $this->init_cURL($url, $request, $postfields);
410
411 // On vérifie le retour de la session cURL
412 $this->assertEquals($message, 'Tous les documents ont été traités');
413
414 //Deuxième jet pour autre message
415
416 // Initialisation cURL
417 $message = $this->init_cURL($url, $request, $postfields);
418
419 // On vérifie le retour de la session cURL
420 $this->assertEquals($message, 'Aucun document à traiter');
421 }
422
423 /**
424 * Test le module purge de maintenance
425 */
426 public function testMaintenancePurge() {
427 mkdir('../var/digitalization/Done/PC0130551200002.P0');
428 touch('../var/digitalization/Done/PC0130551200002.P0/test.pdf');
429 touch('../var/digitalization/Done/PC0130551200001.P0/20091106AUTPCP.pdf',strtotime('-1 month'));
430
431 // Lien à envoyer
432 $url = $this->base_url.'services/rest_entry.php/maintenance';
433 // Mode de la requête
434 $request = 'POST';
435 // Données à envoyer
436 $postfields = array(
437 'module' => 'purge',
438 'data' => array(
439 'dossier' => '../var/digitalization/Done',
440 'nombre_de_jour' => "20"
441 ),
442 );
443
444 // Initialisation cURL
445 $message = $this->init_cURL($url, $request, $postfields);
446
447 // On vérifie le retour de la session cURL
448 $this->assertEquals($message, '1 fichier(s) purgé(s) sur 2 dossier(s) traité(s)');
449
450 // Supprime les dossiers créent pour les tests testMaintenanceImport()
451 // et testMaintenancePurge()
452 unlink ('../var/digitalization/Done/PC0130551200002.P0/test.pdf');
453 rmdir('../var/digitalization/Todo/PC0130551200001.P0');
454 rmdir('../var/digitalization/Done/PC0130551200002.P0');
455 }
456
457
458 /**
459 * Désactive l'option de numérisation.
460 *
461 * @return void
462 */
463 public function test_desactivate_option_digitalization_folder() {
464
465 // Supprime les options nécessaires à la numérisation
466 chmod('../dyn/config.inc.php', 0777);
467 $config = file_get_contents('../dyn/config.inc.php');
468 $search = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>';
469 $replace = "?>";
470 $output = str_replace($search, $replace, $config);
471 $new_config = file_put_contents('../dyn/config.inc.php', $output);
472
473 //
474 $this->assertNotEquals(false, $new_config);
475 }
476
477 }
478
479 ?>

Properties

Name Value
svn:executable

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26