@@ -255,26 +255,34 @@ struct serializer_test
255
255
f (s);
256
256
};
257
257
258
+ struct check_stream_opts
259
+ {
260
+ std::size_t sr_capacity = 1024 ;
261
+ };
262
+
258
263
template <class F >
259
264
void
260
265
check_stream (
261
266
core::string_view headers,
262
267
core::string_view body,
268
+ check_stream_opts const & opts,
263
269
F f)
264
270
{
271
+ auto sr_capacity = opts.sr_capacity ;
272
+
265
273
response res (headers);
266
274
267
- serializer sr (1024 );
275
+ serializer sr (sr_capacity );
268
276
auto stream = sr.start_stream (res);
269
277
270
278
std::vector<char > s; // stores complete output
271
- std::size_t const chunk_data_size = 100 ;
272
279
273
280
auto prepare_chunk = [&]
274
281
{
275
- auto mbs = stream.prepare (chunk_data_size);
282
+ auto mbs = stream.prepare ();
283
+
276
284
auto bs = buffers::buffer_size (mbs);
277
- BOOST_TEST_EQ (bs, chunk_data_size );
285
+ BOOST_TEST_GT (bs, 0 );
278
286
279
287
if ( bs > body.size () )
280
288
bs = body.size ();
@@ -300,8 +308,7 @@ struct serializer_test
300
308
while ( buf.size () > 0 )
301
309
{
302
310
auto num_copied =
303
- buffers::buffer_copy (
304
- out_buf, buf);
311
+ buffers::buffer_copy (out_buf, buf);
305
312
306
313
buf += num_copied;
307
314
@@ -454,55 +461,100 @@ struct serializer_test
454
461
check_chunked_body (s, " " );
455
462
});
456
463
457
- check_stream (
458
- " HTTP/1.1 200 OK\r\n "
459
- " Server: test\r\n "
460
- " \r\n " ,
461
- std::string (0 , ' *' ),
462
- [](core::string_view s){
463
- core::string_view expected_header =
464
- " HTTP/1.1 200 OK\r\n "
465
- " Server: test\r\n "
466
- " \r\n " ;
467
- BOOST_TEST (s.starts_with (expected_header));
468
- s.remove_prefix (expected_header.size ());
469
- BOOST_TEST_EQ (s, std::string (0 , ' *' ));
470
- });
464
+ // empty stream
465
+ {
466
+ check_stream_opts opts;
467
+ check_stream (
468
+ " HTTP/1.1 200 OK\r\n "
469
+ " Server: test\r\n "
470
+ " \r\n " ,
471
+ std::string (0 , ' *' ),
472
+ opts,
473
+ [](core::string_view s)
474
+ {
475
+ core::string_view expected_header =
476
+ " HTTP/1.1 200 OK\r\n "
477
+ " Server: test\r\n "
478
+ " \r\n " ;
479
+ BOOST_TEST (s.starts_with (expected_header));
480
+ s.remove_prefix (expected_header.size ());
481
+ BOOST_TEST (s.empty ());
482
+ });
483
+ }
471
484
472
- check_stream (
473
- " HTTP/1.1 200 OK\r\n "
474
- " Server: test\r\n "
475
- " Content-Length: 2048\r\n "
476
- " \r\n " ,
477
- std::string (2048 , ' *' ),
478
- [](core::string_view s){
479
- core::string_view expected_header =
480
- " HTTP/1.1 200 OK\r\n "
481
- " Server: test\r\n "
482
- " Content-Length: 2048\r\n "
483
- " \r\n " ;
484
- BOOST_TEST (s.starts_with (expected_header));
485
- s.remove_prefix (expected_header.size ());
486
- BOOST_TEST_EQ (s, std::string (2048 , ' *' ));
487
- });
485
+ // empty stream, chunked
486
+ {
487
+ check_stream_opts opts;
488
+ check_stream (
489
+ " HTTP/1.1 200 OK\r\n "
490
+ " Server: test\r\n "
491
+ " Transfer-Encoding: chunked\r\n "
492
+ " \r\n " ,
493
+ std::string (0 , ' *' ),
494
+ opts,
495
+ [](core::string_view s)
496
+ {
497
+ core::string_view expected_header =
498
+ " HTTP/1.1 200 OK\r\n "
499
+ " Server: test\r\n "
500
+ " Transfer-Encoding: chunked\r\n "
501
+ " \r\n " ;
502
+ BOOST_TEST (s.starts_with (expected_header));
503
+ s.remove_prefix (expected_header.size ());
504
+ check_chunked_body (s, " " );
505
+ });
506
+ }
488
507
489
- check_stream (
490
- " HTTP/1.1 200 OK\r\n "
491
- " Server: test\r\n "
492
- " Transfer-Encoding: chunked\r\n "
493
- " \r\n " ,
494
- std::string (2048 , ' *' ),
495
- [](core::string_view s){
496
- core::string_view expected_header =
497
- " HTTP/1.1 200 OK\r\n "
498
- " Server: test\r\n "
499
- " Transfer-Encoding: chunked\r\n "
500
- " \r\n " ;
501
- BOOST_TEST (s.starts_with (expected_header));
502
- s.remove_prefix (expected_header.size ());
503
- check_chunked_body (
504
- s, std::string (2048 , ' *' ));
505
- });
508
+ // stream
509
+ {
510
+ check_stream_opts opts;
511
+ check_stream (
512
+ " HTTP/1.1 200 OK\r\n "
513
+ " Server: test\r\n "
514
+ " Content-Length: 13370\r\n "
515
+ " \r\n " ,
516
+ std::string (13370 , ' *' ),
517
+ opts,
518
+ [](core::string_view s){
519
+ core::string_view expected_header =
520
+ " HTTP/1.1 200 OK\r\n "
521
+ " Server: test\r\n "
522
+ " Content-Length: 13370\r\n "
523
+ " \r\n " ;
524
+
525
+ BOOST_TEST (
526
+ s.starts_with (expected_header));
527
+
528
+ s.remove_prefix (expected_header.size ());
529
+ BOOST_TEST_EQ (
530
+ s, std::string (13370 , ' *' ));
531
+ });
532
+ }
533
+
534
+ // stream, chunked
535
+ {
536
+ check_stream_opts opts;
537
+ check_stream (
538
+ " HTTP/1.1 200 OK\r\n "
539
+ " Server: test\r\n "
540
+ " Transfer-Encoding: chunked\r\n "
541
+ " \r\n " ,
542
+ std::string (13370 , ' *' ),
543
+ opts,
544
+ [](core::string_view s)
545
+ {
546
+ core::string_view expected_header =
547
+ " HTTP/1.1 200 OK\r\n "
548
+ " Server: test\r\n "
549
+ " Transfer-Encoding: chunked\r\n "
550
+ " \r\n " ;
551
+ BOOST_TEST (s.starts_with (
552
+ expected_header));
553
+ s.remove_prefix (expected_header.size ());
554
+ check_chunked_body (
555
+ s, std::string (13370 , ' *' ));
556
+ });
557
+ }
506
558
}
507
559
508
560
void
@@ -631,8 +683,8 @@ struct serializer_test
631
683
632
684
serializer sr;
633
685
auto stream = sr.start_stream (res);
634
- auto mbs = stream.prepare (0 );
635
- BOOST_TEST_EQ (
686
+ auto mbs = stream.prepare ();
687
+ BOOST_TEST_GT (
636
688
buffers::buffer_size (mbs), 0 );
637
689
BOOST_TEST_THROWS (
638
690
stream.commit (0 ), std::logic_error);
@@ -686,14 +738,13 @@ struct serializer_test
686
738
std::string chunk (chunk_size, ' a' );
687
739
while ( num_written < 2048 )
688
740
{
689
- auto mbs =
690
- stream.prepare (chunk_size);
691
-
692
741
auto n = buffers::buffer_copy (
693
- mbs ,
742
+ stream. prepare () ,
694
743
buffers::const_buffer (
695
- chunk.data (), chunk.size ()));
744
+ chunk.data (),
745
+ chunk.size ()));
696
746
747
+ BOOST_TEST_GT (n, 0 );
697
748
stream.commit (n);
698
749
num_written += n;
699
750
}
0 commit comments