Skip to content

Commit 932c1b0

Browse files
committed
Merge pull request #61 from uecode/revert-54-master
Merged
2 parents 9f70222 + 5cfa081 commit 932c1b0

7 files changed

Lines changed: 89 additions & 32 deletions

File tree

src/Command/QueueReceiveCommand.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,16 @@ private function pollQueue($registry, $name)
7676
);
7777
}
7878

79-
$provider = $registry->get($name);
80-
$messages = $provider->receive();
81-
$count = sizeof($messages);
82-
foreach ($messages as $message) {
83-
84-
$messageEvent = new MessageEvent($name, $message);
85-
$dispatcher = $this->getContainer()->get('event_dispatcher');
79+
$dispatcher = $this->getContainer()->get('event_dispatcher');
80+
$messages = $registry->get($name)->receive();
8681

82+
foreach ($messages as $message) {
83+
$messageEvent = new MessageEvent($name, $message);
8784
$dispatcher->dispatch(Events::Message($name), $messageEvent);
8885
}
8986

9087
$msg = "<info>Finished polling %s Queue, %d messages fetched.</info>";
91-
$this->output->writeln(sprintf($msg, $name, $count));
88+
$this->output->writeln(sprintf($msg, $name, sizeof($messages)));
9289

9390
return 0;
9491
}

src/DependencyInjection/Configuration.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ private function getProvidersNode()
118118

119119
private function getQueuesNode()
120120
{
121-
$treeBuilder = new TreeBuilder();
122-
$node = $treeBuilder->root('queues');
121+
$treeBuilder = new TreeBuilder();
122+
$node = $treeBuilder->root('queues');
123123

124124
$node
125125
->requiresAtLeastOneElement()
@@ -187,8 +187,8 @@ private function getQueuesNode()
187187

188188
private function getSubscribersNode()
189189
{
190-
$treeBuilder = new TreeBuilder();
191-
$node = $treeBuilder->root('subscribers');
190+
$treeBuilder = new TreeBuilder();
191+
$node = $treeBuilder->root('subscribers');
192192

193193
$node
194194
->prototype('array')

src/EventListener/RequestListener.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,22 @@ private function handleIronMqNotifications(GetResponseEvent $event)
8787

8888
// We add the message in an array with Queue as the property name
8989
$message = json_decode($event->getRequest()->getContent(), true);
90-
$queue = key($message);
90+
91+
if (empty($message['_qpush_queue'])) {
92+
return;
93+
}
94+
95+
$queue = $message['_qpush_queue'];
9196
$metadata = [
92-
'iron-subscriber-message-id' => $headers->get('iron-subscriber-message-id'),
93-
'iron-subscriber-message-url' => $headers->get('iron-subscriber-message-url')
97+
'iron-subscriber-message-id' => $headers->get('iron-subscriber-message-id'),
98+
'iron-subscriber-message-url' => $headers->get('iron-subscriber-message-url')
9499
];
95100

101+
unset($message['_qpush_queue']);
102+
96103
$notification = new Notification(
97104
$messageId,
98-
$message[$queue],
105+
$message,
99106
$metadata
100107
);
101108

src/Provider/IronMqProvider.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public function publish(array $message, array $options = [])
141141

142142
$result = $this->ironmq->postMessage(
143143
$this->getNameWithPrefix(),
144-
json_encode($message),
144+
json_encode($message + ['_qpush_queue' => $this->name]),
145145
[
146146
'timeout' => $options['message_timeout'],
147147
'delay' => $options['message_delay'],
@@ -184,14 +184,16 @@ public function receive(array $options = [])
184184
// Convert to Message Class
185185
foreach ($messages as &$message) {
186186
$id = $message->id;
187-
$body = $message->body;
187+
$body = json_decode($message->body, true);
188188
$metadata = [
189189
'timeout' => $message->timeout,
190190
'reserved_count' => $message->reserved_count,
191191
'push_status' => $message->push_status
192192
];
193193

194-
$message = new Message($id, $body, $metadata);
194+
unset($body['_qpush_queue']);
195+
196+
$message = new Message($id, json_encode($body), $metadata);
195197

196198
$this->log(200, "Message has been received.", ['message_id' => $id]);
197199
}

tests/EventListener/RequestListenerTest.php

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
use Symfony\Component\HttpKernel\KernelEvents;
3030
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
3131
use Uecode\Bundle\QPushBundle\EventListener\RequestListener;
32+
use Uecode\Bundle\QPushBundle\Event\Events as QPushEvents;
33+
use Uecode\Bundle\QPushBundle\Event\NotificationEvent;
3234

3335
/**
3436
* @author Keith Kirk <kkirk@undergroundelephant.com>
@@ -47,11 +49,14 @@ class RequestListenerTest extends \PHPUnit_Framework_TestCase
4749

4850
public function setUp()
4951
{
50-
$listener = new RequestListener($this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'));
5152
$this->dispatcher = new EventDispatcher('UTF-8');
53+
$listener = new RequestListener($this->dispatcher);
54+
5255
$this->dispatcher->addListener(KernelEvents::REQUEST, [$listener, 'onKernelRequest']);
56+
$this->dispatcher->addListener(QPushEvents::Notification('ironmq-test'), [$this, 'IronMqOnNotificationReceived']);
57+
$this->dispatcher->addListener(QPushEvents::Notification('aws-test'), [$this, 'AwsOnNotificationReceived']);
5358

54-
$this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
59+
$this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
5560
}
5661

5762
public function testListenerDoesNothingForSubRequests()
@@ -64,9 +69,9 @@ public function testListenerDoesNothingForSubRequests()
6469

6570
public function testListenerHandlesIronMQMessageRequests()
6671
{
67-
$message = ['test' => '{"foo": "bar"}'];
72+
$message = '{"foo": "bar","_qpush_queue":"ironmq-test"}';
6873

69-
$request = new Request([],[],[],[],[],[], json_encode($message));
74+
$request = new Request([],[],[],[],[],[], $message);
7075
$request->headers->set('iron-message-id', 123);
7176
$request->headers->set('iron-subscriber-message-id', 456);
7277
$request->headers->set('iron-subscriber-message-url', 'http://foo.bar');
@@ -78,27 +83,70 @@ public function testListenerHandlesIronMQMessageRequests()
7883
$this->assertEquals("IronMQ Notification Received.", $event->getResponse()->getContent());
7984
}
8085

86+
public function IronMqOnNotificationReceived(NotificationEvent $event)
87+
{
88+
$notification = $event->getNotification();
89+
$this->assertInstanceOf('\Uecode\Bundle\QPushBundle\Message\Notification', $notification);
90+
91+
$this->assertEquals(123, $notification->getId());
92+
93+
$this->assertInternalType('array', $notification->getBody());
94+
$this->assertEquals($notification->getBody(), ['foo' => 'bar']);
95+
96+
$this->assertInstanceOf('\Doctrine\Common\Collections\ArrayCollection', $notification->getMetadata());
97+
$this->assertEquals(
98+
[
99+
'iron-subscriber-message-id' => 456,
100+
'iron-subscriber-message-url' => 'http://foo.bar'
101+
],
102+
$notification->getMetadata()->toArray()
103+
);
104+
}
105+
81106
public function testListenerHandlesAwsNotificationRequests()
82107
{
83108
$message = [
84109
'Type' => 'Notification',
85110
'MessageId' => 123,
86111
'TopicArn' => 'SomeArn',
87-
'Subject' => 'Test',
88-
'Message' => 'Test Message',
89-
'Timestamp' => date('Y-m-d H:i:s')
112+
'Subject' => 'aws-test',
113+
'Message' => '{"foo": "bar"}',
114+
'Timestamp' => date('Y-m-d H:i:s', 1422040603)
90115
];
91116

92117
$request = new Request([],[],[],[],[],[], json_encode($message));
93118
$request->headers->set('x-amz-sns-message-type', 'Notification');
94119

95120
$event = new GetResponseEvent($this->kernel, $request, HttpKernelInterface::MASTER_REQUEST);
121+
96122
$this->dispatcher->dispatch(KernelEvents::REQUEST, $event);
97123

98124
$this->assertTrue($event->hasResponse());
99125
$this->assertEquals("SNS Message Notification Received.", $event->getResponse()->getContent());
100126
}
101127

128+
public function AwsOnNotificationReceived(NotificationEvent $event)
129+
{
130+
$notification = $event->getNotification();
131+
$this->assertInstanceOf('\Uecode\Bundle\QPushBundle\Message\Notification', $notification);
132+
133+
$this->assertEquals(123, $notification->getId());
134+
135+
$this->assertInternalType('array', $notification->getBody());
136+
$this->assertEquals($notification->getBody(), ['foo' => 'bar']);
137+
138+
$this->assertInstanceOf('\Doctrine\Common\Collections\ArrayCollection', $notification->getMetadata());
139+
$this->assertEquals(
140+
[
141+
'Type' => 'Notification',
142+
'TopicArn' => 'SomeArn',
143+
'Timestamp' => date('Y-m-d H:i:s', 1422040603),
144+
'Subject' => 'aws-test'
145+
],
146+
$notification->getMetadata()->toArray()
147+
);
148+
}
149+
102150
public function testListenerHandlesAwsSubscriptionRequests()
103151
{
104152
$message = [
@@ -107,9 +155,9 @@ public function testListenerHandlesAwsSubscriptionRequests()
107155
'Token' => 456,
108156
'TopicArn' => 'SomeArn',
109157
'SubscribeUrl' => 'http://foo.bar',
110-
'Subject' => 'Test',
111-
'Message' => 'Test Message',
112-
'Timestamp' => date('Y-m-d H:i:s')
158+
'Subject' => 'aws-test',
159+
'Message' => '{"foo": "bar"}',
160+
'Timestamp' => date('Y-m-d H:i:s', 1422040603)
113161
];
114162

115163
$request = new Request([],[],[],[],[],[], json_encode($message));

tests/MockClient/IronMqMockClient.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public function postMessage($queue, $message, $options)
6464
{
6565
$response = new \stdClass;
6666
$response->id = 123;
67-
$response->ids = [ 123 ];
67+
$response->ids = [123];
6868
$response->msg = "Messages put on queue.";
6969

7070
return $response;
@@ -74,7 +74,7 @@ public function getMessages($queue, $count, $timeout)
7474
{
7575
$response = new \stdClass;
7676
$response->id = 123;
77-
$response->body = '{"test":{"foo":"bar"}}';
77+
$response->body = '{"foo":"bar","_qpush_queue":"test"}';
7878
$response->timeout = 60;
7979
$response->reserved_count = 1;
8080
$response->push_status = new \stdClass;

tests/Provider/IronMqProviderTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,9 @@ public function testPublish()
153153

154154
public function testReceive()
155155
{
156-
$this->assertTrue(is_array($this->provider->receive()));
156+
$messages = $this->provider->receive();
157+
$this->assertInternalType('array', $messages);
158+
$this->assertEquals(['foo' => 'bar'], $messages[0]->getBody());
157159
}
158160

159161
public function testDelete()
@@ -178,6 +180,7 @@ public function testOnNotification()
178180
NotificationEvent::TYPE_MESSAGE,
179181
new Notification(123, "test", [])
180182
);
183+
181184
$event->setDispatcher(
182185
$this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface')
183186
);

0 commit comments

Comments
 (0)