Proyectos de Subversion Moodle

Rev

Rev 1 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
// This file is part of Moodle - http://moodle.org/
4
//
5
// Moodle is free software: you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation, either version 3 of the License, or
8
// (at your option) any later version.
9
//
10
// Moodle is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
// GNU General Public License for more details.
14
//
15
// You should have received a copy of the GNU General Public License
16
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17
 
18
namespace tool_installaddon;
19
 
20
use testable_tool_installaddon_installer;
21
use tool_installaddon_installer;
22
 
23
defined('MOODLE_INTERNAL') || die();
24
 
25
global $CFG;
26
require_once(__DIR__.'/fixtures/testable_installer.php');
27
 
28
/**
29
 * Unit tests for the {@link tool_installaddon_installer} class
30
 *
31
 * @package     tool_installaddon
32
 * @category    test
33
 * @copyright 2013 David Mudrak <david@moodle.com>
34
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35
 */
36
class installer_test extends \advanced_testcase {
37
 
11 efrain 38
    public function test_get_addons_repository_url(): void {
1 efrain 39
        $installer = testable_tool_installaddon_installer::instance();
40
        $url = $installer->get_addons_repository_url();
41
        $query = parse_url($url, PHP_URL_QUERY);
42
        $this->assertEquals(1, preg_match('~^site=(.+)$~', $query, $matches));
43
        $site = rawurldecode($matches[1]);
44
        $site = json_decode(base64_decode($site), true);
45
        $this->assertIsArray($site);
46
        $this->assertEquals(3, count($site));
47
        $this->assertSame('Nasty site', $site['fullname']);
48
        $this->assertSame('file:///etc/passwd', $site['url']);
49
        $this->assertSame("2.5'; DROP TABLE mdl_user; --", $site['majorversion']);
50
    }
51
 
11 efrain 52
    public function test_decode_remote_request(): void {
1 efrain 53
        $installer = testable_tool_installaddon_installer::instance();
54
 
55
        $request = base64_encode(json_encode(array(
56
            'name' => '<h1>Stamp collection</h1>"; DELETE FROM mdl_users; --',
57
            'component' => 'mod_stampcoll',
58
            'version' => 2013032800,
59
        )));
60
        $request = $installer->testable_decode_remote_request($request);
61
        $this->assertTrue(is_object($request));
62
        // One, my little hobbit, never trusts the input parameters!
63
        $this->assertEquals('Stamp collection&quot;; DELETE FROM mdl_users; --', $request->name);
64
        $this->assertEquals('mod_stampcoll', $request->component);
65
        $this->assertEquals(2013032800, $request->version);
66
 
67
        $request = base64_encode(json_encode(array(
68
            'name' => 'Theme with invalid version number',
69
            'component' => 'theme_invalid',
70
            'version' => '1.0',
71
        )));
72
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
73
 
74
        $request = base64_encode(json_encode(array(
75
            'name' => 'Invalid activity name',
76
            'component' => 'mod_invalid_activity',
77
            'version' => 2013032800,
78
        )));
79
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
80
 
81
        $request = base64_encode(json_encode(array(
82
            'name' => 'Moodle 3.0',
83
            'component' => 'core',
84
            'version' => 2022010100,
85
        )));
86
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
87
 
88
        $request = base64_encode(json_encode(array(
89
            'name' => 'Invalid core subsystem',
90
            'component' => 'core_cache',
91
            'version' => 2014123400,
92
        )));
93
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
94
 
95
        $request = base64_encode(json_encode(array(
96
            'name' => 'Non-existing plugintype',
97
            'component' => 'david_mudrak',
98
            'version' => 2012123199,
99
        )));
100
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
101
 
102
        $request = base64_encode(json_encode(array(
103
            'name' => 'Bogus module name',
104
            'component' => 'mod_xxx_yyy',
105
            'version' => 2012123190,
106
        )));
107
        $this->assertSame(false, $installer->testable_decode_remote_request($request));
108
    }
109
 
11 efrain 110
    public function test_detect_plugin_component(): void {
1 efrain 111
        global $CFG;
112
 
113
        $installer = tool_installaddon_installer::instance();
114
 
115
        $zipfile = $CFG->libdir.'/tests/fixtures/update_validator/zips/bar.zip';
116
        $this->assertEquals('foo_bar', $installer->detect_plugin_component($zipfile));
117
 
118
        $zipfile = $CFG->libdir.'/tests/fixtures/update_validator/zips/invalidroot.zip';
119
        $this->assertFalse($installer->detect_plugin_component($zipfile));
120
    }
121
 
11 efrain 122
    public function test_detect_plugin_component_from_versionphp(): void {
1 efrain 123
        global $CFG;
124
 
125
        $installer = testable_tool_installaddon_installer::instance();
126
        $fixtures = $CFG->libdir.'/tests/fixtures/update_validator/';
127
 
128
        $this->assertEquals('bar_bar_conan', $installer->testable_detect_plugin_component_from_versionphp('
129
$plugin->version  = 2014121300;
130
  $plugin->component=   "bar_bar_conan"  ; // Go Arnie go!'));
131
 
132
        $versionphp = file_get_contents($fixtures.'/github/moodle-repository_mahara-master/version.php');
133
        $this->assertEquals('repository_mahara', $installer->testable_detect_plugin_component_from_versionphp($versionphp));
134
 
135
        $versionphp = file_get_contents($fixtures.'/nocomponent/baz/version.php');
136
        $this->assertFalse($installer->testable_detect_plugin_component_from_versionphp($versionphp));
137
    }
138
 
11 efrain 139
    public function test_make_installfromzip_storage(): void {
1 efrain 140
        $installer = testable_tool_installaddon_installer::instance();
141
 
142
        // Check we get writable directory.
143
        $storage1 = $installer->make_installfromzip_storage();
144
        $this->assertTrue(is_dir($storage1));
145
        $this->assertTrue(is_writable($storage1));
146
        file_put_contents($storage1.'/hello.txt', 'Find me if you can!');
147
 
148
        // Check we get unique directory on each call.
149
        $storage2 = $installer->make_installfromzip_storage();
150
        $this->assertTrue(is_dir($storage2));
151
        $this->assertTrue(is_writable($storage2));
152
        $this->assertFalse(file_exists($storage2.'/hello.txt'));
153
 
154
        // Check both are in the same parent directory.
155
        $this->assertEquals(dirname($storage1), dirname($storage2));
156
    }
157
}