Differences Between: [Versions 310 and 311] [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403] [Versions 39 and 310]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Provides core_update_code_manager_testcase class. 19 * 20 * @package core_plugin 21 * @category test 22 * @copyright 2015 David Mudrak <david@moodle.com> 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 global $CFG; 29 require_once (__DIR__.'/fixtures/testable_update_code_manager.php'); 30 31 /** 32 * Tests for \core\update\code_manager features. 33 * 34 * @copyright 2015 David Mudrak <david@moodle.com> 35 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 36 */ 37 class core_update_code_manager_testcase extends advanced_testcase { 38 39 public function test_get_remote_plugin_zip() { 40 $codeman = new \core\update\testable_code_manager(); 41 42 $this->assertFalse($codeman->get_remote_plugin_zip('ftp://not.support.ed/', 'doesnotmatter')); 43 $this->assertDebuggingCalled('Error fetching plugin ZIP: unsupported transport protocol: ftp://not.support.ed/'); 44 45 $this->assertEquals(0, $codeman->downloadscounter); 46 $this->assertFalse($codeman->get_remote_plugin_zip('http://first/', '')); 47 $this->assertDebuggingCalled('Error fetching plugin ZIP: md5 mismatch.'); 48 $this->assertEquals(1, $codeman->downloadscounter); 49 $this->assertNotFalse($codeman->get_remote_plugin_zip('http://first/', md5('http://first/'))); 50 $this->assertEquals(2, $codeman->downloadscounter); 51 $this->assertNotFalse($codeman->get_remote_plugin_zip('http://two/', md5('http://two/'))); 52 $this->assertEquals(3, $codeman->downloadscounter); 53 $this->assertNotFalse($codeman->get_remote_plugin_zip('http://first/', md5('http://first/'))); 54 $this->assertEquals(3, $codeman->downloadscounter); 55 } 56 57 public function test_get_remote_plugin_zip_corrupted_cache() { 58 59 $temproot = make_request_directory(); 60 $codeman = new \core\update\testable_code_manager(null, $temproot); 61 62 file_put_contents($temproot.'/distfiles/'.md5('http://valid/').'.zip', 'http://invalid/'); 63 64 // Even if the cache file is already there, its name does not match its 65 // actual content. It must be removed and re-downaloaded. 66 $returned = $codeman->get_remote_plugin_zip('http://valid/', md5('http://valid/')); 67 68 $this->assertEquals(basename($returned), md5('http://valid/').'.zip'); 69 $this->assertEquals(file_get_contents($returned), 'http://valid/'); 70 } 71 72 public function test_unzip_plugin_file() { 73 $codeman = new \core\update\testable_code_manager(); 74 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/invalidroot.zip'; 75 $targetdir = make_request_directory(); 76 mkdir($targetdir.'/aaa_another'); 77 78 $files = $codeman->unzip_plugin_file($zipfilepath, $targetdir); 79 80 $this->assertIsArray($files); 81 $this->assertCount(4, $files); 82 $this->assertSame(true, $files['invalid-root/']); 83 $this->assertSame(true, $files['invalid-root/lang/']); 84 $this->assertSame(true, $files['invalid-root/lang/en/']); 85 $this->assertSame(true, $files['invalid-root/lang/en/fixed_root.php']); 86 foreach ($files as $file => $status) { 87 if (substr($file, -1) === '/') { 88 $this->assertTrue(is_dir($targetdir.'/'.$file)); 89 } else { 90 $this->assertTrue(is_file($targetdir.'/'.$file)); 91 } 92 } 93 94 $files = $codeman->unzip_plugin_file($zipfilepath, $targetdir, 'fixed_root'); 95 96 $this->assertIsArray($files); 97 $this->assertCount(4, $files); 98 $this->assertSame(true, $files['fixed_root/']); 99 $this->assertSame(true, $files['fixed_root/lang/']); 100 $this->assertSame(true, $files['fixed_root/lang/en/']); 101 $this->assertSame(true, $files['fixed_root/lang/en/fixed_root.php']); 102 foreach ($files as $file => $status) { 103 if (substr($file, -1) === '/') { 104 $this->assertTrue(is_dir($targetdir.'/'.$file)); 105 } else { 106 $this->assertTrue(is_file($targetdir.'/'.$file)); 107 } 108 } 109 110 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/bar.zip'; 111 $files = $codeman->unzip_plugin_file($zipfilepath, $targetdir, 'bar'); 112 } 113 114 public function test_unzip_plugin_file_multidir() { 115 $codeman = new \core\update\testable_code_manager(); 116 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/multidir.zip'; 117 $targetdir = make_request_directory(); 118 // Attempting to rename the root folder if there are multiple ones should lead to exception. 119 $this->expectException(moodle_exception::class); 120 $files = $codeman->unzip_plugin_file($zipfilepath, $targetdir, 'foo'); 121 } 122 123 public function test_get_plugin_zip_root_dir() { 124 $codeman = new \core\update\testable_code_manager(); 125 126 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/invalidroot.zip'; 127 $this->assertEquals('invalid-root', $codeman->get_plugin_zip_root_dir($zipfilepath)); 128 129 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/bar.zip'; 130 $this->assertEquals('bar', $codeman->get_plugin_zip_root_dir($zipfilepath)); 131 132 $zipfilepath = __DIR__.'/fixtures/update_validator/zips/multidir.zip'; 133 $this->assertSame(false, $codeman->get_plugin_zip_root_dir($zipfilepath)); 134 } 135 136 public function test_list_plugin_folder_files() { 137 $fixtures = __DIR__.'/fixtures/update_validator/plugindir'; 138 $codeman = new \core\update\testable_code_manager(); 139 $files = $codeman->list_plugin_folder_files($fixtures.'/foobar'); 140 $this->assertIsArray($files); 141 $this->assertEquals(6, count($files)); 142 $fixtures = str_replace(DIRECTORY_SEPARATOR, '/', $fixtures); 143 $this->assertEquals($files['foobar/'], $fixtures.'/foobar'); 144 $this->assertEquals($files['foobar/lang/en/local_foobar.php'], $fixtures.'/foobar/lang/en/local_foobar.php'); 145 } 146 147 public function test_zip_plugin_folder() { 148 $fixtures = __DIR__.'/fixtures/update_validator/plugindir'; 149 $storage = make_request_directory(); 150 $codeman = new \core\update\testable_code_manager(); 151 $codeman->zip_plugin_folder($fixtures.'/foobar', $storage.'/foobar.zip'); 152 $this->assertTrue(file_exists($storage.'/foobar.zip')); 153 154 $fp = get_file_packer('application/zip'); 155 $zipfiles = $fp->list_files($storage.'/foobar.zip'); 156 $this->assertNotEmpty($zipfiles); 157 foreach ($zipfiles as $zipfile) { 158 if ($zipfile->is_directory) { 159 $this->assertTrue(is_dir($fixtures.'/'.$zipfile->pathname)); 160 } else { 161 $this->assertTrue(file_exists($fixtures.'/'.$zipfile->pathname)); 162 } 163 } 164 } 165 166 public function test_archiving_plugin_version() { 167 $fixtures = __DIR__.'/fixtures/update_validator/plugindir'; 168 $codeman = new \core\update\testable_code_manager(); 169 170 $this->assertFalse($codeman->archive_plugin_version($fixtures.'/foobar', 'local_foobar', 0)); 171 $this->assertFalse($codeman->archive_plugin_version($fixtures.'/foobar', 'local_foobar', null)); 172 $this->assertFalse($codeman->archive_plugin_version($fixtures.'/foobar', '', 2015100900)); 173 $this->assertFalse($codeman->archive_plugin_version($fixtures.'/foobar-does-not-exist', 'local_foobar', 2013031900)); 174 175 $this->assertFalse($codeman->get_archived_plugin_version('local_foobar', 2013031900)); 176 $this->assertFalse($codeman->get_archived_plugin_version('mod_foobar', 2013031900)); 177 178 $this->assertTrue($codeman->archive_plugin_version($fixtures.'/foobar', 'local_foobar', 2013031900, true)); 179 180 $this->assertNotFalse($codeman->get_archived_plugin_version('local_foobar', 2013031900)); 181 $this->assertTrue(file_exists($codeman->get_archived_plugin_version('local_foobar', 2013031900))); 182 $this->assertTrue(file_exists($codeman->get_archived_plugin_version('local_foobar', '2013031900'))); 183 184 $this->assertFalse($codeman->get_archived_plugin_version('mod_foobar', 2013031900)); 185 $this->assertFalse($codeman->get_archived_plugin_version('local_foobar', 2013031901)); 186 $this->assertFalse($codeman->get_archived_plugin_version('', 2013031901)); 187 $this->assertFalse($codeman->get_archived_plugin_version('local_foobar', '')); 188 189 $this->assertTrue($codeman->archive_plugin_version($fixtures.'/foobar', 'local_foobar', '2013031900')); 190 $this->assertTrue(file_exists($codeman->get_archived_plugin_version('local_foobar', 2013031900))); 191 192 } 193 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body