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

Annotation of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6476 - (hide annotations)
Mon Apr 10 08:25:43 2017 UTC (7 years, 9 months ago) by nmeucci
File size: 15546 byte(s)
Suppression de la propriété SVN exécutable sur les fichiers non destinés à être exécutés.

1 mbroquet 3730 <?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 nmeucci 4526 $pathSrc = "../var/digitalization/Todo/PA0130551200001";
329 mbroquet 3730 //Nom dossier destination
330 nmeucci 4526 $pathDes = "../var/digitalization/Done/PA0130551200001";
331 mbroquet 3730 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     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26