X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2FHttpRequestPool_007.phpt;fp=tests%2FHttpRequestPool_007.phpt;h=2105d4929fd713d18c980f45df4775f442eeefcf;hb=caecdff1920aed4c6b98b0a23598e9d359ece50b;hp=0000000000000000000000000000000000000000;hpb=9e37263154391dec762b839cad4b7dd13e35467e;p=m6w6%2Fext-http diff --git a/tests/HttpRequestPool_007.phpt b/tests/HttpRequestPool_007.phpt new file mode 100644 index 0000000..2105d49 --- /dev/null +++ b/tests/HttpRequestPool_007.phpt @@ -0,0 +1,167 @@ +--TEST-- +HttpRequestPool chain with libevent +--SKIPIF-- +enableEvents(), "need libevent support"); +?> +--FILE-- +pool->detach($this); + + $u = $this->getUrl(); + $c = $this->getResponseCode(); + $b = $this->getResponseBody(); + + printf("%d %s %d\n", $c, $u, strlen($b)); + + if ($c == 200 && $this->pool->dir) { + file_put_contents($this->pool->all[$u], $b); + } + + if ($a = each($this->pool->rem)) { + list($url, $file) = $a; + $r = new Request( + $url, + HttpRequest::METH_GET, + array( + 'redirect' => 5, + 'compress' => GZIP, + 'timeout' => TOUT, + 'connecttimeout' => TOUT, + 'lastmodified' => is_file($file)?filemtime($file):0 + ) + ); + $r->pool = $this->pool; + $this->pool->attach($r); + } + } + +} + +class Pool extends HttpRequestPool +{ + public $all; + public $rem; + public $dir; + + public final function __construct($urls_file = 'urls.txt', $cache_dir = 'HttpRequestPool_cache') + { + $this->dir = (is_dir($cache_dir) or @mkdir($cache_dir)) ? $cache_dir : null; + + $urls = file($urls_file); + shuffle($urls); + foreach (array_map('trim', $urls) as $url) { + $this->all[$url] = $this->dir ? $this->dir .'/'. md5($url) : null; + } + + if (RMAX) { + $now = array_slice($this->all, 0, RMAX); + $this->rem = array_slice($this->all, RMAX); + } else { + $now = $urls; + $this->rem = array(); + } + + $this->enableEvents(); + + foreach ($now as $url => $file) { + $r = new Request( + $url, + HttpRequest::METH_GET, + array( + 'redirect' => 5, + 'compress' => GZIP, + 'timeout' => TOUT, + 'connecttimeout' => TOUT, + 'lastmodified' => is_file($file)?filemtime($file):0 + ) + ); + $r->pool = $this; + $this->attach($r); + } + + $this->send(); + } +} + +define('GZIP', true); +define('TOUT', 50); +define('RMAX', 10); +chdir(dirname(__FILE__)); + +$time = microtime(true); +$pool = new Pool(); +printf("Elapsed: %0.3fs\n", microtime(true)-$time); + +echo "Done\n"; +?> +--EXPECTF-- +%sTEST +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +%d %s %d +Elapsed: %fs +Done