mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Partial tests for PID file reading
This commit is contained in:
parent
32c9d761c3
commit
a4036afbf8
2 changed files with 62 additions and 1 deletions
|
@ -76,7 +76,7 @@ class Daemon {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function checkPID(string $pidfile) {
|
public function checkPID(string $pidfile): void {
|
||||||
if (file_exists($pidfile)) {
|
if (file_exists($pidfile)) {
|
||||||
$pid = @file_get_contents($pidfile);
|
$pid = @file_get_contents($pidfile);
|
||||||
if ($pid !== false) {
|
if ($pid !== false) {
|
||||||
|
|
|
@ -23,6 +23,21 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
'dir' => [],
|
'dir' => [],
|
||||||
'file' => "this file can be fully accessed",
|
'file' => "this file can be fully accessed",
|
||||||
],
|
],
|
||||||
|
'pid' => [
|
||||||
|
'current' => "2112",
|
||||||
|
'stale' => "42",
|
||||||
|
"empty" => "",
|
||||||
|
'malformed1' => "02112",
|
||||||
|
'malformed2' => "2112 ",
|
||||||
|
'malformed3' => "2112\n",
|
||||||
|
'bogus1' => "bogus",
|
||||||
|
'bogus2' => " ",
|
||||||
|
'bogus3' => "\n",
|
||||||
|
'overlong' => "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890",
|
||||||
|
'locked' => "", // this file will be locked by the test
|
||||||
|
'unreadable' => "", // this file will be chmodded by the test
|
||||||
|
'unwritable' => "", // this file will be chmodded by the test
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
public function setUp(): void {
|
public function setUp(): void {
|
||||||
|
@ -91,4 +106,50 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
["ok/dir/file", true, "ok/dir/file"],
|
["ok/dir/file", true, "ok/dir/file"],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @dataProvider providePidReadChecks */
|
||||||
|
public function testCheckPidReads(string $file, $exp) {
|
||||||
|
$vfs = vfsStream::setup("pidtest", 0777, $this->pidfiles);
|
||||||
|
$path = $vfs->url()."/pid/";
|
||||||
|
// set up access blocks
|
||||||
|
$f = fopen($path."locked", "r+");
|
||||||
|
flock($f, \LOCK_EX | \LOCK_NB);
|
||||||
|
chmod($path."unreadable", 0333);
|
||||||
|
chmod($path."unwritable", 0555);
|
||||||
|
// set up mock daemon class
|
||||||
|
$this->daemon->processExists->with(2112)->returns(true);
|
||||||
|
$this->daemon->processExists->with(42)->returns(false);
|
||||||
|
$daemon = $this->daemon->get();
|
||||||
|
// perform the test
|
||||||
|
try {
|
||||||
|
if ($exp instanceof \Exception) {
|
||||||
|
$this->assertException($exp);
|
||||||
|
$daemon->checkPID($path.$file);
|
||||||
|
} else {
|
||||||
|
$this->assertSame($exp, $daemon->checkPID($path.$file));
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
flock($f, \LOCK_UN);
|
||||||
|
fclose($f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function providePidReadChecks(): iterable {
|
||||||
|
return [
|
||||||
|
["current", new Exception("pidDuplicate")],
|
||||||
|
["malformed1", new Exception("pidCorrupt")],
|
||||||
|
["malformed2", new Exception("pidCorrupt")],
|
||||||
|
["malformed3", new Exception("pidCorrupt")],
|
||||||
|
["bogus1", new Exception("pidCorrupt")],
|
||||||
|
["bogus2", new Exception("pidCorrupt")],
|
||||||
|
["bogus3", new Exception("pidCorrupt")],
|
||||||
|
["overlong", new Exception("pidCorrupt")],
|
||||||
|
["unreadable", new Exception("pidInaccessible")],
|
||||||
|
["unwritable", null],
|
||||||
|
["missing", null],
|
||||||
|
["locked", null],
|
||||||
|
["stale", null],
|
||||||
|
["empty", null],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue