2
2
3
3
namespace Oro \Bundle \MessageQueueBundle \Tests \Functional \Security ;
4
4
5
+ use Doctrine \Persistence \ManagerRegistry ;
5
6
use Oro \Bundle \MessageQueueBundle \Security \SecurityAwareDriver ;
6
7
use Oro \Bundle \MessageQueueBundle \Test \Functional \MessageQueueExtension ;
7
8
use Oro \Bundle \SecurityBundle \Exception \InvalidTokenSerializationException ;
8
9
use Oro \Bundle \TestFrameworkBundle \Test \WebTestCase ;
10
+ use Oro \Bundle \UserBundle \Entity \User ;
11
+ use Oro \Bundle \UserBundle \Tests \Functional \DataFixtures \LoadUserData ;
9
12
use Oro \Component \MessageQueue \Client \Message ;
10
13
use Oro \Component \MessageQueue \Consumption \MessageProcessorInterface ;
11
14
use Oro \Component \MessageQueue \Test \Async \Topic \BasicMessageTestTopic ;
15
+ use Oro \Component \MessageQueue \Test \Async \Topic \RequeueTestTopic ;
12
16
13
17
class SecurityAwareConsumptionExtensionTest extends WebTestCase
14
18
{
@@ -18,6 +22,7 @@ class SecurityAwareConsumptionExtensionTest extends WebTestCase
18
22
protected function setUp (): void
19
23
{
20
24
$ this ->initClient ();
25
+ $ this ->loadFixtures ([LoadUserData::class]);
21
26
22
27
self ::purgeMessageQueue ();
23
28
}
@@ -56,13 +61,37 @@ public function testWithInvalidToken(): void
56
61
self ::consume (1 );
57
62
}
58
63
64
+ public function testWithInvalidTokenAndRedelivered (): void
65
+ {
66
+ $ user = $ this ->getReference (LoadUserData::SIMPLE_USER );
67
+
68
+ $ serializedToken = 'organizationId=1;userId=%s;userClass=Oro \\Bundle \\UserBundle \\Entity \\User;roles= ' ;
69
+ $ serializedToken = sprintf ($ serializedToken , $ user ->getId ());
70
+
71
+ // Simulate the situation when a message is re-queued.
72
+ self ::sendMessage (RequeueTestTopic::getName (), $ this ->createMessage ($ serializedToken ));
73
+
74
+ self ::consume ();
75
+ $ requeueMessages = self ::getProcessedMessagesByStatus (MessageProcessorInterface::REQUEUE );
76
+ self ::assertCount (1 , $ requeueMessages );
77
+
78
+ // Remove the user and start the consumer. Expect the security token to be invalid and the 're-queue' message
79
+ // to be rejected without error.
80
+ $ this ->removeUser ($ user ->getId ());
81
+ self ::assertEmpty (self ::getProcessedMessagesByStatus (MessageProcessorInterface::REJECT ));
82
+
83
+ self ::consume ();
84
+ $ rejectMessages = self ::getProcessedMessagesByStatus (MessageProcessorInterface::REJECT );
85
+ self ::assertCount (1 , $ rejectMessages );
86
+ }
87
+
59
88
public function testWithInvalidUserAndOrganization (): void
60
89
{
61
90
$ serializedToken = 'organizationId=100;userId=50;userClass=Oro \\Bundle \\UserBundle \\Entity \\User;roles= ' ;
62
91
$ sentMessage = self ::sendMessage (BasicMessageTestTopic::getName (), $ this ->createMessage ($ serializedToken ));
63
92
self ::consume ();
64
93
65
- self ::assertProcessedMessageStatus (MessageProcessorInterface::REJECT , $ sentMessage );
94
+ self ::assertProcessedMessageStatus (MessageProcessorInterface::ACK , $ sentMessage );
66
95
}
67
96
68
97
private function createMessage (string $ serializedToken = '' ): Message
@@ -73,4 +102,17 @@ private function createMessage(string $serializedToken = ''): Message
73
102
74
103
return $ message ;
75
104
}
105
+
106
+ private function removeUser (int $ userId ): void
107
+ {
108
+ /** @var ManagerRegistry $managerRegistry */
109
+ $ managerRegistry = $ this ->getContainer ()->get ('doctrine ' );
110
+ $ entityManager = $ managerRegistry ->getManager ();
111
+ $ originalUser = $ managerRegistry ->getRepository (User::class)->find ($ userId );
112
+ if ($ originalUser ) {
113
+ $ entityManager ->remove ($ originalUser );
114
+ $ entityManager ->flush ($ originalUser );
115
+ $ entityManager ->clear ();
116
+ }
117
+ }
76
118
}
0 commit comments