. /** * Provides the unit tests class and some helper classes * * @package tool_installaddon * @category test * @copyright 2013 David Mudrak * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); global $CFG; require_once(__DIR__.'/fixtures/testable_installer.php'); /** * Unit tests for the {@link tool_installaddon_installer} class * * @copyright 2013 David Mudrak * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class tool_installaddon_installer_testcase extends advanced_testcase { public function test_get_addons_repository_url() { $installer = testable_tool_installaddon_installer::instance(); $url = $installer->get_addons_repository_url(); $query = parse_url($url, PHP_URL_QUERY); $this->assertEquals(1, preg_match('~^site=(.+)$~', $query, $matches)); $site = rawurldecode($matches[1]); $site = json_decode(base64_decode($site), true); $this->assertInternalType('array', $site); $this->assertEquals(3, count($site)); $this->assertSame('Nasty site', $site['fullname']); $this->assertSame('file:///etc/passwd', $site['url']); $this->assertSame("2.5'; DROP TABLE mdl_user; --", $site['majorversion']); } public function test_decode_remote_request() { $installer = testable_tool_installaddon_installer::instance(); $request = base64_encode(json_encode(array( 'name' => '

Stamp collection

"; DELETE FROM mdl_users; --', 'component' => 'mod_stampcoll', 'version' => 2013032800, ))); $request = $installer->testable_decode_remote_request($request); $this->assertTrue(is_object($request)); // One, my little hobbit, never trusts the input parameters! $this->assertEquals('Stamp collection"; DELETE FROM mdl_users; --', $request->name); $this->assertEquals('mod_stampcoll', $request->component); $this->assertEquals(2013032800, $request->version); $request = base64_encode(json_encode(array( 'name' => 'Theme with invalid version number', 'component' => 'theme_invalid', 'version' => '1.0', ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); $request = base64_encode(json_encode(array( 'name' => 'Invalid activity name', 'component' => 'mod_invalid_activity', 'version' => 2013032800, ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); $request = base64_encode(json_encode(array( 'name' => 'Moodle 3.0', 'component' => 'core', 'version' => 2022010100, ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); $request = base64_encode(json_encode(array( 'name' => 'Invalid core subsystem', 'component' => 'core_cache', 'version' => 2014123400, ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); $request = base64_encode(json_encode(array( 'name' => 'Non-existing plugintype', 'component' => 'david_mudrak', 'version' => 2012123199, ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); $request = base64_encode(json_encode(array( 'name' => 'Bogus module name', 'component' => 'mod_xxx_yyy', 'version' => 2012123190, ))); $this->assertSame(false, $installer->testable_decode_remote_request($request)); } public function test_detect_plugin_component() { global $CFG; $installer = tool_installaddon_installer::instance(); $zipfile = $CFG->libdir.'/tests/fixtures/update_validator/zips/bar.zip'; $this->assertEquals('foo_bar', $installer->detect_plugin_component($zipfile)); $zipfile = $CFG->libdir.'/tests/fixtures/update_validator/zips/invalidroot.zip'; $this->assertFalse($installer->detect_plugin_component($zipfile)); } public function test_detect_plugin_component_from_versionphp() { global $CFG; $installer = testable_tool_installaddon_installer::instance(); $fixtures = $CFG->libdir.'/tests/fixtures/update_validator/'; $this->assertEquals('bar_bar_conan', $installer->testable_detect_plugin_component_from_versionphp(' $plugin->version = 2014121300; $plugin->component= "bar_bar_conan" ; // Go Arnie go!')); $versionphp = file_get_contents($fixtures.'/github/moodle-repository_mahara-master/version.php'); $this->assertEquals('repository_mahara', $installer->testable_detect_plugin_component_from_versionphp($versionphp)); $versionphp = file_get_contents($fixtures.'/nocomponent/baz/version.php'); $this->assertFalse($installer->testable_detect_plugin_component_from_versionphp($versionphp)); } public function test_make_installfromzip_storage() { $installer = testable_tool_installaddon_installer::instance(); // Check we get writable directory. $storage1 = $installer->make_installfromzip_storage(); $this->assertTrue(is_dir($storage1)); $this->assertTrue(is_writable($storage1)); file_put_contents($storage1.'/hello.txt', 'Find me if you can!'); // Check we get unique directory on each call. $storage2 = $installer->make_installfromzip_storage(); $this->assertTrue(is_dir($storage2)); $this->assertTrue(is_writable($storage2)); $this->assertFalse(file_exists($storage2.'/hello.txt')); // Check both are in the same parent directory. $this->assertEquals(dirname($storage1), dirname($storage2)); } }