[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/backup/util/helper/tests/ -> cronhelper_test.php (source)

   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   * Unit tests for backups cron helper.
  19   *
  20   * @package   core_backup
  21   * @category  phpunit
  22   * @copyright 2012 Frédéric Massart <fred@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($CFG->dirroot . '/backup/util/helper/backup_cron_helper.class.php');
  30  
  31  /**
  32   * Unit tests for backup cron helper
  33   */
  34  class backup_cron_helper_testcase extends advanced_testcase {
  35      /**
  36       * Test {@link backup_cron_automated_helper::calculate_next_automated_backup}.
  37       */
  38      public function test_next_automated_backup() {
  39          global $CFG;
  40  
  41          $this->resetAfterTest();
  42          set_config('backup_auto_active', '1', 'backup');
  43  
  44          $this->setTimezone('Australia/Perth');
  45  
  46          // Notes
  47          // - backup_auto_weekdays starts on Sunday
  48          // - Tests cannot be done in the past
  49          // - Only the DST on the server side is handled.
  50  
  51          // Every Tue and Fri at 11pm.
  52          set_config('backup_auto_weekdays', '0010010', 'backup');
  53          set_config('backup_auto_hour', '23', 'backup');
  54          set_config('backup_auto_minute', '0', 'backup');
  55  
  56          $timezone = 99; // Ignored, everything is calculated in server timezone!!!
  57  
  58          $now = strtotime('next Monday 17:00:00');
  59          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  60          $this->assertEquals('2-23:00', date('w-H:i', $next));
  61  
  62          $now = strtotime('next Tuesday 18:00:00');
  63          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  64          $this->assertEquals('2-23:00', date('w-H:i', $next));
  65  
  66          $now = strtotime('next Wednesday 17:00:00');
  67          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  68          $this->assertEquals('5-23:00', date('w-H:i', $next));
  69  
  70          $now = strtotime('next Thursday 17:00:00');
  71          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  72          $this->assertEquals('5-23:00', date('w-H:i', $next));
  73  
  74          $now = strtotime('next Friday 17:00:00');
  75          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  76          $this->assertEquals('5-23:00', date('w-H:i', $next));
  77  
  78          $now = strtotime('next Saturday 17:00:00');
  79          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  80          $this->assertEquals('2-23:00', date('w-H:i', $next));
  81  
  82          $now = strtotime('next Sunday 17:00:00');
  83          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  84          $this->assertEquals('2-23:00', date('w-H:i', $next));
  85  
  86          // Every Sun and Sat at 12pm.
  87          set_config('backup_auto_weekdays', '1000001', 'backup');
  88          set_config('backup_auto_hour', '0', 'backup');
  89          set_config('backup_auto_minute', '0', 'backup');
  90  
  91          $now = strtotime('next Monday 17:00:00');
  92          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  93          $this->assertEquals('6-00:00', date('w-H:i', $next));
  94  
  95          $now = strtotime('next Tuesday 17:00:00');
  96          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
  97          $this->assertEquals('6-00:00', date('w-H:i', $next));
  98  
  99          $now = strtotime('next Wednesday 17:00:00');
 100          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 101          $this->assertEquals('6-00:00', date('w-H:i', $next));
 102  
 103          $now = strtotime('next Thursday 17:00:00');
 104          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 105          $this->assertEquals('6-00:00', date('w-H:i', $next));
 106  
 107          $now = strtotime('next Friday 17:00:00');
 108          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 109          $this->assertEquals('6-00:00', date('w-H:i', $next));
 110  
 111          $now = strtotime('next Saturday 17:00:00');
 112          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 113          $this->assertEquals('0-00:00', date('w-H:i', $next));
 114  
 115          $now = strtotime('next Sunday 17:00:00');
 116          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 117          $this->assertEquals('6-00:00', date('w-H:i', $next));
 118  
 119          // Every Sun at 4am.
 120          set_config('backup_auto_weekdays', '1000000', 'backup');
 121          set_config('backup_auto_hour', '4', 'backup');
 122          set_config('backup_auto_minute', '0', 'backup');
 123  
 124          $now = strtotime('next Monday 17:00:00');
 125          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 126          $this->assertEquals('0-04:00', date('w-H:i', $next));
 127  
 128          $now = strtotime('next Tuesday 17:00:00');
 129          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 130          $this->assertEquals('0-04:00', date('w-H:i', $next));
 131  
 132          $now = strtotime('next Wednesday 17:00:00');
 133          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 134          $this->assertEquals('0-04:00', date('w-H:i', $next));
 135  
 136          $now = strtotime('next Thursday 17:00:00');
 137          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 138          $this->assertEquals('0-04:00', date('w-H:i', $next));
 139  
 140          $now = strtotime('next Friday 17:00:00');
 141          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 142          $this->assertEquals('0-04:00', date('w-H:i', $next));
 143  
 144          $now = strtotime('next Saturday 17:00:00');
 145          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 146          $this->assertEquals('0-04:00', date('w-H:i', $next));
 147  
 148          $now = strtotime('next Sunday 17:00:00');
 149          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 150          $this->assertEquals('0-04:00', date('w-H:i', $next));
 151  
 152          // Every day but Wed at 8:30pm.
 153          set_config('backup_auto_weekdays', '1110111', 'backup');
 154          set_config('backup_auto_hour', '20', 'backup');
 155          set_config('backup_auto_minute', '30', 'backup');
 156  
 157          $now = strtotime('next Monday 17:00:00');
 158          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 159          $this->assertEquals('1-20:30', date('w-H:i', $next));
 160  
 161          $now = strtotime('next Tuesday 17:00:00');
 162          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 163          $this->assertEquals('2-20:30', date('w-H:i', $next));
 164  
 165          $now = strtotime('next Wednesday 17:00:00');
 166          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 167          $this->assertEquals('4-20:30', date('w-H:i', $next));
 168  
 169          $now = strtotime('next Thursday 17:00:00');
 170          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 171          $this->assertEquals('4-20:30', date('w-H:i', $next));
 172  
 173          $now = strtotime('next Friday 17:00:00');
 174          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 175          $this->assertEquals('5-20:30', date('w-H:i', $next));
 176  
 177          $now = strtotime('next Saturday 17:00:00');
 178          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 179          $this->assertEquals('6-20:30', date('w-H:i', $next));
 180  
 181          $now = strtotime('next Sunday 17:00:00');
 182          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 183          $this->assertEquals('0-20:30', date('w-H:i', $next));
 184  
 185          // Sun, Tue, Thu, Sat at 12pm.
 186          set_config('backup_auto_weekdays', '1010101', 'backup');
 187          set_config('backup_auto_hour', '0', 'backup');
 188          set_config('backup_auto_minute', '0', 'backup');
 189  
 190          $now = strtotime('next Monday 13:00:00');
 191          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 192          $this->assertEquals('2-00:00', date('w-H:i', $next));
 193  
 194          $now = strtotime('next Tuesday 13:00:00');
 195          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 196          $this->assertEquals('4-00:00', date('w-H:i', $next));
 197  
 198          $now = strtotime('next Wednesday 13:00:00');
 199          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 200          $this->assertEquals('4-00:00', date('w-H:i', $next));
 201  
 202          $now = strtotime('next Thursday 13:00:00');
 203          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 204          $this->assertEquals('6-00:00', date('w-H:i', $next));
 205  
 206          $now = strtotime('next Friday 13:00:00');
 207          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 208          $this->assertEquals('6-00:00', date('w-H:i', $next));
 209  
 210          $now = strtotime('next Saturday 13:00:00');
 211          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 212          $this->assertEquals('0-00:00', date('w-H:i', $next));
 213  
 214          $now = strtotime('next Sunday 13:00:00');
 215          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 216          $this->assertEquals('2-00:00', date('w-H:i', $next));
 217  
 218          // None.
 219          set_config('backup_auto_weekdays', '0000000', 'backup');
 220          set_config('backup_auto_hour', '15', 'backup');
 221          set_config('backup_auto_minute', '30', 'backup');
 222  
 223          $now = strtotime('next Sunday 13:00:00');
 224          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 225          $this->assertEquals('0', $next);
 226  
 227          // Playing with timezones.
 228          set_config('backup_auto_weekdays', '1111111', 'backup');
 229          set_config('backup_auto_hour', '20', 'backup');
 230          set_config('backup_auto_minute', '00', 'backup');
 231  
 232          $this->setTimezone('Australia/Perth');
 233          $now = strtotime('18:00:00');
 234          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 235          $this->assertEquals(date('w-20:00'), date('w-H:i', $next));
 236  
 237          $this->setTimezone('Europe/Brussels');
 238          $now = strtotime('18:00:00');
 239          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 240          $this->assertEquals(date('w-20:00'), date('w-H:i', $next));
 241  
 242          $this->setTimezone('America/New_York');
 243          $now = strtotime('18:00:00');
 244          $next = backup_cron_automated_helper::calculate_next_automated_backup($timezone, $now);
 245          $this->assertEquals(date('w-20:00'), date('w-H:i', $next));
 246      }
 247  
 248      /**
 249       * Test {@link backup_cron_automated_helper::get_backups_to_delete}.
 250       */
 251      public function test_get_backups_to_delete() {
 252          $this->resetAfterTest();
 253          // Active only backup_auto_max_kept config to 2 days.
 254          set_config('backup_auto_max_kept', '2', 'backup');
 255          set_config('backup_auto_delete_days', '0', 'backup');
 256          set_config('backup_auto_min_kept', '0', 'backup');
 257  
 258          // No backups to delete.
 259          $backupfiles = array(
 260              '1000000000' => 'file1.mbz',
 261              '1000432000' => 'file3.mbz'
 262          );
 263          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1000432000);
 264          $this->assertFalse($deletedbackups);
 265  
 266          // Older backup to delete.
 267          $backupfiles['1000172800'] = 'file2.mbz';
 268          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1000432000);
 269          $this->assertEquals(1, count($deletedbackups));
 270          $this->assertArrayHasKey('1000000000', $backupfiles);
 271          $this->assertEquals('file1.mbz', $backupfiles['1000000000']);
 272  
 273          // Activate backup_auto_max_kept to 5 days and backup_auto_delete_days to 10 days.
 274          set_config('backup_auto_max_kept', '5', 'backup');
 275          set_config('backup_auto_delete_days', '10', 'backup');
 276          set_config('backup_auto_min_kept', '0', 'backup');
 277  
 278          // No backups to delete. Timestamp is 1000000000 + 10 days.
 279          $backupfiles['1000432001'] = 'file4.mbz';
 280          $backupfiles['1000864000'] = 'file5.mbz';
 281          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1000864000);
 282          $this->assertFalse($deletedbackups);
 283  
 284          // One old backup to delete. Timestamp is 1000000000 + 10 days + 1 second.
 285          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1000864001);
 286          $this->assertEquals(1, count($deletedbackups));
 287          $this->assertArrayHasKey('1000000000', $backupfiles);
 288          $this->assertEquals('file1.mbz', $backupfiles['1000000000']);
 289  
 290          // Two old backups to delete. Timestamp is 1000000000 + 12 days + 1 second.
 291          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1001036801);
 292          $this->assertEquals(2, count($deletedbackups));
 293          $this->assertArrayHasKey('1000000000', $backupfiles);
 294          $this->assertEquals('file1.mbz', $backupfiles['1000000000']);
 295          $this->assertArrayHasKey('1000172800', $backupfiles);
 296          $this->assertEquals('file2.mbz', $backupfiles['1000172800']);
 297  
 298          // Activate backup_auto_max_kept to 5 days, backup_auto_delete_days to 10 days and backup_auto_min_kept to 2.
 299          set_config('backup_auto_max_kept', '5', 'backup');
 300          set_config('backup_auto_delete_days', '10', 'backup');
 301          set_config('backup_auto_min_kept', '2', 'backup');
 302  
 303          // Three instead of four old backups are deleted. Timestamp is 1000000000 + 16 days.
 304          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1001382400);
 305          $this->assertEquals(3, count($deletedbackups));
 306          $this->assertArrayHasKey('1000000000', $backupfiles);
 307          $this->assertEquals('file1.mbz', $backupfiles['1000000000']);
 308          $this->assertArrayHasKey('1000172800', $backupfiles);
 309          $this->assertEquals('file2.mbz', $backupfiles['1000172800']);
 310          $this->assertArrayHasKey('1000432000', $backupfiles);
 311          $this->assertEquals('file3.mbz', $backupfiles['1000432000']);
 312  
 313          // Three instead of all five backups are deleted. Timestamp is 1000000000 + 60 days.
 314          $deletedbackups = testable_backup_cron_automated_helper::testable_get_backups_to_delete($backupfiles, 1005184000);
 315          $this->assertEquals(3, count($deletedbackups));
 316          $this->assertArrayHasKey('1000000000', $backupfiles);
 317          $this->assertEquals('file1.mbz', $backupfiles['1000000000']);
 318          $this->assertArrayHasKey('1000172800', $backupfiles);
 319          $this->assertEquals('file2.mbz', $backupfiles['1000172800']);
 320          $this->assertArrayHasKey('1000432000', $backupfiles);
 321          $this->assertEquals('file3.mbz', $backupfiles['1000432000']);
 322      }
 323  }
 324  
 325  /**
 326   * Provides access to protected methods we want to explicitly test
 327   *
 328   * @copyright 2015 Jean-Philippe Gaudreau <jp.gaudreau@umontreal.ca>
 329   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 330   */
 331  class testable_backup_cron_automated_helper extends backup_cron_automated_helper {
 332  
 333      /**
 334       * Provides access to protected method get_backups_to_remove.
 335       *
 336       * @param array $backupfiles Existing backup files
 337       * @param int $now Starting time of the process
 338       * @return array Backup files to remove
 339       */
 340      public static function testable_get_backups_to_delete($backupfiles, $now) {
 341          return parent::get_backups_to_delete($backupfiles, $now);
 342      }
 343  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1