MDL-41838 Backup/restore: Support .tar.gz format for .mbz (2 of 2)
[moodle.git] / lib / filestorage / tests / mbz_packer_test.php
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/>.
17 /**
18  * Unit tests for /lib/filestorage/mbz_packer.php.
19  *
20  * @package core_files
21  * @copyright 2013 The Open University
22  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 global $CFG;
28 require_once($CFG->libdir . '/filestorage/file_progress.php');
30 class core_files_mbz_packer_testcase extends advanced_testcase {
32     public function test_archive_with_both_options() {
33         global $CFG;
34         $this->resetAfterTest();
36         // Get backup packer.
37         $packer = get_file_packer('application/vnd.moodle.backup');
39         // Set up basic archive contents.
40         $files = array('1.txt' => array('frog'));
42         // Create 2 archives (each with one file in) in default mode.
43         $CFG->enabletgzbackups = false;
44         $filefalse = $CFG->tempdir . '/false.mbz';
45         $this->assertNotEmpty($packer->archive_to_pathname($files, $filefalse));
46         $context = context_system::instance();
47         $this->assertNotEmpty($storagefalse = $packer->archive_to_storage(
48                 $files, $context->id, 'phpunit', 'data', 0, '/', 'false.mbz'));
50         // Create 2 archives in tgz mode.
51         $CFG->enabletgzbackups = true;
52         $filetrue = $CFG->tempdir . '/true.mbz';
53         $this->assertNotEmpty($packer->archive_to_pathname($files, $filetrue));
54         $context = context_system::instance();
55         $this->assertNotEmpty($storagetrue = $packer->archive_to_storage(
56                 $files, $context->id, 'phpunit', 'data', 0, '/', 'false.mbz'));
58         // Check the sizes are different (indicating different formats).
59         $this->assertNotEquals(filesize($filefalse), filesize($filetrue));
60         $this->assertNotEquals($storagefalse->get_filesize(), $storagetrue->get_filesize());
62         // Extract files into storage and into filesystem from both formats.
63         // (Note: the setting does not matter, but set to false just to check.)
64         $CFG->enabletgzbackups = false;
66         // Extract to path (zip).
67         $packer->extract_to_pathname($filefalse, $CFG->tempdir);
68         $onefile = $CFG->tempdir . '/1.txt';
69         $this->assertEquals('frog', file_get_contents($onefile));
70         unlink($onefile);
72         // Extract to path (tgz).
73         $packer->extract_to_pathname($filetrue, $CFG->tempdir);
74         $onefile = $CFG->tempdir . '/1.txt';
75         $this->assertEquals('frog', file_get_contents($onefile));
76         unlink($onefile);
78         // Extract to storage (zip).
79         $packer->extract_to_storage($storagefalse, $context->id, 'phpunit', 'data', 1, '/');
80         $fs = get_file_storage();
81         $out = $fs->get_file($context->id, 'phpunit', 'data', 1, '/', '1.txt');
82         $this->assertNotEmpty($out);
83         $this->assertEquals('frog', $out->get_content());
85         // Extract to storage (tgz).
86         $packer->extract_to_storage($storagetrue, $context->id, 'phpunit', 'data', 2, '/');
87         $out = $fs->get_file($context->id, 'phpunit', 'data', 2, '/', '1.txt');
88         $this->assertNotEmpty($out);
89         $this->assertEquals('frog', $out->get_content());
90     }
91 }