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

Contents of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7685 - (show annotations)
Thu Jan 11 15:26:41 2018 UTC (7 years ago) by softime
File size: 15583 byte(s)
* Merge de la version 4.6.0

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 chmod('../dyn/config.inc.php', 0777);
307 $config = file_get_contents('../dyn/config.inc.php');
308 $pattern = '\?>';
309 $replace = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>';
310 $output = preg_replace("/".$pattern."/", $replace, $config);
311 $new_config = file_put_contents('../dyn/config.inc.php', $output);
312
313 //
314 $this->assertNotEquals(false, $new_config);
315 }
316
317
318 /**
319 * Test de non régression concernant une sur consomation de mémoire lors de
320 * l'import des documents numérisés.
321 *
322 * XXX Si ce test sort avec erreur : Trying to get property of non-object
323 * c'est la consomation de mémoire qui explose
324 */
325 public function test_tnr_run_import_out_of_memory() {
326 // Nom de dossier
327 $pathSrc = "../var/digitalization/Todo/PA0130551200001";
328 //Nom dossier destination
329 $pathDes = "../var/digitalization/Done/PA0130551200001";
330 exec("(dd if=/dev/zero of=binary_files/20101106AUTPCP.pdf bs=15485760 count=1) > /dev/null 2>&1");
331 mkdir($pathSrc);
332 chmod($pathSrc, 0777);
333
334 mkdir($pathDes);
335 chmod($pathDes, 0777);
336
337 // Récupération du document
338 for ($i=0; $i < 100; $i++) {
339 copy(
340 'binary_files/20101106AUTPCP.pdf',
341 $pathSrc.'/20101106AUTPCP-'.$i.'.pdf'
342 );
343 }
344
345 // Lien à envoyer
346 $url = $this->base_url.'services/rest_entry.php/maintenance';
347 // Mode de la requête
348 $request = 'POST';
349 // Données à envoyer
350 $postfields = array(
351 'module' => 'import',
352 'data' => array(
353 'Todo' => '../var/digitalization/Todo',
354 'Done' => '../var/digitalization/Done'
355 ),
356 );
357
358 // Initialisation cURL
359 $message = $this->init_cURL($url, $request, $postfields);
360
361 // On vérifie le retour de la session cURL
362 $this->assertEquals($message, 'Tous les documents ont été traités');
363
364 //Deuxième jet pour autre message
365
366 // Initialisation cURL
367 $message = $this->init_cURL($url, $request, $postfields);
368
369 // On vérifie le retour de la session cURL
370 $this->assertEquals($message, 'Aucun document à traiter');
371 // Suppression des fichiers importés
372 for ($i=0; $i < 100; $i++) {
373 // Suppression des documents créé
374 unlink($pathDes.'/20101106AUTPCP-'.$i.'.pdf');
375 }
376 // Suppression du dossier PC0130551200005.P0
377 rmdir($pathSrc);
378 rmdir($pathDes);
379 // Supprime le fichier de test de mémoire
380 unlink("binary_files/20101106AUTPCP.pdf");
381 }
382
383
384 /**
385 * Test le module import de maintenance
386 */
387 public function testMaintenanceImport() {
388
389 // Création du dossier PC0130551200001.P0 dans le dossier de
390 // numérisation
391 mkdir('../var/digitalization/Todo/PC0130551200001.P0/');
392 chmod('../var/digitalization/Todo/PC0130551200001.P0/', 0777);
393 // Récupération du document
394 copy('binary_files/20091106AUTPCP.pdf', '../var/digitalization/Todo/PC0130551200001.P0/20091106AUTPCP.pdf');
395
396 // Lien à envoyer
397 $url = $this->base_url.'services/rest_entry.php/maintenance';
398 // Mode de la requête
399 $request = 'POST';
400 // Données à envoyer
401 $postfields = array(
402 'module' => 'import',
403 'data' => array(
404 'Todo' => '../var/digitalization/Todo',
405 'Done' => '../var/digitalization/Done'
406 ),
407 );
408
409 // Initialisation cURL
410 $message = $this->init_cURL($url, $request, $postfields);
411
412 // On vérifie le retour de la session cURL
413 $this->assertEquals($message, 'Tous les documents ont été traités');
414
415 //Deuxième jet pour autre message
416
417 // Initialisation cURL
418 $message = $this->init_cURL($url, $request, $postfields);
419
420 // On vérifie le retour de la session cURL
421 $this->assertEquals($message, 'Aucun document à traiter');
422 }
423
424 /**
425 * Test le module purge de maintenance
426 */
427 public function testMaintenancePurge() {
428 mkdir('../var/digitalization/Done/PC0130551200002.P0');
429 touch('../var/digitalization/Done/PC0130551200002.P0/test.pdf');
430 touch('../var/digitalization/Done/PC0130551200001.P0/20091106AUTPCP.pdf',strtotime('-1 month'));
431
432 // Lien à envoyer
433 $url = $this->base_url.'services/rest_entry.php/maintenance';
434 // Mode de la requête
435 $request = 'POST';
436 // Données à envoyer
437 $postfields = array(
438 'module' => 'purge',
439 'data' => array(
440 'dossier' => '../var/digitalization/Done',
441 'nombre_de_jour' => "20"
442 ),
443 );
444
445 // Initialisation cURL
446 $message = $this->init_cURL($url, $request, $postfields);
447
448 // On vérifie le retour de la session cURL
449 $this->assertEquals($message, '1 fichier(s) purgé(s) sur 2 dossier(s) traité(s)');
450
451 // Supprime les dossiers créent pour les tests testMaintenanceImport()
452 // et testMaintenancePurge()
453 unlink ('../var/digitalization/Done/PC0130551200002.P0/test.pdf');
454 rmdir('../var/digitalization/Todo/PC0130551200001.P0');
455 rmdir('../var/digitalization/Done/PC0130551200002.P0');
456 }
457
458
459 /**
460 * Désactive l'option de numérisation.
461 *
462 * @return void
463 */
464 public function test_desactivate_option_digitalization_folder() {
465
466 // Supprime les options nécessaires à la numérisation
467 chmod('../dyn/config.inc.php', 0777);
468 $config = file_get_contents('../dyn/config.inc.php');
469 $search = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>';
470 $replace = "?>";
471 $output = str_replace($search, $replace, $config);
472 $new_config = file_put_contents('../dyn/config.inc.php', $output);
473
474 //
475 $this->assertNotEquals(false, $new_config);
476 }
477
478 }
479
480 ?>

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26