@@ -162,15 +162,20 @@ void safeByteBufferBuildersCopyTheProvidedBuffer(Function<ByteBuffer, AsyncReque
162
162
assertArrayEquals (bytesClone , publishedByteArray );
163
163
}
164
164
165
+ private static Function <ByteBuffer , AsyncRequestBody >[] safeByteBufferBodyBuilders () {
166
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffer = AsyncRequestBody ::fromByteBuffer ;
167
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffer = AsyncRequestBody ::fromRemainingByteBuffer ;
168
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffers = AsyncRequestBody ::fromByteBuffers ;
169
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffers = AsyncRequestBody ::fromRemainingByteBuffers ;
170
+ return new Function [] {fromByteBuffer , fromRemainingByteBuffer , fromByteBuffers , fromRemainingByteBuffers };
171
+ }
172
+
165
173
@ ParameterizedTest
166
- @ MethodSource ("safeByteBufferBodyBuilders " )
167
- void safeByteBufferBuildersRewindTheInputByteBuffer (Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
174
+ @ MethodSource ("unsafeByteBufferBodyBuilders " )
175
+ void unsafeByteBufferBuildersDoNotCopyTheProvidedBuffer (Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
168
176
byte [] bytes = testString .getBytes (StandardCharsets .UTF_8 );
169
- ByteBuffer bb = ByteBuffer .wrap (bytes );
170
- bb .position (bytes .length - 1 );
171
177
172
-
173
- AsyncRequestBody asyncRequestBody = bodyBuilder .apply (bb );
178
+ AsyncRequestBody asyncRequestBody = bodyBuilder .apply (ByteBuffer .wrap (bytes ));
174
179
175
180
for (int i = 0 ; i < bytes .length ; i ++) {
176
181
bytes [i ] += 1 ;
@@ -181,57 +186,124 @@ void safeByteBufferBuildersRewindTheInputByteBuffer(Function<ByteBuffer, AsyncRe
181
186
182
187
asyncRequestBody .subscribe (subscriber );
183
188
184
- assertEquals (0 , publishedBuffer .get ().position ());
189
+ byte [] publishedByteArray = BinaryUtils .copyAllBytesFrom (publishedBuffer .get ());
190
+ assertArrayEquals (bytes , publishedByteArray );
185
191
}
186
192
187
- private static Function <ByteBuffer , AsyncRequestBody >[] safeByteBufferBodyBuilders () {
188
- Function <ByteBuffer , AsyncRequestBody > fromByteBuffer = AsyncRequestBody ::fromByteBuffer ;
189
- Function <ByteBuffer , AsyncRequestBody > fromByteBuffers = AsyncRequestBody ::fromByteBuffers ;
190
- return new Function [] {fromByteBuffer , fromByteBuffers };
193
+ private static Function <ByteBuffer , AsyncRequestBody >[] unsafeByteBufferBodyBuilders () {
194
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffer = AsyncRequestBody ::fromByteBufferUnsafe ;
195
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffer = AsyncRequestBody ::fromRemainingByteBufferUnsafe ;
196
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffers = AsyncRequestBody ::fromByteBuffersUnsafe ;
197
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffers = AsyncRequestBody ::fromRemainingByteBuffersUnsafe ;
198
+ return new Function [] {fromByteBuffer , fromRemainingByteBuffer , fromByteBuffers , fromRemainingByteBuffers };
191
199
}
192
200
193
201
@ ParameterizedTest
194
- @ MethodSource ("unsafeByteBufferBodyBuilders" )
195
- void unsafeByteBufferBuildersDoNotCopyTheProvidedBuffer (Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
202
+ @ MethodSource ("nonRewindingByteBufferBodyBuilders" )
203
+ void nonRewindingByteBufferBuildersReadFromTheInputBufferPosition (
204
+ Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
196
205
byte [] bytes = testString .getBytes (StandardCharsets .UTF_8 );
206
+ ByteBuffer bb = ByteBuffer .wrap (bytes );
207
+ int expectedPosition = bytes .length / 2 ;
208
+ bb .position (expectedPosition );
197
209
198
- AsyncRequestBody asyncRequestBody = bodyBuilder .apply (ByteBuffer . wrap ( bytes ) );
210
+ AsyncRequestBody asyncRequestBody = bodyBuilder .apply (bb );
199
211
200
- for (int i = 0 ; i < bytes .length ; i ++) {
201
- bytes [i ] += 1 ;
212
+ AtomicReference <ByteBuffer > publishedBuffer = new AtomicReference <>();
213
+ Subscriber <ByteBuffer > subscriber = new SimpleSubscriber (publishedBuffer ::set );
214
+
215
+ asyncRequestBody .subscribe (subscriber );
216
+
217
+ int remaining = bb .remaining ();
218
+ assertEquals (remaining , publishedBuffer .get ().remaining ());
219
+ for (int i = 0 ; i < remaining ; i ++) {
220
+ assertEquals (bb .get (), publishedBuffer .get ().get ());
202
221
}
222
+ }
223
+
224
+ private static Function <ByteBuffer , AsyncRequestBody >[] nonRewindingByteBufferBodyBuilders () {
225
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffer = AsyncRequestBody ::fromRemainingByteBuffer ;
226
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBufferUnsafe = AsyncRequestBody ::fromRemainingByteBufferUnsafe ;
227
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffers = AsyncRequestBody ::fromRemainingByteBuffers ;
228
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffersUnsafe = AsyncRequestBody ::fromRemainingByteBuffersUnsafe ;
229
+ return new Function [] {fromRemainingByteBuffer , fromRemainingByteBufferUnsafe , fromRemainingByteBuffers ,
230
+ fromRemainingByteBuffersUnsafe };
231
+ }
232
+
233
+ @ ParameterizedTest
234
+ @ MethodSource ("safeNonRewindingByteBufferBodyBuilders" )
235
+ void safeNonRewindingByteBufferBuildersCopyFromTheInputBufferPosition (
236
+ Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
237
+ byte [] bytes = testString .getBytes (StandardCharsets .UTF_8 );
238
+ ByteBuffer bb = ByteBuffer .wrap (bytes );
239
+ int expectedPosition = bytes .length / 2 ;
240
+ bb .position (expectedPosition );
241
+
242
+ AsyncRequestBody asyncRequestBody = bodyBuilder .apply (bb );
203
243
204
244
AtomicReference <ByteBuffer > publishedBuffer = new AtomicReference <>();
205
245
Subscriber <ByteBuffer > subscriber = new SimpleSubscriber (publishedBuffer ::set );
206
246
207
247
asyncRequestBody .subscribe (subscriber );
208
248
209
- byte [] publishedByteArray = BinaryUtils .copyAllBytesFrom (publishedBuffer .get ());
210
- assertArrayEquals (bytes , publishedByteArray );
249
+ int remaining = bb .remaining ();
250
+ assertEquals (remaining , publishedBuffer .get ().capacity ());
251
+ for (int i = 0 ; i < remaining ; i ++) {
252
+ assertEquals (bb .get (), publishedBuffer .get ().get ());
253
+ }
254
+ }
255
+
256
+ private static Function <ByteBuffer , AsyncRequestBody >[] safeNonRewindingByteBufferBodyBuilders () {
257
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffer = AsyncRequestBody ::fromRemainingByteBuffer ;
258
+ Function <ByteBuffer , AsyncRequestBody > fromRemainingByteBuffers = AsyncRequestBody ::fromRemainingByteBuffers ;
259
+ return new Function [] {fromRemainingByteBuffer , fromRemainingByteBuffers };
211
260
}
212
261
213
262
@ ParameterizedTest
214
- @ MethodSource ("unsafeByteBufferBodyBuilders" )
215
- void safeByteBufferBuildersDoNotRewindTheInputByteBuffer (Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
263
+ @ MethodSource ("rewindingByteBufferBodyBuilders" )
264
+ void rewindingByteBufferBuildersDoNotRewindTheInputBuffer (Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
265
+ byte [] bytes = testString .getBytes (StandardCharsets .UTF_8 );
266
+ ByteBuffer bb = ByteBuffer .wrap (bytes );
267
+ int expectedPosition = bytes .length / 2 ;
268
+ bb .position (expectedPosition );
269
+
270
+ AsyncRequestBody asyncRequestBody = bodyBuilder .apply (bb );
271
+
272
+ Subscriber <ByteBuffer > subscriber = new SimpleSubscriber (buffer -> {
273
+ });
274
+
275
+ asyncRequestBody .subscribe (subscriber );
276
+
277
+ assertEquals (expectedPosition , bb .position ());
278
+ }
279
+
280
+ @ ParameterizedTest
281
+ @ MethodSource ("rewindingByteBufferBodyBuilders" )
282
+ void rewindingByteBufferBuildersReadTheInputBufferFromTheBeginning (
283
+ Function <ByteBuffer , AsyncRequestBody > bodyBuilder ) {
216
284
byte [] bytes = testString .getBytes (StandardCharsets .UTF_8 );
217
- ByteBuffer wrap = ByteBuffer .wrap (bytes );
218
- int expectedPosition = bytes .length - 1 ;
219
- wrap .position (expectedPosition );
285
+ ByteBuffer bb = ByteBuffer .wrap (bytes );
286
+ bb .position (bytes .length / 2 );
220
287
221
- AsyncRequestBody asyncRequestBody = bodyBuilder .apply (wrap );
288
+ AsyncRequestBody asyncRequestBody = bodyBuilder .apply (bb );
222
289
223
290
AtomicReference <ByteBuffer > publishedBuffer = new AtomicReference <>();
224
291
Subscriber <ByteBuffer > subscriber = new SimpleSubscriber (publishedBuffer ::set );
225
292
226
293
asyncRequestBody .subscribe (subscriber );
227
294
228
- assertEquals (expectedPosition , publishedBuffer .get ().position ());
295
+ assertEquals (0 , publishedBuffer .get ().position ());
296
+ publishedBuffer .get ().rewind ();
297
+ bb .rewind ();
298
+ assertEquals (bb , publishedBuffer .get ());
229
299
}
230
300
231
- private static Function <ByteBuffer , AsyncRequestBody >[] unsafeByteBufferBodyBuilders () {
232
- Function <ByteBuffer , AsyncRequestBody > fromByteBuffer = AsyncRequestBody ::fromByteBufferUnsafe ;
233
- Function <ByteBuffer , AsyncRequestBody > fromByteBuffers = AsyncRequestBody ::fromByteBuffersUnsafe ;
234
- return new Function [] {fromByteBuffer , fromByteBuffers };
301
+ private static Function <ByteBuffer , AsyncRequestBody >[] rewindingByteBufferBodyBuilders () {
302
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffer = AsyncRequestBody ::fromByteBuffer ;
303
+ Function <ByteBuffer , AsyncRequestBody > fromByteBufferUnsafe = AsyncRequestBody ::fromByteBufferUnsafe ;
304
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffers = AsyncRequestBody ::fromByteBuffers ;
305
+ Function <ByteBuffer , AsyncRequestBody > fromByteBuffersUnsafe = AsyncRequestBody ::fromByteBuffersUnsafe ;
306
+ return new Function [] {fromByteBuffer , fromByteBufferUnsafe , fromByteBuffers , fromByteBuffersUnsafe };
235
307
}
236
308
237
309
@ ParameterizedTest
0 commit comments