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

Annotation of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8329 - (hide 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 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    
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 nmeucci 4526 $pathSrc = "../var/digitalization/Todo/PA0130551200001";
327 mbroquet 3730 //Nom dossier destination
328 nmeucci 4526 $pathDes = "../var/digitalization/Done/PA0130551200001";
329 mbroquet 3730 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 softime 6565 // Supprime le fichier de test de mémoire
379     unlink("binary_files/20101106AUTPCP.pdf");
380 mbroquet 3730 }
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