Login   Register  
PHP Classes
elePHPant
Icontem

File: ApacheLogIteratorTest.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  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: 2012-08-22 07:19
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.');
    }
}