Login   Register  
PHP Classes
elePHPant
Icontem

File: test/test.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Rubens Takiguti Ribeiro  >  PHP Smart Session  >  test/test.php  >  Download  
File: test/test.php
Role: Unit test script
Content type: text/plain
Description: Main test script.
Class: PHP Smart Session
Access sessions initialized only when necessary
Author: By
Last change:
Date: 2013-04-29 20:59
Size: 8,305 bytes
 

Contents

Class file image Download
<?php
/**
 * This test script simulates a web browser to test session behavior.
 * Before run this script, you should activate an HTTP server
 * to listen to this folder under http://localhost:8000/
 * or your prefered configuration (bellow).
 * You can use PHP 5.4 native HTTP server by calling:
 * $ php -S localhost:8000
 */
$listen 'http://localhost:8000';
$debug  false;

$test = new SmartSessionTest($listen$debug);
$test->run();
exit(
0);


final class 
SmartSessionTest {

    
/**
     * Host that are listen to HTTP requests.
     * @var string
     */
    
private $host;

    
/**
     * Debug flag.
     * @var bool
     */
    
private $debug;

    
/**
     * Runtime sessid for tests
     * @var string
     */
    
private $sessid;

    
/**
     * Pass counter
     * @var int
     */
    
private $totalPass 0;

    
/**
     * Fail counter
     * @var int
     */
    
private $totalFail 0;

    
/**
     * Constructor
     */
    
public function __construct($host$debug false) {
        
$this->host  = (string)$host;
        
$this->debug = (bool)$debug;
    }

    
/**
     * Run tests
     * @return void
     */
    
public function run() {
        
$this->testStatus();
        
$this->testGet();
        
$this->testDel();
        
$this->testSet();
        
$this->testClear();

        
$this->testStatusWithSessid();
        
$this->testGetWithSessid();
        
$this->testDelWithSessid();
        
$this->testClearWithSessid();

        
fprintf(STDOUT"Total pass: %d\n"$this->totalPass);
        
fprintf(STDOUT"Total fail: %d\n"$this->totalFail);
    }

    
/**
     * Test status without sending session ID
     */
    
public function testStatus() {
        
$result file_get_contents($this->host '/testStatus.php');
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === false__METHOD__'exist must be false');
    }

    
/**
     * Test to get a value without sending session ID
     */
    
public function testGet() {
        
$result file_get_contents($this->host '/testGet.php');
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === false__METHOD__'open must be false');
        
$this->assertThat($json['value'] === null__METHOD__'value must be null');
    }

    
/**
     * Test to delete a value without sending session ID
     */
    
public function testDel() {
        
$result file_get_contents($this->host '/testDel.php');
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['hasBefore'] === false__METHOD__'hasBefore must be false');
        
$this->assertThat($json['hasAfter'] === false__METHOD__'hasAfter must be false');
        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === false__METHOD__'exist must be false');
        
$this->assertThat($json['value'] === null__METHOD__'value must be null');
    }

    
/**
     * Test to set a value without sending session ID
     */
    
public function testSet() {
        
$result file_get_contents($this->host '/testSet.php');
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === true__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === true__METHOD__'exist must be false');
        
$this->assertThat($json['value'] === 123__METHOD__'value must be 123');

        
$this->sessid $json['sessid'];
    }

    
/**
     * Test to clear session without sending session ID
     */
    
public function testClear() {
        
$result file_get_contents($this->host '/testClear.php');
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === false__METHOD__'exist must be false');
    }

    
/**
     * Test session status sending valid session ID
     */
    
public function testStatusWithSessid() {
        
$context stream_context_create(
            array(
                
'http' => array(
                    
'method' => 'GET',
                    
'header' => sprintf("Cookie: %s=%s\r\n"session_name(), urlencode($this->sessid))
                )
            )
        );

        
$result file_get_contents($this->host '/testStatus.php'false$context);
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === true__METHOD__'exist must be true');
    }

    
/**
     * Test to get a value sending session ID
     */
    
public function testGetWithSessid() {
        
$context stream_context_create(
            array(
                
'http' => array(
                    
'method' => 'GET',
                    
'header' => sprintf("Cookie: %s=%s\r\n"session_name(), urlencode($this->sessid))
                )
            )
        );

        
$result file_get_contents($this->host '/testGet.php'false$context);
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === true__METHOD__'open must be true');
        
$this->assertThat($json['exist'] === true__METHOD__'exist must be true');
        
$this->assertThat($json['value'] === 123__METHOD__'value must be 123');
    }

    
/**
     * Test to delete a value sending session ID
     */
    
public function testDelWithSessid() {
        
$context stream_context_create(
            array(
                
'http' => array(
                    
'method' => 'GET',
                    
'header' => sprintf("Cookie: %s=%s\r\n"session_name(), urlencode($this->sessid))
                )
            )
        );

        
$result file_get_contents($this->host '/testDel.php'false$context);
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['hasBefore'] === true__METHOD__'hasBefore must be true');
        
$this->assertThat($json['hasAfter'] === false__METHOD__'hasAfter must be false');
        
$this->assertThat($json['open'] === true__METHOD__'open must be true');
        
$this->assertThat($json['exist'] === true__METHOD__'exist must be true');
        
$this->assertThat($json['value'] === null__METHOD__'value must be null');
    }

    
/**
     * Test to clear session sending session ID
     */
    
public function testClearWithSessid() {
        
$context stream_context_create(
            array(
                
'http' => array(
                    
'method' => 'GET',
                    
'header' => sprintf("Cookie: %s=%s\r\n"session_name(), urlencode($this->sessid))
                )
            )
        );

        
$result file_get_contents($this->host '/testClear.php'false$context);
        
$json json_decode($resulttrue);
        
$this->printDebug($json);

        
$this->assertThat($json['open'] === false__METHOD__'open must be false');
        
$this->assertThat($json['exist'] === false__METHOD__'exist must be false');
    }

    
/**
     * Simple assertion method
     * @param bool $pass
     * @param string $method
     * @param string $description
     */
    
private function assertThat($pass$method$description) {
        static 
$counter 0;
        
$counter += 1;

        if (
$pass === true) {
            
fprintf(STDOUT"Test %03d - %s: pass\n"$counter$method);
            
$this->totalPass += 1;
        } else {
            
fprintf(STDERR"Test %03d - %s: fail (%s)\n"$counter$method$description);
            
$this->totalFail += 1;
        }
    }

    
/**
     * Print debug if enabled
     * @param mixed $value
     * @return void
     */
    
private function printDebug($value) {
        if (
$this->debug) {
            
fprintf(STDOUT"Debug: %s\n"var_export($valuetrue));
        }
    }
}