2105d4929fd713d18c980f45df4775f442eeefcf
[m6w6/ext-http] / tests / HttpRequestPool_007.phpt
1 --TEST--
2 HttpRequestPool chain with libevent
3 --SKIPIF--
4 <?php
5 include 'skip.inc';
6 checkcls('HttpRequest');
7 checkcls('HttpRequestPool');
8 $pool = new RequestPool;
9 skipif(!@$pool->enableEvents(), "need libevent support");
10 ?>
11 --FILE--
12 <?php
13
14 echo "-TEST\n";
15
16 set_time_limit(0);
17 ini_set('error_reporting', E_ALL);
18 ini_set('html_errors', 0);
19
20 class Request extends HttpRequest
21 {
22 public $pool;
23
24 function onFinish()
25 {
26 $this->pool->detach($this);
27
28 $u = $this->getUrl();
29 $c = $this->getResponseCode();
30 $b = $this->getResponseBody();
31
32 printf("%d %s %d\n", $c, $u, strlen($b));
33
34 if ($c == 200 && $this->pool->dir) {
35 file_put_contents($this->pool->all[$u], $b);
36 }
37
38 if ($a = each($this->pool->rem)) {
39 list($url, $file) = $a;
40 $r = new Request(
41 $url,
42 HttpRequest::METH_GET,
43 array(
44 'redirect' => 5,
45 'compress' => GZIP,
46 'timeout' => TOUT,
47 'connecttimeout' => TOUT,
48 'lastmodified' => is_file($file)?filemtime($file):0
49 )
50 );
51 $r->pool = $this->pool;
52 $this->pool->attach($r);
53 }
54 }
55
56 }
57
58 class Pool extends HttpRequestPool
59 {
60 public $all;
61 public $rem;
62 public $dir;
63
64 public final function __construct($urls_file = 'urls.txt', $cache_dir = 'HttpRequestPool_cache')
65 {
66 $this->dir = (is_dir($cache_dir) or @mkdir($cache_dir)) ? $cache_dir : null;
67
68 $urls = file($urls_file);
69 shuffle($urls);
70 foreach (array_map('trim', $urls) as $url) {
71 $this->all[$url] = $this->dir ? $this->dir .'/'. md5($url) : null;
72 }
73
74 if (RMAX) {
75 $now = array_slice($this->all, 0, RMAX);
76 $this->rem = array_slice($this->all, RMAX);
77 } else {
78 $now = $urls;
79 $this->rem = array();
80 }
81
82 $this->enableEvents();
83
84 foreach ($now as $url => $file) {
85 $r = new Request(
86 $url,
87 HttpRequest::METH_GET,
88 array(
89 'redirect' => 5,
90 'compress' => GZIP,
91 'timeout' => TOUT,
92 'connecttimeout' => TOUT,
93 'lastmodified' => is_file($file)?filemtime($file):0
94 )
95 );
96 $r->pool = $this;
97 $this->attach($r);
98 }
99
100 $this->send();
101 }
102 }
103
104 define('GZIP', true);
105 define('TOUT', 50);
106 define('RMAX', 10);
107 chdir(dirname(__FILE__));
108
109 $time = microtime(true);
110 $pool = new Pool();
111 printf("Elapsed: %0.3fs\n", microtime(true)-$time);
112
113 echo "Done\n";
114 ?>
115 --EXPECTF--
116 %sTEST
117 %d %s %d
118 %d %s %d
119 %d %s %d
120 %d %s %d
121 %d %s %d
122 %d %s %d
123 %d %s %d
124 %d %s %d
125 %d %s %d
126 %d %s %d
127 %d %s %d
128 %d %s %d
129 %d %s %d
130 %d %s %d
131 %d %s %d
132 %d %s %d
133 %d %s %d
134 %d %s %d
135 %d %s %d
136 %d %s %d
137 %d %s %d
138 %d %s %d
139 %d %s %d
140 %d %s %d
141 %d %s %d
142 %d %s %d
143 %d %s %d
144 %d %s %d
145 %d %s %d
146 %d %s %d
147 %d %s %d
148 %d %s %d
149 %d %s %d
150 %d %s %d
151 %d %s %d
152 %d %s %d
153 %d %s %d
154 %d %s %d
155 %d %s %d
156 %d %s %d
157 %d %s %d
158 %d %s %d
159 %d %s %d
160 %d %s %d
161 %d %s %d
162 %d %s %d
163 %d %s %d
164 %d %s %d
165 %d %s %d
166 Elapsed: %fs
167 Done