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

Contents of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8329 - (show annotations)
Wed Nov 14 11:20:57 2018 UTC (6 years, 2 months ago) by softime
File size: 15491 byte(s)
* Merge de la branche d'intégration 4.8.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26