4
4
5
5
use Enqueue \Fs \FsConnectionFactory ;
6
6
use Enqueue \Fs \FsContext ;
7
+ use Enqueue \Fs \FsDestination ;
7
8
use Enqueue \Fs \FsMessage ;
8
9
use PHPUnit \Framework \TestCase ;
9
10
@@ -69,6 +70,7 @@ public function testShouldConsumeMessagesFromFileOneByOne()
69
70
70
71
/**
71
72
* @group bug
73
+ * @group bug170
72
74
*/
73
75
public function testShouldNotFailOnSpecificMessageSize ()
74
76
{
@@ -91,4 +93,82 @@ public function testShouldNotFailOnSpecificMessageSize()
91
93
$ message = $ consumer ->receiveNoWait ();
92
94
$ this ->assertNull ($ message );
93
95
}
96
+
97
+ /**
98
+ * @group bug
99
+ * @group bug170
100
+ */
101
+ public function testShouldNotCorruptFrameSize ()
102
+ {
103
+ $ context = $ this ->fsContext ;
104
+ $ queue = $ context ->createQueue ('fs_test_queue ' );
105
+ $ context ->purge ($ queue );
106
+
107
+ $ consumer = $ context ->createConsumer ($ queue );
108
+ $ producer = $ context ->createProducer ();
109
+
110
+ $ producer ->send ($ queue , $ context ->createMessage (str_repeat ('a ' , 23 )));
111
+ $ producer ->send ($ queue , $ context ->createMessage (str_repeat ('b ' , 24 )));
112
+
113
+ $ message = $ consumer ->receiveNoWait ();
114
+ $ this ->assertNotNull ($ message );
115
+ $ context ->workWithFile ($ queue , 'a+ ' , function (FsDestination $ destination , $ file ) {
116
+ $ this ->assertSame (0 , fstat ($ file )['size ' ] % 64 );
117
+ });
118
+
119
+ $ message = $ consumer ->receiveNoWait ();
120
+ $ this ->assertNotNull ($ message );
121
+ $ context ->workWithFile ($ queue , 'a+ ' , function (FsDestination $ destination , $ file ) {
122
+ $ this ->assertSame (0 , fstat ($ file )['size ' ] % 64 );
123
+ });
124
+
125
+ $ message = $ consumer ->receiveNoWait ();
126
+ $ this ->assertNull ($ message );
127
+ }
128
+
129
+ /**
130
+ * @group bug
131
+ * @group bug202
132
+ */
133
+ public function testShouldThrowExceptionForTheCorruptedQueueFile ()
134
+ {
135
+ $ context = $ this ->fsContext ;
136
+ $ queue = $ context ->createQueue ('fs_test_queue ' );
137
+ $ context ->purge ($ queue );
138
+
139
+ $ context ->workWithFile ($ queue , 'a+ ' , function (FsDestination $ destination , $ file ) {
140
+ fwrite ($ file , '|{"body":"{\"path\":\" \\\/p \\\/r \\\/pr_swoppad_6_4910_red_1.jpg\",\"filters\":null,\"force\":false}","properties":{"enqueue.topic_name":"liip_imagine_resolve_cache"},"headers":{"content_type":"application\/json","message_id":"46fdc345-5d0c-426e-95ac-227c7e657839","timestamp":1505379216,"reply_to":null,"correlation_id":""}} |{"body":"{\"path\":\" \\\/p \\\/r \\\/pr_swoppad_6_4910_black_1.jpg\",\"filters\":null,\"force\":false}","properties":{"enqueue.topic_name":"liip_imagine_resolve_cache"},"headers":{"content_type":"application\/json","message_id":"c4d60e39-3a8c-42df-b536-c8b7c13e006d","timestamp":1505379216,"reply_to":null,"correlation_id":""}} |{"body":"{\"path\":\" \\\/p \\\/r \\\/pr_swoppad_6_4910_green_1.jpg\",\"filters\":null,\"force\":false}","properties":{"enqueue.topic_name":"liip_imagine_resolve_cache"},"headers":{"content_type":"application\/json","message_id":"3a6aa176-c879-4435-9626-c48e0643defa","timestamp":1505379216,"reply_to":null,"correlation_id":""}} ' );
141
+ });
142
+
143
+ $ consumer = $ context ->createConsumer ($ queue );
144
+
145
+ $ this ->expectException (\LogicException::class);
146
+ $ this ->expectExceptionMessage ('The frame could start from either " " or "|". The malformed frame starts with """. ' );
147
+ $ consumer ->receiveNoWait ();
148
+ }
149
+
150
+ /**
151
+ * @group bug
152
+ * @group bug202
153
+ */
154
+ public function testShouldThrowExceptionWhenFrameSizeNotDivideExactly ()
155
+ {
156
+ $ context = $ this ->fsContext ;
157
+ $ queue = $ context ->createQueue ('fs_test_queue ' );
158
+ $ context ->purge ($ queue );
159
+
160
+ $ context ->workWithFile ($ queue , 'a+ ' , function (FsDestination $ destination , $ file ) {
161
+ $ msg = '|{"body":""} ' ;
162
+ //guard
163
+ $ this ->assertNotSame (0 , strlen ($ msg ) % 64 );
164
+
165
+ fwrite ($ file , $ msg );
166
+ });
167
+
168
+ $ consumer = $ context ->createConsumer ($ queue );
169
+
170
+ $ this ->expectException (\LogicException::class);
171
+ $ this ->expectExceptionMessage ('The frame size is "12" and it must divide exactly to 64 but it leaves a reminder "12". ' );
172
+ $ consumer ->receiveNoWait ();
173
+ }
94
174
}
0 commit comments