<?php 
 
include_once ("../ConcurrentFile.php"); 
include_once ("Thread.php"); 
 
function exception_handler($exception) 
{ 
    file_put_contents("log.txt", "Uncaught exception: " . $exception->getMessage() . "\n"); 
} 
 
set_exception_handler('exception_handler'); 
 
function random_string($length) 
{ 
    $string = ""; 
    for ($i = 0; $i <= ($length / 32); $i++) 
        $string .= md5(time() + rand(0, 99)); 
    $max_start_index = (32 * $i) - $length; 
    $random_string = substr($string, rand(0, $max_start_index), $length); 
    return $random_string; 
} 
 
function read($u) 
{ 
    $file = new ConcurrentFile("data.txt"); 
    $contents = $file->read(); 
    $file->close(); 
    return $contents; 
} 
 
function write($content) 
{ 
    $file = new ConcurrentFile("data.txt"); 
    $file->write($content)->close(); 
    return $content; 
} 
function write_slow($content) 
{ 
    $file = new ConcurrentFile("data.txt"); 
    $file->writeLock(); 
    for($i=0;$i<10000;$i++){} 
    $file->write($content)->close(); 
    return $content; 
} 
 
/* 
******************************************************  
* Test 1: a writing process followed by a read process. 
******************************************************  
*/ 
 
$content = random_string(30); 
$content2 = random_string(30); 
 
$thread_a = new Thread("localhost", 80); 
$thread_a->setFunc("write", array($content)); 
$thread_a->start(); 
 
$thread_b = new Thread("localhost", 80); 
$thread_b->setFunc("read", array(1)); 
$thread_b->start(); 
 
 
$returnA = $thread_a->getreturn(); 
$returnB = $thread_b->getreturn(); 
 
echo "test 1(simple write):  "; 
if ($returnA == $returnB) 
    echo "<font color=green>passed</font><br>"; 
else 
    echo "<font color=red>not passed</font><br>"; 
 
 
/* 
*********************************************************** 
* Test 2: a slow writing process followed by a read process. 
* The read process should wait untill the write end. 
*********************************************************** 
*/ 
 
$thread_c = new Thread("localhost", 80); 
$thread_c->setFunc("write_slow", array($content2)); 
$thread_c->start(); 
 
$thread_d = new Thread("localhost", 80); 
$thread_d->setFunc("read", array(1)); 
$thread_d->start(); 
 
$returnC = $thread_c->getreturn(); 
$returnD = $thread_d->getreturn(); 
 
echo "test 2(slow writing):  "; 
if ($returnC == $returnD) 
    echo "<font color=green>passed</font><br>"; 
else 
    echo "<font color=red>not passed</font><br>"; 
 
?>
 
 |