1 | <?php |
||
17 | class ZmqServerTest extends PHPUnit_Framework_TestCase |
||
18 | { |
||
19 | public function testGenerate() |
||
20 | { |
||
21 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('generate', 'heartbeat'), array(), '', false); |
||
22 | $generator->expects($this->once()) |
||
23 | ->method('generate') |
||
24 | ->will($this->returnValue(10)); |
||
25 | |||
26 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
27 | $socket->expects($this->once()) |
||
28 | ->method('recv') |
||
29 | ->willReturn('GEN'); |
||
30 | $socket->expects($this->once()) |
||
31 | ->method('send') |
||
32 | ->with('{"code":200,"message":10}'); |
||
33 | |||
34 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
35 | |||
36 | $server->expects($this->once()) |
||
37 | ->method('getZmqSocket') |
||
38 | ->with(5599) |
||
39 | ->will($this->returnValue($socket)); |
||
40 | |||
41 | /* @var $server ZmqServer */ |
||
42 | $server->run(); |
||
43 | } |
||
44 | |||
45 | /** |
||
46 | * Test ticket generation after some sleep - to allow heartbeat operation to be called. |
||
47 | */ |
||
48 | public function testGenerateAfterTimeout() |
||
49 | { |
||
50 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('generate', 'heartbeat'), array(), '', false); |
||
51 | $generator->expects($this->once()) |
||
52 | ->method('generate') |
||
53 | ->will($this->returnValue(10)); |
||
54 | $generator->expects($this->once()) |
||
55 | ->method('heartbeat'); |
||
56 | |||
57 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
58 | $socket->expects($this->once()) |
||
59 | ->method('recv') |
||
60 | ->willReturnCallback(function() { |
||
61 | sleep(6); |
||
62 | return 'GEN'; |
||
63 | }); |
||
64 | $socket->expects($this->once()) |
||
65 | ->method('send') |
||
66 | ->with('{"code":200,"message":10}'); |
||
67 | |||
68 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
69 | |||
70 | $server->expects($this->once()) |
||
71 | ->method('getZmqSocket') |
||
72 | ->with(5599) |
||
73 | ->will($this->returnValue($socket)); |
||
74 | |||
75 | /* @var $server ZmqServer */ |
||
76 | $server->run(); |
||
77 | } |
||
78 | |||
79 | public function testGenerateException() |
||
80 | { |
||
81 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('generate', 'heartbeat'), array(), '', false); |
||
82 | $generator->expects($this->once()) |
||
83 | ->method('generate') |
||
84 | ->will($this->throwException(new Exception())); |
||
85 | |||
86 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
87 | $socket->expects($this->once()) |
||
88 | ->method('recv') |
||
89 | ->willReturn('GEN'); |
||
90 | $socket->expects($this->once()) |
||
91 | ->method('send') |
||
92 | ->with('{"code":500,"message":"ERROR"}'); |
||
93 | |||
94 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
95 | |||
96 | $server->expects($this->once()) |
||
97 | ->method('getZmqSocket') |
||
98 | ->with(5599) |
||
99 | ->will($this->returnValue($socket)); |
||
100 | |||
101 | /* @var $server ZmqServer */ |
||
102 | $server->run(); |
||
103 | } |
||
104 | |||
105 | public function testStatus() |
||
106 | { |
||
107 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('status', 'heartbeat'), array(), '', false); |
||
108 | $generatorStatus = new GeneratorStatus(1, 1, 1, true); |
||
109 | $generator->expects($this->once()) |
||
110 | ->method('status') |
||
111 | ->will($this->returnValue($generatorStatus)); |
||
112 | |||
113 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
114 | $socket->expects($this->once()) |
||
115 | ->method('recv') |
||
116 | ->willReturn('STATUS'); |
||
117 | $socket->expects($this->once()) |
||
118 | ->method('send') |
||
119 | ->with('{"code":200,"message":{"machine":1,"lastTime":1,"sequence":1,"is32Bit":true}}'); |
||
120 | |||
121 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
122 | |||
123 | $server->expects($this->once()) |
||
124 | ->method('getZmqSocket') |
||
125 | ->with(5599) |
||
126 | ->will($this->returnValue($socket)); |
||
127 | |||
128 | /* @var $server ZmqServer */ |
||
129 | $server->run(); |
||
130 | } |
||
131 | |||
132 | public function testUnknownCommand() |
||
133 | { |
||
134 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('status', 'heartbeat'), array(), '', false); |
||
135 | |||
136 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
137 | $socket->expects($this->once()) |
||
138 | ->method('recv') |
||
139 | ->willReturn('DUMMY_UNKNOWN_COMMAND'); |
||
140 | $socket->expects($this->once()) |
||
141 | ->method('send') |
||
142 | ->with('{"code":404,"message":"UNKNOWN COMMAND"}'); |
||
143 | |||
144 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
145 | |||
146 | $server->expects($this->once()) |
||
147 | ->method('getZmqSocket') |
||
148 | ->with(5599) |
||
149 | ->will($this->returnValue($socket)); |
||
150 | |||
151 | /* @var $server ZmqServer */ |
||
152 | $server->run(); |
||
153 | } |
||
154 | |||
155 | public function testHeartBeat() |
||
156 | { |
||
157 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('status', 'heartbeat'), array(), '', false); |
||
158 | $generator->expects($this->once()) |
||
159 | ->method('heartbeat'); |
||
160 | |||
161 | $socket = $this->getMock('ZMQSocket', array('recv', 'send'), array(), '', false); |
||
162 | $socket->expects($this->once()) |
||
163 | ->method('recv') |
||
164 | ->willReturn(false); |
||
165 | $socket->expects($this->never()) |
||
166 | ->method('send'); |
||
167 | |||
168 | $server = $this->getMock('\Gendoria\CruftFlake\Zmq\ZmqServer', array('getZmqSocket'), array($generator, 5599, true)); |
||
169 | |||
170 | $server->expects($this->once()) |
||
171 | ->method('getZmqSocket') |
||
172 | ->with(5599) |
||
173 | ->will($this->returnValue($socket)); |
||
174 | |||
175 | /* @var $server ZmqServer */ |
||
176 | $server->run(); |
||
177 | } |
||
178 | |||
179 | public function testSetLogger() |
||
180 | { |
||
181 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('status', 'heartbeat'), array(), '', false); |
||
182 | $server = new ZmqServer($generator, 5599, true); |
||
183 | $logger = new NullLogger(); |
||
184 | $server->setLogger($logger); |
||
185 | $refl = new ReflectionObject($server); |
||
186 | $loggerProp = $refl->getProperty('logger'); |
||
187 | $loggerProp->setAccessible(true); |
||
188 | $this->assertSame($logger, $loggerProp->getValue($server)); |
||
189 | } |
||
190 | |||
191 | public function testGetSmqSocket() |
||
192 | { |
||
193 | $generator = $this->getMock('\Gendoria\CruftFlake\Generator\Generator', array('status', 'heartbeat'), array(), '', false); |
||
194 | $server = new ZmqServer($generator, 5599, true); |
||
195 | $refl = new ReflectionObject($server); |
||
196 | $socketMethod = $refl->getMethod('getZmqSocket'); |
||
197 | $socketMethod->setAccessible(true); |
||
198 | $socket = $socketMethod->invoke($server, 'tcp://*:5599'); |
||
199 | $this->assertInstanceOf('\ZmqSocket', $socket); |
||
200 | $this->assertEquals(array('connect' => array(), 'bind' => array('tcp://*:5599')), $socket->getEndpoints()); |
||
201 | } |
||
202 | } |
||
203 |