PHP Classes

File: test/test.php

Recommend this page to a friend!
  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: 10 years ago
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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($result, true);
       
$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($value, true));
        }
    }
}