public function testProcessMailbox() { $testData = array('bouncehammer/17-messages.eml' => array(37, 35, 2, 35, 0), 'bouncehammer/double-messages.eml' => array(2, 2, 0, 2, 0)); $bmh = new BounceMailHandler(); $bmh->testMode = true; foreach ($testData as $testFile => $expected) { list($fetched, $processed, $unprocessed, $deleted, $moved) = $expected; ob_start(); $rc = $bmh->openLocal($this->getMailboxPath(__DIR__ . '/../../fixtures/' . $testFile)); ob_end_clean(); $this->assertTrue($rc, $testFile . ': openLocal'); $bmh->actionFunction = function ($msgnum, $bounceType, $email, $subject, $xheader, $remove, $ruleNo, $ruleCat, $totalFetched, $body) use($expected) { return $remove === true || $remove === 1; }; ob_start(); $rc = $bmh->processMailbox(); $output = ob_get_contents(); ob_end_clean(); $this->assertTrue($rc, $testFile . ': processMailbox'); preg_match('/Read: ([0-9]+) messages/', $output, $matches); $this->assertEquals($fetched, $matches[1], $testFile . ': messages read'); preg_match('/([0-9]+) action taken/', $output, $matches); $this->assertEquals($processed, $matches[1], $testFile . ': action taken'); preg_match('/([0-9]+) no action taken/', $output, $matches); $this->assertEquals($unprocessed, $matches[1], $testFile . ': no action taken'); preg_match('/([0-9]+) messages deleted/', $output, $matches); $this->assertEquals($deleted, $matches[1], $testFile . ': messages deleted'); preg_match('/([0-9]+) messages moved/', $output, $matches); $this->assertEquals($moved, $matches[1], $testFile . ': messages moved'); } }
public function testProcessMailbox() { $testData = array('bounce-email/tt_1234175799.txt' => array(1, 1, 0, 1, 0, '0238', 'dns_unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234177688.txt' => array(1, 1, 0, 1, 0, '0148', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234210655.txt' => array(1, 1, 0, 1, 0, '0103', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234211357.txt' => array(1, 1, 0, 1, 0, '0205', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234211929.txt' => array(1, 1, 0, 1, 0, '0105', 'full', 'soft', '*****@*****.**'), 'bounce-email/tt_1234211931.txt' => array(1, 1, 0, 1, 0, '0245', 'dns_loop', 'hard', '*****@*****.**'), 'bounce-email/tt_1234211932.txt' => array(1, 1, 0, 1, 0, '0123', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234241664.txt' => array(1, 0, 1, 0, 0, '0000', 'unrecognized', false, '*****@*****.**'), 'bounce-email/tt_1234241665.txt' => array(1, 1, 0, 1, 0, '0128', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234285532.txt' => array(1, 1, 0, 1, 0, '0127', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_1234285668.txt' => array(1, 1, 0, 1, 0, '0246', 'full', 'soft', '*****@*****.**'), 'bounce-email/tt_bounce_01.txt' => array(1, 1, 0, 1, 0, '0247', 'dns_unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_03.txt' => array(1, 1, 0, 1, 0, '0248', 'content_reject', 'soft', '*****@*****.**'), 'bounce-email/tt_bounce_05.txt' => array(1, 1, 0, 1, 0, '0249', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_05.eml' => array(1, 1, 0, 1, 0, '0193', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_06.txt' => array(1, 1, 0, 1, 0, '0250', 'antispam', 'blocked', '*****@*****.**'), 'bounce-email/tt_bounce_07.txt' => array(1, 1, 0, 1, 0, '0236', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_08.txt' => array(1, 1, 0, 1, 0, '0251', 'dns_unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_12_soft.txt' => array(1, 1, 0, 1, 0, '0252', 'delayed', 'temporary', '*****@*****.**'), 'bounce-email/tt_bounce_13.txt' => array(1, 1, 0, 1, 0, '0013', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_14.txt' => array(1, 1, 0, 1, 0, '0253', 'full', 'soft', '*****@*****.**'), 'bounce-email/tt_bounce_15.txt' => array(1, 1, 0, 1, 0, '0254', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_16.txt' => array(1, 1, 0, 1, 0, '0182', 'full', 'soft', '*****@*****.**'), 'bounce-email/tt_bounce_17.txt' => array(1, 1, 0, 1, 0, '0157', 'unknown', 'hard', '*****@*****.**'), 'bounce-email/tt_bounce_18.txt' => array(1, 1, 0, 1, 0, '0256', 'delayed', 'temporary', '*****@*****.**'), 'bounce-email/tt_bounce_23.txt' => array(1, 1, 0, 1, 0, '0236', 'unknown', 'hard', '*****@*****.**')); $self = $this; $bmh = new BounceMailHandler(); $bmh->testMode = true; foreach ($testData as $testFile => $expected) { list($fetched, $processed, $unprocessed, $deleted, $moved, $ruleNo, $ruleCat, $bounceType, $email) = $expected; ob_start(); $rc = $bmh->openLocal($this->getMailboxPath(__DIR__ . '/../../fixtures/' . $testFile)); ob_end_clean(); $this->assertTrue($rc, $testFile . ': openLocal'); $bmh->actionFunction = function ($msgnum, $bounceType, $email, $subject, $xheader, $remove, $ruleNo, $ruleCat, $totalFetched, $body) use($self, $testFile, $expected) { return $remove === true || $remove === 1; }; ob_start(); $rc = $bmh->processMailbox(); $output = ob_get_contents(); ob_end_clean(); $this->assertTrue($rc, $testFile . ': processMailbox'); preg_match('/Read: ([0-9]+) messages/', $output, $matches); $this->assertEquals($fetched, $matches[1], $testFile . ': messages read'); preg_match('/([0-9]+) action taken/', $output, $matches); $this->assertEquals($processed, $matches[1], $testFile . ': action taken'); preg_match('/([0-9]+) no action taken/', $output, $matches); $this->assertEquals($unprocessed, $matches[1], $testFile . ': no action taken'); preg_match('/([0-9]+) messages deleted/', $output, $matches); $this->assertEquals($deleted, $matches[1], $testFile . ': messages deleted'); preg_match('/([0-9]+) messages moved/', $output, $matches); $this->assertEquals($moved, $matches[1], $testFile . ': messages moved'); preg_match('/Match: ([^:]+):([^;]+); ([^;]*); <?([^<]*)/', $output, $matches); $this->assertEquals($ruleNo, $matches[1], $testFile . ': rule_no'); $this->assertEquals($ruleCat, $matches[2], $testFile . ': rule_cat'); $this->assertEquals($bounceType, $matches[3], $testFile . ': bounce_type'); $this->assertEquals($email, $matches[4], $testFile . ': email'); } }