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

Annotation of /trunk/tests/testREST.php

Parent Directory Parent Directory | Revision Log Revision Log


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