Skip to content

Commit

Permalink
Separate the dir2cast update caching busting tests into their own class
Browse files Browse the repository at this point in the history
  • Loading branch information
ben-xo committed Dec 29, 2021
1 parent 45c2ff8 commit d7d9d7e
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 63 deletions.
66 changes: 3 additions & 63 deletions test/CachingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ public function test_expired_podcast_is_regenerated(): void
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertNotEquals($old_mtime, $new_mtime);
$this->assertGreaterThan($old_mtime, $new_mtime);
}

public function test_too_new_file_not_included_in_podcast(): void
Expand Down Expand Up @@ -258,72 +258,12 @@ public function test_too_new_file_not_included_in_podcast(): void
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertNotEquals($old_mtime, $new_mtime);
}

public function test_update_to_dir2cast_php_invalidates_cache(): void
{
file_put_contents('empty.mp3', 'test');

$source_file = readlink('dir2cast.php');
unlink('dir2cast.php');
copy($source_file, 'dir2cast.php');

age_dir_by('.', 86400);

$cached_output_files = glob('./temp/*.xml');

touch('dir2cast.php', time()-3600); // older than the minimum cache time, but newer than the cache files

clearstatcache();
$old_mtime = filemtime($cached_output_files[0]);

exec('php dir2cast.php --output=out.xml --dont-uncache --min-file-age=30');
$new_content = file_get_contents($this->file); // should have empty.mp3
$this->assertNotEquals($this->content, $new_content);
$this->assertEquals(1, preg_match('/empty\.mp3/', $new_content));

clearstatcache();
$cached_output_files = glob('./temp/*.xml');
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertNotEquals($old_mtime, $new_mtime);
}

public function test_update_to_dir2cast_ini_invalidates_cache(): void
{
file_put_contents('empty.mp3', 'test');

$source_file = readlink('dir2cast.php');
unlink('dir2cast.php');
copy($source_file, 'dir2cast.php');
copy('../../dir2cast.ini', 'dir2cast.ini');

age_dir_by('.', 86400);

$cached_output_files = glob('./temp/*.xml');

touch('dir2cast.ini', time()-3600); // older than the minimum cache time, but newer than the cache files

clearstatcache();
$old_mtime = filemtime($cached_output_files[0]);

exec('php dir2cast.php --output=out.xml --dont-uncache --min-file-age=30');
$new_content = file_get_contents($this->file); // should have empty.mp3
$this->assertNotEquals($this->content, $new_content);
$this->assertEquals(1, preg_match('/empty\.mp3/', $new_content));

clearstatcache();
$cached_output_files = glob('./temp/*.xml');
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertNotEquals($old_mtime, $new_mtime);
$this->assertGreaterThan($old_mtime, $new_mtime);
}

public function tearDown(): void
{
unlink($this->file);
chdir('..');
}
}
103 changes: 103 additions & 0 deletions test/Caching_updates_to_dir2castTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php declare(strict_types=1);

use PHPUnit\Framework\TestCase;

class Caching_updates_to_dir2castTest extends TestCase
{
public $file = 'out.xml';
public $output = '';
public $returncode = 0;

public $content = '';

public function setUp(): void
{
prepare_testing_dir();

if(is_link('dir2cast.php')) {
// replace symlink with a real file for this test, if it isn't already.
// It will generally be a symlink if we're doing code coverage (i.e. not on Windows)
$source_file = readlink('dir2cast.php');
unlink('dir2cast.php');
copy($source_file, 'dir2cast.php');
}

if(file_exists('dir2cast.ini')) {
// interferes with this test.
unlink('dir2cast.ini');
}

exec('php dir2cast.php --output=out.xml --dont-uncache --ignore-dir2cast-mtime', $this->output, $this->returncode);
$this->content = file_get_contents($this->file);

age_dir_by('.', 86400);
}

public function test_update_to_dir2cast_php_invalidates_cache(): void
{
file_put_contents('empty.mp3', 'test');

$cached_output_files = glob('./temp/*.xml');

touch('dir2cast.php', time()-3600); // older than the minimum cache time, but newer than the cache files

clearstatcache();
$old_mtime = filemtime($cached_output_files[0]);

sleep(1);
exec('php dir2cast.php --output=out.xml --dont-uncache --min-file-age=30 --debug', $debug_out);
// print(implode("\n", $debug_out));

// passthru('ls -laR');

clearstatcache();
$cached_output_files = glob('./temp/*.xml');
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertGreaterThan($old_mtime, $new_mtime);

$new_content = file_get_contents($this->file);
$this->assertNotEquals($this->content, $new_content);

// empty.mp3 still too new
$this->assertEquals(0, preg_match('/empty\.mp3/', $new_content));
}

public function test_update_to_dir2cast_ini_invalidates_cache(): void
{
file_put_contents('empty.mp3', 'test');

copy('../../dir2cast.ini', 'dir2cast.ini');

$cached_output_files = glob('./temp/*.xml');

touch('dir2cast.ini', time()-3600); // older than the minimum cache time, but newer than the cache files

clearstatcache();
$old_mtime = filemtime($cached_output_files[0]);

sleep(1);
exec('php dir2cast.php --output=out.xml --dont-uncache --min-file-age=30 --debug', $debug_out);
// print(implode("\n", $debug_out));

clearstatcache();
$cached_output_files = glob('./temp/*.xml');
$new_mtime = filemtime($cached_output_files[0]);

// cache file should be refreshed
$this->assertGreaterThan($old_mtime, $new_mtime);

$new_content = file_get_contents($this->file);
$this->assertNotEquals($this->content, $new_content);

// empty.mp3 still too new
$this->assertEquals(0, preg_match('/empty\.mp3/', $new_content));
}

public function tearDown(): void
{
unlink($this->file);
chdir('..');
}
}
37 changes: 37 additions & 0 deletions test/Caching_updates_to_dir2cast_prepopulatedTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php declare(strict_types=1);

use PHPUnit\Framework\TestCase;

class Caching_updates_to_dir2cast_prepopulatedTest extends Caching_updates_to_dir2castTest
{
public function setUp(): void
{
prepare_testing_dir();
file_put_contents('pre-existing.mp3', 'test');
touch('pre-existing.mp3', time()-86400);

if(is_link('dir2cast.php')) {
// replace symlink with a real file for this test, if it isn't already.
// It will generally be a symlink if we're doing code coverage (i.e. not on Windows)
$source_file = readlink('dir2cast.php');
unlink('dir2cast.php');
copy($source_file, 'dir2cast.php');
}

if(file_exists('dir2cast.ini')) {
// interferes with this test.
unlink('dir2cast.ini');
}

exec('php dir2cast.php --output=out.xml --dont-uncache --ignore-dir2cast-mtime', $this->output, $this->returncode);
$this->content = file_get_contents($this->file);

age_dir_by('.', 86400);
}

public function tearDown(): void
{
$this->assertEquals(1, preg_match('/pre-existing\.mp3/', file_get_contents($this->file)));
parent::tearDown();
}
}

0 comments on commit d7d9d7e

Please sign in to comment.