daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa/* Copyright (c) 2017-2018 Dovecot authors, see the included COPYING file */
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksastatic void test_ostream_buffer_random_once(void)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa buffer = buffer_create_dynamic(default_pool, 8);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_send(output, buf, size) > 0);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa for (i = 0; i < 10; i++) {
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_pwrite(output, randbuf, size, offset) == 0);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(memcmp(buf, buffer->data, buffer->used) == 0);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa unsigned int i;
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa test_assert(o_stream_get_buffer_used_size(output) == 0);
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa test_assert(o_stream_get_buffer_avail_size(output) == (size_t)-1);
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa /* test shrinking sink's max buffer size */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_used_size(output) == 0);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_avail_size(output) == 10);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa /* partial send */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa const char *partial_input = "01234567890123456789";
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa ssize_t ret = o_stream_send_str(output, partial_input);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_used_size(output) == 10);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_avail_size(output) == 0);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa /* increase max buffer size so that it can hold the whole message */
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_used_size(output) == 10);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_avail_size(output) == 90);
28001d576e67ba46ed481c5695f1e0827ff26007Eugen Kuksa /* send the rest */
28001d576e67ba46ed481c5695f1e0827ff26007Eugen Kuksa ret += o_stream_send_str(output, partial_input + ret);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(ret == (ssize_t)strlen(partial_input));
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_used_size(output) == 20);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa test_assert(o_stream_get_buffer_avail_size(output) == 80);
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa /* check buffered data */