PHP Classes

File: ApacheLogIteratorTest.php

Recommend this page to a friend!
  Classes of Simon Champion   Apache Log Iterator   ApacheLogIteratorTest.php   Download  
File: ApacheLogIteratorTest.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: Apache Log Iterator
Extract data from Apache log file lines and fields
Author: By
Last change: Ticket #1: Add test to confirm that we urldecode the query args, but don't double-decode them.
Date: 11 years ago
Size: 5,248 bytes
 

Contents

Class file image Download
<?php
/**
 * Unit tests for ApacheLogIterator class
 * Since this is an iterator class, we don't need to test all the methods individually;
 * we can simply use a foreach() loop to check the whole thing in one go.
 *
 * @author: Simon Champion <simon.champion@connectionservices.com>
 * @copyright Connection Services Limited (http://www.connectionservices.com), 2012
 * @version 1.0 / 17-Aug-2012
 */

//Include the file(s) being tested:
require_once "ApacheLogIterator.php";
require_once
"ApacheLogFields.php";

class
ApacheLogIteratorTest extends PHPUnit_Framework_TestCase {
    private
$tempfile = '';

    private
$logEntries = array(
       
'Jul 19 00:59:29 sdcweb1 mydomain.com: 192.168.1.1 - - [19/Jul/2012:00:59:28 +0100] "GET /query.php?q=te57+1ng&submit=Search HTTP/1.1" 200 7727 "http://www.referralurl.com/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1"',
       
'Jul 21 15:10:54 sdcweb1 mydomain.com: 192.168.1.2 - - [21/Jul/2012:15:10:54 +0100] "GET /index.php HTTP/1.1" 200 32611 "http://www.referralurl2.com/" "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1"',
       
'Jul 21 15:10:54 sdcweb1 mydomain.com: 192.168.1.3 - - [21/Jul/2012:15:10:54 +0100] "GET /test.php?q=Decode%22This%2521 HTTP/1.1" 200 32611 "http://www.referralurl2.com/" "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1"',
    );

   
/**
     * The class we're testing extends SPLFileObject, so it has to read its data from a file.
     * So in order to unit test it, we have to create a temp file containing the test data.
     */
   
protected function setUp() {
       
$log = implode("\n",$this->logEntries);
       
$this->tempfile = tempnam("/tmp", "ApacheLogIteratorTest");
       
file_put_contents($this->tempfile, $log);
    }
    protected function
tearDown() {
        if(
$this->tempfile) {unlink($this->tempfile);}
       
$this->tempfile = '';
    }

    public function
testIterator() {
       
$expected = array(
              array (
               
'originalLogEntry' => $this->logEntries[0],
               
'localServer' => 'sdcweb1',
               
'remoteIP' => '192.168.1.1',
               
'datetime' => '19/Jul/2012:00:59:28 +0100',
               
'method' => 'GET',
               
'status' => '200',
               
'bytes' => '7727',
               
'referrer' => 'http://www.referralurl.com/',
               
'userAgent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1',
               
'request' => array (
                   
'scheme' => 'http',
                   
'host' => 'mydomain.com',
                   
'path' => '/query.php',
                   
'query' => 'q=te57+1ng&submit=Search',
                   
'fullURL' => 'http://mydomain.com:/query.php?q=te57+1ng&submit=Search',
                   
'queryArgs' => array (
                       
'q' => 'te57 1ng',
                       
'submit' => 'Search',
                    ),
                ),
              ),
              array (
               
'originalLogEntry' => $this->logEntries[1],
               
'localServer' => 'sdcweb1',
               
'remoteIP' => '192.168.1.2',
               
'datetime' => '21/Jul/2012:15:10:54 +0100',
               
'method' => 'GET',
               
'status' => '200',
               
'bytes' => '32611',
               
'referrer' => 'http://www.referralurl2.com/',
               
'userAgent' => 'Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1',
               
'request' => array (
                   
'scheme' => 'http',
                   
'host' => 'mydomain.com',
                   
'path' => '/index.php',
                   
'fullURL' => 'http://mydomain.com:/index.php',
                   
'query' => '',
                   
'queryArgs' => array (),
                ),
            ),
              array (
               
'originalLogEntry' => $this->logEntries[2],
               
'localServer' => 'sdcweb1',
               
'remoteIP' => '192.168.1.3',
               
'datetime' => '21/Jul/2012:15:10:54 +0100',
               
'method' => 'GET',
               
'status' => '200',
               
'bytes' => '32611',
               
'referrer' => 'http://www.referralurl2.com/',
               
'userAgent' => 'Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1',
               
'request' => array (
                   
'scheme' => 'http',
                   
'host' => 'mydomain.com',
                   
'path' => '/test.php',
                   
'fullURL' => 'http://mydomain.com:/test.php?q=Decode%22This%2521',
                   
'query' => 'q=Decode%22This%2521',
                   
'queryArgs' => array (
                       
'q' => 'Decode"This%21', //Validate that we don't do urldecode, but not double decoding (Ticket #1)
                   
),
                ),
            ),
        );
       
$logIterator = new ApacheLogIterator($this->tempfile);
       
$output = array();
        foreach (
$logIterator as $logRecord) {
           
$output[] = $logRecord;
        }
       
$this->assertEquals($output,$expected,'Check that the records loaded match the expected data.');
    }
}