forked from ben-xo/dir2cast
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCaching_updates_to_dir2castTest.php
108 lines (78 loc) · 3.31 KB
/
Caching_updates_to_dir2castTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?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 temp_xml_glob()
{
return '.' . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR . '*.xml';
}
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_glob());
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_glob());
$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_glob());
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_glob());
$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('..');
}
}