@@ -36,10 +36,10 @@ public function testLockMiddlewareIgnoreIfMessageIsNotLockable()
36
36
$ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
37
37
}
38
38
39
- public function testLockMiddlewareIfMessageHasKey ()
39
+ public function testLockMiddlewareIfMessageHasKeyWithFirstMode ()
40
40
{
41
41
$ message = new DummyMessage ('Hello ' );
42
- $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
42
+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
43
43
44
44
if (SemaphoreStore::isSupported ()) {
45
45
$ store = new SemaphoreStore ();
@@ -53,7 +53,7 @@ public function testLockMiddlewareIfMessageHasKey()
53
53
$ this ->assertNotNull ($ envelope ->last (LockStamp::class));
54
54
55
55
$ message2 = new DummyMessage ('Hello ' );
56
- $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
56
+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
57
57
58
58
$ decorator ->handle ($ envelope2 , $ this ->getStackMock (false ));
59
59
@@ -62,7 +62,68 @@ public function testLockMiddlewareIfMessageHasKey()
62
62
$ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
63
63
64
64
$ message3 = new DummyMessage ('Hello ' );
65
- $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD , 'id ' )]);
65
+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE , 'id ' )]);
66
+ $ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
67
+ }
68
+
69
+ public function testLockMiddlewareIfMessageHasKeyWithSecondMode ()
70
+ {
71
+ $ message = new DummyMessage ('Hello ' );
72
+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
73
+
74
+ if (SemaphoreStore::isSupported ()) {
75
+ $ store = new SemaphoreStore ();
76
+ } else {
77
+ $ store = new FlockStore ();
78
+ }
79
+
80
+ $ decorator = new LockMiddleware (new LockFactory ($ store ));
81
+
82
+ $ envelope = $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
83
+ $ this ->assertNotNull ($ envelope ->last (LockStamp::class));
84
+
85
+ $ message2 = new DummyMessage ('Hello ' );
86
+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
87
+
88
+ $ decorator ->handle ($ envelope2 , $ this ->getStackMock (false ));
89
+
90
+ // Simulate receiving the first message
91
+ $ envelope = $ envelope ->with (new ReceivedStamp ('transport ' ));
92
+ $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
93
+
94
+ $ message3 = new DummyMessage ('Hello ' );
95
+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_DISCARD_DUPLICATE_IN_QUEUE_OR_PROCESS , 'id ' )]);
96
+ $ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
97
+ }
98
+
99
+ public function testLockMiddlewareIfMessageHasKeyWithThirdMode ()
100
+ {
101
+ $ message = new DummyMessage ('Hello ' );
102
+ $ envelope = new Envelope ($ message , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
103
+
104
+ if (SemaphoreStore::isSupported ()) {
105
+ $ store = new SemaphoreStore ();
106
+ } else {
107
+ $ store = new FlockStore ();
108
+ }
109
+
110
+ $ decorator = new LockMiddleware (new LockFactory ($ store ));
111
+
112
+ $ envelope = $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
113
+ $ this ->assertNotNull ($ envelope ->last (LockStamp::class));
114
+
115
+ $ message2 = new DummyMessage ('Hello ' );
116
+ $ envelope2 = new Envelope ($ message2 , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
117
+
118
+ // Not blocking when adding the message in the queue.
119
+ $ decorator ->handle ($ envelope2 , $ this ->getStackMock (true ));
120
+
121
+ // Simulate receiving the first message
122
+ $ envelope = $ envelope ->with (new ReceivedStamp ('transport ' ));
123
+ $ decorator ->handle ($ envelope , $ this ->getStackMock (true ));
124
+
125
+ $ message3 = new DummyMessage ('Hello ' );
126
+ $ envelope3 = new Envelope ($ message3 , [new LockStamp (LockStamp::MODE_BLOCK_DUPLICATE_IN_PROCESS , 'id ' )]);
66
127
$ decorator ->handle ($ envelope3 , $ this ->getStackMock (true ));
67
128
}
68
129
}
0 commit comments