ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
SocketHandlerTest.php
Go to the documentation of this file.
1<?php
2
3/*
4 * This file is part of the Monolog package.
5 *
6 * (c) Jordi Boggiano <j.boggiano@seld.be>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Monolog\Handler;
13
16
21{
25 private $handler;
26
30 private $res;
31
35 public function testInvalidHostname()
36 {
37 $this->createHandler('garbage://here');
38 $this->writeRecord('data');
39 }
40
44 public function testBadConnectionTimeout()
45 {
46 $this->createHandler('localhost:1234');
47 $this->handler->setConnectionTimeout(-1);
48 }
49
50 public function testSetConnectionTimeout()
51 {
52 $this->createHandler('localhost:1234');
53 $this->handler->setConnectionTimeout(10.1);
54 $this->assertEquals(10.1, $this->handler->getConnectionTimeout());
55 }
56
60 public function testBadTimeout()
61 {
62 $this->createHandler('localhost:1234');
63 $this->handler->setTimeout(-1);
64 }
65
66 public function testSetTimeout()
67 {
68 $this->createHandler('localhost:1234');
69 $this->handler->setTimeout(10.25);
70 $this->assertEquals(10.25, $this->handler->getTimeout());
71 }
72
73 public function testSetWritingTimeout()
74 {
75 $this->createHandler('localhost:1234');
76 $this->handler->setWritingTimeout(10.25);
77 $this->assertEquals(10.25, $this->handler->getWritingTimeout());
78 }
79
80 public function testSetConnectionString()
81 {
82 $this->createHandler('tcp://localhost:9090');
83 $this->assertEquals('tcp://localhost:9090', $this->handler->getConnectionString());
84 }
85
90 {
91 $this->setMockHandler(array('fsockopen'));
92 $this->handler->expects($this->once())
93 ->method('fsockopen')
94 ->will($this->returnValue(false));
95 $this->writeRecord('Hello world');
96 }
97
102 {
103 $this->setMockHandler(array('pfsockopen'));
104 $this->handler->expects($this->once())
105 ->method('pfsockopen')
106 ->will($this->returnValue(false));
107 $this->handler->setPersistent(true);
108 $this->writeRecord('Hello world');
109 }
110
115 {
116 $this->setMockHandler(array('streamSetTimeout'));
117 $this->handler->expects($this->once())
118 ->method('streamSetTimeout')
119 ->will($this->returnValue(false));
120 $this->writeRecord('Hello world');
121 }
122
127 {
128 $this->setMockHandler(array('fwrite'));
129
130 $callback = function ($arg) {
131 $map = array(
132 'Hello world' => 6,
133 'world' => false,
134 );
135
136 return $map[$arg];
137 };
138
139 $this->handler->expects($this->exactly(2))
140 ->method('fwrite')
141 ->will($this->returnCallback($callback));
142
143 $this->writeRecord('Hello world');
144 }
145
150 {
151 $this->setMockHandler(array('fwrite', 'streamGetMetadata'));
152
153 $callback = function ($arg) {
154 $map = array(
155 'Hello world' => 6,
156 'world' => 5,
157 );
158
159 return $map[$arg];
160 };
161
162 $this->handler->expects($this->exactly(1))
163 ->method('fwrite')
164 ->will($this->returnCallback($callback));
165 $this->handler->expects($this->exactly(1))
166 ->method('streamGetMetadata')
167 ->will($this->returnValue(array('timed_out' => true)));
168
169 $this->writeRecord('Hello world');
170 }
171
176 {
177 $this->setMockHandler(array('fwrite', 'streamGetMetadata'));
178
180 $callback = function ($string) use ($res) {
181 fclose($res);
182
183 return strlen('Hello');
184 };
185
186 $this->handler->expects($this->exactly(1))
187 ->method('fwrite')
188 ->will($this->returnCallback($callback));
189 $this->handler->expects($this->exactly(1))
190 ->method('streamGetMetadata')
191 ->will($this->returnValue(array('timed_out' => false)));
192
193 $this->writeRecord('Hello world');
194 }
195
196 public function testWriteWithMemoryFile()
197 {
198 $this->setMockHandler();
199 $this->writeRecord('test1');
200 $this->writeRecord('test2');
201 $this->writeRecord('test3');
202 fseek($this->res, 0);
203 $this->assertEquals('test1test2test3', fread($this->res, 1024));
204 }
205
206 public function testWriteWithMock()
207 {
208 $this->setMockHandler(array('fwrite'));
209
210 $callback = function ($arg) {
211 $map = array(
212 'Hello world' => 6,
213 'world' => 5,
214 );
215
216 return $map[$arg];
217 };
218
219 $this->handler->expects($this->exactly(2))
220 ->method('fwrite')
221 ->will($this->returnCallback($callback));
222
223 $this->writeRecord('Hello world');
224 }
225
226 public function testClose()
227 {
228 $this->setMockHandler();
229 $this->writeRecord('Hello world');
230 $this->assertInternalType('resource', $this->res);
231 $this->handler->close();
232 $this->assertFalse(is_resource($this->res), "Expected resource to be closed after closing handler");
233 }
234
236 {
237 $this->setMockHandler();
238 $this->handler->setPersistent(true);
239 $this->writeRecord('Hello world');
240 $this->assertTrue(is_resource($this->res));
241 $this->handler->close();
242 $this->assertTrue(is_resource($this->res));
243 }
244
249 {
250 $this->setMockHandler(array('fwrite', 'streamGetMetadata'));
251
252 $this->handler->expects($this->any())
253 ->method('fwrite')
254 ->will($this->returnValue(0));
255
256 $this->handler->expects($this->any())
257 ->method('streamGetMetadata')
258 ->will($this->returnValue(array('timed_out' => false)));
259
260 $this->handler->setWritingTimeout(1);
261
262 $this->writeRecord('Hello world');
263 }
264
265 private function createHandler($connectionString)
266 {
267 $this->handler = new SocketHandler($connectionString);
268 $this->handler->setFormatter($this->getIdentityFormatter());
269 }
270
271 private function writeRecord($string)
272 {
273 $this->handler->handle($this->getRecord(Logger::WARNING, $string));
274 }
275
276 private function setMockHandler(array $methods = array())
277 {
278 $this->res = fopen('php://memory', 'a');
279
280 $defaultMethods = array('fsockopen', 'pfsockopen', 'streamSetTimeout');
281 $newMethods = array_diff($methods, $defaultMethods);
282
283 $finalMethods = array_merge($defaultMethods, $newMethods);
284
285 $this->handler = $this->getMock(
286 '\Monolog\Handler\SocketHandler', $finalMethods, array('localhost:1234')
287 );
288
289 if (!in_array('fsockopen', $methods)) {
290 $this->handler->expects($this->any())
291 ->method('fsockopen')
292 ->will($this->returnValue($this->res));
293 }
294
295 if (!in_array('pfsockopen', $methods)) {
296 $this->handler->expects($this->any())
297 ->method('pfsockopen')
298 ->will($this->returnValue($this->res));
299 }
300
301 if (!in_array('streamSetTimeout', $methods)) {
302 $this->handler->expects($this->any())
303 ->method('streamSetTimeout')
304 ->will($this->returnValue(true));
305 }
306
307 $this->handler->setFormatter($this->getIdentityFormatter());
308 }
309}
An exception for terminatinating execution or to throw for unit testing.
testExceptionIsThrownOnPfsockopenError()
@expectedException UnexpectedValueException
testInvalidHostname()
@expectedException UnexpectedValueException
testBadConnectionTimeout()
@expectedException \InvalidArgumentException
setMockHandler(array $methods=array())
testWriteFailsOnIncompleteWrite()
@expectedException RuntimeException
testWriteFailsIfStreamTimesOut()
@expectedException RuntimeException
testExceptionIsThrownOnFsockopenError()
@expectedException UnexpectedValueException
testBadTimeout()
@expectedException \InvalidArgumentException
testWriteFailsOnIfFwriteReturnsFalse()
@expectedException RuntimeException
testAvoidInfiniteLoopWhenNoDataIsWrittenForAWritingTimeoutSeconds()
@expectedException \RuntimeException
testExceptionIsThrownIfCannotSetTimeout()
@expectedException UnexpectedValueException
Stores to any socket - uses fsockopen() or pfsockopen().
Monolog log channel.
Definition: Logger.php:28
const WARNING
Exceptional occurrences that are not errors.
Definition: Logger.php:52
getRecord($level=Logger::WARNING, $message='test', $context=array())
Definition: TestCase.php:19